《c++程序设计》谭浩强课后习题答案_第1页
《c++程序设计》谭浩强课后习题答案_第2页
《c++程序设计》谭浩强课后习题答案_第3页
《c++程序设计》谭浩强课后习题答案_第4页
《c++程序设计》谭浩强课后习题答案_第5页
免费预览已结束,剩余54页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第一章1.5 题#include using namespace std; int main()coutThisis; coutaC+; coutprogram.; return 0;1.6 题#include using namespace std; int main()int a,b,c;a=10;b=23;c=a+b;couta+b=;coutc; coutendl;return 0;1.7 七题#include using namespace std; int main()int a,b,c;int f(int x,int y,int z); cinabc;c=f(a,b,c); co

2、utcendl;return 0;int f(int x,int y,int z)int m;if (xy) m=x;else m=y;if (zm) m=z; return(m);文档)1.8 题#include using namespace std;int main()int a,b,c;cinab;c=a+b;couta+b=a+bendl;return 0;)1.9 题#include using namespace std;int main()int a,b,c;int add(int x,int y);cinab;c=add(a,b);couta+b=cendl;return 0

3、;)int add(int x,int y)int z;z=x+y;return(z);)2.3 题#include using namespace std;int main()char c1=a,c2=b,c3=c,c4=101,c5=116;coutc1c2c3n;couttbc4tc5n;return 0;)2.4 题#include using namespace std;int main()char c1=C,c2=+,c3=+;coutI say: c1c2c3;coutttHe says: C+ is very interesting! n; return 0;2.7 题#inc

4、lude using namespace std;int main()int i,j,m,n;i=8;j=10;m=+i+j+;n=(+i)+(+j)+m;coutitjtmtnendl;return 0;2.8 题#include using namespace std;int main()char c1=C, c2=h, c3=i, c4=n, c5=a;c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;coutpassword is:c1c2c3c4c5endl;return 0;3.2 题#include #include using namespace std;int ma

5、in ( )float h,r,l,s,sq,vq,vz;const float pi=3.1415926;coutrh;l=2*pi*r;s=r*r*pi;sq=4*pi*r*r;vq=3.0/4.0*pi*r*r*r;vz=pi*r*r*h;coutsetiosflags(ios:fixed)setiosflags(ios:right)setprecision(2);coutl= setw(10)lendl;couts= setw(10)sendl;coutsq=setw(10)sqendl;coutvq=setw(10)vqendl;coutvz=setw(10)vzendl;retur

6、n 0;3.3 题#include using namespace std;int main ()float c,f;coutf;c=(5.0/9.0)*(f-32);/注意5 和 9 要用实型表示,否则 5/9 值为 0cout 摄氏温度为 :cendl;return 0;3.4 题#include using namespace std;int main ( )char c1,c2;cout 请输入两个字符c1,c2:;c1=getchar();/将输入的第一个字符赋给c1c2=getchar();/将输入的第二个字符赋给c2cout 用 putchar 函数输出结果为 :;putchar

7、(c1);putchar(c2);coutendl;cout 用 cout 语句输出结果为 :;coutc1c2endl;return 0;3.5 题另一解#include using namespace std;int main ( )char c1,c2;cout 请输入两个字符c1,c2:;c1=getchar();/将输入的第一个字符赋给c1c2=getchar();/将输入的第二个字符赋给c2cout用putchar函数输出结果为:;putchar(cl);putchar(44);putchar(c2);coutendl;cout用cout语句输出结果为:;coutc1,c2endl

8、;return 0;)3.6 题#include using namespace std;int main ()char c1,c2;int i1,i2;定义为整型couti1i2;c1=i1;c2=i2;cout按字符输出结果为:c1 , c2endl; return 0;)3.8 题#include using namespace std;int main () int a=3,b=4,c=5,x,y;coutc & b=c)endl;cout(a|b+c & b-c)endl;coutb) & !c|1)endl;cout(!(x=a) & (y=b) & 0)endl;cout(!(a

9、+b)+c-1 & b+c/2)endl;return 0;)3.9 题 include using namespace std;int main ()int a,b,c;coutabc;if(ab)if(bc)coutmax=c;else coutmax=b;else if (ac) coutmax=c;else coutmax=a;coutendl;return 0;)3.10 另一解#include using namespace std; int main ( ) int a,b,c,temp,max ;coutabc;temp=(ab)?a:b;/* 将a和b中的大者存入 temp中

10、*/maxmax=(tempc)?temp:c;/* 将a和b中的大者与 c比较,最大者存入*/coutmax=maxendl;return 0; )3.11 题#include using namespace std; int main ( )int x,y;coutx;if (x1) y=x;coutx=x, y=x=y;) else if (x10)/ 1 y 10y=2*x-1;coutx=x, y=2*x-1= 10y=3*x-11;coutx=x, y=3*x-11=y;) coutendl;return 0;3.12 题#include using namespace std;i

11、nt main ()float score;char grade;coutscore;while (score100|score0)coutscore;switch(int(score/10)case 10:case 9: grade=A;break;case 8: grade=B;break;case 7: grade=C;break;case 6: grade=D;break;default:grade=E;coutscore is score, grade is gradeendl;return 0;3.12题#include using namespace std;int main (

12、)long int num;int indiv,ten,hundred,thousand,ten_thousand,place;/* 分别代表个位,十位,百位 ,千位 ,万位和位数*/coutnum;if (num9999)place=5;else if (num999)place=4;else if (num99)place=3;else if (num9)place=2;else place=1;coutplace=placeendl;计算各位数字ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1000;hundr

13、ed=(int)(num-ten_thousand*10000-thousand*1000)/100;ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);coutoriginal order:;switch(place)case5:coutten_thousand,thousand,hundred,ten,indiven dl;coutreverse order:;coutindivt

14、enhundredthousandten_thousandendl; break;case 4:coutthousand,hundred,ten,indivendl;coutreverse order:;coutindivtenhundredthousandendl; break;case 3:couthundred,ten,indivendl;coutreverse order:;coutindivtenhundredendl;break;case 2:coutten,indivendl;coutreverse order:;coutindivtenendl;break;case 1:cou

15、tindivendl;coutreverse order:;coutindivendl;break;return 0;3.13 题#include using namespace std; int main () long i;/i为利润float bonus,bon1,bon2,bon4,bon6,bon10;bon1=100000*0.1;bon2=bon1+100000*0.075;bon4=bon2+100000*0.05;bon6=bon4+100000*0.03;利润为利润为利润为利润为10万元时的奖金20万元时的奖金40万元时的奖金60万元时的奖金/利润为 100 万元时的奖金b

16、on10=bon6+400000*0.015;couti;/利润在10万元至20 万时的奖金/利润在20 万元至40 万时的奖金/利润在40 万元至60 万时的奖金/利润在60 万元至100 万时的奖金/ 利润在 10 万元以内按10%提成奖金/利润在 100万元以上时的奖金if (i=100000) bonus=i*0.1;else if (i=200000)bonus=bon1+(i-100000)*0.075;else if (i=400000)bonus=bon2+(i-200000)*0.05;else if (i=600000)bonus=bon4+(i-400000)*0.03;

17、else if (i=1000000)bonus=bon6+(i-600000)*0.015; elsebonus=bon10+(i-1000000)*0.01;coutbonus=bonusendl; return 0;3.13 题另一解#include using namespace std; int main () long i;float bonus,bon1,bon2,bon4,bon6,bon10; int c;bon1=100000*0.1;bon2=bon1+100000*0.075;bon4=bon2+200000*0.05;bon6=bon4+200000*0.03;bon

18、10=bon6+400000*0.015;couti;c=i/100000;if (c10)c=10;switch(c)case 0: bonus=i*0.1; break;case 1: bonus=bon1+(i-100000)*0.075; break; case 2:case 3: bonus=bon2+(i-200000)*0.05;break; case 4:case 5: bonus=bon4+(i-400000)*0.03;break;case 6:case 7:case 8:case 9: bonus=bon6+(i-600000)*0.015; break;case 10:

19、 bonus=bon10+(i-1000000)*0.01;coutbonus=bonusendl;return 0;3.14 题#include using namespace std;int main ()int t,a,b,c,d;coutabcd;couta=a, b=b, c=c,d=db)t=a;a=b;b=t;if (ac)t=a; a=c; c=t;if (ad)t=a; a=d; d=t;if (bc)t=b; b=c; c=t;if (bd)t=b; b=d; d=t;if (cd)t=c; c=d; d=t;coutthe sorted sequence:endl;cou

20、ta, b, c, dendl;return 0;3.15 题#include using namespace std;int main ()int p,r,n,m,temp;coutnm;if (nm)temp=n;n=m;m=temp;把大数放在 n中,小数放在 m中p=n*m;先将n和m的乘积保存在p中,以便求最小公倍数时用while (m!=0)求n和m的最大公约数r=n%m;n=m;m=r;)coutHCF=nendl;coutLCD=p/nendl;/ p是原来两个整数的乘积return 0; )3.16 题#include using namespace std;int main

21、 ()char c;int letters=0,space=0,digit=0,other=0;coutenter one line:=a & c=A & c=0 & c=9) digit+;elseother+;)coutletter:letters, space:space, digit:digit, other:otherendl;return 0;)3.17 题#include using namespace std;int main ()int a,n,i=1,sn=0,tn=0;coutan;while (i=n)tn=tn+a;赋值后的tn为i个a组成数的值sn=sn+tn;赋值

22、后的sn为多项式前i项之和a=a*10; +i;couta+aa+aaa+.=snendl;return 0;3.18 题#include using namespace std;int main ()float s=0,t=1;int n;for (n=1;n=20;n+)t=t*n;/ 求 n!s=s+t;/ 将各项累加cout1!+2!+.+20!=sendl;return 0;3.19 题#include using namespace std;int main ()int i,j,k,n;coutnarcissus numbers are:endl;for (n=100;n1000;

23、n+)i=n/100;j=n/10-i*10;k=n%10;if (n = i*i*i + j*j*j + k*k*k) coutn ;coutendl;return 0;3.20 题#include using namespace std;int main()const int m=1000;/ 定义寻找范围int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;int i,a,n,s;for (a=2;a=m;a+)/ a 是 21000 之间的整数,检查它是否为完数n=0;/ n 用来累计 a 的因子的个数s=a;for (i=1;ia;i+) if (a%i=0)n+;s

24、=s-i;/ s 用来存放尚未求出的因子之和,开始时等于/ 检查 i 是否为 a 的因子/ 如果 i 是 a 的因子/ n 加 1 ,表示新找到一个因子/ s 减去已找到的因子, s 的新值是尚未求出的因子之和switch(n)/ 将找到的因子赋给k1,.,k10case 1:k1=i;break;/ 找出的笫1 个因子赋给k1case 2:k2=i;break;/ 找出的笫2 个因子赋给k2case 3:k3=i;break;/ 找出的笫3 个因子赋给k3case 4:k4=i;break;/ 找出的笫4 个因子赋给k4case 5:k5=i;break;/ 找出的笫5 个因子赋给k5cas

25、e 6:k6=i;break;/ 找出的笫6 个因子赋给k6case 7:k7=i;break;/ 找出的笫7 个因子赋给k7case 8:k8=i;break;/ 找出的笫8 个因子赋给k8case 9:k9=i;break;/ 找出的笫9 个因子赋给k9case 10:k10=i; break; / 找出的笫 10 个因子赋给k10if (s=0)/ s=0 表示全部因子都已找到了couta is a 完数 endl;cout1)coutk1,1 表示 a 至少有 2 个因子if (n2)cout,2表示至少有3个因子,故应再输出一个因子if (n3)cout,3表示至少有4个因子,故应再

26、输出一个因子if (n4)cout,5)cout,6)cout,7)cout,8)cout,9)cout,k10;coutendlendl;return 0;)3.20题另一解#include using namespace std;int main()int m,s,i;for (m=2;m1000;m+)s=0;for (i=1;im;i+)if (m%i)=0) s=s+i;if(s=m)coutm is a 完数endl;coutits factors are:;for (i=1;im;i+)if (m%i=0) couti;coutendl;)return 0;)3.20 题另一解#

27、include using namespace std;int main()int k11;int i,a,n,s;for (a=2;a=1000;a+)n=0;s=a;for (i=1;ia;i+)if (a%i)=0)n+;s=s-i;kn=i;/将找到的因子赋给 k1k10)if (s=0)couta is a 完数endl;coutits factors are:;for (i=1;in;i+)coutki ;coutknendl;)return 0;3.21 题#include using namespace std;int main()int i,t,n=20;double a=2

28、,b=1,s=0;for (i=1;i=n;i+)s=s+a/b;t=a;a=a+b;/ 将前一项分子与分母之和作为下一项的分子b=t;/ 将前一项的分子作为下一项的分母coutsum=sendl;return 0;3.22 题#include using namespace std;int main()int day,x1,x2;day=9;x2=1;while(day0)x1=(x2+1)*2;/ 第 1 天的桃子数是第2 天桃子数加1 后的 2 倍x2=x1;day-;couttotal=x1endl;return 0;3.23 题#include #include using name

29、space std;int main()float a,x0,x1;couta;/ 输入 a 的值x0=a/2;x1=(x0+a/x0)/2;dox0=x1;x1=(x0+a/x0)/2;)while(fabs(x0-x1)=1e-5);coutThe square root of a is x1endl;return 0;)3.24 题#include using namespace std;int main()int i,k;for (i=0;i=3;i+)for (k=0;k=2*i;k+) cout*;coutendl;)for (i=0;i=2;i+)for (k=0;k=4-2*i

30、;k+) cout*;coutendl;)return 0;)/输出上面4行*号/输出*号输出完一行*号后换行/输出下面3行*号/输出*号/输出完一行*号后换行3.25 题#include using namespace std;int main()char i,j,k;/* i是a的对手;j是b的对手;k是c的对手*/for (i=X;i=Z;i+)for (j=X;j=Z;j+) if (i!=j)for (k=X;k=Z;k+)if (i!=k & j!=k)if (i!=X & k!=X & k!=Z) coutA-iB-jC-kendl;return 0;) 4.1题#include

31、 using namespace std;int main()int hcf(int,int);int lcd(int,int,int);int u,v,h,l;cinuv;h=hcf(u,v);coutH.C.F=hendl;l=lcd(u,v,h);coutL.C.D=lu)t=u;u=v;v=t;while (r=u%v)!=0)u=v;v=r; return(v);int lcd(int u,int v,int h) return(u*v/h);4.2题#include #include using namespace std;float x1,x2,disc,p,q;int main

32、()void greater_than_zero(float,float);void equal_to_zero(float,float);void smaller_than_zero(float,float);float a,b,c;coutabc;disc=b*b-4*a*c;coutroot:0)greater_than_zero(a,b);coutx1=x1,x2=x2endl;else if (disc=0)equal_to_zero(a,b);coutx1=x1,x2=x2endl;elsesmaller_than_zero(a,b);coutx1=p+qiendl;coutx2=

33、p-qi0 时方x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);void equal_to_zero(float a,float b)的根 */x1=x2=(-b)/(2*a);/* 定义一个函数,用来求disc=0 时方程void smaller_than_zero(float a,float b)程的根 */* 定义一个函数,用来求disc0 时方p=-b/(2*a);q=sqrt(-disc)/(2*a);4.3 题#include using namespace std;int main()int prime(int);int n;cou

34、tn;if (prime(n)/*函数原型声明 */coutn is a prime.endl;elsecoutn is not a prime.endl;return 0;)int prime(int n)int flag=1,i;for (i=2;in/2 & flag=1;i+)if (n%i=0)flag=0;return(flag);)4.4 题#include using namespace std;int main()int fac(int);int a,b,c,sum=0;coutabc;sum=sum+fac(a)+fac(b)+fac(c);couta!+b!+c!=sum

35、endl;return 0;)int fac(int n)int f=1;for (int i=1;i=n;i+)f=f*i;return f;)4.5 题#include #include using namespace std;int main()double e(double);double x,sinh;coutx;sinh=(e(x)+e(-x)/2;coutsinh(x)=sinhendl;return 0;double e(double x)return exp(x);4.6 题 /牛顿迭代法#include #include using namespace std;int ma

36、in()double solut(double ,double ,double ,double );double a,b,c,d;coutabcd;coutx=solut(a,b,c,d)=1e-5);return(x);int Gcd_2(int a, int b)/ 欧几里德算法求a, b 的最大公约数 if (a=0 | b 0) /b 总是表示较小的那个数,若不是则交换 a, b 的值 temp = a % b; / 迭代关系式a = b; /a 是那个胆小鬼,始终跟在b 的后面b = temp; /b 向前冲锋占领新的位置 return a; 4.7 题#include #inclu

37、de using namespace std;int main()void godbaha(int);int n;coutn;godbaha(n);return 0;void godbaha(int n)int prime(int);int a,b;for(a=3;a=n/2;a=a+2)if(prime(a)b=n-a;if (prime(b)coutn=a+bendl;int prime(int m)int i,k=sqrt(m);for(i=2;ik) return 1;else return 0;4.8 题递归法#include using namespace std;int main

38、()int x,n;float p(int,int);coutnx;coutn=n,x=xendl;coutPn(x)=p(n,x)endl;return 0; float p(int n,int x)if (n=0)return(1);else if (n=1)return(x);elsereturn(2*n-1)*x-p(n-1),x)-(n-1)*p(n-2),x)/n);4.9 题 /汉诺塔问题#include using namespace std;int main()void hanoi(int n,char one,char two,char three);int m;coutm

39、;coutThe steps of moving m disks:endl;hanoi(m,A,B,C);return 0;void hanoi(int n,char one,char two,char three)将n个盘从one座借助two座,移到three座void move(char x,char y);if(n=1) move(one,three);elsehanoi(n-1,one,three,two);move(one,three);hanoi(n-1,two,one,three);void move(char x,char y)coutxyendl;4.10 题#include

40、 using namespace std;int main()void convert(int n);int number;coutnumber;coutoutput:endl;if (number0)cout-;number=-number;convert(number);coutendl;return 0;void convert(int n)/感觉根本想不出的么int i;char c;if (i=n/10)!=0)convert(i);c=n%10+0;cout c;4.11 题#include using namespace std;int main()int f(int);int n,s;coutn;s=f(n);coutThe result is sendl;return 0;int f(int n);if (n=1)return 1;elsereturn (n*n+f(n-1);4.12 题#include #include using namespace std;#define S(a,b,c) (a+b+c)/2#define AREA(a,b,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论