您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C++程序设计(第二版_吴乃陵_况迎辉)课后答案
第一章C++基础知识习题1第一章C++基础知识习题1.1判断下列标识符的合法性。sinbook5arry_nameExample2.1main$1class_cppa3x*ymyname答:合法的:sinbook_namemainclass_cppa3非法的:5arryExample2.1$1x*ymyname1.2假定有下列变量:inta=3,b=5,c=0;floatx=2.5,y=8.2,z=1.4;charch1=’a’,ch2=’5’,ch3=’0’,ch4;求下列表达式的值,以及运算后表达式所涉及的各变量的值。x+(int)y%ax=z*b++,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=(a2)/(b1)答: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等于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,即false,所以其右的所有运算不再做。ch3||(b+=a*c)||c++表达式值为:1。运算后b为5,c为0,均不变。提示:只要出现一个true,右边不再做。ch3的值为48。z=(a2)/(b1)表达式值为:6。运算后a与b的值不变仍为3和5。提示:a的数值为(00000011)2,左移2位为(00001100)2即12,相当整数2两次,而b的数值为(00000101)2,右移1位为(00000010)2,即2,相当于整除2。1.3判断下列哪些是常量,哪些是变量。Chinaconstintn=10;intm=5;'a'charch='a'intarray[5]={1,2,3,4,5};chars[]=Hello;答:China文字常量constintn=10;常变量intm=5;变量'a'文字常量1第一章C++基础知识习题2charch='a'变量intarray[5]={1,2,3,4,5};变量chars[]=Hello;变量1.4将下列算式或叙述用C++表达式描述。(2)(x+y)/((x-y)*ay)(3)位于原点为圆心,a,b为半径的圆环中的点坐标。(4)。(5)并且字符ch不为'\0'。答:pi/2+sqrt(asin(x)*asin(x)+c*c)(x+y)/((x-y)*pow(a,y))((x*x+y*y)=a*a)&&((x*x+y*y)=b*b)(a!=b)&&(a!=c)&&(b!=c)(k=20)&&(ch!='\0')1.6设有语句:inta,b;floatx,y;ncharch1,ch2,ch3;cinabxych1;ch2=cin.get();cinch3;若从键盘输入:321.87abc执行后各变量取值如何?注意abc三字符两两间有空格。答:a是3,b是2,x是1.8,y是7,ch1是’a’,ch2是空格,ch3是’b’。1.7设有语句:inta,b,c,d;cinoctabhexcdecd;若从键盘输入:23232323执行后各变量的值用十进制表示各是多少?答:a:19,b:19,c:35,d:231.8对于习题1.7,若执行:couta′\t′hexb′\t′octcendl;显示结果是什么?答:190x130432第二章基本控制结构程序设计习题一.基本概念与基础知识自测题3.1程序阅读题3.1.1设有说明:inta=3,b=100;下面的循环语句执行(1)次,执行后a、b的值分别为(2)、(3)。while(b/a5){if(b-a25)a++;elseb/=a;}解答:本题检查学生整除的概念。跟踪:a3b100b/a33循环次数1b-a974100252965…100…20…3…95…15100613851610061484171005停(1)14(2)17(3)1003.1.2设有说明:intn,x,k,y;下面程序段的功能是备选答案中的(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)2n2nC.y=(1+x)n2nD.y=(1+x)22n+1第二章基本控制结构程序设计习题2解答:第一个循环使x成为:x2n(1)B;y成为:1+x2n;第一个循环使y成为:(1+x)2n;2n考虑整除,x2n(2)1连除4次以后为零,所以:3.1.3请看如下程序段:if(num==1)cout”Alpha”;elseif(num==2)cout”Bata”;elseif(num==3)cout”Gamma”;elsecout”Delta”;当num的值分别为1、2、3时,上面程序段的输出分别为(1)、(2)、(3)。解答:检查条件语句与字符串输出概念:(1)Alpha(2)Bata(3)Gamma3.1.4执行下面程序段后,m和k的值分别为(1)、(2)。intm,k;for(k=1,m=0;k=50;k++){if(m=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+bx+c=0的根。包括以下判断和结果:若输入a=0,给出提示;第二章基本控制结构程序设计习题3若Δ0,输出两个不等实根;若Δ=0,输出两个相等实根;若Δ0,输出两个复数根。解:本题以一个绝对值极小的数作为实数0。#includeiostream.h#includemath.h#includestdlib.hvoidmain(){doublea,b,c;doubledelta,x1,x2;constdoublezero=1e-9;//定义一个很小的常数intsign;cout输入三个系数a(a!=0),b,c:endl;cinabc;if(fabs(a)zero){cout二次项系数为0,方程根是-c/b;exit(0);}couta=a'\t'b=b'\t'c=cendl;delta=b*b-4*a*c;if(fabs(delta)zero){//绝对值很小的数即被认为是0cout方程有两个相同实根:;coutx1=x2=-b/(2*a)endl;}else{if(delta0)sign=1;elsesign=0;delta=sqrt(fabs(delta));x1=-b/(2*a);x2=delta/(2*a);if(sign){cout方程有两个不同实根:;coutx1=x1+x2'\t'x2=x1-x2endl;}else{//delta0cout方程无实根!有两个不同复数根:;coutx1=x1+ix2'\t'x2=x1-ix2endl;}}}3.3设计程序将输入的百分制成绩转换为五分制输出,90分以上为5分,80∼89分为4分,70∼79分为3分,60∼69分为2分,60分以下为1分。解:10分一档用10进行整除获得,转换用开关语句实行。第二章基本控制结构程序设计习题4#includeiostream.hvoidmain(){intmark,result;//mark是百分制成绩,result是5分制cout请输入百分制成绩:endl;cinmark;if(mark0){cout缺考!endl;return;}switch(mark/10){case9:case10:result=5;cout输出五分制成绩:resultendl;break;case8:result=4;cout输出五分制成绩:resultendl;break;case7:result=3;cout输出五分制成绩:resultendl;break;case6:result=2;cout输出五分制成绩:resultendl;break;case5:case4:case3:case2:case1:case0:result=1;cout输出五分制成绩:resultendl;break;default:cout输入错误!endl;}}3.4编程打印如下图形:*************************解:难点在三角形左边的空格的控制,嵌套一个循环语句完成此任务。第二章基本控制结构程序设计习题5#includeiostream.hvoidmain(){inti,j;for(i=1;i=4;i++){for(j=4-i;j0;j--)//三角形每行前部的空格cout;for(j=1;j=2*i-1;j++)cout*;coutendl;}for(i=1;i=3;i++)cout***\n;}3.5编程输出下列图形,中间一行英文字母由输入得到。ABBBCCCCCDDDDDDDCCCCCBBBA解:分上三角和下三角两部分分别处理左边的空格。#includeiostream.hvoidmain(){charin;inti,j;do{cout输入一个字母:;cinin;if((in=97)&&(in=122))in-=32;//小写改大写}while((in65)||(in90));intline=in-'A';for(i=0;i=line;i++){//上三角for(j=line-i;j0;j--)cout;//前方空格for(j=1;j=2*i+1;j++)cout''char(i+'A');coutendl;}for(i=line;i0;i--){//下三角(少一行)for(j=0;j=line-i;j++)cout;for(j=1;j=2*i-1;j++)cout''char(i-1+'A');第二章基本控制结构程序设计习题6coutendl;}}3.6输入n,求1!+2!+3!+…+n!解:通常求和作为外循环,阶乘作为内循环。这里考虑到:n!=n*(n-1)!,利用递推法运算速度大大提高,同时两者可合并为一个循环。本程序考虑了输入的健壮性。#includeiostr
本文标题:C++程序设计(第二版_吴乃陵_况迎辉)课后答案
链接地址:https://www.777doc.com/doc-7025722 .html