C语言课后习题终极正确答案人民邮电第2版.docx

上传人:b****8 文档编号:11345611 上传时间:2023-02-28 格式:DOCX 页数:62 大小:31.20KB
下载 相关 举报
C语言课后习题终极正确答案人民邮电第2版.docx_第1页
第1页 / 共62页
C语言课后习题终极正确答案人民邮电第2版.docx_第2页
第2页 / 共62页
C语言课后习题终极正确答案人民邮电第2版.docx_第3页
第3页 / 共62页
C语言课后习题终极正确答案人民邮电第2版.docx_第4页
第4页 / 共62页
C语言课后习题终极正确答案人民邮电第2版.docx_第5页
第5页 / 共62页
点击查看更多>>
下载资源
资源描述

C语言课后习题终极正确答案人民邮电第2版.docx

《C语言课后习题终极正确答案人民邮电第2版.docx》由会员分享,可在线阅读,更多相关《C语言课后习题终极正确答案人民邮电第2版.docx(62页珍藏版)》请在冰豆网上搜索。

C语言课后习题终极正确答案人民邮电第2版.docx

C语言课后习题终极正确答案人民邮电第2版

C语言习题答案

第1章

1.选择题

12345

CBABD

2.填空题

(1)main

(2)main(3)有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性

(4)顺序、分支和循环(5)自顶向下,逐步细化、模块化设计、限制使用goto语句

第2章

1.选择题

123456789012345

ACCDADDBBABBACB

2、填空题

(1)数字、字母、下划线

(2)0(3)4、8(4)(a+b)*c/(a-b)(5)-60(6)-16

(7)9(8)6、4、2(9)0(10)10、6(11)12、4(12)5.500000

(13)0(14)16(15)6.6

3、编程题

(1)编写一个程序求各种类型数据的存储长度。

#include

main()

{

printf("int:

%dbyte\n",sizeof(int));

printf("shortint:

%dbyte\n",sizeof(shortint));

printf("longint:

%dbyte\n",sizeof(longint));

printf("float:

%dbyte\n",sizeof(float));

printf("double:

%dbyte\n",sizeof(double));

printf("longdouble:

%dbyte\n",sizeof(longdouble));

printf("char:

%dbyte\n",sizeof(char));

}

(2)

#include

#defineRAT1.60934

main()

{

floatk;

printf("inputthekm:

");

scanf("%f",&k);

printf("mile:

%f\n",k/RAT);

}

第3章

1.选择题

1234567890

(1)~(10):

DDCDDDCDCC

2.解析题

(1)x=170,x=ㄩㄩㄩ170,x=ㄩㄩㄩ252,x=ㄩㄩㄩㄩaa,x=ㄩㄩㄩ170

x=170,x=170ㄩㄩㄩ,x=ㄩㄩㄩ170,x=%6d

a=513.789185,a=ㄩㄩ513.79,a=513.78918457,a=513.78918457

(2)a=3ㄩb=7x=8.5ㄩy=71.82c1=Aㄩc2=a

3.编程题

(1)

main()

{

intx,y;

scanf("%d%d",&x,&y);

printf("商数=%d,余数=%d",x/y,x%y);

}

(2)

main()

{

doublex,y,z,avg;

scanf("%lf%lf%lf",&x,&y,&z);

avg=(x+y+z)/3;

printf("%.1f",avg);

}

第4章

1.选择题

(1)~(10)CCAADCCABD

2.填空题

(1)①a>0&&b>0||a>0&&c>0||b>0&&c>0

②a

③a>5||-a>5

④(a<=0)&&((int)a)!

=a

⑤(a%b)!

=0

(2)①!

(x>0)②1③!

(x>=0&&x<=5)

(3)3、2、2

(4)ch>='A'&&ch<='Z'ch=ch-32

(5)x<=10&&x>2x<=2&&x>-1y=-1;

(6)a+b>c&&a+c>b&&b+c>aa==b&&a==ca==b||a==c||b==c

(7)x<0c=x/10y!

=-2

3.编程题

(1)

#include

main()

{

intx;

printf("pleaseinputanumber:

");

scanf("%d",&x);

if(x%2==0)printf("xisaevennumber");

elseprintf("xisaoddnumber");

}

(2)

#include

main()

{

intx,y;

printf("pleaseinputanumber:

");

scanf("%d",&x);

if(x>-5&&x<0){y=x;printf("%d",y);}

elseif(x==0){y=x-1;printf("%d",y);}

elseif(x>0&&x<10){y=x+1;printf("%d",y);}

elseprintf("thenumberiserror");

}

(3)

#include

main()

{inta,m;

printf("pleaseinputanumber:

");

scanf("%d",&a);

switch(a/10)

{case0:

case1:

case2:

m=1;break;

case3:

m=2;break;

case4:

m=3;break;

case5:

m=4;break;

default:

m=5;break;

}

printf("%d",m);

}

(4)

#include

main()

{

floatprice,tax;

printf("pleaseinputthepriceofproduct:

");

scanf("%f",&price);

if(price>=10000)tax=price*0.05;

elseif(price>=5000)tax=price*0.03;

elseif(price>=1000)tax=price*0.02;

elsetax=0;

printf("%f",tax);

}

(5)

#include

main()

{

floatscore;

printf("pleaseinputthescoreofstudent:

");

scanf("%f",&score);

if(score>=85)printf("VERYGOOD");

elseif(score>=60)printf("GOOD");

elseprintf("BAD");

}

(6)

#include

main()

{

intx,y,z;

printf("inputtwonumber:

");

scanf("%d%d",&x,&y);

if(x<10||x>99||y<10||y>99)

printf("inputdataerror!

\n");

else

{z=(x/10)*1000+(y/10)*100+(x%10)*10+y%10;

printf("%d\n",z);

}

}

第5章

1.选择题

(1)d

(2)c(3)a(4)d(5)a(6)d(7)d(8)b(9)d(10)b

(11)c(12)a(13)d(14)d(15)c

2.填空题

(1)fahrcelsius=5.0/9*(fahr-32)fahr+=step

(2)5、4、6(3)3*i-2

(4)y--z*=x(5)8ㄩ5ㄩ2(6)j++i%j==0j>=i(或j==i)

(7)sum

3.改错题

(1)第一处改正:

For改为for

第二处改正:

for(k=1;k<=4;k++)或for(k=0;k<4;k++)

第三处改正:

ave=sum/4改为ave=sum/4.0

(2)第一处改正:

i++改为j++

第二处改正:

m=100*i+10*j+k

(3)第一处改正:

temp=1

第二处改正:

temp>=eps

第三处改正:

r*2

(4)第一处改正:

&n

第二处改正:

====

(5)第一处改正:

t=m/10改为t=m%10

第二处改正:

t=0改为t==0

第三处改正:

m=m%10改为m=/10

4.编程题

(1)分式累加和。

#include

main()

{

ints;

floatn,t,sum;

t=1;sum=0;n=1;s=1.0;

while(n<=100)

{

sum=sum+t;

n=n+1;

s=-s;

t=s/n;

}

printf("sum=%10.6f\n",sum);

}

(2)1~10的阶乘

#include

main()

{

inti;

longintn=1;

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

{

n=n*i;

printf(i%5==0?

"%2d!

=%-10ld\n":

"%2d!

=%-10ld",i,n);

}

}

(3)由*组成的等腰三角形

#include

main()

{

intn,i,j;

scanf("%d",&n);

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

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

if(j<=n-i)printf("");

elseprintf("*");

printf("\n");

}

}

(4)完数

main()

{

intm,s,i;

for(m=2;m<1000;m++)

{s=0;

for(i=1;i

if((m%i)==0)s=s+i;

if(s==m)

{printf("%ditsfactorsare",m);

for(i=1;i

if(m%i==0)printf("%d,",i);

printf("\n");

}

}

}

(5)打靶

#include

main()

{

inth10,h7,h5;

for(h10=0;h10<=8;h10++)

for(h7=0;h7<=8;h7++)

for(h5=0;h5<=8;h5++)

if(h10+h7+h5==8&&h10*10+h7*7+h5*5==53)

printf("h10=%d\th7=%d\th5=%d\n",h10,h7,h5);

}

(6)猴子吃桃子问题。

采取逆向思维的方法,从后往前推断。

//代码一

main()

{

int day,x1,x2;

day=9;

x2=1;

while(day>0)

{x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/

x2=x1;

day--;

}

printf("the total is %d\n",x1);

}

//代码二

main()

{

inti=9,sum=1;

for(;i>0;sum=2*(sum+1),i--);

printf("sum=%d\n",sum);

}

(7)牛顿迭代法

一般地:

f(x)=a0xn+a1xn-1+….+an-1x+an=0

求f(x)在X0附近的根

计算公式:

Xn+1=Xn-f(Xn)/f’(Xn)

精度:

ε=|Xn+1-Xn|<1.0e-m,m=5。

所求的根:

满足精度的Xn

#include

#include

main()

{floatx,x0,f,f1;

x=1.5;//可改为scanf("%f",&x);

do

{x0=x;

f=2*x0*x0*x0-4*x0*x0+3*x0-6;

f1=6*x0*x0-8*x0+3;//f的导数,即它的切线

x=x0-f/f1;//切线与x轴的交点

}while(fabs(x-x0)>=1e-5);

printf("Therootis%8.7f\n",x);

}

(8)利用辗除法,直到b为0为止

main()

{intp,r,n,m,temp;

printf("inputtwointegern,m:

");

scanf("%d,%d",&n,&m);

if(n

{temp=n;

n=m;

m=temp;

}

p=n*m;

while(m!

=0)

{

r=n%m;

n=m;

m=r;

}

printf("greatestcommondivisoris:

%d\n",n);//最大公约数

printf("leasecommonmultipleis:

%d\n",p/n);//最小公倍数

}

 

第6章

1.选择题

1234567890

CCDCCAADBD

2.写出程序的运行结果

(1)sum=6

(2)Max=9,row=1,col=0

(3)

0

10

210

3210

(4)-5

3、填空

(1)i=j=k=0i<4&&j==5j<5&&i==4

(2)i=1&&j-1

(3)n>0n%10+0x30或n%10+'0's[j]='\0'

(4)s[i]、s[0],s[1]、str,s[1]、s[2],str

4.改错题

(1)第一处改正:

n=strlen(str)

第二处改正:

str[j]==''

第三处改正:

str[j]!

=''

(2)第一处改正:

ch=str[i]

第二处改正:

(j>=0)&&(ch

(3)第一处改正:

s1[i]!

='\0'

第二处改正:

j=0;

(4)第一处改正:

cnt=0

第二处改正:

if(!

(m%i))

第三处改正:

i

5.编程题

(1)

VC提供的intrand(void)产生的实际上是0~32767(short型的最大数)的伪随机数,伪随机数总是以一个相同的数为起始值(种子),运用递推的原理来生成的。

所以,如果只使用rand函数,每次运行所形成的伪随机数列也相同,失去了随机意义。

但这样便于程序调试。

VC的rand()函数默认以1为种子。

要解决这个问题,需要在每次产生随机序列前,先指定不同的种子,这样计算出来的随机序列就不会完全相同了。

VC提供的voidsrand(unsignedintseed)将seed作为种子,如果以time函数值(即当前时间)作为种子数,那么就可以保证随机性了,因为两次调用rand函数的时间通常是不同的。

也可以使用srand函数来人为指定种子数。

若要产生a~b之间的一个随机数,则可用a+rand()%(b-a+1)表示。

若要0~1的小数,则可以先取得0~10的整数,然后均除以10即可得到随机到十分位的10个随机小数;若要得到随机到百分位的随机小数,则需要先得到0~100的整数,然后均除以100,其它情况依此类推。

#include

#include

#include

main()

{

inta[12],count=0,i;

srand((unsigned)time(NULL));

for(i=0;i<12;i++)

a[i]=5+rand()%11;

for(i=0;i<12;i++)

{

printf("%5d",a[i]);

count++;

if(count%4==0)printf("\n");

}

}

(2)

#include

#defineN5

main()

{

inta[N],max,min,i,sum=0,count=0;

floatav;

for(i=0;i

scanf("%d",&a[i]);

max=min=a[0];

for(i=0;i

{

sum+=a[i];

if(a[i]>max)max=a[i];

if(a[i]

}

av=(float)sum/5;

for(i=0;i

if(a[i]>av)count++;

printf("max:

%d\nmin:

%d\nav:

%f\ncount:

%d",max,min,av,count);

}

 

(3)

#include

main()

{

intscore[30];/*={61,62,63,64,65,66,67,68,69,70,

71,72,73,74,75,76,77,78,79,80,

81,85,89,90,33,44,55,91,92,93};//不必赋初值,这是为调试程序方便*/

inti,count90=0,count80=0,count70=0,count60=0;

for(i=0;i<30;i++)

{

printf("intputNO.%dstudent'sscore:

",i+1);

scanf("%d",score+i);

}

for(i=0;i<30;i++)

{

if(score[i]>=90)

{

count90++;

count80++;

count70++;

count60++;

}

elseif(score[i]>=80)

{

count80++;

count70++;

count60++;

}

elseif(score[i]>=70)

{

count70++;

count60++;

}

elseif(score[i]>=60)

count60++;

}

printf("0~59:

%d\n60~69:

%d\n70~79:

%d\n80~89:

%d\n90~100:

%d",30-count60,count60-count70,count70-count80,count80-count90,count90);

printf("\n60orhigher:

%d\n70orhigher:

%d\n80orhigher:

%d\n90orhigher:

%d\n",count60,count70,count80,count90);

}

 

(4)

1、

#include

main()

{

chara[45];

inti,j,k;

for(i=0;i<45;i++)a[i]='';

for(i=0;i<5;i++)

{

for(j=0;j

a[9*i+j]='';

for(k=0;k<5;k++)

a[9*i+j+k]='*';

}

j=0;

for(i=0;i<45;i++)

{

printf("%c",a[i]);

j++;

if(j%9==0)printf("\n");

}

}

2、

#include

main()

{

chara[5][9];

inti,j,k;

for(i=0;i<5;i++)

for(j=0;j<9;j++)

a[i][j]='';

for(i=0;i<5;i++)

{

for(j=0;j

a[i][j]='';

for(k=0;k<5;k++)

a[i][j+k]='*';

}

for(i=0;i<5;i++)

{

for(j=0;j<9;j++)

printf("%c",a[i][j]);

printf("\n");

}

}

(5)

#include

#defineN4

main()

{

inti,j,a[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10};

printf("\nTheoriginalarray:

\n");

for(i=0;i

{

for(j=0;j

printf("%2d",a[i][j]);

printf("\n");

}

for(i=1;i

{

for(j=0;j

{

a[i][j]=a[i][j]+a[j][i];

a[j][i]=0;

}

}

printf("\nTheresultis:

\n");

for(i=0;i

{

for(j=0;j

printf("%2d",a[i][j]);

printf("\n");

}

}

第7章

1.选择题

123456789012345

DADBDCADACBDDBD

2.填空

(1)函数

(2)main函数(3)函数首部、函数体(4)形式参数、实际参数、实参、形参(5)常量、变量、表达式(6)函数定义时函数值、返回值

(7)max(max(a,b),c))、(x>y?

x:

y)

(8)

******

######

******

 

******

######

******

 

******

######

******

(9)str[]=abdef

(10)low<=high(high+low)/2

3.改错题

(1)第一处:

void改为int

第二处:

i<=n&&(n%i==0)改为i<=n&&(n%i!

=0)或i

=0)

第三处:

n!

=i改为n==i

(2)第一处:

删除;

第二处:

for(j=1;j<=50;i++)改为for(j=1;j<=50;j++)

第三处:

returni

(3)第一处:

doublefun(doubleb,x0)改为doublefun(doubleb,doublex0)

第二处:

if(abs(x1-x0)>=1e-6)改为if(fabs(x1-x0)>=1e-6)

4、编程题

(1)

#include

longact(longn)

{

if(n==1||n==0)return1;

else

{

returnn*act(n-1);

}

}

ma

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 日语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1