《《c程序设计》谭浩强课后习题答案.pdf》由会员分享,可在线阅读,更多相关《《c程序设计》谭浩强课后习题答案.pdf(131页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第一章1.5 题#include using namespace std;int main()(cout,This,His,;coutva“vv“C+”;cout,program.n;return 0;1.6 题#include using namespace std;int main()(int a,b,c;a=10;b=23;c=a+b;coutna4-b=n;coutc;coutendl;return 0;)1.7 七题#include using namespace std;int main()(int a,b,c;int f(int x,int y,int z);c in a b c
2、;c=f(a,b,c);coutcendl;return 0;)int f(int x,int y,int z)(int m;if(xy)m=x;else m=y;if(zm)m=z;retum(m);1.8 题#include using namespace std;int main()(int a,b,c;c in a b;c=a+b;c o u tna+b=a+bendl;return 0;1.9 题#include using namespace std;int main()(int a,b,c;int add(int x,int y);c in a b;c=add(a,b);c o
3、u tna+b=n c e n d l;return 0;)int add(int x,int y)int z;z=x+y;return(z);)2.3 题#include using namespace std;int main()char c 1 =a,c2=b,c3=,c,c4=,101,c5=,1161;co u t c 1 c2c3,n,;couttb,c 4,t,c 5,n,;return 0;)2.4 题#include using namespace std;int main()charcl=Cc2=,+*,c3=,+,;coutHI say:,n*c l c 2 c 3 V,
4、;couttt,He says:C+is very interesting!u n;return 0;)2.7 题#include using namespace std;int main()inti=8;j=10;m=+i+j+;n=(+i)+(+j)+m;c o u t i,t,j t m t,n en d l;return 0;12.8 题#include using namespace std;int main()char c l-C c2-h c3=i c4=n,c5-a*;cl+=4;c2+=4;c3+=4;c4+=4;c5+=4;coutpassword is:0c 1 c2c3
5、c4c5endl;return 0;)3.2 题#include#include using namespace std;int main()float h,r,l,s,sq,vq,vz;const float pi=3.1415926;coutnplease enter r,h:H;cin r h;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(l O)lendl;c
6、outHs=setw(10)sendl;cout,sq=,setw(10)sqendl;coutHvq=Hsetw(10)vqendl;cout,vz=,setw(10)vzendl;return 0;)3.3 题#include using namespace std;int main()float c,f;coutv”请输入一个华氏温度:cinf;c=(5.0/9.0)*(f-32);/注意5 和 9 要用实型表示,否则5/9值为0coutn 摄氏温度为:M c en d l;return 0;);3.4 题#include using namespace std;int main()ch
7、ar cl,c2;couicv”请输入两个字符cl,c2:n;cl=getchar();/将输入的第一个字符赋给clc2=getchar();/将输入的第二个字符赋给c2cout 用putchar函数输出结果为:“;putchar(cl);putchar(c2);coutendl;cout 用cout语句输出结果为:“;coutc 1 c2 en d l;return 0;)3.4 题另一解#include using namespace std;int main()char cl,c2;couicv”请输入两个字符cl,c2:n;cl=getchar();/将输入的第一个字符赋给clc2=g
8、etchar();/将输入的第二个字符赋给c2coutffl putchar函数输出结果为:;putchar(cl);putchar(44);putchar(c2);coutendl;coulv”用 cout语句输出结果为:“;coutc 1 ,uc2endl;return 0;)3.5题#include using namespace std;int main()char cl,c2;intil,i2;定义为整型cout”请输入两个整数il,i2:n;c in il i2;cl=il;c2=i2;coulv”按字符输出结果为:“vvcl,c2endl;return 0;)3.8 题#incl
9、ude using namespace std;int main()int a=3,b=4,c=5,x,y;cout(a+bc&b=c)endl;cout(a|b+c&b-c)endl;cout(!(ab)&!c|l)endl;cout(!(x=a)&(y=b)&0)endl;cout(!(a+b)+c-l&b+c/2)endl;return 0;)3.9 题include using namespace std;int main()int a,b,c;coutplease enter three integer numbers:;c in a b c;if(ab)if(bc)coutmax=
10、n c;elsecoutmax=M b;else if(ac)coutmax=c;elsecoutmax=a;coutendl;return 0;)3.9题另一解#include using namespace std;int main()int a,b,c,temp,max;coutplease enter three integer numbers:;c in a b c;temp=(ab)?a:b;/*将 a 和 b 中的大者存入temp中*/max=(tempc)?temp:c;/*将 a 和 b 中的大者与c 比较,最大者存入max*/coutnmax=nm axendl;retur
11、n 0;)3 1 0 题#include using namespace std;int main()int x,y;coutenter x:;cinx;if(xl)y=x;cout,x=,x,y=x=H y;)else if(x10)/lx10y=3*x-ll;coutnx=u x y=3*x-ll=,y;coutendl;return 0;)3.11 题#include using namespace std;int main()float score;char grade;coutplease enter score of student:;cinscore;while(score 10
12、0|score0)coutndata error,enter data again.;cinscore;)switch(int(score/l 0)case 10:case 9:grade=,A,;break;case 8:grade=B*;break;case 7:grade=*C;break;case 6:grade=D,;break;defaultgrade=E;)coutnscore is,score,grade is gradeendl;return 0;)3.12 题#include using namespace std;int main()long int num;int in
13、div,ten,hundred,thousand,ten_thousand,place;/*分别代表个位,十位,百位,千位,万位和位数*/coutenter an integer(0-99999):;cinnum;if(num9999)place=5;else if(num999)place=4;else if(num99)place=3;else if(num9)place=2;else place=l;coutplace=nplaceendl;/计算各位数字ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1000;
14、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*lOOOO-thousand*1000-hundred*100-ten*10);cout,original order:H;switch(place)case5:coutten_thousand,thousand,hundred,u te n u,indivendl;coutnreverse order
15、:;coutindivtenhundredthousandten_thousandendl;break;case 4:coutthousand,hundred,n te n,uindivendl;coutreverse order:n;coutindivtenhundredthousandendl;break;case 3:couthundred,n te n,indivendl;coutreverse order:;coutindivtenhundredendl;break;case 2:couttenn,Hindivendl;coutnreverse order:,;coutindivte
16、nendl;break;case 1 :coutindivendl;coutnreverse order:;coutindivendl;break;)return 0;)3.13 题#include using namespace std;int main()long i;/i 为利润float bonus,bon 1 ,bon2,bon4,bon6,bon 10;bonl=100000*0.1;bon2=bon1+100000*0.075;bon4=bon2+100000*0.05;bon6=bon4+100000*0.03;利润为10万元时的奖金利润为20万元时的奖金利润为40 万元时的奖
17、金利润为60万元时的奖金bon 10=bon6+400000*0.015;利润为100万元时的奖金coutenter i:;cini;if(i=100000)bonus=i*0.1;elseif(i=200000)bonus=bon l+(i-l 00000)*0.075;elseif(i=400000)bonus=bon2+(i-200000)*0.05;elseif(i=600000)bonus=bon4+(i-400000)*0.03;else if(i=1000000)bonus=bon6+(i-600000)*0.015;elsebonus=bon 10+(i-l 000000)*0
18、.01;coutnbonus=Mbonusendl;return 0;)3.13题另一解#include using namespace std;int main()long i;float bonus,bon 1 ,bon2,bon4,bon6,bon 10;int c;bon 1=100000*0.1;bon2=bon1+100000*0.075;bon4=bon2+200000*0.05;bon6=bon4+200000*0.03;bonl0=bon6+400000*0.015;coutenter i:n;cini;c=i/100000;if(c10)c=10;switch(c)case
19、 0:bonus=i*0.1;break;case 1:bonus=bon 1 +(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:利润在10万元以内按10%提成奖金利润在10万元至20万时的奖金利润在20万元至4 0 万时的奖金利润在40万元至60万时的奖金利润在60万元至100万时的奖金利润在100万元以上时的奖金case 9:bonus=bon6+(i-600000
20、)*0.015;break;case 10:bonus=bon 10+(i-1000000)*0.01;)coutbonus=Mbonusendl;return 0;)3.14 题#include using namespace std;int main()int t,a,b,c,d;coutenter four numbers:;c in a b c d;cout,a=,a,b=b,c=,c ,d=,dendl;if(ab)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;Jif(ad)t=a;a=d;d=t;if(bc)t=b;b=c;c=t;if(bd)t=b;b=d;d=t;
21、if(cd)t=c;c=d;d=t;coutthe sorted sequence:nendi;couta,b,n c n,n d en d l;return 0;)3.15 题#include using namespace std;int main()int p,r,n,m,temp;coutnplease enter two positive integer numbers n,m:;cinnm;if(nm)temp=n;n=m;m=temp;把大数放在n 中,小数放在m 中p=n*m;while(m!=0)先将n 和 m 的乘积保存在p 中,以便求最小公倍数时用求n 和 m 的最大公约
22、数r=n%m;n=m;m=r;)cout,HCF=,n en d l;coutLCD=np/nendl;/p 是原来两个整数的乘积return 0;3.16 题#include using namespace std;int main()chare;int Ietters=0,space=0,digit=0,other=0;coutHenter one line:nendl;while(c=getchar()!=n)if(c=a&c=A&c=0&c=9)digit+;elseother+;)coutnletter:n letters space:sp a c e ,digit:digit,ot
23、her:uotherendl;return 0;)3.17 题#include using namespace std;int main()int a,n,i=1 ,sn=0,tn=0;coutna,n=:n;cin a n;while(i=n)tn=tn+a;赋值后的m 为 i 个 a 组成数的值sn=sn+tn;赋值后的sn 为多项式前i 项之和a=a*10;+i;couta+aa+aaa+.=,snendl;return 0;)3.18 题#include using namespace std;int main()float s=0,t=l;int n;for(n=1 ;n=20;n+
24、)(t=t*n;/求 n!s=s+t;/将各项累加)coutnl!+2!+.+20!=sendl;return 0;)3.19 题#include using namespace std;int main()int i,j,k,n;cout*narcissus numbers are:Hendl;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)c o u t n M M;)coutendl;return 0;)3 2 0 题#include using namespace std;int main()co
25、nst int m=1000;/定义寻找范围int kl,k2,k3,k4,k5,k6,k7,k8,k9,k 10;int i,a,n,s;for(a=2;a=m;a+)a 是 2-1000之间的整数,检查它是否为完数n=0;/n 用来累计a 的因子的个数s=a;s 用来存放尚未求出的因子之和,开始时等于afor(i=l;ia;i+)/检查i 是否为a 的因子if(a%i=0)/如果i 是 a 的因子n+;11加 1,表示新找到一个因子s=s-i;s 减去已找到的因子,s 的新值是尚未求出的因子之和switch(n)/将找到的因子赋给kl,.,kl0case 1:kl=i;break;/找出的
26、笫1 个因子赋给klcase 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 个因子赋给k7case 8:k8=i;break;/找出的笫8 个因子赋给k8case 9:k9=i;break;/找出的笫9 个因子赋给k9case 10:kl0=i;)break;/找出的笫10个因子赋给k
27、lOif(s=O)/s=0表示全部因子都已找到了co ut an is a 完数l)coutk 1 n,n k 2;/nl 表示 a 至少有 2 个因子if(n2)cout,k3;/n2表示至少有3 个因子,故应再输出一个因子if(n3)coutn,Hk4;/n3表示至少有4 个因子,故应再输出一个因子if(n4)coutH,nk5;/以下类似if(n5)coutn,Hk6;if(n6)cout,k7;if(n7)coutH,nk8;if(n8)coutH,Mk9;if(n9)coutn,MklO;coutendlendl;return 0;)3.20题另一解#include using na
28、mespace std;int main()int m,s,i;for(m=2;m1000;m+)s=0;for(i=l;im;i+)if(m%i)=0)s=s+i;if(s=m)coutm u is a 完数endl;coutnits factors are:,;for(i=l;im;i+)if(m%i=0)c o u t in n;coutendl;)return 0;)3.20题另一解#include using namespace std;int main()intkll;int i,a,n,s;for(a=2;a=1000;a+)n=0;s=a;for(i=l;ia;i+)if(a%
29、i)=0)n+;s=s-i;kn=i;/将找到的因子赋给kk10)if(s=0)couta is a 完数 endl;cout*its factors are:;for(i=l;in;i+)coutkin H;coutknendl;return 0;3.21 题#include using namespace std;int main()int i,l,n=20;double a=2,b=l,s=0;for(i=l;i=n;i+)s=s+a/b;t=a;a=a+b;/将前一项分子与分母之和作为下一项的分子b=t;/将前一项的分子作为下一项的分母)cout,sum=,s en d l;retur
30、n 0;3.22 题#include using namespace std;int main()int day,xl,x2;day=9;x2=l;while(day0)xl=(x2+l)*2;/第 1 天的桃子数是第2 天桃子数加1 后的2 倍x2=xl;day-;)couttotal=H x 1 endl;return 0;3.23 题#include#include using namespace std;int main()float a,x0,x 1;coutnenter a positive number:1;cina;/输入a 的值x0=a/2;xl=(x0+a/x0)/2;do
31、xO=xl;xl=(x0+a/x0)/2;while(fabs(xO-x 1)=1 e-5);coutThe square root of n a n is u x l en d l;return 0;3.24 题#include using namespace std;int main()int i,k;for(i=0;i=3;i+)/输出上面4 行*号for(k=0;k=2*i;k+)/输出*号coutendl;输出完一行*号后换行for(i=0;i=2;i+)/输出下面 3 行*号for(k=0;k=4-2*i;k+)coutendl;/输出*号/输出完一行*号后换行return 0;3
32、.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)cout,A-,i u B-n j n C-n k en d l;return 0;4.1题#include using namespace std;int main()ini hcf(int,int);int lcd(int,int,int);i
33、nt u,v,h,l;cin u v;h=hcf(u,v);coutu)t=u;u=v;v=t;Jwhile(r=u%v)!=0)u=v;v=r;return(v);)int lcd(int u,int v,int h)relurn(u*v/h);4.2题#include#include using namespace std;float xl,x2,disc,p,q;int main()void greater_than_zero(float,float);void equai_to_zero(float,float);void smaller_than_zero(float,float);
34、float a,b,c;coutinput a,b,c:;c in a b c;disc=b*b-4*a*c;coutHroot:nendl;if(disc0)greater_than_zero(a,b);coutxl=n x 1 H,x2=,x2endl;)else if(disc=O)eq ual_to_zero(a,b);coutnx 1 =n x I,x2=,x2endl;)elsesmaller_than_zero(a,b);cout,xl=,p,0时方void equal_to_zero(float a,float b)的 根*/(xl=x2=(-b)/(2*a);)void sm
35、aller_than_zero(float a,float b)程 的 根*/(p=-b/(2*a);q=sqrt(-disc)/(2*a);)4.3题#include using namespace std;int main()int prime(int);/*int n;coutninput an integer:;cinn;if(prime(n)/*定义一个函数,用来求disc=0时方程/*定义一个函数,用来求disc0时方函数原型声明*/coutn is a prime.”endl;elsec o u t n M is not a prime.endl;return 0;)int pr
36、ime(int n)int flag=l,i;for(i=2;in/2&flag=1 ;i+)if(n%i=0)flag=0;retum(flag);4.4 题#include using namespace std;int main()(int fac(int);int a,b,c,sum=0;coutnenter a,b,c:n;c in a b c;sum=sum+fac(a)+fac(b)+fac(c);c o u t a M!+b,!+c,!=,sum endl;return 0;)int fac(int n)intf=l;for(int i=l;i=n;i+)f=f*i;retur
37、n f;)4.5 题#include#include using namespace std;int main()double e(double);double x,sinh;coutnenter x:;cinx;sinh=(e(x)+e(-x)/2;cout,sinh(,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
38、 a,b,c,d;coutninput a,b,c,d:H;c in a b c d;coutx=nsolut(a,b,c,d)endl;return 0;)double solut(double a,double b,double c,double d)double x=l,xO,f,fl;dox0=x;f=(a*x0+b)*x0+c)*x0+d;fl=(3*a*xO+2*b)*xO+c;x=x0-f/fl;)while(fabs(x-xO)=1 e-5);retum(x);)int Gcd_2(int a,int b)/欧几里德算法求a,b 的最大公约数 if(a=0|b 0)b 总是表示
39、较小的那个数,若不是则交换 a,b 的值 temp=a%b;/迭代关系式 a=b;/a是那个胆小鬼,始终跟在b 的后面 b=temp;/b向前冲锋占领新的位置 return a;4.7 题#include#include using namespace std;int main()void godbaha(int);int n;coutninput n:H;cinn;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)c o
40、u t n n=a n+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;float p(int,int);coutinput n&x:n;cin n x;cout,n=n n,x=Mxendl;coutP,n (x)=,p(n,x)endl;return 0;)float p(int n,int x)if(n=0)retum(l);else if(n=l)retum(x);elseretur
41、n(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;coutninput the number of diskes:n;cinm;coutThe steps of moving,m n disks:nendl;hanoi(m;A/B;C);return 0;)void hanoi(int n,char one,char two,char three)将n 个
42、盘从one座借助two座,移至lj three座void move(char x,char y);if(n=l)move(one,three);elsehanoi(n-1,one,three,two);move(one,three);hanoi(n-1,two,one,three);void move(char x,char y)co u t x -n y endl;4.10 题#include using namespace std;int main()void convert(int n);int number;coutinput an integer:;cinnumber;coutout
43、put:,endl;if(number0)coutM-u;number=-number;)convert(number);coutendl;return 0;)void convert(int n)感觉根本想不出的么int i;chare;if(i=n/10)!=0)convert(i);c=n%10+10,;cout c;)4.11 题#include using namespace std;int main()int f(int);int n,s;coutinput the number n:u;cinn;s=f(n);coutThe result is M s en d l;return
44、 0;)int f(int n)(;if(n=l)return 1;elsereturn(n*n+f(n-l);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;coutinput a,b,c:u;c in a b c;if(a+bc&a+cb&b+ca)cout,area=,AREA(a,b,c)endl;elsecoutI
45、t is not a triangle!endl;return 0;)4.14 题#include using namespace std;/#define LETTER 1int main()chare;cinc;#if LETTERi f(c f&c=A&c=Z)c=c+32;#endifcoutcendl;return 0;)4.15 题#include using namespace std;#define CHANGE 1int main()char ch40;coutninput text:nendl;gets(ch);#if(CHANGE)for(int i=0;i=,a,&ch
46、i,A&chiZ)chi+=l;else if(chfi=-z|chi=-Z)chi-=25;)#endifcoutnoutput:endlchendl;return 0;)4.16 题 file#include using namespace std;int a;int main()extern int power(int);int b=3,c,d,m;coutnenter an integer a and its power m:nendl;cinam;c=a*b;c o u t a,*b *=,c en d l;d=power(m);c o u t a ,*,m,=,d en d l;r
47、eturn 0;)416 题 fileextern int a;int power(int n)int i,y=l;for(i=l;i=n;i+)y*=a;return y;5.1题#include using namespace std;int main()cout,2,for(int i=3;i=100;i+)bool t=true;for(int a=2;ai;a+)if(i%a=0)t=false;break;if(t)c o u t i!return 0;#include#include using namespace std;#include int main()int i,j,n
48、,a101;for(i=l;i=100;i+)ai=i;al=0;for(i=2;isqrt(100);i+)for(j=i+l;j=100;j+)if(ai!=0&aj!=O)if(aj%ai=0)aU=0;coutendl;for(i=l,n=0;i=100;i+)if(ai!=0)coutsetw(5)aiM n;n+;if(n=10)coutendl;n=0;)coutendl;return 0;)5.2题#include using namespace std;/#include int main()int ij,min,temp,al 1;coutenter data:uendl;
49、for(i=l;i=10;i+)cout,a,i =M;cinai;/输入 10 个数)coutendlnThe original numbers:nendl;for(i=l;i=10;i+)coutaiH H;/输出这 10 个数coutendl;for(i=l;i=9;i+)以下8 行是对10个数排序min=i;for(j=i+1 ;jaj)min=j;temp=ai;/以下3 行将ai+l a10中最小者与ai对换ai=amin;amin=temp;)coutendlnThe sorted numbers:Mendl;for(i=l;i=10;i+)/输出已排好序的10个数coutaiH
50、 M;coutendl;return 0;#include using namespace std;int main()int a10,e,k,t;for(int i=0;i10;i+)cinai;for(int i=0;i9;i+)k=i;for(t=i+l;t10;t+)if(aiat)k=t;)e=ai;ai=ak;ak=e;for(int i=0;i10;i+)coutai,;return 0;#include#include using namespace std;int main()int a1010;for(int i=0;i10;i+)for(int t=0;t10;t+)ai