C语言部分习题参考答案
第4章 数据类型及表达式
4.1若a,b为整型变量,则下列表达式正确的是那些?
a=-21 正确 a=-0123 正确 以0开头的是八进制整型常量 a=0×12ab 错误十六进制整型常量以0x开头 b=a 正确 a必须先有确定的值
a=b+a=3 错误 a=b+a=3 等价于 a=(b+a)=3 等价于 a=((b+a)=3) b=a=3 正确 b=a=3 等价于b=(a=3) 4.2 写出下列整型数据在内存中的存储形式。(用十六进制表示) 15 0xf -32760 0x8008 127 0x7f -32768 0x8000 -128 0xff80 3487 0xd9f 4.3下列那些是合法的单字符常量? 合法单个字符常量:(1)直接形式:例‘A’;(2)八进制 ‘\\ddd’;(3) 十六进制 ‘\\xhh’;(4)转义字符:以‘\\’开头。
‘A’合法; ‘\\084’不合法; 八进制中无“8”这个数码 ‘\\x34’,‘\\n’合法; ‘\\m’ 不合法; “0”不合法;“0”为字符串 ‘ab’不合法;单引号内为两个字符 ‘\\t’合法。 4.4设有如下的数据描述: int a=4,b=5; float x=65.789;
char c1='A',c2='\\375';
(1) a*100+b*10+2 => 4*100+5*10+2 => 452
(2) c1*(a=x) => 65*(a=x) => 65*65 => 4225 其中:x为float,需转化为int,舍弃小数点,表
达式的值等于a的值
(3) b/a+(int)(x+a)á => 1+(int)69.789á => 1+69e => 1+4 =>5 (4) c1? => 65%(-3) => 2
(5) a+=a-=a%=a 等价于 a+=(a-=(a%=a))等价于 a+=(a-=0)等价于 a+=0 等价
于 a=a+0 等价于 0 a为0,表达式为0 (6) (a*=b,a*2),a+6 等价于 (a=a*b,a*2),a+6 等价于 (a=20,a*2),a+6 等
价于 (a=20,40),a+6 等价于 40,a+6 等价于 表达式的值为26 ,a为20 4.5 结果为:9,11
4.6 (1)(x*x+y*y)/(x-y),v*t+1/2.0*a*t*t
(2) 3.14*R*R,3/4.0*3.14*R*R*R (3) 2*(a+b),(a+b+c)/3.0,8*x+7*y+5*(12-x-y) (4) sin(x+0.5)*sin(x+0.5)+3*cos(2*x+4)+atan(x) 4.8
(1) 赋值表达式的值:4;c=4,a=4;
(2) 赋值表达式的值:65533;d=65533,b=-3; (3) 赋值表达式的值:‘.’;b=-3,c2=‘.’; (4) 赋值表达式的值:‘>’;c1=‘>’,c2=‘z’; (5) 赋值表达式的值:‘A’;c1=‘A’,x=65.789; (6) 赋值表达式的值:65533,d=65533,c2=‘z’; (7) 赋值表达式的值:1;a=1,b=-3。
1
第5章 顺序结构程序设计
5.2 D 5.3 B B 5.4 B 5.5 A 5.6以下程序的输出结果为:
i:dec=-4,oct=177774,hex=fffc,unsigned=65532 5.9正确的数据输入形式是:
a=3 b=7x=8.5 y=71.82c1=A c2=a↓ 5-11 编程题:
(1)输入一个三位数,将它反向输出,例如输入258,输出852。
输入a(三位数)bai=a/100shi=a/10ge=ab=bai+shi*10+ge*100N-S流程图:输出b 源程序参考:main()
{ int a,b,ge,shi,bai;
printf(\ scanf(\ bai=a/100; shi=a/10; ge=a;
b=bai+shi*10+ge*100; printf(\}
(2)根据圆柱体的高和半径,求圆柱体的表面积和体积。
输入r,hs=2πr2+2πrhv=πr2hN-S流程图参考:输出s,v
源程序参考:#define PI 3.14
main()
{ float r,h,s,v;
printf(\ scanf(\ s=2*PI*r*r+2*PI*r*h; v=PI*r*r*h;
printf(\}
2
第6章 选择结构程序设计
6.1 (1)D (2)B (3)D (4)B (5)B (6)B 6.2 (1)3,3,3,3
(2)x:y u=z (3)0.600000 (4)**1**
**3**
(5) c= =t t
/*6.5*/
输入a,b1 0 a2+b2>100 c=(a*a+b*b)/100 c=a+b输出c
main() { int a,b,c;
printf(\ scanf(\
if(a*a+b*b>100) c=(a*a+b*b)/100; else c=a+b; printf(\}
/*6.4*/
main() /*方法一*/ { float a,b,c,max;
printf(\
scanf(\ max=a;
if(max
main() /*方法二*/ { float a,b,c,max;
printf(\
scanf(\ max=a
输入a,b,c max=a; max
main() /*方法三*/ { float a,b,c,max;
printf(\
scanf(\ if(a>b) max=a; else max=b; if(max 输入a,b,c a max=a max #include \main() { float x,y; printf(\ scanf(\ if(x<3) y=2*x*x*x+3*x+5; else if(x<6) y=pow((x-3)/(x+5),3); else y= sqrt(x+2*sin(3*x)); printf(\} 输入x Y x<3 N Y y=2x3+3x+5 x< 6 N 3?x?3? y????x?5? y?x?2sin3x 输出y /*6.7*/ main() {int x,flag; printf(\ scanf(\ flag=0; if(x%3= =0) flag=flag+3; if(x%5= =0) flag=flag+5; if(x%7= =0) flag=flag+7; switch(flag) { case 0: printf(\不能被3,5,7任一个整除\\n\ break; case 3: printf(\能被3整除\\n\ break; case 5: printf(\能被5整除\\n\ break; case 7: printf(\能被7整除\\n\ break; case 8: printf(\能被3,5整除\\n\ break; case 10: printf(\能被3,7整除\\n\ break; case 12: printf(\能被5,7整除\\n\ break; case 15: printf(\能被3,5,7整除\\n\ break; } } 4