![[文学]C++实用教程【郑阿奇】课后习题答案_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-5/22/2a0e6855-a3df-426b-a646-750087e4f5e0/2a0e6855-a3df-426b-a646-750087e4f5e01.gif)
![[文学]C++实用教程【郑阿奇】课后习题答案_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-5/22/2a0e6855-a3df-426b-a646-750087e4f5e0/2a0e6855-a3df-426b-a646-750087e4f5e02.gif)
![[文学]C++实用教程【郑阿奇】课后习题答案_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-5/22/2a0e6855-a3df-426b-a646-750087e4f5e0/2a0e6855-a3df-426b-a646-750087e4f5e03.gif)
![[文学]C++实用教程【郑阿奇】课后习题答案_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-5/22/2a0e6855-a3df-426b-a646-750087e4f5e0/2a0e6855-a3df-426b-a646-750087e4f5e04.gif)
![[文学]C++实用教程【郑阿奇】课后习题答案_第5页](http://file2.renrendoc.com/fileroot_temp3/2021-5/22/2a0e6855-a3df-426b-a646-750087e4f5e0/2a0e6855-a3df-426b-a646-750087e4f5e05.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一章_c+概述1. c+语言的标准有哪些?它有哪些编程方法?结构化程序设计的结构有哪些?答案:标准:c+国际标准iso/iec 14882:1998,常被称为c+98、标准c+或ansi/iso c+;c+标准第二版(iso/iec 14882:2003)。 3种编程方法:以c语言为子集的结构化程序设计模式、以类为核心的面向对象程序设计模式以及以模版为机制的通用编程模式。 结构化程序设计的结构:顺序结构、选择结构和循环结构。2. 面向对象的程序设计有3个主要特征,他们分别是什么?试举例说明。答案:3个主要特征:封装、继承和多态。 封装:封装是将数据和代码捆绑到一起,避免了外界的干扰和不确定性
2、。例如c+中的类,它定义了该集合中每个对象所共有的属性和方法。 继承:继承是让某个类型的对象获得另一个类型的对象的特征。例如:c+中子类对父类的继承,子类具有父类的特性,同时还可以拥有自己的新特性。 多态:多态是指不同类型的对象接收相同的消息时产生不同的行为。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减小代码的复杂度。例如函数的重载。3. c+是以编译方式实现的高级语言,它的编译过程可分为3个子过程,它们分别是什么?答案:创建、编译和连接。4. 参照本章示例,编写1个c+程序:输入圆的半径,输出其周长。答案:#include using namespace std;i
3、nt main() double r, area; coutr; area=2*3.14159*r; cout圆的周长为:arean; return 0;第二章 数据类型和基本输入/输出1. 下列常量表示在c+中是否合法?若不合法,指出原因;若合法,指出常量的数据类型。答案:32767:合法,int 35u:合法,无符号整形 1.25e3.4:不合法,e后面的数字必须是整数 3l:合法,长整形 0.0086e-32:合法,实数 87:不合法,八进制数中不应该出现8 “computer system”:合法,字符串 “a”:合法,字符串 a:合法,字符 9645:不合法,96 45分别为字符类型
4、 .5:合法,double2. 字符常量与字符串常量有什么区别?指出下列哪些表示字符?哪些表示字符串?哪些既不表示字符也不表示字符串?0x66 china “中国” “8.42” 0x33 56.34 “nt0x34” r 8.34 “0x33” 0答案:字符: , 0, r 字符串:“中国”, “8.42”, “nt0x34”, “0x33” 非字符亦非字符串:0x66, china,0x33,56.34, 8.343. 定义两个变量a和b,初值分别为8和10,若要a和b的值互换,即a为10,b为8,如何实现(可用另外一个变量t作为过渡)?如不用中间变量又如何实现?答案:用变量temp作为过
5、渡#include using namespace std;int main() int a=8,b=10; int temp; temp=a; a=b; b=temp; couta: a, b: bendl; return 0;不用中间变量方法一:#include using namespace std;int main() int a=8,b=10; a=ab; b=ba; a=ab; couta: a, b: bendl; return 0;不用中间变量方法二:#include using namespace std;int main() int a=8,b=10; couta: a,
6、b: bendl; a=a+b;b=a-b;a=a-b; couta: a, b: bendl; return 0;4. 用enum定义4个枚举常量flase、false、true、true,使其值分别等于bool类型中的false、false、true、true。想一想这样做的好处是什么?若使用const来定义,则如何进行?并比较这两种定义的优缺点。答案:enum false=false,false=false,true=true,true=true; 好处:因为vc+中对大小写是敏感的,为了防止用户输入中大小写出错的情况,所以分别又定义了表示true和false的两种形式。const bo
7、ol false=false; const bool false=false;const bool true=true;const bool true=true;优缺点:用enum一次可以定义多个整型标识符变量,而const定义的标识符常量由其数据类型决定; 另外,用const定义看不出其关联性。5. 用const常量代替圆周率3.1415926,分别输入半径40和928.335,求圆面积。要求先输出圆周率和半径,再输出其面积。答案:#include using namespace std;const double pi=3.1415926;int main() double radius1=
8、40,radius2=928.335; double area1,area2; area1=pi*radius1*radius1; area2=pi*radius2*radius2; cout圆周率: pi, 半径: radius1, 面积: area1endl; cout圆周率: pi, 半径: radius2, 面积: area2endl; return 0;6. 设学生人数是一个常数50,编程输出下列结果(双引号也要输出):“how many students in your class?”“50”答案:#include using namespace std;const int std
9、no=50;int main() couthow many students in your class?; coutendl; cout stdno c1c2c3;若在执行过程中,输入:a b c则cin执行后,c1、c2、c3的值分别是什么?若输入:abcdef则cin执行后,c1、c2、c3的值又分别是什么?答案:输入a b c后,c1的值为 , c2的值为a , c3的值为 输入abcdef后,c1的值为 a , c2的值为b , c3的值为 c8. 设有语句:int a, b, c;cinhexaoctbdecc;couthexatoctbtdecc;若在执行过程中,输入:12 12
10、 12指出cin执行后,a、b、c的值分别是什么?输出的结果是什么?答案:输出结果是:1212 12 a、b、c的值分别是18,10和12第三章 运算符和表达式1. 将下列代数式写成c+的表达式:(1)=sqrt(pow(sin(x),2.5)(2)=(a+b)*h)/(2*m)(3)=exp(x*x)/sqrt(2*3.1415926)2. 求出下列算数表达式的值:(1) 5+7/3*4=13(2) 23.5+9/5+0.5=25.0(3) 8+2*9/2=17(4) a +23=97+23=120(5) 设x=2.5,y=4.7,a=7x+a%3*(int)(x+y)%2/4 =2.5+1
11、*int(7.2)%2/4=2.5+7%2/4=2.5+1/4=2.5(6) 设x=3.5,y=2.5,a=2,b=3(float)(a+b)/2-(int)x%(int)y=2.5-1=1.5(7) 设x=8a+x%3+5/2-24=97+2+2-20=813. 在下列表达式中,哪些是合法的赋值表达式?哪些不是?为什么?(a,b,c,x,y都是已定义的int 型变量)(1) a=b=4.5+7.8 是(2) c=3.5+4.5=x=y=7.9 不是,因为4.5是常量不能作为左值(3) x=(y=4.5)*45 是(4) a=x+=+y 不是,x+不能作为左值4. 写出下面表达式运算后a的值,
12、设原来的a都是10.(1) a+=a a=a+a=20(2) a%=(7%2) a=a%(7%2)=10%1=0(3) a*=3+4 a=a*(3+4)=70(4) a/=a+a a=a/(a+a)=10/20=0(5) a-=a a=a-a=0(6) a+=a-=a*=a a+=a-=100 =a+=0 =a=05. 设m,n的值分别为10,8,指出下列表达式运算后a,b,c,和d的值。(1) a=m+ + n+=10+8=18(2)b=m+ + +n=10+9=19(3)c=+m + +n=11+9=20(4)d=m- + n+=10+8=186. 设a,b,c的值分别为5,8,9;指出下
13、列表达式运算后x ,y和z 的值(1) y=(a+b,c+a)=(13,14)=14(2) x=y=a,z=a+b x=5 y=5 z=13(3) y=(x=a*b , x+x , x*x)=(x=40,80,1600)=1600 x=40(4) x=(y=a ,z=a+b)=(y=5,z=13)=13 y=5 z=137. 设有变量:float x, y;int a ,b;指出运算下列表达式后x , y, a和b的值。(1)x=a=3.523x=3 y为null a=3 b为null (2)a= x =3.523x=3.523 y为null a=3 b为null(3)x=a=y=3.523x
14、=3.0 y=3.532 a=3 b为null(4) b=x=(a=25,15/2)x=7.5 y为null a=25 b=78. 若有char x=15;使得x的第0位(即二进制位的最右边的那一位,或称最低位)为0,其余位保持不变的赋值表达式是什么?x=x & 1 (其中1是由即pow(2,0)算出来的)9. 用sizeof 运算符编写一段测试程序,测试本机中各基本数据类型或字符串所占的字节数,并将其填写到下表中,然后分析其结果。基本数据类型所占字节数基本数据类型或字符串所占字节数char1float4short2double8int4long double8long4“nchtv0ina”
15、10#includeusing namespace std;int main()cout char类型所占字节数为 sizeof(char)n;cout short类型所占字节数为 sizeof(short)n;cout int类型所占字节数为 sizeof(int)n;cout long类型所占字节数为 sizeof(long)n;cout float类型所占字节数为 sizeof(float)n;cout double类型所占字节数为 sizeof(double)n;cout long double类型所占字节数为 sizeof(long double)n;cout字符nchtv0ina所
16、占字节数为 sizeof(nchtv0ina)n;return 0;10. 从键盘输入一个三位数,从左到右用a,b,c表示各位的数字,记为abc.现要求依次输出从右到左的各位数字,即输出另外三位数cba。试设计程序。#includeusing namespace std;int main() int n ,a , b , c , m; /n为输入的三位数,m为需要输出的三位数coutn;if(n=000)c=n%10;b=(n/10)%10;a=(n/10)/10)%10; m=c*100+b*10+a;cout数字n的逆序为mendl;else cout输入不正确c&b=c 75&4=5tr
17、ue & false f(2) a|b+c&bc 3|9&453|9&f 3|f t|f t(3) !a|!c|bf|f|4t(4) a*b&c+a15&8t 2. 设a,b,c的值分别是15,18,19,指出下列表达式运算后x,y,a,b,c的值(1) x=ab&c+表达式运算:y=f&c+=f 此时 y=f ,a=15,b=18,c=19(3) x=a+bc&c+表达式运算:x=3319&c+=t 此时 x=t.a=15,b=18,c=20(4) y=a|b+|c+ 表达式运算:y=t|b+|c+=t 此时 y=t,a=15,b=18,c=193. 输入三个整数a,b,c要求按照从小到大的
18、顺序输出方法一:#include using namespace std;int main() int a,b,c,temp; cout请输入三个整数:abc; if(ab) /*如果ab,交换a与b的值*/ temp=a; a=b; b=temp; if(ac) /*如果ac,交换a与c的值*/ temp=a; a=c; c=temp; if(bc) /*如果bc,交换b与c的值*/temp=b; b=c; c=temp; cout这三个数从小到大的排列为endl; couta=aendl; coutb=bendl; coutc=cendl; return 0;方法二:#include us
19、ing namespace std;int main()int a,b,c,temp;cout请输入三个整数:abc;if(ab) /*如果ab,交换a与b的值*/ temp=a; a=b;b=temp; if(bc) /*如果ac,交换a与c的值*/ temp=b; b=c; c=temp; if(ab) /*如果bc,交换b与c的值*/ temp=a; a=b; b=temp; cout这三个数从小到大的排列为endl;couta=aendlb=bendlc=cendl;return 0;4. 有一个数学函数 写一个程序,输入x,输出y.#include using namespace s
20、td;int main()int x,y;coutx;if(x=10) y=x-1; else if(x1) y=2*x+2;else y=3*x*x+3*x-1; couty的值为yendl; return 0;5. 给出一个百分制的成绩,要求输出成绩为a,b,c,d.其中,85分以上为a,7584分为b,6574分为c,65分以下为d。#include using namespace std;int main() float fscore; coutfscore; if( fscore100|fscore0) cout输入的分数无效=85) couta=75) coutb=65) cout
21、cendl; else coutdendl; return 0;6. 选(d)7. 求下列循环次数(1) for(int i=0,x=0;!x&i=5;i+) 循环了6次(2) while(int i=0)i-; 循环了0次(3) int i=5;do couti-endl; i-; while(i!=0); 循环了无数次8. 编程求100以内被7或5 整除的最大自然数#include using namespace std;int main() int max; for(int i=1;i=100;i+) if(i%5=0|i%7=0) max=i; cout这个最大的自然数是maxendl
22、;return 0;9. 分析下列程序的输出结果(1) x=5,y=4,z=1(2) k=4(3) # 10. fibonacci数列中的前两个数是1和1,从第三个数开始,每个数等于前两个数之和。编程计算并输出次数列中的前30个数 。 #include#includeusing namespace std;int main()int sum=0 ,a=1,b=1;for(int i=1;i=6;i+) for(int j=1;j=5;j+) if(i=1&j=2) coutsetw(7)1,; else sum=a+b; coutsetw(7)sum,; a=b; b=sum; coutend
23、l; return 0; 11. 编程求n!,即#include#includeusing namespace std;int main()int n,m=1;coutn;for(int i=0;i=1;n-) m*=n; */ m*=(n-i);cout n的阶乘为mendl; return 0;12. 从键盘上输入一个整数n的值,按下式求出y 的值,并输出n和y 的值(y用浮点数表示) y=1!+2!+3!+n!方法一: #include#includeusing namespace std;int main()int n,y=0,m=1;coutn;for(int j=0;jn;j+)f
24、or(int i=0;in-j-1;i+)m*=(n-i-j);y+=m;m=1;cout y的值为yendl;return 0; 方法二:#includeusing namespace std;int main()int n,m=1;double y=0.0;coutn;for(int i=1;i=n;i+)m*=i; y+=m;cout y的值为yendl; return 0;13. 用泰勒级数求e的近似值,直到最后一项小于 为止。 方法一:#include#includeusing namespace std;int main()double e=0.0,m=1;int n=1;do m
25、=m*(m+1); n+;while(m10*10*10*10*10*10); for(int j=0;jn;j+)m=1.0;for(int i=0;in-j-1;i+)m*=(n-i-j);e+=(1.0/m);cout e的值为e+1endl; return 0;方法二:#includeusing namespace std; int main()double e=0.0, m;int i=1,n=1;dom=1.0/n;i+;n*=i;e+=m;while(m=1.0e-6);cout e的值为e+1endl; return 0;14. 设计一个程序,输出所有的水仙花数。所谓水仙花就是
26、一个三位的整数,其各位数字的立方和等于该数本身。#includeusing namespace std;int main()int n=100,a ,b,c; /a 为三位数的个位,b为三位数的十位,c为三位数的百位while(n=999)a=n%10;b=(n/10)%10;c=n/100;if(a*a*a+b*b*b+c*c*c=n)coutnendl;n+; return 0;15. 设计一个程序,输入一个4位整数,将各位数字分开,并按其反序输出。要求必须用循环语句。#includeusing namespace std;int main()int n,a ; coutn;if(1000
27、=n & n=9999) cout这个四位数的反序为:;for(int i=1;i=4;i+) a=n%10; n=n/10; couta; else cout输入不正确endl;coutendl;return 0;16. 求的近似值的公式为其中,n=1,2,3,设计一个程序,求出n=1000时的近似值。#includeusing namespace std;int main()int n=1000;double pi,p=1.0;for(n=1000;n=1;n-) p=p*(2.0*n/(2.0*n-1)*(2.0*n/(2.0*n+1); pi=p*2;coutpiendl; retur
28、n 0;17. 用迭代法求x=。其中公式如下:要求前后两次求出的x的差的绝对值小于。#include #include using namespace std;int main()double a;const double epstlon = 1e-5;couta;double xnew=a;double xold;do xold = xnew; xnew = (xold + a/xold)/2;while(fabs(xnew - xold) = epstlon);cout它的平方根是:xnewendl;return 0;18. 打印下列菱形图案。#include using namespac
29、e std;int main() int i,j,num=7; for(i=0;inum/2;i+) /以中间为线,生成上半部 for(j=0;j(num-i*2)/2);j+) cout ; for(j=0;ji*2+1;j+) cout*; coutendl; for(i=0;inum;i+) /生成中间的线 cout*; cout=0;i-) /以中间为线,生成下半部 for(j=0;j(num-i*2)/2);j+) cout ; for(j=0;ji*2+1;j+) cout*; coutendl; return 0; 第五章_函数1. 设计一个函数,要求输入三个整数,求其最大数。编
30、写完整的程序并测试。#includeusing namespace std;int getmax();int main()int max=getmax();coutthe max number is: maxendl; return 0;int getmax()int c1,c2,c3;int max;coutc1c2c3;max=c1;if(maxc2) max=c2;if(maxc3) max=c3;return max;2. 设计一个程序,输入一个十进制数,输出相应的十六进制数。设计一个函数实现数制转换。#includeusing namespace std;void gethex(in
31、t dec);void convert(int dec);int main()int dec;coutdec;cout对应的16进制数为:;gethex(dec);coutendl; return 0;void gethex(int dec)if(dec=15)convert(dec);elsegethex(dec/16); gethex(dec%16);void convert(int dec)switch(dec) case 10: couta; break; case 11: coutb; break; case 12: coutc; break; case 13: coutd; bre
32、ak; case 14: coute; break; case 15: coutf; break; default: coutdec;3. 编写一个函数,将华氏温度(f)转化成摄氏温度(c),转换公式为c=(5/9)(f-32)#includeusing namespace std;double getc(double f);int main()double f,c;coutf;cout对应的摄氏温度(c)为:;c=getc(f);coutcendl; return 0;double getc(double f)double c;c=(5.0/9)*(f-32);return c;4. 设计一
33、个程序通过重载求两个数中最大数的函数max(),分别实现求两个实数和两个整数及两个字符的最大者。方法一:#includeusing namespace std;void getmax(double d1,double d2);void getmax(int i1,int i2);void getmax(char c1,char c2);int main()getmax(1.2,2.3);getmax(3,3);getmax(a,b); return 0;void getmax(double d1,double d2)coutd1和d2两数中最大者为;if(d1d2)coutd2endl;els
34、ecoutd1endl;void getmax(int i1,int i2)couti1和i2两数中最大者为;if(i1i2)couti2endl;elsecouti1endl;void getmax(char c1,char c2)coutc1和c2两字符中最大者为;if(c1c2)coutc2endl;elsecoutc1endl;方法二:#includeusing namespace std;double getmax(double d1,double d2);int getmax(int i1,int i2);char getmax(char c1,char c2);int main(
35、) coutgetmax(1.2,2.3); coutgetmax(3,3); coutd2?d1:d2; return max;int getmax(int i1,int i2) int max=i1i2?i1:i2; return max;char getmax(char c1,char c2) char max=c1c2?c1:c2; return max;5. 设计一个程序,通过重载求两个整数、三个整数和四个整数的最小值。#includeusing namespace std;void getmin(int i1,int i2);void getmin(int i1,int i2,in
36、t i3);void getmin(int i1,int i2,int i3,int i4);int main()getmin(3,5);getmin(4,5,5);getmin(34,45,89,78); return 0;void getmin(int i1,int i2)couti1和i2两数中最小值为;if(i1i2)couti1endl;elsecouti2endl;void getmin(int i1,int i2,int i3)couti1,i2和i3i2) min=i2;if(mini3) min=i3;coutminendl;void getmin(int i1,int i2
37、,int i3,int i4)couti1,i2,i3和i4i2) min1=i2;if(i3i4) min2=i4;if(min1min2) min=min2;else min=min1;coutminendl;6. 设计一个程序,通过重载实现两个整数、两个实数和两个复数的加、减运算。#includeusing namespace std;void operation(double d1,double d2);void operation(int i1,int i2);void operation(double real1,double ima1,double real2,double im
38、a2);int main()operation(100.2,90.3);operation(34,45);operation(6,8,1,5); return 0;void operation(double d1,double d2)double sum,result;sum=d1+d2;result=d1-d2;coutd1+d2=sumendl;coutd1-d2=resultendl;coutendl;void operation(int i1,int i2)int sum,result;sum=i1+i2;result=i1-i2;couti1+i2=sumendl;couti1-i2
39、=resultendl;coutendl;void operation(double real1,double ima1,double real2,double ima2)double real=real1+real2;double ima=ima1+ima2;cout(real1+ima1i)+(real2+ima2i)=real+imaiendl; real=real1-real2;ima=ima1-ima2;cout(real1+ima1i)-(real2+ima2i)=real+imaiendl;coutendl;7. 编程求下式的值,其中用函数实现,且设参数n的默认值为2。 n=1,
40、2,3#include#includeusing namespace std;int getresult(int n);int main()int result;result=getresult(2);coutresultendl; return 0;int getresult(int n) /递归方法int result=0;for(int i=1;i=10;i+)result+=pow(n,i);return result;8. hermite多项式#includeusing namespace std;double hermite(double x,int n);int main()do
41、uble x;int n;cout1)和整数n(n=0):;cinxn;coutendl;if(x=1|n0)cout输入数字无效!endl;elsefor(int i=0;i=n;i+)couthermite(x,i)=hermite(x,i)1)h=2*x*hermite(x,n-1)-2*(n-1)*hermite(x,n-2);return h;double hermite(double x,int n) /非递归方法求hermite多项式 double h0=1,h1=2*x,h=0;int i=1;if(n=0) h=1; if(n=1) h=2*x;if(n1) while(in) h=2*x*h1-2*i*h0;h0=h1; h1=h; i+; return h; 9. 阿克曼函数#includeusing
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广告字施工合同样本模板3篇
- 意向金合同模板3篇
- 展览布展工程招标指南3篇
- 工程勘察招标文件编写范本3篇
- 合作协议范本汇编3篇
- 保证书模板保证策略3篇
- 交易委托授权书3篇
- 借读生学业保障书3篇
- 户口登记授权书3篇
- 公司年度工作报告工作计划(万能模板20篇)
- 2024吉林省民航机场集团有限公司招聘笔试参考题库附带答案详解
- 电磁现象及其应用-理解电磁现象及其在日常生活中的应用
- 车辆行驶安全培训模板
- 开展中医药健康文化宣传活动方案(样式)
- 油漆涂料行业市场分析
- 呼吸道合胞病毒知识科普
- 跨境数据流动与治理
- 输血治疗知情同意书
- 幼儿园副园长聘任园长合同(36篇)
- 30道中国石油天然气地球物理勘探工程师岗位常见面试问题含HR常问问题考察点及参考回答
- 高级焊工实操
评论
0/150
提交评论