c语言程序设计第五版习题答案解析 下载本文

完美WORD格式

t=2*t; }

printf(\ }

2.求s=1+1/2+1/3+…+1/100的值。

【分析与提示】本题为分数数学项求和问题,要想得到每一项的正确结果,分式中的分子、分母至少要有一个为实型数据。

参考代码: main( )

{int i;

float s=0,t;

for(i=1;i<=100;i++) { t=1.0/i;

s=s+t;

}

printf(\ }

3.求T=1!+2!+3!+…+10!的值。

【分析与提示】本题为数学项求和问题,数学项间的关系为:第n项的值为第n-1项的n倍。参考代码: main( ) {

long int t=0,tn=1; int i;

for(i=1;i<=10;i++) { tn=i*tn;

t=t+tn;

}

printf(\ }

4.求s=2/1+3/2+4/3+5/4+…+22/21的值。

【分析与提示】请抓住分子与分母的变化规律。 参考代码: main( ) {

int m;

float s=0,n=2.0; for(m=1;m<=21;m++) { s=s+n/m;

n=n+1;

}

printf(\ }

5.输入一行字母,分别统计其中的英文字母、空格、数字和其他字符的个数。

专业整理 知识分享

完美WORD格式

【分析与提示】利用while语句,条件为输入的字符不为'\\n'. 参考代码:

#include \main( ) {

char c;

int letters=0,space=0,digit=0,other=0; printf(\请输入一行字符:\\n\ while((c=getchar())!=’\\n’)

{ if(c>=’a’&&c<=’z’||c>=’A’&&c<=’Z’)

letters++; else if(c==’ ’) space++;

else if(c>=’0’&&c<=’9’) digit++; else other++; }

printf(\字母数=%d 空格数= %d 数字数=%d 其它字符数=%d\\n\ }

6.求100以内能被8整除的数,并求它们的和。

【提示】判断一个数m能否被n整除的方法是:将m对n取余数,若余数为0,则为整除。

参考代码: main( )

{

int n,s=0;

for(n=1;n<=100;n++) if(n%8==0)

{s=s+n;

printf(\ }

printf(\ }

7.打印出所有的“水仙花数”。所谓“水仙花数”是指一个三位数,其中各位数字的立

333

方和等于该数本身。例如153=1 +5 +3 。

【分析与提示】利用for 循环控制100~999 个数,每个数分解出个位,十位,百位。 参考代码: main( ) {

int i,j,k,n;

printf(\水仙花数是: \

for(n=100;n<1000;n++) {i=n/100;

专业整理 知识分享

完美WORD格式

j=n/10-i*10; k=n;

if(n= =i*i*i+j*j*j+k*k*k) printf(\

}

printf(\ }

8.以下面的格式,输出九九乘法表。 1*1=1

1*2=2 2*2=4

1*3=3 2*3=6 3*3=9 … … …

1*9=9 2*9=18 3*9=27 …9*9=81

【提示】分行与列考虑,共9行9列,利用双重for 循环,外循环i控制行,内循环j控制列。参考代码:

main( ) {int i,j;

for(i=1;i<10;i++)

{ for(j=1;j<=i;j++)

printf(\

printf(\ } }

9.用for循环打印输出以下图案。

* * * * *

* * * * * * * * * * * * * * * * * * * * * * * * * * *

(图形a) ( 图形b)

输出图形a程序代码: #include \main( ) {

int i,j,k;

for(i=0;i<4;i++) /*控制打印行数*/ {

for(j=0;j<10+i;j++) /*控制空格输出位置*/ printf(\

for(k=0;k<4;k++) /*控制每行*的输出个数*/ printf(\ printf(\ }

专业整理 知识分享

完美WORD格式

}

输出图形b序代码: #include “stdio.h” main( ) {

int i,j,k;

for(i=0;i<4;i++) /*控制打印行数*/ {

for(j=0;j<3-i;j++) /*控制空格输出位置*/

printf(“ ”);

for(k=0;k<2*i+1;k++) /*控制每行*的输出个数*/ printf(“*”); printf(“\\n”); }

}

10.猴子吃桃子问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第十天早上再想吃时,见只剩一个桃子了。求第一天共摘了多少个桃子。

【提示】采取逆向思维的方法,从后往前推断。参考代码: main( )

{ int day,x1,x2; day=9;

x2=1;

while(day>0)

{x1=(x2+1)*2;

x2=x1; day--; }

printf(\桃子总数=%d\\n\ }

11.求出500以内所有素数。

【提示】判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表 明此数不是素数,反之是素数。

参考代码:

#include \

main( )

{int m,k,i,n=0; for(m=2;m<=500;m++)

{

k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0) break; if(i>=k+1)

专业整理 知识分享

完美WORD格式

{ printf(\n=n+1; if(n==0) printf(\} }

printf(\

}

12.输入一个整数(0~99999),判断它的位数,并重新组合成同样位数的最大值。如,输入1345,输出5431。

【提示】先求出该整数的位数;其次分解出每一位数(个位、十位、百位、千位、万位);接着将5个位数进行排序;最后根据整数的位数重新组合成同样位数的最大值。

参考代码:

main( )

{long int num, t,d1,d2,d3,d4,d5,n;/*分别代表个位,十位,百位,千位,万位和位数*/

printf(\请输入一个整数(0~99999):\scanf(\if(num>9999) n=5; else if(num>999) n=4; else if(num>99) n=3; else if(num>9) n=2; else n=1;

printf(\d5=num/10000;

d4=(num-d5*10000)/1000; d3=(num-d5*10000-d4*1000)/100; d2=(num-d5*10000-d4*1000-d3*100)/10; d1=num-d5*10000-d4*1000-d3*100-d2*10; if(d5

{t=d5;d5=d4;d4=t;} if(d5

{t=d5;d5=d3;d3=t;} if(d5

{t=d5;d5=d2;d2=t;} if(d5

{t=d5;d5=d1;d1=t;} if(d4

{t=d4;d4=d3;d3=t;} if(d4

{t=d4;d4=d2;d2=t;} if(d4

{t=d4;d4=d1;d1=t;}

专业整理 知识分享