您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > C语言习题(前五章)参考答案
1C语言习题参考答案第一部分C语言基础一、判断题1.对2.错3.对4.对5.错6.错第二部分数据类型、运算符及表达式一、选择题1.AD2.B3.(1)CD(2)BD(3)C(4)B5.B6.D/*赋值时,若有溢出,则只截取低位*/7.(1)AB(2)BD(3)ABCD8.C9.D10.C/*A,B赋值运算符左值只能是变量,不能是表达式或常量,D是逗号语句*/12.B/*赋值运算符优先级比逗号表达式高*/13.A14.D/*八进制数中,合格字符只能是0~7*/15.A/*二进制补码*/16.A/*八进制数中,合格字符只能是0~7*/17.D19.B20.D21.B/*赋值运算符右值的数据类型强制转换为左值的数据类型*/22.ABD23.D24.C25.ABD二、填空题1.1,-128~127;2,-32768~32767;4,-2147483648~2147483647;4,383810~10。3.单引号,双引号。4.优先级,结合性。6.2.5。7.3.5。11.24,10,60,0,12,012.double。14.9。16.1.5,1。18.2,-2。/*余数符号仅由被除数的符号决定*/三、判断题1.错/*如常量*/3.错/*如float只能准确表示7位有效数字,多余的位数是近似表示*/4.错5.对6.对10.错四、简答题4写出下列各数的二进制补码(写成16为二进制形式):32:0000000000100000-1:1111111111111111-32768:10000000000000002002:0000011111010010-128:11111111100000000:0000000000000000五、程序阅读1.aabb[4个空格]cc[6个空格]cA62.9,11,9,10第三部分顺序结构一、选择题2.D3.B/*假设int占2个字节*/4.D5.C7.C8.B9.D10.B11.C/*D,scanf函数的格式符中不能规定小数位数*/12.A/*格式控制符:%2d%2d%3d,输入时,前两个空格对应的数字赋给a,紧挨着的两个空格的位置赋给b*/13.C14.D15.D二、填空题6.%8.-1012410.34[回车]题目补充:scanf函数的调用形式为:scanf(“%d%d%f”,&i,&j,&x);。三、程序阅读1.a=3b=78.571.82Aa[回车]3.12345,-1.98e+002,6.504.D,/*除了X、E、G(可用大写字母表示)外,其他格式字符必须用小写字母;*/6.12##,12##3.1415926[后接94个0]##四、程序填空题6.6五、编程题1.#includestdio.hvoidmain(){inta,b,t;scanf(%d%d,&a,&b);t=a;2a=b;b=t;printf(%d%d\n,a,b);}2.#includestdio.hvoidmain(){inta=3,b=4,c=5;floatx=1.2,y=2.4,z=-3.6;unsignedu=51274;longn=128765;charc1='a',c2='b';/*a=3b=4c=5*/printf(a=%2db=%2dc=%2d\n,a,b,c);/*x=1.200000,y=2.400000,z=-3.600000*/printf(x=%f,y=%f,z=%f\n,x,y,z);/*x+y=3.60y+z=-1.20z+x=-2.40*/printf(x+y=%5.2fy+z=%5.2fz+x=%5.2f\n,x+y,y+z,z+x);/*u=51274n=128765*/printf(u=%6un=%7ld\n,u,n);/*c1='a'or97(ASCII)*/printf(c1='%c'or%3d(ASCII)\n,c1,c1);/*c2='b'or98(ASCII)*/printf(c2='%c'or%3d(ASCII)\n,c2,c2);}4.#includestdio.hvoidmain(){charc1,c2;c1=getchar();c2=getchar();putchar(c1);putchar(c2);printf(%c%c\n,c1,c2);}(1)变量c1,c2定义为字符型或整型皆可(2)输出c1和c2值的ASCII码用printf函数,即:printf(“%d,%d\n”,c1,c2);(3)charc1,c2与intc1,c2不是无条件地等价,char型变量最大只能表示8位,int型变量可以表示16位。第四部分选择结构一、选择题1.D2.B/*!运算符的优先级比%高*/4.C5.D6.B7.B8.D9.A/*if子句x=y;y=x;是两条语句,没加{},导致else找不到匹配的if.*/10.D/*条件表达式的结合性为从右向左*/11.A13.C14.B/*只有遇到break或是switch的结束}才会跳出该层switch*/15.D/*题目补充:(--y=x++)改为(--y==x++)*/16.B17.D18.D/*题目补充:inti=0;改成inti=10;*/19.A/*条件表达式的结合性为从右向左*/20.C/*②abc等价于(ab)c,所以值为0*/二、填空题3.(1)0(2)1(3)16.(x0&&y0)||(x0&&z0)||(y0&&z0)。7.0。9.0。10.a=10,b=9,c=11/*题目补充:x--=y++改成:x--==y++*/三、判断题1.对3.对4.对5.对6.对10.错/*整型和字符型通用*/四、简答题2.switch(s){case3…6:x=2;break;case9:case10:x=3;break;case1:case2:case7:case8:x=1;break;default:x=0;}五、程序阅读题1.Yes2.*&/*只有遇到break或是switch的结束}才会跳出该层switch*/六、程序判断题1.c=(c=’A’||c=’Z’)?c-32:c+32;改成:c=(c=’A’&&c=’Z’)?c+32:c;/*小写字母比对应的大写字母的ASCII码值大32*/七、程序填空题1.题目错误!!2.u=xy?【1】;v=uz?【2】;填充为:u=xy?x:y;v=uz?u:z;八、编程题2.#includestdio.hvoidmain(){inta,b;scanf(%d%d,&a,&b);if(a100)printf(a=%d\n,a);if(b100)3printf(b=%d\n,b);if(a=100&&b=100)printf(a+b=%d\n,a+b);}5.#includestdio.hvoidmain(){longn;inta,b,c,d,e;scanf(“%ld”,&n);printf(“n=%ld\n”,n);a=n/10000;/*最高位*/b=(n-a*10000)/1000;/*千位数*/c=(n-a*10000-b*1000)/100;/*百位数*/d=(n-a*10000-b*1000-c*100)/10;/*十位数*/e=n%10;/*个位数*/if(a!=0){printf(“n=%ld是一个五位整\n”,n);printf(“每一位数字:%d%d%d%d%d\n”,a,b,c,d,e);printf(“n的反序是:%ld\n”,e*10000+d*1000+c*100+b*10+a);}elseif(b!=0){printf(“n=%ld是一个四位整\n”,n);printf(“每一位数字:%d%d%d%d\n”,b,c,d,e);printf(“n的反序是:%ld\n”,e*1000+d*100+c*10+b);}elseif(c!=0){printf(“n=%ld是一个三位整\n”,n);printf(“每一位数字:%d%d%d\n”,c,d,e);printf(“n的反序是:%ld\n”,e*100+d*10+c);}elseif(d!=0){printf(“n=%ld是一个二位整\n”,n);printf(“每一位数字:%d%d\n”,d,e);printf(“n的反序是:%ld\n”,e*10+d);}else{printf(“n=%ld是一个一位整\n”,n);printf(“每一位数字:%d\n”,d);printf(“n的反序是:%ld\n”,e);}}第五部分循环结构一、选择题1.C/*k=0属于赋值表达式,值为0,即假*/2.C/*ABD均为求1~100的累加和,C是求2~101的累加和*/3.B/*i==0在第一次循环时不满足,即跳出循环*/5.B/*x=9时,x%3==0,即输出--x即8;然后再执行for中的--x,即x=7;不输出;x再变成6,输出--x即5,……*/6.ABCD均为死循环7.C/*abc等价于(ab)c*/8.A9.B11.B12.A13.BC14.C15.C16.B17.A18.D19.C20.A二、填空题5.20。/*-1i1等价于(-1i)1*/三、判断题1.错/*for,while,do-while可相互多层嵌套*/2.对3.错5.对6.对8.错9.错10.错四、程序阅读1.28702.2,0/*题目补充:(b--=0)改成(b--==0)*/4.365.31-16.3,1,-1,3,1,-1,8.i=6,k=410.2,3五、程序填空题1.下述程序用“碾转相除法”计算两个整数m和n的最大公约数。该方法的基本思想是计算m和n相除的余数,如4果余数为0则结束,此时的被除数就是最大公约数。否则,将除数作为新的被除数,余数作为新的除数,继续计算m和n相除的余数,判断是否为0,等等,请填(3)空使程序完整。main(){intm,n,w;scanf(“%d,%d”,&m,&n);while(n){/*当余数为0时结束循环*/w=【1】;/*填:w=m;w用来记录被除数*/m=【2】;/*填:m=n;m用来记录除数*/n=【3】;/*填:n=w%m;n用来记录余数*/}printf(“%d”,m);}/*最后得到的除数,为最大公约数*/2.下面程序的功能是输出1至100之间每位数的乘积大于每位数的和的数,请填(3)空使程序完整。main(){intn,k=1,s=0,m;for(n=1;n=100;n++){k=1;s=0;【1】;/*填:m=n;记录n值*//*对位数进行循环,当某位数为0或已经循环完所有位数时,结束循环*/while(【2】){/*填:m!=0*/k*=m%10;/*m%10获取最低位数,k记录积*/s+=m%10;/*s记录所有位数之和*/【3】;}/*填:m=m/10;使位数少1*/if(ks)printf(“%dd”,n);}}5.下面程序接受键盘上的输入,直到按↙键为止,这些字符被原样输出,但若有连续的一个以上的空格时只输出一个空格,请填(3)空使程序完整。main(){charcx,front=’\0’;while(【1】!=’\n’){/*填:(cx=getchar())读取字符*/if(cx!=’’)putchar(cx);if(cx==’’)if(【2】)/*填:front!=’’如前一个字符不为空格*/putchar(【3】);/*填:’’输出一个空格*/front=cx;}/*front用来记录前一个字符*/六、编程题1.输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。如:fqwegq4253!_==rfgs;l234#includestdio.hvoidmain(){charc;intletter=0,number=0,space=0,other=0;while((c=getchar())!='\n'){if((c='a'&&c='z')||c='A'&&c='Z')l
本文标题:C语言习题(前五章)参考答案
链接地址:https://www.777doc.com/doc-2907819 .html