- 175.19 KB
- 2022-04-29 14:13:46 发布
- 1、本文档共5页,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
- 文档侵权举报电话:19940600175。
'习题11.1C语言的主要优点有哪些?它与其他程序设计语言的区别是什么?答:(略)1.2什么是程序?程序设计的目的是什么?程序设计的步骤有哪些?答:(略)1.3简要叙述C程序的上机调试过程。答:(略)1.4冯·诺依曼结构指的是什么?计算机有哪些组成部分?各部分的功能是什么?答:(略)习题22.1简答题(1)C语言为什么要规定对所有用到的变量要“先定义,后使用”?这样做有什么好处?答:凡未被事先定义的,不作为变量名,这就能保证程序中变量名使用得正确;每一个变量被指定为一确定类型,在编译时就能为其分配相应的存储单元;指定每一变量属于一个类型;这就便于在编译时;据此检查该变量所进行的运算是否合法。(2)下列符号中,你可以选用哪些做标识符?哪些不可以?为什么?A3B3aB-bifnext_daye_2OK?i*j$答:可用作标识符的是:A3B、next_、day、e_2;其余的不可以,因为标识符是由字母或下划线开始的,由字母、下划线、数字组成的字符串,另外,关键字是不能够作为标识符的。(3)字符常量与字符串常量有什么区别?答:在C语言当中,通过“ ”这个特殊字符作为判断字符串结尾的标志,所以,即使一个空字符串,也要占用一个字符;另外,值得注意的是,在字符串中“ ”这个字符是不显示的。而字符常量在内存空间中,只占用一个字节的空间来存放字符说对应的ASCII码值。2.2填空题(1)以下程序的运行结果是。#includevoidmain(){charc1="a",c2="b",c3="c",c4="101",c5="116";printf("a%cb%ctc%ctabcn",c1,c2,c3);printf("tb%c%cn",c4,c5);}运行结果为:aabbccabcAN(2)下面程序的运行结果是。#includevoidmain()
{chara=2,b="a";intc;c=a+b;a=c;printf("%d,%d,%dn",a,b,c);printf("%c,%c,%cn",a,b,c);}运行结果为:99,97,99c,a,c(3)求下面算术表达式的值。①设x=2.5,a=7,y=4.7,表达式x+a%3*(int)(x+y)%2/4的值是2.500000。②设a=2,b=3,x=3.5,y=2.5,表达式(float)(a+b)/2+(int)x%(int)y的值是3.500000。2.3编程题(1)要将“China”译成密码,密码规律是,用原来的字母后第4个字母代替原来的字母。例如,字母‘a’后面第4个字母为‘e’。因此,“China”应译为“Glmre”。请编写程序,用赋初值的方法使c1、c2、c3、c4、c5这5个变量的值分别为‘C’、‘h’、‘i’、‘n’、‘a’,经过运算,使c1、c2、c3、c4、c5分别变为‘G’、‘l’、‘m’、‘r’、‘e’,并输出。答:#includevoidmain(){charc1=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’;c1=c1+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;printf(“%c%c%c%c%cn”,c1,c2,c3,c4,c5);}(2)从键盘输入一个小写英文字母,将其转换成大写字母输出结果。如小写字母c,转换成大写字母时用小写字母的ASCII-32即可。答:#includevoidmain(){charc;scanf(“%c”,&c);if(c>’a’&&c<’z’)c=c-32;printf(“%c”,c);}习题33.1单项选择题(1)若有说明语句charc=‘72’;,则变量c(A)。A.包含1个字符B.包含2个字符C.包含3个字符D.说明不合法,c值不确定(2)下列数据中属于“字符串常量”的是(B)。A.ABCB.“ABC”C.‘ABC’D.‘A’
(3)C语言中,运算对象必须是整型的运算符是(B)。A./B.%C.+D.-(4)若有以下定义:chara;intb;floatc;doubled;则表达式a*b+d-c值的类型为(D)。A.floatB.intC.charD.double(5)执行语句“x=(a=3,b=a--)”后,x,a,b的值依次是(C)。A.3,3,2B.3,2,2C.3,2,3D.2,3,2(6)若有代数式3ae/bc,则不正确的C语言表达式是(C)。A.a/b/c*e*3B.3*a*e/b/cC.3*a*e/b*cD.a*e/b/c*3(7)设整型变量n的值为2,执行语句“n+=n-=n*n;”后,n的值是(C)。A.0B.4C.-4D.2(8)已知a=5,b=8,c=10,d=0;表达式的值为真的是(D)。A.a*2>8+2B.a&&dC.(a*2-c)||dD.a-bc4)后,s,t的值为(D)。A.1,2B.1,1C.0,1D.1,0(11)设有定义:inta=2,b=3,c=4;,则以下选项中值为0的表达式是(A)。A.(!a==1)&&(!b==0);B.(a=Y>=ZC.(X>=Y)‖(Y>=Z)D.(X>=Y)&&(Y>=Z)(13)表达式(int)3.6*3的值为(A)。A.9B.10C.10.8D.18(14)以下语句的输出结果是(D)。inta=-1,b=4,k;k=(++a<0)&&!(b--<=0);printf("%d,%d,%dn",k,a,b);A.1,0,4B.1,0,3C.0,0,3D.0,0,4(15)已有定义intx=3,y=4,z=5;则表达式“!(x+y)+z-1&&y+z/2”的值是(D)。A.6B.0C.2D.13.2阅读程序写结果(1)若x和a均是int型变量,计算表达式x=(a=4,6*2)后的x值为12。(2)若a是int型变量,且a的初值为6,则计算a+=a-=a*a表达式后a的值为-60。(3)若有以下定义,intm=5,y=2;则计算表达式y+=y-=m*=y后的y值是-16。
(4)若有定义intb=7;floata=2.5,c=4.7;,则下面表达式的值为5.500000。a+(int)(b/3*(int)(a+c)/2)%4(5)若x为int类型,请以最简单的形式写出与逻辑表达式!x等价的C语言关系表达式x==0。(6)以下程序运行后的输出结果是3。voidmain(){intp=30;printf("%dn",(p/3>0?p/10:p%3));}(7)设y是int型变量,请写出判断y为奇数的关系表达式(y%2)==1。习题44.1单项选择题(1)若以下选项中的变量已正确定义,则正确的赋值语句是___C___。A.x1=26.8%3B.1+2=x2C.x3=0x12D.x4=1+2=3;(2)以下程序输出结果是___D___。voidmain(){inta=0,b=0,c=0,d=0;if(a=1)b=1;c=2;elsed=3;printf("%d,%d,%d,%dn",a,b,c,d);}A.0,1,2,0B.0,0,0,3C.1,1,2,0D.编译有错(3)下列叙述中正确的是__D___。A.break语句只能用于switch语句B.在switch语句中必须使用defaultC.break语句必须与switch语句中的case配对使用D.在switch语句中,不一定使用break语句(4)若有定义:floatx=1.5;inta=1,b=3,c=2;则正确的switch语句是___C___。A.switch(x)B.switch((int)x);{case1.0:printf("*n");{case1:printf("*n");case2.0:printf("**n");}case2:printf("**n");}C.switch(a+b)D.switch(a+b){case1:printf("*n");{case1:printf("*n");case2+1:printf("**n");}casec:printf("**n");}(5)在以下给出的表达式中,与while(E)中的(E)不等价的表达式是C。A.(!E==0)B.(E>0‖E<0)C.(E==0)D.(E!=0)(6)若执行下面的程序时,从键盘上输入5和2,则输出结果是C。voidmain(){inta,b,k;scanf("%d,%d",&a,&b);
k=a;if(avoidmain(){inty=10;while(y--);printf("y=%dn",y);}A.y=0B.y=-1C.y=1D.while构成无限循环(8)C语言中while和do…while循环的主要区别是A。A.do…while的循环体至少无条件执行一次B.while的循环控制条件比do…while的循环控制条件更严格C.do…while允许从外部转到循环体内D.do…while的循环体不能是复合语句(9)以下程序段的输出结果是A。voidmain(){intx=3;do{printf("%3d",x-=2);}while(!(--x));}A.1B.30C.1-2D.死循环(10)若i和j已定义为int类型,则以下程序段中内循环体的总的执行次数是A。for(i=5;i;i--)for(j=0;j<4;j++){……}A.20B.25C.24D.30(11)以下程序执行后,sum的值是D。voidmain(){inti,sum;for(i=1;i<6;i++)sum+=i;printf(“%d”,sum);}A.15B.14C.0D.不确定(12)执行下面程序后,a的值为B。#includevoidmain(){inta,b;
for(a=1,b=1;a<=100;a++){if(b>=20)break;if(b%3==1){b+=3;continue;}b-=5;}printf("%d",a);}A.7B.8C.9D.10(13)下面程序输出的是B。#includevoidmain(){inty=9;for(;y>0;y--){if(y%3==0){printf("%d",--y);continue;}}}A.741B.852C.963D.875421(14)以下程序的输出结果是A。#includevoidmain(){inti;for(i=1;i<=5;i++){if(i%2)printf("*");elsecontinue;printf("#");}printf("$n");}A.*#*#*#$B.#*#*#*$C.*#*#$D.*#*#*$(15)以下程序中,while次数是C。voidmain(){inti=0;while(i<10){if(i<1)continue;if(i==5)break;i++;}……}A.1B.10C.6D.死循环,不能确定次数(16)以下程序的输出结果是B。#include
voidmain(){intx=23;doprintf("%d",x--);while(!x);}A.321B.23C.不输出任何内容D.陷入死循环(17)以下程序的输出结果是D。#includevoidmain(){intk=4,n=4;for(;nvoidmain(){inti=0,a=0;while(i<20){for(;;){if(i%10==0)break;elsei--;}i+=11;a+=i;}printf("%d",a);}A.21B.32C.33D.114.2阅读程序写结果题(1)若从键盘输入58,则以下程序输出的结果是585858。voidmain(){inta;scanf("%d",&a);if(a>50)printf("%d",a);if(a>40)printf("%d",a);if(a>30)printf("%d",a);}(2)以下程序输出结果是6。#includevoidmain(){intm=5;
if(m++>5)printf("%dn",m);elseprintf("%dn",m--);}(3)以下程序运行时若从键盘上输入:102030<回车>。输出结果是10300。#includevoidmain(){inti=0,j=0,k=0;scanf("%d%*d%d",&i,&j,&k);printf("%d%d%dn",i,j,k);}(4)下列程序的运行结果是9。voidmain(){intx=-9,y=5,z=8;if(xvoidmain(){inti,m=0,n=0,k=0;for(i=9;i<=11;i++)switch(i/10){case0:m++;n++;break;case10:n++;break;default:k++;n++;}printf("%d%d%dn",m,n,k);}(6)以下程序的输出结果是10。#includevoidmain(){inti,j;for(j=10;j<11;j++){for(i=9;i=j-1)printf("%d",j);}}(7)以下程序的输出结果是4。#includevoidmain(){inta,b;for(a=1,b=1;a<=100;a++)
{if(b>=10)break;if(b%3==1){b+=3;continue;}}printf("%d",a);}(8)运行以下程序后,从键盘上输入6514,再回车,输出结果为m=1。#includevoidmain(){intm,n;scanf("%d%d",&m,&n);while(m!=n){while(m>n)m-=n;while(n>m)n-=m;}printf("m=%d",m);}4.3编程题(1)已知华氏温度与摄氏温度的转换公式为:C=(F-32)*5/9,编写程序,当输入华氏温度F时,输出对应的摄氏温度。答:#includevoidmain(){floatc,f;scanf(“%f”,&f);printf(“%f”,c=(f-32)*5/9);}(2)请为如下分段函数编写程序,当输入一个x值,计算输出y的数值:ìx(x£1)ïy=í2x-1(1voidmain(){intx,y;scanf(“%d”,&x);if(x<=1)y=x;elseif(x<10)y=2*x-1;elsey=3*x-11;printf(“y=%d”,y);}
(3)输入三个数a、b、c,按照大小顺序排序输出。答:#includevoidmain(){floata,b,c,t;scanf(“%f,%f,%f”,&a,&b,&c);if(avoidmain(){charc;scanf(“%c”,&c);if(c>=0&&c<=9)printf(“数字”);elseif(c>=’a’&&c<=’z’||c>=’A’&&c<=’Z’)printf(“字母”);elseprintf(“数字”);}(5)编写程序,从键盘输入一个字符,若为大写则转换为小写输出,若为小写则转换为大写输出,其他输入则输出"Error"。答:#includevoidmain(){charc;scanf(“%c”,&c);if(c>=’a’&&c<=’z’)printf(“%c”,c-32);elseif(c>=’A’&&c<=’Z’)printf(“%c”,c+32);elseprintf(“Error”);}(6)编程序按下列公式计算e的值(精度为1e-6)。e=1+1/1!+1/2!+1/3!+……1/n!答:#include#includelongni(intx1){longx2=1;inti;for(i=1;i<=x1;i++)x2=i*x2;returnx2;}
voidmain(){floatt=1,tt;ints=1,m=1;longn=1;do{tt=t;n=ni(m);t+=(float)s/n;m++;}while(fabs(t-tt)>=1e-6);printf("e=%fn",t);}(7)求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),相加数的个数由键盘控制。答:#includevoidmain(){inta,n,i=1,sn=0,tn=0;printf(“a,n=:”);scanf(“%d,%d”,&a,&n);while(i<=n){tn=tn+a;sn=sn+tn;a=a*10;i++}printf(“a+aa+aaa+…=%dn”,sn);}(8)一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹多高?答:#includevoidmain(){floatsn=100,hn=sn/2;intn;for(n=2;n<=10;n++){sn=sn+2*hn;hn=hn/2;}printf("第十次落地时共经过%fm.n",sn);printf("第十次反弹%fm.n",hn);}(9)输入十进制整数,将其转变为十六进制数输出。答:#includevoidmain(){inta;scanf("%d",&a);printf("十六进制为%x",a);}
(10)编程实现正弦函数,输入一个角度数值,输出对应的正弦数值,已知正弦函数的展开公式为:357xxxsinxx=-+-+L3!5!7!答:#includefloatfun(float,int);floatsin(int,float);floatterm(int);voidmain(){intn;floatx;printf(“请输入n,x值:n”);scanf(“%d”,&n);scanf(“%f”,&x);printf(“sin(%f)=%f”,x,sin(n,x));}floatsin(intn,floatx){inti;floats=0.0;for(i=1;i<=n;i++)s+=fun(-1.0,i-1)*fun(x,2*i-1)*term(2*i-1);return(s);}floatfun(floatx,intn){inti;floatp=1.0;for(i=0;ivoidmain(){longfac(intn);inti;longsum=0;for(i=1;i<=10;i++)sum=sum+fac(i);printf(“s=1!+2!+3!+4!+……+10!=%ld”,sum);}longfac(intn){staticlongf=1;f=f*n;return(f);}习题55.1单项选择题(1)在TC中,基本inta[4]类型变量所占的字节数是(D)。A.1B.2C.4D.8(2)以下不能正确定义二维数组的选项是(B)。A.inta[2][2]={{1},{2}};B.int[2][]={{1,2},{3,4}};C.inta[2][2]={{1},2,3};D.inta[][2]={1,2,3,4};(3)定义如下变量和数组:inti;intx[3][3]={1,2,3,4,5,6,7,8,9};则语句for(i=0;i<3;i++)printf("%d",x[i][2-i]);的输出结果是(C)。A.159B.147C.357D.369(4)不能把字符串Hello!赋给数组b的语句是(B)。A.charb[10]={"H","e","l","l","o","!"};B.charb[10];b="Hello!";C.charb[10];strcpy(b,"Hello!");D.charb[10]="Hello!";(5)若有如下定义和语句,能实现对数值为3数组元素的引用的是(A)。inta[]={1,2,3,4,5},*p=a;A.*(a+2)B.a[p-3]C.p+2D.a+3(6)函数调用strcat(strcpy(str1,str2),str3)的功能是(A)。A.将字符串str2复制到字符串str1中后再将字符串str3连接到字符串str1之后B.将字符串str1复制到字符串str2中后再连接到字符串str3之后C.将字符串str1复制到字符串str2中后再复制到字符串str3之后D.将字符串str2连接到字符串str1中后再将字符串str1复制到字符串str3中(7)若有定义inta[10],*p=a;,则p+5表示(C)。A.元素a[5]的地址B.元素a[5]的值
C.元素a[6]的地址D.元素a[6]的值(8)以下程序运行后的输出结果是(C)。voidmain(){chara[7]="a0 a0 ";inti,j;i=sizeof(a);j=strlen(a);printf("%d%dn",i,j);}A.22B.76C.72D.62(9)有如下程序voidmain(){intn[5]={0,0,0},i,k=2;for(i=0;i