C课本习题答案12.docx
《C课本习题答案12.docx》由会员分享,可在线阅读,更多相关《C课本习题答案12.docx(38页珍藏版)》请在冰豆网上搜索。
C课本习题答案12
第1章概述
习题
一、填空题
1.C语言的特点是应用广泛、语言简洁、紧凑、明了,目标代码质量高_、运算符及其表达式种类多,语言表达能力强_、数据结构丰富,编程方便灵活_、丰富的结构化控制语句_和程序运行效率高,可移植性强_。
(见1.2C语言的特点)
2.一个C语言程序从编写成功到实现既定功能,需要经历的基本过程是_____编辑____、__编译_______、__链接_______和____运行_____。
1.以下叙述中正确的是(B)。
A.C程序由主函数组成B.C程序由函数组成
C.C程序由函数和过程组成D.C程序中的注释行由“/*”开头,由“*/”结束
2.C语言是(B)由美国贝尔实验室的D.M.Ritchie在B语言的基础上设计的。
A.20世纪60年代B.20世纪70年代
C.20世纪80年代D.20世纪90年代
第2章数据类型、运算符与表达式
习题
一、简答题
1.熟悉各种数制相互转换和原码、反码、补码的知识。
2.试比较常量与变量的关系?
变量不仅有值,而且有地址和名;变量在某一时刻的值是常量。
3.用转义字符有什么好处?
转义字符主要用来表示那些用一般字符不便于表示的控制代码。
常用的转义字符及其含义见表2-2。
4.使用符号常量有何好处?
使用时应注意什么问题?
好处:
见名知义,一改全改。
注意使用时的书写格式。
5.对照变量类型与常量类型,哪些是相同的,那些是常量所独有的?
二、选择题
1.下列选项中,可以作为C语言常量的是(C.)。
A.13.8eB.1/2C.'M'D."abc"
2.下列选项中,不可以作为C语言常量的是(D)。
A..88B.35.6e3C.4e-2D.3/5
3.下列选项中,正确的一组程序是(A)
A.chara;B.charb;C.charc;D.chard
a='M';b='55';c="M";d="55"
4.已知字母’b’的ASCII码值为98,如ch为字符型变量,则表达式ch=’b’+’5’-‘2’的值为(101)。
A.‘e’B.dC.102D.100
5.下列程序的运行结果是(B)。
main()
{
charc1='6',c2='0';
printf("%c,%c,%d\n",c1,c2,c1-c2);}
A.因程序格式不合法,提示出错信息。
B.6,0,6
C.6,0,7D.6,0,5
6.以下程序的输出结果是(A)。
main()
{
intx=010,y=10,z=0x10;
printf("%d,%d,%d\n",x,y,z);}
A.8,10,16B.8,10,10C.10,10,10D.10,10,16
7.已知各变量的类型定义如下:
inti=8,k,a,b;
unsignedlongw=5;
doublex=1.42,y=5.2;
则,以下两组表达式中不符合C语言语法的表达式分别是()。
(1)A.k=i++B.(int)x+0.4C.y+=x++D.a=2*a=3
(2)A.x%(-3)B.w+=-2C.k=(a=2,b=3,a+b)D.a+=a-=(b=4)*(a=3)
三、填空题
1.分别计算下列各表达式的值。
⑴设x=2.5,a=5,y=4.7,计算表达式x+a%3*(x+y)%2/4的值。
(本题有错×)
⑵设a=4,计算表达式a=1,a+5,a++的值。
1
⑶设a=2,b=3,x=3.5,y=2.5,计算表达式(a+b)/2+x%y的值。
(本题有错×)
⑷设x=4,y=8,计算表达式y=(x++)*(--y)的值。
31
⑸设x=1,y=2,计算表达式1.0+x/y的值。
1
2.写出下面表达式运算后a的值,设原来a=12,且a和n已定义为整型变量。
⑴a+=a24⑵a-=210⑶a*=2+360
⑷a/=a+a0⑸a%=(n%=2),n的值等于50⑹a+=a-=a*=a0
第3章顺序结构程序设计
习题
一、选择题
1.定义变量如下:
intx;floaty;则以下输入语句(C)是正确的。
(A)scanf("%f%f",&x,&y);(B)scanf("%f%d",&x,&y);
(C)scanf("%f%d",&y,&x);(D)scanf("%5.2f%2d",&x,&y);
2.putchar函数可以向终端输出一个(A)。
(A)字符或字符变量的值(B)字符串
(C)实型变量(D)整型变量的值
3.下列叙述正确的是(C)。
(A)赋值语句中的“=”是表示左边变量等于右边表达式
(B)赋值语句中左边的变量值不一定等于右边表达式的值
(C)赋值语句是由赋值表达式加上分号构成的
(D)x+=y;不是赋值语句
二、程序阅读题
1.main()
{
intx=12;
printf("%d,%o,%x,%u,",x,x,x,x);}12,14,c,12
2.main()
{
intx=235;
doubley=3.1415926;
printf("x=%-6d,y=%-14.5f\n",x,y);}x=235,y=3.14159
3.main()
{
printf("%f,%4.2f\n",3.14,3.14159);}3.140000,3.14
4.main()
{
printf("*\n**\n***\n****\n");
}
*
**
***
****
5.main()
{
printf("This\tis\ta\tC\tprogram.\n");
}
ThisisaCprogram.
6.main()
{
charx='a',y='b';
printf("%e\\%c\n",x,y);此处有错,格式符不对,可以是d/o/x
printf("x=\'%3x\',\'%-3x\'\n",x,x);}
7.当输入流为“56789□0123□45a72”时,执行下面的程序段后,
inti,j;
floatx,y;
charc;
scanf("%2d%f%f%c%d",&i,&x,&y,&c,&j);
变量i,j,x,y,c中内容各是什么?
i=56x=789.0y=123.0c=''j=45
第4章选择结构程序设计
习题
一、填空题
1.语言中用___1___表示“真”,用__0____表示“假”。
2.a的初值为2,b的初值为3,c的初值为4,求下列表达式的值:
⑴a==30
⑵a=33
⑶a&&b1
⑷a||b+c&&b-c→a||(b+c)&&(b-c)1
⑸!
((a
c||1)0
⑹a
a:
c
c:
a→(a
a:
(c
c:
a)2
3.下列程序的输出结果为:
main()
{
inta、b、c;
a=b=c=1;
b=b+c;
a=a+b;
printf("%d\n",(c
b:
a);
}
结果_____2___________。
二、选择题
1.能正确表示a和b同时为正或同时为负的逻辑表达式是(D)
A.(a>0||b>0)&&(a<0||b<0)B.a>0&&b>0
C.a+b>0D.a*b>0
2.设intx=1,y=1;表达式(!
x||y--)的值是(B)
A.0B.1C.2D.-1
3.设有如下程序:
main()
{floatx=2.0,y;
if(x<0.0)y=0.0;
elseif(x<10.0)y=1.0/x;
elsey=1.0;
printf("%f\n",y);
}
该程序的输出结果是(C)
A.0.000000B.0.250000C.0.500000D.1.000000
4.设有如下程序:
main()
{inta=2,b=-1,c=2;
if(b<0);c=0;
elsec++;
printf("%d\n",c);}
该程序的输出结果是(A)
A.0B.1C.2D.有语法错
5.设有如下程序:
main()
{inta=100;
if(a>0)printf("%d\n",a>100);
elseprintf("%d\n",a<=100);;}
该程序的输出结果是(A)
A.0B.1C.100D.-1
6.设有如下程序:
main()
{
intx=1,a=0,b=0;
switch(x)
{
case0:
b++;
case1:
a++;
case2:
a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
该程序的输出结果是(A)
A.a=2,b=1B.a=1,b=1C.a=1,b=0D.a=2,b=2
7.若有定义“floatw;inta,b;”,则合法的switch语句是(D)
A.switch(w)B.switch(a);
{case1.0:
printf("*\n");{case1printf("*\n");
case2.0:
printf("**\n");case2printf("**\n");
}}
C.switch(b)D.switch(a+b)
{case1:
printf("*\n");{case1:
printf("*\n");
default:
printf("**\n");case2:
printf("**\n");
case1+2:
printf("\n");default:
printf("\n");
}}
三、编程题
1.输入一个年份,判断它是否为闰年。
2.从键盘输入三个整数a、b、c,编程求最大数并输出结果。
3.为了鼓励节约用水,作如下规定:
每人月用水量在10m3或10m3以下,收费为1.8元/m3,用水量在10到20m3之间的,超出部分收费为2.5元/m3,用水量超过20m3的,超出20m3的部分收费为3.5元/m3。
设某人某月份用水xm3,编程求其应付水费y。
4.某百货商场进行打折促销活动,消费金额(p)越高,折扣(d)越大,标准如下:
消费金额折扣
p<1000%
100≤p<2005%
200≤p<50010%
500≤p<100015%
p≥100020%
编写程序,从键盘输入消费金额,输出折扣率和实付金额(f)。
要求分别:
(1)用if语句实现;
(2)用switch语句实现。
三、1.
#include
main()
{
intyear;
printf("Pleaseinputayear:
");
scanf("%d",&year);
if((year%4==0&&year%100!
=0)||year%400==0)
printf("%dyearisleapyear!
\n",year);
else
printf("%dyearisnotleapyear!
\n",year);
}
三、2.
#include
main()
{
inta,b,c,max;
scanf("%d,%d,%d",&a,&b,&c);
max=a;
if(max
if(maxprintf("Maximumnumberis%d\n",max);
}
三、3
#include
main()
{
intx;
floaty,p;
scanf("%d",&x);
if(x<=10)
y=1.8*x;
elseif(x<=20)
y=1.8*10+2.5*(x-10);
else
y=1.8*10+2.5*10+3.5*(x-20);
printf("y=%.2f\n",y);
}
三、4
(1)
#include
main()
{
floatp,f,d;
scanf("%f",&p);
if(p<100)
d=0.;
elseif(p<200)
d=0.05;
elseif(p<500)
d=0.1;
elseif(p<1000)
d=0.15;
else
d=0.2;
f=p*(1-d);
printf("d=%d%%f=%.2f\n",(int)(d*100),f);
}
(2)
#include
main()
{
floatp,f,d;
intc;
scanf("%f",&p);
c=p/100;
switch(c)
{
case0:
d=0.;break;
case1:
d=0.05;break;
case2:
case3:
case4:
d=0.1;break;
case5:
case6:
case7:
case8:
case9:
d=0.15;break;
default:
d=0.2;
}
f=p*(1-d);
printf("d=%d%%f=%.2f\n",(int)(d*100),f);
}
第5章循环结构程序设计
习题
一、简答题
1.试画出while语句、do…while语句的流程图,并简要说明两者有何区别。
2.试画出for语句的流程图,并简要说明与while语句相比有何不同。
二、改错题
1.判断m是否为素数。
#include
main()
{intm,i,k;
scanf("%d",&m);
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)break;
if(i>k)printf("%disaprimenumber\n",m);
elseprintf("%disnotaprimenumber\n",m);}
错误的地方:
正确的语句:
错误的地方:
正确的语句:
2.求数列1,1,2,3,5,8……的前40个数,即
F1=1(n=1)
F2=1(n=2)
Fn=Fn-1+Fn-2(n>=3)
#include"stdio.h"
main()
{longintf1=1,f2=1;
inti;
for(i=1;i<=40;i++)
{printf("%12ld%12ld",f1,f2);
if(i%2==0)printf("\n");
f2+=f1;f1+=f2;}}
错误的地方:
for(i=1;i<=40;i++)
正确的语句:
for(i=1;i<=20;i++)
错误的地方:
f2+=f1;f1+=f2
正确的语句:
f1+=f2;f2+=f1
三、编程题
1.输入整数n,求表达式
的值。
2.求
的值,n由手动输入。
3.使用循环,输出以下图案:
1
222
33333
4444444
555555555
4.求
的值。
三、1.
main()
{
intn,i;
floatt,s,sum;
printf("inputn:
");
scanf("%d",&n);
t=1;
s=1;
sum=1;
for(i=1;i<=n;i++)
{
t=t*2;
s=s+t;
sum=sum+s;
}
printf("Thevalueis%f",sum);
getch();
}
三、2
#include
main()
{
inti,n;
floats;
scanf("%d",&n);
for(i=3,s=1;i<=n;i+=2)s=s+1.0/i;
printf("s=%f\n",s);
}
三、3.
#include
main()
{
inti,j,k;
for(i=1;i<=5;i++)
{
for(j=1;j<=5-i;j++)
printf("");
for(k=1;k<=2*i-1;k++)
printf("%1d",i);
printf("\n");
}
}
三、4.
Main()
{
foalts,s1,s2,s3,k;
for(k=1;k<=100;k++)
s1=s1+k;
for(k=1;k<=50;k++)
s2=s2+k*k;
for(k=1;k<=10;k++)
s3=s3+1.0/k;
s=s1+s2+s3;
printf(“s1+s2+s3=%f”,s)
}
第6章数组
习题
一、改错题
1.求数组的和以及平均值。
main()
{inta[]={1,2,3,4,5,6,7,8,9,10},i;
floatsum,avg;
for(i=0;i<10;i++)sum=sum+a[i];
avg=sum/10;
printf("sum=%f,avg=%f",sum,avg);}
错误的地方:
for(i=0;i<10;i++)sum=sum+a[i];
正确的语句:
for(i=0,sum=0;i<10;i++)sum=sum+a[i];
错误的地方:
正确的语句:
2.有两个数组,各有5个元素,比较相应的元素,并统计相应元素大于、小于和等于的次数。
main()
{inta[5],b[5],i,n,m,k;
printf("enterarraya:
\n");
for(i=0;i<5;i++)scanf("%d",&a[i]);
printf("\n");
printf("enterarrayb:
\n");
for(i=0;i<5;i++)scanf("%d",&b[i]);printf("\n");
for(i=0;i<5;i++)
if(large(a[i],b[i])==1)n=n+1;
elseif(large(a[i],b[i])==0)m=m+1;
elsek=k+1;
printf("a[i]>b[i]%dtime\n",n);
printf("a[i]=b[i]%dtime\n",m);
printf("a[i]
if(n>k)printf("arrayaislargethanarrayb\n");
elseif(nelseprintf("arrayaisequalthanarrayb\n");}
large(intx,y)
{intflag;
if(x>y)flag=1;
elseif(xelseflag=0;
return(flag);}
错误的地方:
inta[5],b[5],i,n,m,k;
正确的语句:
inta[5],b[5],i,n=0,m=0,k=0;
错误的地方:
large(intx,y)
正确的语句:
large(intx,inty)
二、填空题
1.将二维数组行列元素互换,存到另一个数组中。
main()
{
inta[2][3]={1,2,3,4,5,6};
intb[3][2],i,j;
printf("arraya:
\n");
for(i=0;i<=1;i++)
{for(j=0;j<=2;j++)
{printf("%5d",a[i][j]);b[j][i]=a[i][j];}
printf("\n");}
printf("arrayb:
\n");
for(i=0;i<=2;i++)
{for(j=0;j<=1;j++)printf("%5d",b[i][j]);
printf("\n");}}
2.用选择法对10个整数排序。
main()
{
inta[10],i,j,k,x;
printf("This10numbersare:
\n");
for(i=0;i<10;i++)
{}
printf("\n");
for(i=0;i<10;i++)
{k=i;
for(j=i+1;j<=10;j++)
if(a[j]if(i!
=k)
{x=a[i];a[i]=a[k];a[k]=x;}}
printf("Thesortednumbers:
\n");
for(i=1;i<11;i++)printf("%d",a[i]);
}
三、编程题
1.编写程序输出二维数组每列的列号和每列上的最大值。
2.用选择法对10个整数从小到大排序。
3.将一个数组中的值按逆序重新存放。
例如原来顺序为8,6,5,4,1。
要求改为1,4,5,6,8。
三、1.
#include
main()
{
inta[3][2];
intmax,i,j;
for(i=0;i<3;i++)
for(j=0;j<2;j++)
scanf("%d",&a[i][j]);
for(j=0;j<2;j++)
{printf("%dlie",j);
max=a[0][j];
for(i=0;i<3;i++)
if(maxmax=a[i][j];
printf("max=%d\n",max);
}
}
三、2
#include
#include
main()
{
inti,j,k,n,num,array[10];