《C程序设计第二版吴乃陵况迎辉课后答案.doc》由会员分享,可在线阅读,更多相关《C程序设计第二版吴乃陵况迎辉课后答案.doc(112页珍藏版)》请在金锄头文库上搜索。
1、第一章 C+基础知识习题 1第一章 C+基础知识习题1.1 判断下列标识符的合法性。sin book 5arry _name Example2.1 main$1 class_cpp a3 x*y my name答:合法的:sin book _name main class_cpp a3非法的:5arry Example2.1 $1 x*y my name1.2 假定有下列变量:int a=3,b=5,c=0;float x=2.5,y=8.2,z=1.4;char ch1=a,ch2=5,ch3=0,ch4;求下列表达式的值,以及运算后表达式所涉及的各变量的值。x+(int)y%a x=z*b
2、+,b=b*x,b+ ch4=ch3-ch2+ch1int(y/z)+(int)y/(int)z !(ab)&c&(x*=y)&b+ch3|(b+=a*c)|c+ z=(a1)答:x+(int)y%a 表达式值为:4.5,运算后x、y、a的值不变,仍分别为2.5、8.2、3。提示:运算时取出y变量的数值强制转化为整型数放入寄存器参加运算,但内存中y本身的数值不变化。只有赋值运算和自增、自减运算才改变变量本身的值x=z*b+,b=b*x,b+ 表达式值为:42,运算后x为7.0,b为43。提示:逗号表达式,依次运算,表达式的值是最后一次运算的值。后+是变量先参加运算然后变量自身加1,所以第1步x
3、等于1.4*5,即7.0,然后b增为6;第2步b赋值为42;第3步,表达式的值是上一步后b的值42,但随后b的值自增1,成为43。ch4=ch3-ch2+ch1 表达式值为:,字符外斜杠。运算后ch1、ch2、ch3值不变。提示:字符型的变量实质是范围很小的整型量。int(y/z)+(int)y/(int)z 表达式值为:13。y和z自身的值不变。提示:int(y/z)是完成实数除法后,商强制转化为整型,(int)y/(int)z则是数值先转换,完成的是整除。!(ab)&c&(x*=y)&b+ 表达式值为:0。运算后x仍为2.5,b仍为5提示:只要出现一个false右边的不再做,因为c为0,即
4、false,所以其右的所有运算不再做。ch3|(b+=a*c)|c+ 表达式值为:1。运算后b为5,c为0,均不变。提示:只要出现一个true,右边不再做。ch3的值为48。z=(a1) 表达式值为:6。运算后a与b的值不变仍为3和5。提示:a的数值为(00000011)2,左移2位为(00001100)2即12,相当整数2两次,而b的数值为(00000101)2,右移1位为(00000010)2,即2,相当于整除2。1.3 判断下列哪些是常量,哪些是变量。China const int n=10; int m=5; a char ch=aint array5=1,2,3,4,5; char
5、s=Hello;答:China 文字常量const int n=10; 常变量int m=5; 变量a 文字常量 1第一章 C+基础知识习题2char ch=a 变量int array5=1,2,3,4,5; 变量char s=Hello; 变量1.4 将下列算式或叙述用C+表达式描述。(1) 22)(arcsin2cx+p(2) (x+y)/(x-y)*ay)(3) 位于原点为圆心,a, b为半径的圆环中的点坐标。(4) 。 cba(5) 并且字符ch不为0。 20k答: pi/2+sqrt(asin(x)*asin(x)+c*c)(x+y)/(x-y)*pow(a,y)(x*x+y*y)=
6、a*a)&(x*x+y*y)=b*b)(a!=b)&(a!=c)&(b!=c)(kabxych1;ch2=cin.get();cinch3;若从键盘输入:3 2 1.8 7 a b c执行后各变量取值如何?注意abc三字符两两间有空格。答:a是3,b是2,x是1.8,y是7,ch1是a,ch2是空格,ch3是b。1.7 设有语句:int a,b,c,d;cinoctabhexcdecd;若从键盘输入:23 23 23 23执行后各变量的值用十进制表示各是多少?答:a:19,b:19,c:35,d:231.8 对于习题1.7,若执行:coutathexbtoctc5) if(b-a25) a+;
7、 else b/=a; 解答: 本题检查学生整除的概念。跟踪:a3b100b/a33循环次数1b-a9741002529651002039515100613851610061484171005停(1)14(2)17(3)1003.1.2 设有说明:int n,x,k,y;n下面程序段的功能是备选答案中的 (1) ,当n=10,x=10 打印结果是 (2) 。cinxn;k=0; do x/=2; k+;while(kn);y=1+x; k=0; do y=y*y; k+;while(kn);coutyendl;备选答案:A. y = (1 + x ) nnB. y = (1 +x ) 2n2
8、nC. y = (1 +x ) n2 nD. y = (1 +x ) 22 n +1第二章 基本控制结构程序设计习题2解答:第一个循环使 x 成为: x2 n(1)B;y 成为:1 + x2 n;第一个循环使 y 成为: (1 +x ) 2n ;2 n考虑整除, x2 n(2)1连除 4 次以后为零,所以:3.1.3 请看如下程序段:if(num=1)cout”Alpha”;else if(num=2)cout”Bata”;else if(num=3)cout”Gamma”;else cout”Delta”;当num的值分别为 1、2、3 时,上面程序段的输出分别为(1) 、(2) 、(3)
9、。 解答:检查条件语句与字符串输出概念:(1)Alpha(2)Bata(3)Gamma3.1.4 执行下面程序段后,m和k的值分别为 (1) 、 (2) 。int m,k; for(k=1,m=0;k=10) break; if(m%2=0)m+=5;continue;m-=3;解答:注意 continue 语句的使用初值m=1k=0第 1 次循环后m=5k=1第 2 次循环m=2k=2第 3 次循环m=7k=3第 4 次循环m=4k=4第 5 次循环m=9k=5第 6 次循环m=6k=6第 7 次循环m=11结束,k+未做(1)11(2)6二编程与综合练习题3.2 编程求一元二次方程 ax2
10、+bx+c=0 的根。包括以下判断和结果:若输入 a=0,给出提示;第二章 基本控制结构程序设计习题3若0,输出两个不等实根;若=0,输出两个相等实根;若0,输出两个复数根。解:本题以一个绝对值极小的数作为实数 0。#include #include #include void main()double a,b,c;double delta,x1,x2;const double zero=1e-9; /定义一个很小的常数int sign;cout输入三个系数a(a!=0), b, c:abc;if(fabs(a)zero) cout二次项系数为0,方程根是-c/b; exit(0); cout
11、a=atb=btc=cendl; delta=b*b-4*a*c; if(fabs(delta)zero)/绝对值很小的数即被认为是0cout方程有两个相同实根:;coutx1=x2=-b/(2*a)0)sign=1;elsesign=0; delta=sqrt(fabs(delta); x1=-b/(2*a); x2=delta/(2*a);if(sign) cout方程有两个不同实根:; coutx1=x1+x2tx2=x1-x2endl;else/delta0 cout方程无实根!有两个不同复数根:; coutx1=x1+ix2tx2=x1-ix2endl;3.3 设计程序将输入的百分制
12、成绩转换为五分制输出,90 分以上为 5 分,8089 分为 4 分,7079 分为 3 分,6069 分为 2 分,60 分以下为 1 分。 解:10 分一档用 10 进行整除获得,转换用开关语句实行。第二章 基本控制结构程序设计习题4#include void main()int mark,result;/mark是百分制成绩,result是5分制cout请输入百分制成绩:mark;if(mark0) cout缺考!endl; return;switch (mark/10) case 9: case 10: result=5;cout输出五分制成绩:resultendl;break;case 8: result=4; cout输出五分制成绩:resultendl; break;case 7: result=3; cout输出五分制成绩:resultendl; break