C++课后习题答案-谭浩强_第1页
C++课后习题答案-谭浩强_第2页
C++课后习题答案-谭浩强_第3页
C++课后习题答案-谭浩强_第4页
C++课后习题答案-谭浩强_第5页
已阅读5页,还剩34页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、3.2 题#include #include using namespace std;int main ( )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)sq

2、endl;coutvq=setw(10)vqendl;coutvz=setw(10)vzendl;return 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();/将输入的第一个字符赋给 c

3、1c2=getchar();/将输入的第二个字符赋给 c2cout 用 putchar 函数输出结果为 :;putchar(cl);putchar(c2);coutvvendl;COUtVV用cout语句输出结果为:;coutvvc1vvc2vvendl;return 0;3.4题另一解#include using namespace std;int main ()char c1,c2;coutvv请输入两个字符c1,c2:;clc2c1=getchar();/将输入的第一个字符赋给c2=getchar();/将输入的第二个字符赋给coutvv用putchar函数输出结果为:;putchar(

4、cl);putchar(44);putchar(c2);coutvvendl;coutvv用cout语句输出结果为:;coutvvc1vv,vvc2vve ndl;return 0;3.5题#include viostreamusing namespace std;int main ()char c1,c2;int i1,i2;/定义为整型coutvv请输入两个整数i1,i2:;cini1i2;c1=i1;c2=i2;coutvv按字符输出结果为:vvclvv , vvc2vvendl;return 0;3.8题#include viostreamusing namespace std;int

5、 main () int a=3,b=4,c=5,x,y;coutvv(a+bc & b=c)vvendl;coutvv(a|b+c & b-c)vvendl;coutb) & !c|1)endl; cout(!(x=a) & (y=b) & 0)endl; cout(!(a+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;elsecoutmax=b;else if (ac)coutmax=c;elsecoutma

6、x=a;coutendl;return 0;3.9 题另一解#include using namespace std;int main ( )int a,b,c,temp,max ;coutabc;将 a 和 b 中的大者存入 temp 中 */ 将 a 和 b 中的大者与 c 比较,最大者存入maxtemp=(ab)?a:b; /* max=(tempc)?temp:c; /*/coutmax=maxendl;return 0;3.10 题#include using namespace std; int main ( )int x,y;coutx;if (x1)y=x;coutx=x, y

7、=x=y;else if (xv10)/ 1 xv 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.11 题#include using namespace std;int 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

8、=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 ()long int num;int indiv,ten,hundred,thousand,ten_thousand,place;/* 分别代表个位 , 十位 , 百位 , 千位 , 万位和位数 */coutnum;if (num9999)place=5;else if (num999)place=4;else if

9、 (num99)place=3;else if (num9)place=2;else place=1; coutplace=placeendl;/ 计算各位数字 ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1000; hundred=(int)(num-ten_thousand*10000-thousand*1000)/100; ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10; indiv=(int)(num-ten_thousand*1

10、0000-thousand*1000-hundred*100-ten*10); coutoriginal order:;switch(place)case5:coutten_thousand,thousand,hundred,ten,indivendl;coutreverse order:; coutindivtenhundredthousandten_thousandendl;break;case 4:coutthousand,hundred,ten,indivendl;coutreverse order:;coutindivtenhundredthousandendl;break;case

11、 3:couthundred,ten,indivendl;coutreverse order:; coutindivtenhundredendl;break;case 2:coutten,indivendl;coutreverse order:;coutindivtenendl;break;case 1:coutindivendl;coutreverse order:;coutindivendl;break;return 0;3.13 题#include using namespace std;int main () long i; /ifloat bonus,bon1,bon2,bon4,b

12、on6,bon10; bon1=100000*0.1; / bon2=bon1+100000*0.075; / bon4=bon2+100000*0.05; / bon6=bon4+100000*0.03; / bon10=bon6+400000*0.015; / couti;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-400

13、000)*0.03; /else if (i=1000000) bonus=bon6+(i-600000)*0.015; /else bonus=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;为利润利润为 10 万元时的奖金 利润为 20 万元时的奖金 利润为 40 万元时的奖金 利润为 60 万

14、元时的奖金 利润为 100 万元时的奖金利润在 10 万元以内按 10%提成奖金利润在 10 万元至 20 万时的奖金利润在 20 万元至 40 万时的奖金利润在 40 万元至 60 万时的奖金 利润在 60 万元至 100万时的奖金 利润在 100 万元以上时的奖金bon2=bon1+100000*0.075;bon4=bon2+200000*0.05;bon6=bon4+200000*0.03;bon10=bon6+400000*0.015;couti;c=i/100000;if (c10) c=10;switch(c)case 0: bonus=i*0.1; break;case 1:

15、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: bonus=bon10+(i-1000000)*0.01;coutbonus=bonusendl;return 0;3.14 题#include using namespace std;int

16、 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;couta, b, c, dendl;return 0;3.15 题#include using namespace std; int main ()int p,r,n,m,temp;coutnm;i

17、f (nm)temp=n;把大数放在n中,小数放在m中先将n和m的乘积保存在p中,以便求最小公倍数时用 求n和m的最大公约数/ p是原来两个整数的乘积n=m;m=temp; /p=n*m; / while (m!=0) /r=n%m;n=m;m=r;coutHCF=nendl; coutLCD=p/nendl; return 0;3.16 题#include using namespace std;int main ()char c;int letters=0,space=0,digit=0,other=0; coutenter one line:=a & c=A & c=0 & c=9) d

18、igit+;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; / 赋值后的 sn 为多项式前 i 项之和 a=a*10;+i;couta+aa+aaa+.=snendl;return 0;3.18 题#include using

19、 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;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

20、;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;/ s用来存放尚未求出的因子之和,开始时等于for (i=1;ia;i+) /检查 i 是否为 a 的因子if (a%i=0) /如果 i 是 a 的因子n+;/ n加 1,表示新找到一个因子s=s-i; /

21、 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 个因子赋给 k5case 6:k6=i; break; /找出的笫 6 个因子赋给 k6case 7:k7=i; break; /找出的笫 7 个

22、因子赋给 k7case 8:k8=i; break; /找出的笫 8 个因子赋给 k8case 9:k9=i; break; /找出的笫 9 个因子赋给 k9case 10:k10=i; break; /找出的笫 10 个因子赋给 k10if (s=0)/ s=0couta is a 完数 endl; cout1) coutk1,1if (n2) cout,2if (n3) cout,3if (n4) cout,5) cout,6) cout,7)cout,8)cout,9)cout,k10;coutendlendl;return 0;using namespace std;int main(

23、)3.20题另一解#include 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+)表示全部因子都已找到了表示 a 至少有 2 个因子 表示至少有 3 个因子,故应再输出一个因子 表示至少有 4 个因子,故应再输出一个因子 以下类似if (m%i=0) couti coutendl;return 0;3.20 题另一解 #include using namespace std; int mai

24、n()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;/将找到的因子赋给 k1k10if (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,b=1,s=0;for (i=1;i=n;i+)s=s+a/b;t=

25、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)第 1 天的桃子数是第 2 天桃子数加 1 后的 2 倍x1=(x2+1)*2; / x2=x1;day-;couttotal=x1endl;return 0;3.23 题#include #include using namespace std;int main()float a,x0,

26、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;k+) cout*; / couten

27、dl; / 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-i B-j C-kendl;return 0;4.1 题#include u

28、sing 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(

29、)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+qiend

30、l; coutx2=p-qi0 时方disc=0 时方程disc0 时方程的根 */p=-b/(2*a); q=sqrt(-disc)/(2*a);4.3 题#include using namespace std;int main()int prime(int); /* 函数原型声明 */ int n;coutn;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)fl

31、ag=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!=sumendl;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,si

32、nh; 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 main()double solut(double ,double ,double ,double ); double a,b,c,d;coutabcd;coutx=solut(a,b,c,d)=1e-5); return(x);4.7 题 #include #include using namespace std;i

33、nt 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()int x,n; flo

34、at 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;coutThe steps of m

35、oving 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 using

36、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

37、);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,c) sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(S(a,b,c)-c) int main()float a,b,c;coutabc;if (a+bc & a+cb & b+ca) coutarea=AREA(

38、a,b,c)endl;elsecoutIt is not a triangle!endl;return 0;4.14 题#include using namespace std;/#define LETTER 1int main()char c;cinc;#if LETTERif(c=a & c=A & c=Z)c=c+32;#endifcoutcendl; return 0;4.15 题#include using namespace std;#define CHANGE 1int main()char ch40;coutinput text:endl;gets(ch);#if (CHANG

39、E)for (int i=0;i=a& chiA& chiZ) chi+=1;else if (chi=z|chi=Z) chi-=25;#endif coutoutput:endlchendl;return 0;4.16 题 file#include using namespace std;int a;int main()extern int power(int);int b=3,c,d,m;coutenter an integer a and its power m:am;c=a*b; couta*b=cendl; d=power(m);couta*m=dendl; return 0;4.

40、16 题 file extern int a;int power(int n)int i,y=1;for(i=1;i=n;i+)y*=a; return y;5.1 题#include #include using namespace std;#include int main()int i,j,n,a101;for (i=1;i=100;i+) ai=i;a1=0;for (i=2;isqrt(100);i+)for (j=i+1;j=100;j+)if(ai!=0 & aj!=0) if (aj%ai=0) aj=0; coutendl;for (i=1,n=0;i=100;i+) if

41、(ai!=0) coutsetw(5)ai ;n+;if(n=10)coutendl;n=0; coutendl; return 0;5.2 题#include using namespace std; /#include int main()int i,j,min,temp,a11;coutenter data:endl;for (i=1;i=10;i+) coutaiai; /输入 10 个数coutendlThe original numbers:endl;for (i=1;i=10;i+) coutai ;/coutendl;for (i=1;i=9;i+)/min=i;for (j=i+1;jaj) min=j; te

温馨提示

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

评论

0/150

提交评论