《C语言程序设计教程》课后题答案.docx

上传人:b****8 文档编号:28024287 上传时间:2023-07-07 格式:DOCX 页数:74 大小:35.23KB
下载 相关 举报
《C语言程序设计教程》课后题答案.docx_第1页
第1页 / 共74页
《C语言程序设计教程》课后题答案.docx_第2页
第2页 / 共74页
《C语言程序设计教程》课后题答案.docx_第3页
第3页 / 共74页
《C语言程序设计教程》课后题答案.docx_第4页
第4页 / 共74页
《C语言程序设计教程》课后题答案.docx_第5页
第5页 / 共74页
点击查看更多>>
下载资源
资源描述

《C语言程序设计教程》课后题答案.docx

《《C语言程序设计教程》课后题答案.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计教程》课后题答案.docx(74页珍藏版)》请在冰豆网上搜索。

《C语言程序设计教程》课后题答案.docx

《C语言程序设计教程》课后题答案

《C语言程序设计教程》课后题答案

第一章

一选择题

1.A2.B3.C4.D5.B6.C

二.填空题

1.程序

2.算法

3.main或主

4.编译

5.编译

6..obj

7.库函数

8.文本或ASCII码

三、编程题

1.参考代码如下:

#include

voidmain()

{

printf("金\n木\n水\n火\n土\n");

}

2.参考代码如下:

#include

voidmain()

{inta,b;

scanf("%d%d",&a,&b);

printf("%d+%d=%d\n",a,b,a+b);

printf("%d-%d=%d\n",a,b,a-b);

printf("%d*%d=%d\n",a,b,a*b);

printf("%d/%d=%d\n",a,b,a/b);

}

3.参考代码如下:

#include

voidmain()

{

floata,b,h,s;

scanf("%f%f%f",&a,&b,&h);

s=(a+b)*h/2;

printf("s=%f\n",s);

}

第二章

一选择题

答案及分析:

1.B,略

2.A,-8在内存中是以补码(设两个字节)形式存储的

3.A,C语言有32个关键字(参见课本第18页),且C语言标识符是区分大小写字母的

4.A,略

5.D,八进制数据中不能出现数码8

6.B,字符常量应该用单引号括起来,答案D超出了ASCII取值范围(ASCII的取值范围为[0,255])

7.C,该字符串中转义字符有三个:

\\、\22和\n,普通字符有三个:

a、,和0,所以字符串长度为6

8.C,略

9.D,C语言没有read函数和%D格式符号,且scanf函数第二个形参为地址列表

10.B,根据题意,scanf函数输入数据时分隔符号不应该是逗号,应该是空格或回车符,且输入数据时分一行或几行均可

11.A,scanf函数中不允许出现%8.4,%6.2和%8这样的格式符号

12.C,既要保证5位小数位,还得保证整数位不变,这样数据12345.67800用10列不能完全显示出来,按C语言规定,12345.67800原样输出

13.B,printf函数中格式符号%d,%o,%x表示对应的整型数据分别按十进制,八进制和十六进制输出

14.C,按C语言规定,scanf函数形参双引号中,如果包含非格式符号,在输入数据时要求原样输入

二.填空题

答案及分析:

1.intfloatdouble(略)

2.65,89,printf函数中如果格式符号是%d,则输出相应字符的ASCII十进制数值

3.a=98,b=765.000000,c=4321.000000,scanf函数中的格式符号%2d%3f%4f,表示将键盘输入的数据9876543210按2,3,4位分割,然后再分别赋给变量a,b,c

4.scanf("%lf%lf%lf",&a,&b,&c);double类型的变量对应的格式符号是%lf

三、编程题

1.参考代码如下:

#include

voidmain()

{

inta=97;

printf("%c\n",a);

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

printf("%o\n",a);

printf("%x\n",a);

}

程序分析:

通过printf函数中不同的格式符号,即%c(字符),%d(十进制),%o(八进制),%x(十六进制)输出相应的值。

2.参考代码如下:

#include

voidmain()

{

inth,m,minute;

scanf("%d:

%d",&h,&m);

minute=h*60+m;

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

}

程序分析:

输入形式为10:

27,故scanf函数双引号中两个格式符号%d之间必须加入“:

”。

3.参考代码如下:

#include

voidmain()

{

floatr=6371000,s,v;

s=4*3.1415926*r*r;

v=3.1415926*4/3*r*r*r;

printf("s=%f\nv=%f",s,v);

}

程序分析:

C语言中的π不代表3.1415926,可以用各种常量的形式体现出来。

4.参考代码如下:

#include

voidmain()

{

intm100,m50,m20,m10,m5,m1,m;

scanf("%d",&m);

m100=m/100;

m50=(m-m100*100)/50;

m20=(m-m100*100-m50*50)/20;

m10=(m-m100*100-m50*50-m20*20)/10;

m5=(m-m100*100-m50*50-m20*20-m10*10)/5;

m1=m-m100*100-m50*50-m20*20-m10*10-m5*5;

printf("%d元发工资,人名币各票面的张数为:

\n",m);

printf("100元的张数:

%d\n",m100);

printf("50元的张数:

%d\n",m50);

printf("20元的张数:

%d\n",m20);

printf("10元的张数:

%d\n",m10);

printf("5元的张数:

%d\n",m5);

printf("1元的张数:

%d\n",m1);

}

程序分析:

人民币的面值分别为100元,50元,20元,10元,5元和1元,工资4367元除以100后得到的商就为100元张数,余数再除以50,得到的商为50元的张数,余数再除20,……,以此类推就会得出人民币各面值相应的张数。

5.参考代码如下:

#include

voidmain()

{

floatr1,r2,r3,r;

scanf("%f%f%f",&r1,&r2,&r3);

r=r1*r2*r3/(r1*r2+r2*r3+r1*r3);

printf("三个电阻并联后的总电阻为%f\n",r);

}

程序分析:

首先将计算并联电阻值的公式变换一下;再就是考虑要保留小数位,故变量类型设置为实型,注意格式符号为%f。

6.参考代码如下:

#include

voidmain()

{

intx,a,b,c,d,y;

scanf("%d",&x);

a=x%10;

b=x/10%10;

c=x/100%10;

d=x/1000;

y=a*1000+b*100+c*10+d;

printf("%d逆置各位数后的值为%d\n",x,y);

}

程序分析:

1234除以10的余数就是4,商再除以10的余数就是3,1234除以100再除以10取余就是2,1234除以1000就是1。

也可以用其他的表达式求出各位数值,例如输入数据1234中的4,可以用公式a=x-d*1000-c*100-b*10来计算。

7.参考代码如下:

#include

voidmain()

{

floatF,C;

printf("请输入华氏温度:

");

scanf("%f",&F);

C=5.0/9*(F-32);

printf("华氏温度%f对应的摄氏温度为%f\n",F,C);

}

程序分析:

5/9的值为0,所以要写成5.0/9,5/9.0或5.0/9.0,还要注意变量类型为实型,且对应的格式符号为%f。

8.参考代码如下:

#include

voidmain()

{

charch1,ch2,ch3;

printf("请输入三个数字字符:

");

scanf("%c%c%c",&ch1,&ch2,&ch3);

printf("将数字字符转换为数字%d,%d,%d\n",ch1-'0',ch2-48,ch3-'0');

}

程序分析:

通过键盘输入三个数字字符时要连续输入,不要加任何分隔符号,例如121等,另外,数字字符输出时遇到格式符号%d将输出相应数字字符的ASCII值,但任何一个数字字符的ASCII值减去字符0的ASCII值,再对应%d格式符号输出时,就是数字字符对应的数字,例如'2'-'0'=2。

9.不能得到指定的输出结果,参考代码如下:

voidmain()

{

inta,b,c,x,y;

scanf("%d%d%d",&a,&b,&c);

x=a*b;

y=x*c;

printf("a=%d,b=%d,c=%d\n",a,b,c);

printf("x=%d,y=%d\n",x,y);

}

程序分析:

scanf("%d,%d,%d",a,b,c);scanf函数第二类形参是地址列表,所以语句改为scanf("%d,%d,%d",&a,&b,&c);而这个语句对应的键盘输入形式为2,3,4。

为了满足题目要求,scanf语句改为scanf("%d%d%d",&a,&b,&c);。

另外,printf函数双引号只能出现一对,且双引号中需要在相应的位置上添加a=等这样的字符串才能原样输出;还有整型变量对应格式符号是%d等。

第三章

一选择题

1.A2.C3.C4.D5.C6.B7.C8.B9.A10.A11.A12.B13.D14.A15.B16.C17.C18.C19.C20.C21.C22.B23.C24.C25.A26.B27.A28.A29.C30.A31.C32.C

二.填空题

1.非零零

2.passwarm

3.525252

4.fabs(x)>5

5.x%y==0

6.if((1<=x&&x<=10||200<=x&&x<=210)&&x%2==1)printf("%d",x);

7.k=1

8.Right!

1

Right!

1

9.$$$a=0

10.a=2,b=1

11.0

12.t;

"%f%f"

a=b;

13."%c",&ch

'A'<=ch&&ch<='Z'

ch

14.死循环

15.345

16.73-1

17.x>=0

x

18.scanf("%f",&x);

sum+=x;

19.8

20.11

21.2.400000

22.8921

23.i<=9

j%3!

=0

24.b=i+1

25.852

26.d=1.0

k++

k<=n

三、编程题

1.参考代码如下:

#include

voidmain(void)

{

floatx,y;

printf("Pleaseinputthevalueofx:

");

scanf("%f",&x);

if(x>-5&&x<0)

y=x;

elseif(x==0)

y=x-1;

elseif(x>0&&x<10)

y=x+1;

printf("y=%f",y);

}

2.参考代码如下:

#include

voidmain(void)

{

floata,b,c;

printf("请输入三角形三边的长度:

\n");

scanf("%f%f%f",&a,&b,&c);

if(a+b>c&&b+c>a&&a+c>b)

if(a==b&&a==c)

printf("该三角形是等边三角形\n");

elseif(a==b&&a!

=c)

printf("该三角形是等腰三角形\n");

else

printf("该三角形是一般三角形\n");

else

printf("不能构成三角形\n");

}

3.参考代码如下:

#include

voidmain(void)

{

floatM,N,menoy;

printf("请输入购买金额:

");

scanf("%f",&M);

if(M<100)

N=0;

elseif(M>=100&&M<200)

N=1.5;

elseif(M>=200&&M<300)

N=2.5;

elseif(M>=300&&M<400)

N=3.5;

elseif(M>=400&&M<500)

N=4.5;

elseif(M>=500&&M<600)

N=5.5;

else

N=6;

menoy=M*(1-N/100);

printf("实际支付金额:

%f,返还的金额:

%f\n",menoy,M-menoy);

}

4.参考代码如下:

#include

voidmain(void)

{

floatM,N,menoy;

intin;

printf("请输入购买金额:

");

scanf("%f",&M);

in=M/100;

switch(in)

{

case0:

N=0;break;

case1:

N=1.5;break;

case2:

N=2.5;break;

case3:

N=3.5;break;

case4:

N=4.5;break;

case5:

N=5.5;break;

default:

N=6;break;

}

menoy=M*(1-N/100);

printf("实际支付金额:

%f,返还的金额:

%f\n",menoy,M-menoy);

}

5.参考代码如下:

#include

voidmain(void)

{

floatx,max;

printf("Enteranumber:

");

scanf("%f",&x);

max=x;

while(x>0)

{

printf("Enteranumber:

");

scanf("%f",&x);

if(x>max)

max=x;

}

if(max>0)

printf("Thelargestnumberenteredwas%f\n",max);

}

6.参考代码如下:

#include

voidmain(void)

{

floatM,N,menoy;

printf("请输入购买金额:

");

scanf("%f",&M);

while(M>0)

{

if(M<100)

N=0;

elseif(M>=100&&M<200)

N=1.5;

elseif(M>=200&&M<300)

N=2.5;

elseif(M>=300&&M<400)

N=3.5;

elseif(M>=400&&M<500)

N=4.5;

elseif(M>=500&&M<600)

N=5.5;

else

N=6;

menoy=M*(1-N/100);

printf("实际支付金额:

%f,返还的金额:

%f\n",menoy,M-menoy);

printf("请输入购买金额:

");

scanf("%f",&M);

}

}

7.参考代码如下:

#include

voidmain(void)

{

floatnumber,positivesum=0,negativesum=0,total=0;

inti;

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

{

scanf("%f",&number);

if(number>=0)positivesum+=number;

elsenegativesum+=number;

total+=number;

}

printf("positivesum%f,negativesum%f,total%f\n",positivesum,negativesum,total);

}

8.参考代码如下:

#include

voidmain(void)

{

inti,sum=0,k=1;

for(i=1;i<=101;i+=2)

{

sum=sum+k*i;

k=-k;

}

printf("1-3+5-7+...-99+101=%d\n",sum);

}

9.参考代码如下:

#include

voidmain(void)

{

floati,sum=0,k=1;

for(i=1;k>=1e-4;i++)

{

sum=sum+k;

k=k/i;

}

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

}

10.参考代码如下:

#include

voidmain(void)

{

floati,sum=0,n=2,d=1,temp;

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

{

sum=sum+n/d;

temp=n;

n=n+d;

d=temp;

}

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

}

11.参考代码如下:

#include

#include

voidmain(void)

{

floatapple,watermelon,pear;

for(apple=1;apple<100;apple++)

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

{

pear=100-apple-watermelon;

if(fabs(apple*0.4+watermelon*4+pear*0.2-40.0)<1e-6)

printf("apple:

%.0f,watermelon:

%.0f,pear:

%.0f\n",apple,watermelon,pear);

}

}

12.参考代码如下:

#include

voidmain(void)

{

inti,j,k;

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

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

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

if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)

printf("%d\n",i*100+j*10+k);

}

或:

#include

voidmain(void)

{

inta,b,c,i;

for(i=100;i<1000;i++)

{

a=i/100;

b=i/10%10;

c=i%10;

if(i==(a*a*a+b*b*b+c*c*c))

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

}

}

13.参考代码如下:

#include

voidmain(void)

{

inta,b,c,d;

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

for(b=0;b<10;b++)

for(c=0;c<10;c++)

for(d=0;d<10;d++)

if(a*1000+b*100+c*10+d==(a*10+b+c*10+d)*(a*10+b+c*10+d))

printf("%d\n",a*1000+b*100+c*10+d);

}

或:

#include

voidmain(void)

{

inta,b,c,d,i;

for(i=1000;i<10000;i++)

{

a=i/1000;

b=i/100%10;

c=i/10%10;

d=i%10;

if(i==(a*10+b+c*10+d)*(a*10+b+c*10+d))

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

}

}

14.参考代码如下:

#include

voidmain(void)

{

inti,j;

for(i=1;i<=4;i++)//先控制打印前4行

{

for(j=1;j<=4-i;j++)

printf("");

for(j=1;j<=2*i-1;j++)

printf("*");

printf("\n");

}

for(i=1;i<=3;i++)//再控制打印后3行

{

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

printf("");

for(j=1;j<=2*(4-i)-1;j++)

printf("*");

printf("\n");

}

}

 

第四章

一选择题

1.A,如果没有给s[1]赋值,按C语言规定,s[1]下标变量中的数据是一个随机数

2.C,"China"字符串末尾还有一个\0,故占6个字节

3.D,scanf函数中格式符号若是%c,则把输入的第一个字符'1'赋给变量c,然后遇到格式符号%d,则把后续的23(遇到空格结束)赋值给变量i,遇到格式符号%s,则把后续的字符串"456"(遇到空格结束)赋值给变量s

4.D,C语言规定,数组在定义时就已经分配好了所占内存空间,所以intx[5]在内容中占的字节数为4*5=20

5.B,内层循环变量j每次都从0开始,使得在外层循环变量i每取一个值时,n[0]和n[1]的值都得重新计算

6.B,这是求十进制数18对应二进制数的程序,将每次18除以2得到的余数依次放到数组a[0]到a[4]中,最后按a[4]到a[0]这样的顺序输出

7.B,第一个for循环给a[0]到a[9]赋值为0到9,第二个for循环给p[0]到p[2]赋值为0,2,6,第三个for循环使k=k+p[0]*2+p[1]*2+p[2]*2=5+4+12=21

8.D,C语言规定,定义二维数组时不能省略第二维下标值,但可以省略第一维下标值

9.B,略

10.A,每行的第4列元素的值都为0

11.C,略

12.D,C语言规定,字符数组不能用s="abcd"这样的赋值语句赋值

13.C,float类型的变量对应格式符号通常为%f,不是%d

14.A,每行的第3列元素的值均为0

15.D,略

16.C,A这种赋值形式无法放置字符串末尾的\0,B和D不符合C语言规定,即字符数组不能用s="good"这样赋值语句赋值

17.A,这是字符数组str初始化的形式,str[0]到str[5]分别为字符s,t,r,i,n,g,str[6]到str[11]的值均为\0,函数strlen是统计字符串包含字符的个数,遇到\0(不包括\0)结束,所以str长度为6

18.C,x数组比y数组多了一个字符\0

19.A,数组名就是数组第一个元素的地址,所以scanf("%s",&s);中得删除数组名前面的&

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

当前位置:首页 > 小学教育 > 学科竞赛

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

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