c++课后习题答案.pdf
2-6 对 n(0)个人进行分班,每班k(0)个人,最后不足k 人也编一班,写出能编班数的表达式。#include using namespace std;void main()(int n,k;coutvv”请输入总人数n:cinn;coutvv”请输入每班的人数k:”;cink;cout,n=n,n,k=,k en d l;if(n%k=0)8 戊”一共有”0/1”个班 M匕”每个班的人数为:H k en d l;elsecoutvv”一共有“vvn/k+kv”个班“v”其中有一个班的人数为:”vn%kvv“Nv”其他每个班的人数为:,k en d l;)3-1#include#include using namespace std;void main()(double y,x;cout”请输入X的值:”;cinx;if(x5)y=fabs(x);else if(x20)y=3*x*x-2*x+l;elsey=x/5;couty 的值为:yendl;)3-2#include#include using namespace std;void main()double a,b,c,y;coutv”方程式为:a*x*x+b*x+c=Ovvnv”请分别输入 a,b,c 的值:;c in a b c;coutv“a=vvafnvvb=vvbvnvvc=vvcvvendl;y=b*b-4*a*c;if(y0)coutvv“方程无解”;else if(y=O)coutvv”方程的解为:-b/(2*a);elsecoutvv”方程的解为:(-b+sqrt(y)/2*an,(-b-sqrt(y)/2*aendl;3-3#include using namespace std;void main()(double p,s;coutv”请输入工资数目:”;cins;while(s0)(coutvv”你输入的工资数目有误,请正确的数目:vvendl;cins;)int k=s/1000;switch(k)(case 0:p=0;couts-s*pendl;break;case 1:p=0.05;couts-s*pendl;break;case 2:case 3:case 4:p=0.08;couts-s*pendl;break;case 5:case 6:case 7:p=0.15;couts-s*pendl;break;default:p=0.20;couts-s*pendl;3-4#include using namespace std;void main()(int n=l;double x,sum;x=l;sum=l;while(l/x=le-6)(x=x*n;n+;sum+=l/x;)coutsumendl;3-5#include using namespace std;void main()(int a,b,c,i,n;cout”请输入项数n 的值:cinn;a=l;b=2;i=0;double sum=0;while(in)break;sum+=x;c=a+b;i+;sign=l;if(i%2=0)sign=-l;y=sign*c/b;sum+=y;if(in)break;b=a+c;i+;sign=1;if(i%2=0)sign=-l;z=sign*b/a;sum+=z;a=c+b;)coutsumendl;3-5#include using namespace std;int f(int);void main()(double i,n=20,b=l;double sigh=l;double sum=0;for(i=l;i=n;i+4-)(sum=sum+(b+f(i)/b)*sigh;sigh=-sigh;b=(b+f);)coutvv”前 20 项和为:“vvsumvvendl;)int f(int a)(double yl=l,y2=l,y,j;if(a=l)return yl;else if(a=2)return y2;else(for(j=3;j=a;j+)y=yl+y2;yl=y2;y2=y;)return y;或#include using namespace std;double f(int n)(double a,b,c,i,y;a=l;b=2;if(n=l)y=a;return(y);else if(n=2)y=b;return(y);)elsefor(i=3;i=n;i+)c=a+b;a=b;b=c;)y=c;)return(y);)double g(int n)(double a,b,c,i,y;a=2;b=3;if(n=l)y=a;return(y);else if(n=2)y=b;return(y);)elsefor(i=3;i=n;i+)c=a+b;a=b;b=c;y=c;)return(y);)void main()(double n=20,sum=0,sign=1;for(int i=l;i=20;i+)sum+=g(i)/f(i)*sign;sign=-sign;coutv这个数列的前20项之和为:”sumendl;3-6#include using namespace std;void main()int n;coutv所求水仙花数为:vvendl;for(n=100;n1000;n+)int a,b,c;a=n/100;b=(n-100*a)/10;c=n-100*a-10*b;if(n=a*a*a+b*b*b+c*c*c)coutnendl;或#include#include using namespace std;void main()int n;cout 所求水仙花数为:Hendl;for(n=100;n1000;n+)(int a,b,c;a=n/100;b=(n-100*a)/10;c=n-100*a-10*b;if(n=pow(a,3)+pow(b,3)+pow(c,3)coutnendl;)3-7#include using namespace std;void main()(int n,i;i=0;coutvv”各个数位的数字之和等于11的数为:“vvendl;for(n=100;n1000;n+)(int a,b,c,d;a=n/100;b=(n-100*a)/10;c=n-100*a-10*b;d=a+b+c;if(d=ll)(i+;c o u t n,;if(i%5=0)coutendl;)coutvvendlvv”这样的整数的个数为:H i en d l;)3-8#include using namespace std;void main()int d,n,x,y;for(d=0;d10;d+)for(n=0;n 13;n+)x=36-d-n;y=4*d+3*n+x/2;if(y=36&x%2=0)coutvc”男人的数量为:v v d v c n Wv”女人的数量为:nArV小孩的数量为:vvxvvendl;)3-9#inciude using namespace std;void main()(int i,a;coutvv”1000以内的所有完数分别是:nendl;for(i=l;il000;i+)(int sum=0;for(a=l;a=i;a+)if(i%a=O)(sum+=a;if(sum=i)coutsum endl;3-11#include using namespace std;int f(int xjnt y)(int a;a=x*y;return(a);int g(int x,int y)int a=21,b,t;if(xy)b=(a*y)/(x*y);elseb=(a*x)/(x*y);return(b);)void main()(coutvv”一共能听到鞭炮声的次数是:vf(3,21)-g(5,6)-g(6,7)-g(5,7)endl;4-1#include using namespace std;int f(int ajnt b)(int i,y;fbr(i=l;i=a;i+)if(a%i=O&b%i=O)y=i;return(y);)int g(int a,int b)(int c,d,y,s,i;s=l;fbr(i=l;i=a;i+)c=a%i;d=b%i;if(c=O&d=O)a=a/i;b=b/i;s=s*i;i=l;y=a*b*s;)retum(y);)void main()int a,b;coutv”请输入两个整数:endl;cin a b;c o u t a 和 vvbvv”的最大公约数为:n f(a,b)endl;coutvvavv和“v v b v v”的最小公倍数为:ng(a,b)endl;4-2#include using namespace std;#define PI 3.1416float l(float r)(float a;a=2*PI*r;return(a);)float s(float r)(float a;a=PI*r*r;return(a);)void main()(int r;cout 请输入圆的半径大小数值:vendl;cinr;coutvv半径为“v v r”的圆的周长为:”1(1)W同 半径为“1”的圆的面积为:s(r)endl;)4-3#include using namespace std;void main()(int x,y;int getPower(int,int);coutvv”计算x 的 y 次累,请你输入x 和 y 的值:uendl;cin x y;coutvxv的 v v y v 次慕等于:getPower(x,y)endl;)int getPower(int x,int y)int i,a;a=l;for(i=l;i=y;i+)a*=x;return(a);)4-4#include#include using namespace std;void main()(double a,b,c;double area(double,double,double);cout”请输入三角形的各边边长值:“endl;c in a b c;while(a+bc&b+ca&a+cb)coutv你输入的边长值不符合(a+bc&b+cva&a+cb)要求,请重新输入:endl;cin a b c;coutvv”所求的三角形的面积为:vvarea(ab,c)vvendl;double area(double j,double k,double 1)(double s,y,f;s=(j+k+l)/2;y=s*(s-j)*(s-k)*(s-l);f=sqrt(y);return(f);)4-5#include using namespace std;void main()(int i,n;double x,sum;sum=l;n=l;cout”请输入 x 的值:le-6;i+)n=i;sum+=f(x,n);)coute 的 x 次方等于:nsum endl;)double f(double x,int n)(double c,sj,y;j=1;s=l;for(c=1 ;c=n;c+)(s*=x;j*=c;)y=s/j;retum(y);)5-1#include using namespace std;void main()(int a23,ij;coutvv请你输入要求和的数:vvendl;for(i=0;i2;i+)for(j=0;j3;j+)cinaij;for(i=0;i2;i+)for(j=0;j3;j+)coutna,i,j,=,a ij,coutendl;int sum=0;for(i=0;i2;i+)for(j=0;j3;j+)sum+=aij;)coutv”这个数组所有元素的和是:,endlsumendl;)5-2#include using namespace std;void main()i n t a 3 3 ,i,j;c o u t v v”请你输入要求和的数:”v v e n d l;fo r(i=0;i 3;i+)fo r(j=0;j 3;j+)c i n a i j ;fb r(i=O;i 3;i+)fo r(j=0;j 3;j+)c o u t v v a ”v v i v Tv v Tv j v T v =v v a i j v M;c o u t e n d l;i n t s u m 1=0;fo r(i=0;i 3;i+)(fo r(j=0;j 3;j+)i f(j=Ds u m l+=a i j ;)i n t s u m 2=0;fo r(i=0;i 3;i+)fo r(j=0;j 3;j+)i f(j=2-i&j!=i)s u m 2+=a i j ;)c o u t ”这个矩形方阵中两条对角线上的元素之和为:s u m l+s u m 2 e n d l;5-3#i n c l u d e u s i n g n a m e s p a c e s t d;v o i d m a i n()(i n t a 3 3 ,i,j;c o u t v ”请你输入要转置的矩阵的元素:”v e n d l;fo r(i=0;i 3;i+)fo r(j=0;j 3;j+)c i n a i|j ;fo r(i=0;i 3;i+)fo r(j=0;j 3;j+)c o u t na Mi,,j,=,a i j ,;c o u t e n d l;c o u t v v”转置后的数组为:“v v e n d l;i n t d 3 3 ;fo r(i=0;i 3;i+)fo r(j=0;j 3;j+)d i Ul=a j i ;coutendl;)5-4#include#include using namespace std;void main()(const int N=10;int a|N,c;int f(int,int,int);void bubble(int,int);for(int i=0;iN;i+)(ai=rand()/100;coutain”;)coutendl;bubble(a,N);for(i=0;iN;i+)coutaincoutendl;cout”请输入一个你要找的数:vvendl;cinc;if(f(a,N,c)=-l)cout vv无此数”vendl;else coutf(a,N,c)endl;)int f(int b,int njnt x)int high,mid,low,find=-1;low=0;high=n-l;while(low=high)(mid=(low+high)/2;if(xbmid)low=mid+l;elsefind=mid;break;)return find;void bubble(int array|,int n)intfbr(i=l;in-l;i+)fbr(j=O;jarrayj4-l)(t=arrayj;arrayj=arrayj+1;arrayj+l=t;5-5#include using namespace std;void main()char f(char);char a=njdeurovlm.,n*jjhJ88*.lj,.*;f(a);char f(char s)int i;coutns=;fbr(i=O;si!=W;i+)if(si!=,*,&si!=,.t)coutsi;coutendl;return 0;)5-6不完善:#include using namespace std;void main()(int a;void convert(int);coutv”请输入一个整数:endl;cina;convert(a);void convert(int n)int c;if(n%10!=0)c=n%10;n=n/10;convert(n);coutc+0,;)完善:#include using namespace std;void main()(int a;void convert(int);coutvv”请输入一个整数:vvendl;cina;convert(a);)void convert(int n)(int c;if(n%10!=0)c=n%10;n=n/10;convert(n);coutc+0;else if(n%10=0&n/10!=0)c=n%10;n=n/10;convert(n);coutc+0;)5-7#include using namespace std;void main()(void reverse(char,int);charc10000;coutvv”请输入一个字符串:vvendl;cout”你输入的字符串是:Hendl;cinc;int i=0;while(ci!=01lci=,*)i+;coutvv”逆序后的字符串为:nendl;reverse(c,i);)void reverse(char a,int n)(char b 10000;fbr(int i=0;in;i+)bi=an-i-l;coutbi;coutendl;)5-8#include using namespace std;void main()(void f(string,int);string strl 1000;coutv请输入n 个字符串:nendl;cinstrl;int a=0;while(strla!=W)a+;string a2;int c=0;fbr(int i=0;ia;i+)a2=strli;while(a2i!=W)C+;f(a2,c);)void f(string srt,int n)(char al;for(int i=0;isrti+l)al=srti;srti=srti+l;srti+l=srti;coutsrtendl;)5-9#includeusing namespace std;void main()(char b 1000000;void f(char,int);coutvv”请输入要统计的文字:”endl;gets(b);int i=0;while(bi!=0)i+;f(b,i);)void f(char a,int n)(int b=0,c=0,d=0,e=0,g=0;for(int i=0;in;i+)if(47ai&ai58)b+;else if(ai=)d+;else if(64ai&ai91)C+;else if(96ai&ai123)e+;else if(ai=01)break;elseg+;)cout你输入的文字中,英文大写字母的个数是:vcvendk英文小写字母的个数 是:n e en d l数字的个数是:”bendl”空格的个数是:”vdendkv”其他字符的个数是:n g en d l;)6-1#i ncl udeusing namespace std;void main()(int b33;void f(int 3,int);coutvv”请输入要转置的方针:nendl;fbr(int i=0;i3;i+)(fbr(intj=O;j3;j+)cin*(*(b+i)+j);)coutendl;)f(b,3);)void f(int a3,int n)(coutcv”转置后的矩形方阵为:endl;fbr(int i=0;in;i+)for(int j=O;jn;j+)cout*(*(a+j)+i)coutendl;)6-2#includeusing namespace std;void main()(int b33;void f(int 3,int);coutvc”请输入一个:endl;fbr(int i=0;i3;i+)(fbr(int j=O;j3;j+)cin*(*(b+i)4j);)coutendl;)coutvv”输入的矩阵为:endl;for(i=0;i3;i+)for(intj=0;j3;j+)cout*(*(b+i)+j)n”;)coutendl;)f(b,3);)void f(int a3,int n)(int sum=0;fbr(int i=0;in;i+)fbr(int j=O;jn;j+)if(i=Olli=n-l llj=0&i!=0&i!=n-lllj=n-l&i!=0&i!=n-l)sum+=*(*(a+i)4j);coutcv矩阵所有靠外侧的元素之和为:sumendl;)6-3#include#includeusing namespace std;void main()(int b43,*p;p=b0;void f(int 3,int);coutvc”请输入一个二维数组:”endl;for(int i=0;i4;i+)(for(int j=O;j3;j+)cin*(p+i*3+j);)coutendl;)cout输入的二维数组为:endl;for(i=0;i4;i+)(for(inlj=0;j3;j+)coutsetw(5)*(*(b+i)+j);)coutendl;f(b,4);cout”排序后的数组为:endl;for(i=0;i4;i+)(for(intj=O;j3;j+)coutset w(5)*(*(b+i)+j);)coutendl;)void f(int a3,int n)(int b=O,t;for(int i=l;i3*n;i+)for(int j=O;j*(aO+j+l)t=*(aO+j);*(aO+j)=*(aO+j+l);*(aO+j+l)=t;b+;)if(b=O)break;6-4#include using namespace std;void main()char f(char*s);char*p,a=可 deurolm.,n*jjhJ88*.lj,.*;p=a;f(p);char f(char*s)int i=0;while(*(s+i)!=0r)if(*(s+i)!=*)cout*(s+i);i+;coutendl;return 0;6-5#include using namespace std;void main()(void f(char*p,int);char a1000,*s;s=a;puts(请输入一个字符串:”);gets(s);puts(输入的字符串是:);puts(s);for(int j=O;*(s+j)!=0;j+)j;puts(逆序存放后的字符串为:f(sj);coutendl;)void f(char*p,int n)(fbr(int i=n-l;i=0;i)cout*(p+i);)6-6(1)#include using namespace std;void main()(void strPartCopy(char*,char*);char strl1000,str21000;puts(请输入一个字符串:”);gets(strl);int n=0;while(*(strl+n)!=01)n+;cout”所求字符串为:endl;for(int j=0;jn/2+n%2;j+)strPartCopy(str 1,s tr2);cout*(str2+j);coutendl;void strPartCopy(char*a,char*b)(int n=0;while(*(a+n)!=01)n+;int j=0;for(int i=l;in;i+=2)*(b+j)=*(a+i);j+;6-6#inckide using namespace std;void main()(char*strPartCopy(char*);char strllOOO;puts(请输入一个字符串:”);gets(strl);int n=0;while(*(strl+n)!=,0,)n+;coutvv”所求字符串为:vvendl;for(int c=0;cn/2+n%2;c+)cout*(strPartCopy(strl)+c);coutendl;char*strPartCopy(char*a)intn=0;charb1000;while(*(a+n)!=0)n+;int j=0;fbr(int i=1 ;in;i+=2)*(b+j)=*(a+i);j+;return(b);6-7#include#includeusing namespace std;void main()(int b45;void f(int 5,int,int);for(int x=0;x4;x+)for(int y=O;y5;y+)bxy=rand()%10;coutv”随机产生的数组为:endl;for(int e=0;e4;e+)for(int g=O;g5;g+)coutsetw(5)*(*(b+e)+g);coutendl;coutendl;f(b,4,5);)void f(int a5,int m,int n)(int d10,x10,i,j,c;fbr(i=0;im;i+)*(d+i)=*(*(a+i)+0);for(j=0;jn;j+)if(*(d+i)*(*(a+i)+j+1)*(d+i)=*(*(a+i)+j+1);)*(x+i)=*(*(a+0)+i);fbr(c=0;c*(*(a+i)+c)*(x+c)=*(*(a+i)+c);if(*(d+i)=*(x+j)cout*(*(a+i)-Fj)setw(5)isetw(5)jendl;)6-7#include#includeusing namespace std;void main()(int 皿4北 5=10,1,2,3,4,11,6,7,7,5,12,5,6,5,7,13,5,5,6,8;void f(int 5,int,int);couivv”随机产生的数组为:endl;for(int e=0;e4;e+)for(int g=O;g5;g+)coutsetw(5)*(*(b+e)+g);coutendl;coutendl;int m,n;f(b,m,n);)void f(int a|5,int i,int j)(int hl,h2,l,max,min;for(i=0;i4;i+)max=ai0;for(j=0;jai|O)max=aij;hl=i;l=j;else max=ai0;min=a0l;for(int k=0;k4;k+)if(akjaOl)min=akj;h2=k;if(hl=h2)coutah 1 lh 11;char*strPartCopy(char*)