C课本习题答案12.docx

上传人:b****7 文档编号:9367015 上传时间:2023-02-04 格式:DOCX 页数:38 大小:33.04KB
下载 相关 举报
C课本习题答案12.docx_第1页
第1页 / 共38页
C课本习题答案12.docx_第2页
第2页 / 共38页
C课本习题答案12.docx_第3页
第3页 / 共38页
C课本习题答案12.docx_第4页
第4页 / 共38页
C课本习题答案12.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

C课本习题答案12.docx

《C课本习题答案12.docx》由会员分享,可在线阅读,更多相关《C课本习题答案12.docx(38页珍藏版)》请在冰豆网上搜索。

C课本习题答案12.docx

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(max

printf("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(n

elseprintf("arrayaisequalthanarrayb\n");}

large(intx,y)

{intflag;

if(x>y)flag=1;

elseif(x

elseflag=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(max

max=a[i][j];

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

}

}

三、2

#include

#include

main()

{

inti,j,k,n,num,array[10];

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

当前位置:首页 > 高等教育 > 文学

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

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