C++課后習(xí)題答案.doc_第1頁
C++課后習(xí)題答案.doc_第2頁
C++課后習(xí)題答案.doc_第3頁
C++課后習(xí)題答案.doc_第4頁
C++課后習(xí)題答案.doc_第5頁
已閱讀5頁,還剩121頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

/*編寫程序,根據(jù)輸入的x的值,按下列公式計算并輸出y的值當(dāng)-5=x=5且x!=0時y=x-1當(dāng)x=0時y=x+1當(dāng)5x=100時y=x+5當(dāng)x為其他值時y=100*/#includeusing namespace std;int main(void)int x,y;coutx;if(-5=x & x=5 & x!=0) couty=x-1即y等于:x-1;else if(x=0) couty=x+1即y等于:x+1;else if(5x & x=10) couty=x+5即y等于:x+5;else couty=100;coutendl;return 0;/*輸入5個百分制成績,求出總成績及平均成績*/#includeusing namespace std;int main(void)float a,b,c,d,e,sum,ave;coutabcde; sum=a+b+c+d+e; ave=sum/5.0f;cout總成績?yōu)椋簊umendl;cout平均成績?yōu)椋篴veendl;return 0;/*編寫程序,輸入一個三位正整數(shù),輸出各位數(shù)字組成的最大值。例如:輸入“123”,輸出“321”。*/#includeusing namespace std;int main(void)int a,b,c,max,mid,min,x;coutx;a=int(x/100);b=int(x-a*100)/10);c=int(x-a*100-b*10);/分別得出該三位數(shù)的每一位上的值,并分別賦給a,b,cmax=a;if(ba) max=b;if(maxc) max=c;/求出三個數(shù)的最大值mid=b;if(ab & ca) mid=a;if(ac & cb) min=b;if(cmin) min=c;/求出三個數(shù)的最小值coutx轉(zhuǎn)換后的形式為:maxmidminendl;return 0;/*輸入若干個百分制成績,求出總成績及平均成績。提示:由于成績值不可能小于0,因此可將負值作為輸入結(jié)束的標志*/#includeusing namespace std;int main(void)float sum=0,ave,g;int n;cout請輸入n個百分制成績并以一個負數(shù)結(jié)束輸入g;if(g0) break; /break語句結(jié)束循環(huán)sum+=g;ave=sum/n;cout總成績?yōu)椋簊umendl平均成績?yōu)閍veendl;return 0;/*輸入若干個百分制成績,求出總成績及平均成績。提示:由于成績值不可能小于0,因此可將負值作為輸入結(jié)束的標志*/#includeusing namespace std;int main(void)float sum=0,ave,a,n=1;cout輸入n個百分制成績,并以一個負數(shù)結(jié)束輸入a; if(a0) sum=a+sum; ave=sum/n/1.0; n=n+; goto loop; /goto和if組成循環(huán) cout總成績?yōu)椋簊umendl平均成績?yōu)椋篴veendl;return 0;/*輸入若干個百分制成績,輸出對應(yīng)的五分制成績,輸入結(jié)束后再分別輸出這五個分段的人數(shù)。五分制成績用字母A、B、C、D和E分別表示百分制成績的10090、8980、7970、6960、590*/#includeusing namespace std;int main(void)float x;int a=0,b=0,c=0,d=0,e=0;cout請輸入n個百分制成績:x; if(x0) break; if(90=x & x=100) coutx分對應(yīng)的等級是:Aendl;a+=1; if(80=x & x90) coutx分對應(yīng)的等級是:Bendl;b+=1; if(70=x & x80) coutx分對應(yīng)的等級是:Cendl;c+=1; if(60=x & x70) coutx分對應(yīng)的等級是:Dendl;d+=1; if(0=x & x60) coutx分對應(yīng)的等級是:Eendl;e+=1; cout等級為A的人數(shù)為:aendl 等級為B的人數(shù)為:bendl 等級為C的人數(shù)為:cendl 等級為D的人數(shù)為:dendl 等級為E的人數(shù)為:eendl; return 0;/*設(shè)計一個程序,輸出所有的水仙花數(shù)。所謂水仙花數(shù)是一個三位數(shù)其各位數(shù)字的立方和等于該數(shù)本身。例如:153=13+53+33 */#include#includeusing namespace std;int main(void)int a,b,c,d;for(a=100;a=999;a+) b=int(a/100); c=int(a-b*100)/10);d=int(a-b*100-c*10);/分別得出三位數(shù)三個位上的數(shù)if(a=pow(b,3)+pow(c,3)+pow(d,3)couta為水仙花數(shù)endl;return 0;/*編寫程序,計算100到200之內(nèi)所有素數(shù)的和*/#include#includeusing namespace std;int main(void) int x,i,sum=0; for(x=100;x=200;x+)for(i=2;isqrt(x) sum+=x;cout100到200以內(nèi)的素數(shù)之和為:sumendl;return 0;/*編寫程序,求出100到200之間的素數(shù),并按每行5個輸出。*/#include#include#includeusing namespace std;int main(void)int x,i;for(x=100;x=200;x+)for(i=2;isqrt(x) coutsetw(16)leftx;cout=2) */#includeusing namespace std;int main(void)int n=1,a,b;cout0endl1endl;a=0,b=1;while(n=9) /因為一次性輸出“coutaendlbendl”有兩項,所以只要執(zhí)行9次循環(huán)。a=a+b;b=a+b;n+=1;coutaendlbendl;return 0;/*輸入一個整數(shù),輸出該整數(shù)的所有素數(shù)因子。例如:輸入“12”,輸出為“2,2,3”*/#includeusing namespace std;int main(void)int n,c=2;coutn;coutc)if(n%c=0)coutc,;n=n/c; elsec+;coutn;coutendl;return 0;/*自守數(shù)是平方后尾數(shù)等于該數(shù)自身的自然數(shù)。例如:25*25=625 76*76=5776任意輸入一個自然數(shù)(設(shè)不超過3位),判斷其是否為自守數(shù)并輸出,如:25 YES 25*25=62511 NO 11*11=121 */#includeusing namespace std;int main(void)int x,a,b,c;coutx;if(x4)if(x*x=x) coutx Yes x*x=x*x;else coutx No x*x=x*x;else if(4=x & x10)a=x*x;if(a-a/10*10)=x) coutx Yes x*x=a;else coutx No x*x=a;else if(10=x & x32)a=x*x;b=a-a/100*100;if(b=x) coutx Yes x*x=a;else coutx No x*x=a;else if(32=x & x99)a=x*x;b=(a-a/1000*1000);c=b-b/100*100;if(c=x) coutx Yes x*x=a;else coutx No x*x=a;cout=30 */#includeusing namespace std;int main(void) long double s=1;long int n=2;while(s30)s=s+(1.0/n);n+;coutsendl;cout最小的n值為:nendls的值為:sendl;return 0;/*試編寫一個加密程序,加密方法是將明文的字母變成其后的第4個字母,字母表首尾相連。例如,輸入明文“China”,輸出密文“Glmre”。非字母符不加密,當(dāng)輸入字符“#”時,程序運行結(jié)束。 */ #includeusing namespace std;int main(void)char c;cout請輸入需要加密的文字:;for(cin.get(c);c!=#;cin.get(c) if(65=c & c87)coutchar(int (c+4);if(87=c & c=90)coutchar(int (c+4-90+64);if(97=c & c119)coutchar(int (c+4);if(119=c & c=122)coutchar(int (c+4-122+96); if(c122)coutc;coutendl;return 0;/*用一下公式求e的近似值(n取10)。e=1+1/1!+1/2!+1/3!+1/n! */#includeusing namespace std;int main(void)double e=1,s=1;int n=1;dos*=n;e+=1/s;n+=1;couteendl;while(n11);coute的近似值為:eendl;return 0;/*用一下公式求e的近似值(直到最后一項的絕對值小于10-8為止)。e=1+1/1!+1/2!+1/3!+1/n! */#include#include#includeusing namespace std;int main(void)double e=1,s=1;int n=1;dos*=n;e+=1/s;n+=1;coutsetprecision(8)e1e-8);coute的近似值為:setprecision(8)eendl;return 0;/*輸入一個實數(shù)x,用下式求ex的近似值,知道最后一項的絕對值小于1e-8為止*/#include#includeusing namespace std;int main(void)double e=1,s=1,x,n=1;coutx;dos*=n;e+=(pow(x,n)/s;n+=1;coute1e-8);coutex的近似值為:eendl;return 0;/*求出1599中能被3整出,且至少有一位數(shù)字為5的所有整數(shù)。例如15、51、513均是滿足條件的整數(shù) */#includeusing namespace std;int main(void)int b,s,g,n; /b表示百位,s表示十位,g表示個位for(n=1;n600;n+)if(10=n&n=99)for(n=10;n100;n+)s=n/10;g=n-s*10;if(n%3=0&(s=5|g=5)coutnendl;if(100=n&n=599)for(n=100;n600;n+)b=n/100;s=n-n/100*100;g=n-b*100-s*10;if(n%3=0&(b=5|s=5|g=5)coutnendl;return 0;/*由于32+42=52,所以稱3,4,5為勾股數(shù)。試編程求出100以內(nèi)的所有勾股數(shù)。*/#include#includeusing namespace std;int main(void)int a,b,c;for(a=1;a=100;a+)for(b=1;b=100;b+)for(c=1;c=100;c+)if(c*c=a*a+b*b)couta,b,c 為勾股數(shù)!endl;return 0;/*求滿足以下條件的三位數(shù)n:它除以11(整數(shù)相除)所得的商等于n的各位數(shù)字的平方和,且其中至少有兩位數(shù)字相同。例如:131除以11的商為11,各位數(shù)字的平方和為11,所以它是滿足條件的三位數(shù)。 */#includeusing namespace std;int main(void)int n,b,s,g,a;for(n=100;n1000;n+)b=n/100;s=(n-b*100)/10;g=n-b*100-s*10;a=n/11;if(b=s|b=g|s=g)if(s*s+b*b+g*g=a)coutn滿足條件endl;return 0;/*用牛頓迭代法求一元方程2x3-4x2+3x-6=0在x=1.5附近的根,要求精度為1e-8。*/#include#includeusing namespace std;int main(void)float x,y;for(x=1.5;)y=x;x=x-(2*pow(x,3)-4*pow(x,2)+3*x-6)/(6*x*x-8*x+3);if(fabs(y-x)1e-8) break;coutxendl;cout2x3-4x2+3x-6=0在x=1.5附近的根為:xendl;return 0;/*在1000以內(nèi)驗證哥德巴赫猜想*/#include#include#includeusing namespace std;int prime(int i)for(int j=2;jsqrt(i) return i;int main(void)int n,k,h;coutn;for(k=2;k=1000;k+)for(h=2;h=1000;h+)if(prime(k)+prime(h)=n)coutn=k+n-kendl;return 0;/*用二分法求方程x3-6x-1=0在x=2附近的一個實根,要求迭代精度為1e-8 */#include#includeusing namespace std;int main(void)long double y1,y2,x0,x1=1,x2=3;while(fabs(y1)=1e-8 | fabs(y2)=1e-8)y1=pow(x1,3)-6*x1-1; y2=pow(x2,3)-6*x2-1;x0=(x1+x2)/2;if(y1*y2=0)x1=x1*2-x2; x2=x0;couty1=y1 y2=y2endl; /直觀顯示出y1和y2的變化cout方程x3-6x-1=0在x=2附近的一個實根:x0endl;return 0;/*計算體重指數(shù)并得出相應(yīng)的評語*/#include #include using namespace std;int main (void)float s,t,x;coutts;if(s5|t0.5 )cout輸入的數(shù)據(jù)無效!n; return 1;x=t/(pow(s,2);if(x18.5) cout不好意思,您有點營養(yǎng)不良!endl;else if(18.5=x&x=23) coutperfect!完美身材endl;else cout唉!您超重了!endl;return 0;/*編寫一個程序,從標準輸入讀入某職員的工作時間(以小時計)和每小時的工資數(shù),計算并輸出他的:工資。若職員月工作時間超過40小時,則超過部分按原工資的15倍來計算。*/#includeusing namespace std;int main(void)int hour;float reward,pay;couthour;coutreward;if(hour40) pay=40*reward+(hour-40)*1.5*reward;coutpayendl;return 0;/*編寫一個程序,輸出n階楊輝三角形,其中n由用戶輸入,該值不能大于13。*/#includeusing namespace std;int c(int n,int m)int i,j,k=1,l=1;for(i=1;i(n-m);j-)l*=j;return l/k;int main(void)int m,n,i,j;coutn;for(i=0;i=n;i+)coutendl;for(m=0;m=35-(i+1);m+=1)cout ;for(j=0;j=i;j+)coutc(i,j) ;coutendl;return 0;/*編寫程序f(),計算1+1/2!+1/3!+1/n!。f()函數(shù)的原型為:double f(int n)*/#includeusing namespace std;int main(void)double f(int n); /函數(shù)原型聲明int n;coutn;coutf(n)endl;return 0;double f(int n)float s,e=1;int i;for(i=1,s=0;i=n;)e*=i;s+=1.0/e;i+=1;return s;/*編寫程序:通過函數(shù)調(diào)用,求正整數(shù)m和n的最大公約數(shù)和最小公倍數(shù)*/#includeusing namespace std;int y(int m,int n)int t;if(m=0 | n=0)return 0;else if(mn)t=m;m=n;n=t;while(m%n!=0)t=m%n;m=n;n=t;return n;int main(void)int m,n;coutmn;cout最大公約數(shù)為:y(m,n)endl;cout最大公倍數(shù)為:m*n/y(m,n)endl;return 0;/*編寫程序,通過函數(shù)調(diào)用,求滿足以下條件的最大n:12+22+32+n21000 */#include#includeusing namespace std;int p(int n)return pow(n,2);int main(void)int n=1,s=0;for(;s1000;n+)s+=p(n);cout最大的n為:nendl;return 0;/*編寫程序,通過調(diào)用函數(shù),對輸入的整數(shù)k輸出它的全部素數(shù)因子。例如:當(dāng)k=126時,素數(shù)因子為2、3、3、7.要求按如下格式輸出:126=2*3*3*7. */#includeusing namespace std;void f(int n)int c=2;coutnc)if(n%c=0)coutc*;n=n/c; elsec+;coutn;coutendl;int main(void)int x;coutx;f(x);return 0;/*編寫程序,通過函數(shù)調(diào)用,求出3個實數(shù)中的最大值并輸出。程序中必須用函數(shù)求出兩個數(shù)中的大數(shù)。*/#includeusing namespace std;float f(float a,float b,float c);int main(void)float a,b,c;coutabc;cout最大數(shù)是:f(a,b,c)b?a:b;s=ct?c:t;return s;/*編寫程序,通過函數(shù)調(diào)用,實現(xiàn)十進制向十六進制的轉(zhuǎn)換*/#includeusing namespace std;void f(int n);int main(void)int n;coutn;cout該數(shù)的十六進制值為:;f(n);coutendl;return 0;void f(int n)couthexn;return;/*編寫程序,通過函數(shù)調(diào)用,判斷任一整數(shù)是否為回文數(shù)?;匚臄?shù)即左讀和右讀都相同的數(shù),如121、12321.*/#includeusing namespace std;int f(int x)int y,s=0;y=x;while(y0)s=s*10+y%10; /x的最低位變成s的最高位 y=y/10; /去掉個位if(s=x)return 1;elsereturn 0;int main(void)int x;coutx;if(f(x)coutx是回文數(shù)endl;elsecoutx不是回文數(shù)endl;return 0;/*編寫程序,重載求兩個數(shù)中大數(shù)的函數(shù)max(),分別實現(xiàn)求兩個實數(shù)和兩個整數(shù)的大數(shù)。*/#includeusing namespace std;int max(int a,int b)return ab?a:b;float max(float a,float b)return ab?a:b;void main()int a,b;float c,d;coutab;coutcd;cout大數(shù)分別是:max(a,b)tmax(c,d)endl;/*重載函數(shù)求三個整數(shù)和三個實數(shù)的最大值max()*/#includeusing namespace std;int max(int a,int b)return ab?a:b;float max(float a,float b)return ab?a:b;void main()int a,b,c;float x,y,z;coutabc;coutxyz;cout大數(shù)分別是:c?max(a,b):c)tz?max(x,y):z)endl;/*用內(nèi)聯(lián)函數(shù)求兩個整數(shù)中的最大值*/#includeusing namespace std;inline int max(int a,int b) /定義內(nèi)聯(lián)函數(shù)return ab?a:b;void main()int a,b;coutab;cout大數(shù)是:max(a,b)endl;/*內(nèi)聯(lián)函數(shù)求3個整數(shù)的最大值*/#includeusing namespace std;inline int max(int a,int b) /定義內(nèi)聯(lián)函數(shù)return ab?a:b;void main()int a,b,c;coutabc;cout大數(shù)是:c?max(a,b):c)endl;/*編程找出1100之間的所有孿生素數(shù)。所謂孿生素數(shù)就是差為2的素數(shù)。*/#include#includeusing namespace std;int prime(int x)int i,t;t=sqrt(x);for(i=2;it) return x;elsereturn 0;int main(void)int n;cout1100之間的所有孿生素數(shù)如下endl;for(n=2;n=100;n+)if(prime(n)+prime(n+2)=2*n+2)coutntn+2endl;return 0;/*任意輸入一個四位自然數(shù),調(diào)用一個自定義函數(shù),輸出該自然數(shù)的各位數(shù)字組成的最大數(shù)。*/#includeusing namespace std;void f(int x)int a,b,c,d,max,mid,min;a=x/1000;b=(x-a*1000)/100;c=(x-a*1000-b*100)/10;d=x-a*1000-b*100-c*10;max=a;if(ba) max=b;if(maxc) max=c;/求出三個數(shù)的最大值mid=b;if(ab & ca) mid=a;if(ac & cb) min=b;if(c=max)coutdmaxmidmin;if(maxd & d=mid)coutmaxdmidmin;if(midd & d=min)coutmaxmiddd)coutmaxmidmind;void main()int x;coutx;cout重組后的最大數(shù)是:;f(x);coutendl;/*編寫程序,通過root()函數(shù)求解一元二次方程ax2+bx+c=0 (a!=0)的實根。root()函數(shù)的原型:int root(float a,float b,float c,float*px1,float*px2)int root(float a,float b,float c,float&rx1,float&rx2)其中,a,b,c為方程的系數(shù);pX1,pX2分別指向存放方程兩個根的變量,rx1,rx2分別是存放兩個根的變量的別名;返回值為0的時候表示無實根,為1時表示有2個相等的實根,為2時表示有2個不相等的實根。在main函數(shù)中調(diào)用root()函數(shù)分別求方程x2+3x+2=0和4.5x2+5.7x+2=0的實根。 */#include#includeusing namespace std;int root(float a,float b,float c,float*px1,float*px2)float d,x1,x2;int t;d=b*b-4*a*c;if(d0)d=sqrt(d);x1=(-b+d)/a/2;x2=(-b-d)/a/2;*px1=x1;*px2=x2;t=2;return t;int root(float a,float b,float c,float&rx1,float&rx2)float d,x1,x2;int t; d=b*b-4*a*c;if(d0)d=sqrt(d);x1=(-b+d)/a/2;x2=(-b-d)/a/2;rx1=x1;rx2=x2;t=2;return t;void main()float a=1,b=3,c=2,x1,x2;if(root(a,b,c,&x1,&x2)=0)cout方程x2+3x+2=0沒有實根endl;if(root(a,b,c,&x1,&x2)=1)cout方程x2+3x+2=0有兩個相等的實根x1=x2=x1endl;if(root(a,b,c,&x1,&x2)=2)cout方程x2+3x+2=0有兩個不相等的實根x1=x1tx2=x2endl;float e=4.5,f=5.7,g=2,r1,r2;if(root(e,f,g,r1,r2)=0)cout方程4.5x2+5.7x+2=0沒有實根endl;if(root(e,f,g,r1,r2)=1)cout方程4.5x2+5.7x+2=0有兩個相等的實根x1=x2=r1endl;if(root(e,f,g,r1,r2)=2)cout方程4.5x2+5.7x+2=0有兩個不相等的實根x1=r1tr2=x2endl;/*使用公式(n=0)(+)(xn)/n!,編寫程序計算ex()的函數(shù)myexp()。編程要求(1)myexp()函數(shù)能做變精度計算。(2)myexp()函數(shù)應(yīng)為精度參數(shù)設(shè)置默認值,以便調(diào)用。myexp()原型為double myexp(double x,double precision=1e-4)(3)在main()函數(shù)中調(diào)用myexp()函數(shù)計算e0.5(精度為10-4) */#include#includeusing namespace std;int fact(int n) /計算階乘if(n=1)return 1;elsereturn n*fact(n-1);double myexp(double x,double precision=1e-4)int n;double s;for(n=1,s=1;(pow(x,n)/(fact(n)=(1e-16);n+) /1e-16保證精度足夠s+=pow(x,n)/(fact(n);return s;void main()coute0.5=myexp(0.5,1e-4)2 */#includeusing namespace std;long int f(int n)if(n=1 | n=2)return 1;elsereturn f(n-2)+f(n-1);void main()int n;coutn;coutf(n)endl;/*編寫一個遞歸函數(shù),實現(xiàn)將任意的正整數(shù)按反序輸出。例如:輸入12345,輸出54321

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論