《C++程序設(shè)計基礎(chǔ)教程 第2版》-劉厚泉(習(xí)題解答)劉麗敏_第1頁
《C++程序設(shè)計基礎(chǔ)教程 第2版》-劉厚泉(習(xí)題解答)劉麗敏_第2頁
《C++程序設(shè)計基礎(chǔ)教程 第2版》-劉厚泉(習(xí)題解答)劉麗敏_第3頁
《C++程序設(shè)計基礎(chǔ)教程 第2版》-劉厚泉(習(xí)題解答)劉麗敏_第4頁
《C++程序設(shè)計基礎(chǔ)教程 第2版》-劉厚泉(習(xí)題解答)劉麗敏_第5頁
已閱讀5頁,還剩113頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C++程序設(shè)計基礎(chǔ)教程(第2版)

課后習(xí)題參考答案

第1章C++基礎(chǔ)

一、選擇題

(1)B(2)D(3)B(4)C(5)A(6)D(7)B(8)B

二、程序閱讀題(寫出各程序的輸出結(jié)果)

(1)

***

***

(2)

inputa,b:310

7

(3)

5.6(輸入)

98.4704

三、編程題

1、編寫程序,輸入兩個數(shù),按由大到小的順序輸出這兩個數(shù)。

#include<iostream>

usingnamespacestd;

intmain()

{inta,b;

cin?a?b;

if(a>b)

cout?a?**?b;

else

cout<vb<<''<<a;

return0;

)

2、編寫程序,輸入某一年份,計算5月1日是該年份的第幾天。

#include<iostream>

usingnamespacestd;

intmain()

(

intyear,days;

cout<<”請輸入年份:

cin?year;

days=31+30+31+30+1;

if((year%4==0&&year%100!=0)||(year%400==0))days++;

cout<<"它是第"<<days<<"夭";

return0;

第2章基本數(shù)據(jù)類型與運算符

一、選擇題

(1)C(2)A(3)A(4)A(5)B

二、程序閱讀題(寫出各程序的輸出結(jié)果)

(1)

abcHabc

abc\abc

(2)

i=2

i=2

(3)

10333.2

04t3

(4)

011

122

212

(5)

1

1

3

(6)

2

/*結(jié)果為2,預(yù)期應(yīng)為3。主要的原因是在將雙精度實型數(shù)據(jù)的表示是近似值,在轉(zhuǎn)換為整

型數(shù)據(jù)時有誤差*/

三、填空題

(1)

x*x*(a+b)/(a-b)

(2)

1

(3)

(m/100)(m/10)%10m%10

(4)

0.0雙精度實型

149.0雙精度實型

84.0雙精度實型

四、編程題

1、編寫程序,輸入整型數(shù)a,b的值,分別計算并輸出(a++)+b、a+(++b)和a+++b的值。

#include<iostream>

usingnamespacestd;

intmain()

(

inta,b;

cin?a?b;

cout?(a++)+b?endl;

cin?a?b;

cout?a+(++b)?endl;

cin?a?b;

cout?a+++b?endl;

return0;

)

2、編寫程序,對輸入的一個3位正整數(shù),分離出個位、十位和百位,并輸出各位數(shù)之和。

#include<iostream>

usingnamespacestd;

intmain()

(

intn,a,b,c;

cin?n;

a=n/100;

b=(n/10)%10;

c=n%10;

cout?a+b+c?endl;

return0;

)

第3章程序控制

一、選擇題

(1)C(2)A(3)A(4)A(5)B

二、編程題

1、編程計算數(shù)學(xué)上的符號函數(shù):

1%>0

y=0x=0

.-1%>0

#include<iostream>

usingnamespacestd;

#include<cmath>

intmain(){

doublex,y;

cin?x;

if(fabs(x)<le-5)

y=0;

elseif(x>l)

y=l;

else

y=-i;

cout?,'x=,,?x?,',y=,'?y;

return0;

)

2、編寫一個程序,通過輸入的年份,判斷是否為閏年。

#include<iostream>

usingnamespacestd;

intmain()(

intyear;

cout?nPleaseinputayear:\n";

cin?year;

if(year%4==0&&year%100!=0||year%400==0)

cout?year?"isaleapyear.\n";

else

cout?year?"isnotaleapyearAn";

return0;

)

3、編程求三個數(shù)中最小數(shù),要求用戶輸入三個數(shù),顯示其中的最小值。

#include<iostream>

usingnamespacestd;

intmain(){

inta,b,c;

cout?nPleaseinputthreenumbers:\n";

cin?a?b?c;

intmin;

min=a;

if(b<min)

min=b;

if(c<min)

min=c;

cout?"Theminimumnumberamong"?a?""?b?""?c?"is"?min;

return0;

}

4、編程計算一元二次方程。尤2+bx+c=0的解,考慮各種可能情況。

#include<iostream>

usingnamespacestd;

intmain(){

doublea,b,c;

doublexl,x2;

cout?nPleaseinputthreenumbers:\nH;

cin?a?b?c;

doubledelta=b*b-4*a*c;

if(delta<0)

cout?nTheequtionhasnosolution."

elseif(delta==0){

xl=x2=(-b)/(2*a);

cout?nThisequationhasuniquesolution:"?xl;

)

else{

xl=(-b-sqrt(delata))/(2*a));

x2=(-b+sqrt(delata))/(2*a));

cout?"Thisequationhastwosolutions:x1="?x1?",x2="?x2;

)

return0;

}

5、編寫程序,輸入月份輸出其英文名稱和天數(shù)。

#include<iostream>

usingnamespacestd;

intmain(){

intmonth;

cout?"Pleaseinputamonthinnumber(l-12):\n";

cin?month;

switch(month){

case1:cout?"Januaryhas31days.";break;

case2:cout?"Februaryhas28/29days.";break;

case3:cout?"Marchhas31days.";break;

case4:cout?"Aprilhas30days.1';break;

case5:cout?nMayhas31days.";break;

case6:cout?"Junehas30days.";break;

case7:cout?"Julyhas31days.";break;

case8:cout?"Augusthas31days.";break;

case0:cout?HSeptemberhas30days.";break;

case10:cout?"Octoberhas31days.";break;

case11:cout?"Novemberhas30days.";break;

case12:cout?"Decememberhas31days.";break;

)

return0;

)

6、輸入一個百分制成績(double型),要求輸出成績等級A,B,C,D,E。90分以上

為A',80?90分為B,70?79分為C,60?69分為D,60分以下為E。

#include<iostream>

#include<cmath>

usingnamespacestd;

intmain()

(

doublescore;

chargrade;

cout?"pleaseenterscoreofstudent:";

cin?score;〃輸入百分制成績

while(score>100||score<0)〃超出范圍,則報錯,重新接受輸入

(

cout?"dataerror,enterdataagain.";

cin?score;

)

switch(int(score/10))

(

case10:

case9:if(fabs(score-90)<1e-6)grade='B';

elsegrade='A';

break;

case8:grade二B;break;

case7:grade二C;break;

case6:grade='D';break;

default:grade='ET;

)

cout?"scoreisn?score?n,gradeis"?grade?endl;

return0;

)

7、編程計算初。"由用戶輸入,輸入的"不合法時給出錯誤提示。

#include<iostream>

usingnamespacestd;

intmain(){

intn;

cout?"Pleaseinputanumber(1-100):\n";

cin?n;

if(n>=100||n<0)

(

cout?"Toobig!";

exit(l);

}

doublefactorial=l;

for(inti=l;i<=n;i++)

factorial*=i;

cout?n?'Hsfactorialis"?factorial;

return0;

)

8、輸入n(n<13),計算1!+2!H------1-n!o

#include<iostream>

usingnamespacestd;

intmain(){

intn;

cout?"Pleaseinputanumber(l-12):\n";

cin?n;

intsum=0;

for(intx=l;x<=n;x++){

intsubSum=l;

for(inti=l;i<=x;i++)

subSum*=i;

sum+=subSum;

cout?"Thesumis:n?sum;

return0;

9、求100以內(nèi)能同時被3和5整除的奇數(shù)。

#include<iostream>

usingnamespacestd;

intmain()

{

for(inti=l;i<=100;i+=2)

(

if(i%3==0&&i%5==0)

cout?i?H

)

return0;

)

10、給出一個不多于5位的正整數(shù),(1)求它是幾位數(shù),(2)從最高位到最低位輸出每位數(shù)

字,(3)從最低位到最高位輸出各位數(shù)字。

【方法一】

#include<iostream>

usingnamespacestd;

intmain()

(

intnum;

intindiv,ten,hundred,thousand,ten_thousand,bitCount;

/*分別代表個位,十位,百位,千位,萬位和位數(shù)*/

cout?"enteraninteger(0-99999):";

cin?num;

if(num>9999)

bitCount=5;

elseif(num>999)

bitCount=4;

elseif(num>99)

bitCount=3;

elseif(num>9)

bitCount=2;

elsebitCount=l;

cout?"bitCount="?bitCount?endl;

〃計算各位數(shù)字

ten_thousand=num/l0000;

thousand=(int)(num-ten_thousand*10000)/1000;

hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;

ten=(int)(num-ten_thousand*1OOOO-thousand*1OOO-hundred*l00)/10;

indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);

cout?"originalorder:*';

switch(bitCount)

{

case5:cout?ten_thousand?,',"?thousand?'V'?hundred?n,,'?ten?","?indiv?endl;

cout?"reverseorder:";

cout?indiv?ten?hundred?thousand?ten_thousand?endl;

break;

case4:cout?thousand?","?hundred?","?ten?",H?indiv?endl;

cout?"reverseorder:";

cout?indiv?ten?hundred?thousand?endl;

break;

case3:cout?hundred?n,n?ten?","?indiv?endl;

cout?"reverseorder:*';

cout?indiv?ten?hundred?endl;

break;

case2:cout?ten?",''?indiv?endl;

cout?"reverseorder:";

cout?indiv?ten?endl;

break;

case1:cout?indiv?endl;

cout?"reverseorder:*';

cout?indiv?endl;

break;

}

return0;

)

【方法二】

#include<iostream>

usingnamespacestd;

#include<cmath>

intmain()

(

longintnum;

intindiv,ten,hundred,thousand,ten_thousand,bitCount=0;

/*分別代表個位,十位,百位,千位,萬位和位數(shù)*/

cout?"enteraninteger(0-99999):";

cin?num;

inttmp二num;

while(tmp)

bitCount++;

tmp/=10;

)

cout<<”它的位數(shù)為:"<<bitCount?endl;

〃逆序輸出

tmp=num;

while(tmp)

(

cout?tmp%10?n

tmp/=10;

)

cout?endl;

〃順序輸出

tmp=num;

while(tmp)

(

cout?int(tmp/pow(float(10),float(bitCount-l)))?"";

tmp=int(tmp%int(pow(float(10),float(bitCount-1))));

bitCount—;

)

return0;

)

11、對于一個整數(shù)num,逆向輸出其各位數(shù)字,同時求出其位數(shù)以及各位數(shù)字之和。

#include<iostream>

usingnamespacestd;

intmain(){

intnum,sum=0,k,i=0;

cin?num;

while(num>0)

(

k=num%10;

cout?k?"

sum+=k;

i++;

num二num/10;

)

cout?”\n各位數(shù)字之和:n?sum?endl;

cout?“位數(shù):"<<i?endl;

return0;

}

12、分別使用while,dowhile語句打印輸出九九乘法表。

[while]

#include<iostream>

usingnamespacestd;

intmain(){

inti=l,j;

while(i<=9)

(

j=l;

while(j<=i)

(

cout?i?n*H<<j?H=n?i*j?H\tn;

J++;

)

cout?endl;

i++;

)

return0;

}

[do...while]

#include<iostream>

usingnamespacestd;

intmain(){

inti=l,j;

do

{

j=l;

do

(

cout?i?"*"?j?"="?i*j?"\t";

j++;

}while(j<=i);

cout?endl;

i++;

}while(i<=9);

return0;

)

13、求正整數(shù)n的階乘n!,其中l(wèi)<=n<=13。

#include<iostream>

usingnamespacestd;

intmain()

intnum;

cin?num;

longfac=l;

for(inti=l;i<=num;i++)

fac*=i;

cout?num?"!="?fac;

return0;

)

14、使用循環(huán)語句,對cos(x)多項式求和。

22n-2

rY4Ji

cos(x)=l-—+---(-1嚴(yán)+...

2!4!(2n-2)l

#include<iostream>

#include<cmath>

usingnamespacestd;

intmain()

inti=l;

floatx,t,value;

cout?"請輸入X的值

cin?x;

value=l;t=l;

while(fabs(t)>=1e-9)

t=t*(-l)*x*x/((2*i)*(2*i-l));〃通項的值

value=value+t;

i++;

)

cout?"cos(',?x?',)=',?value?endl;

return0;

)

15、一個整數(shù)如果是另一個整數(shù)的完全平方,那么就稱該數(shù)為完全平方數(shù),如0、1、4、9、

16.............要求不允許使用開方函數(shù)sqrt(),計算輸出100以內(nèi)的所有完全平方數(shù)。

#include<iostream>

usingnamespacestd;

intmain(){

intn,m,h;

cin?n;

for(m=l;m<=n/2;m++){

h=m*m;

if(h==n){

cout?nTRUE\nn;

return0;

)

)

cout?,'False\nn;

return0;

)

16、回文數(shù)的概念:即是給定一個數(shù),這個數(shù)順讀和逆讀都是一樣的。例如:121,1221是

回文數(shù),123,1231不是回文數(shù)。編程實現(xiàn)回文整數(shù)的判斷。

#include<iostream>

usingnamespacestd;

intmain(){

inti=l,j;

intx,newed,t,n;

cin?x;

newed=0;

n=x;

do{

newed=newed*10+x%10;

x/=10;

}while(x>0);

if(n==newed)

cout?"Yes\nn;

else

cout?HNo\nH;

return0;

)

17、輸出所有的“水仙花數(shù)”。所謂“水仙花數(shù)”是指一個3位數(shù),其各位數(shù)字的立方之和

等于該數(shù)本身。例如,153是一個水仙花數(shù),因為153=展+53+33。

#include<iostream>

usingnamespacestd;

intmain(){

inti,j,k,n;

cout?"narcissusnumbersare:n?endl;

for(n=100;n<1000;n++)

(

i=n/100;〃百位數(shù)

j=n/10-i*10;〃十位數(shù)

k=n%10;//個位數(shù)

if(n==i*i*i+j*j*j+k*k*k)

cout?n?"

)

cout?endl;

return0;

)

18、求1000之內(nèi)所有“完數(shù)”。所謂的“完數(shù)”是指一個數(shù)恰好等于它的所有因子之和。例

如6是完數(shù),因為6=1+2+3。

#include<iostream>

usingnamespacestd;

intmain(){

intm,s,i;

for(m=2;m<1000;m++){

s=0;

for(i=l;i<m;i++)

if((m%i)==0)s=s+i;

if(s==m){

cout?m?n是一個完數(shù)"<<endl;

cout?"itsfactorsare:";

for(i=l;i<m;i++)

if(m%i==0)cout?i?"n;

cout?endl;

}

)

return0;

)

19、猴子吃桃問題。猴子第1天摘了若干個桃子,當(dāng)即吃了一半,還不解饞,又多吃了一個;

第2天,吃剩下的桃子的一半,還不過癮,又多吃了一個;以后每天都吃前一天剩下的一半

多一個,到第10天想再吃時,只剩下一個桃子了。問第一天共摘了多少個桃子?

#include<iostream>

usingnamespacestd;

intmain(){

intday,xl,x2;

day=9;

x2=l;

while(day>0){

xl=(x2+l)*2;//前天的桃子數(shù)是后天桃子數(shù)加后的倍

x2=xl;

day—;

)

cout<<"total=n?xl?endl;

return0;

}

20、盒子中放有12個球,其中3個紅球,3個白球,6個黑球,從中任取6個球,問其中至

少有一個球是紅球的取法有多少種?輸出每一種具體的取法。

#include<iostream>

usingnamespacestd;

intmain(){

inti,j,k;

intnumber=O;

for(i=0;i<=3;i++)

for(j=0;j<=3;j++)

for(k=0;k<=6;k++)

if(i+j+k==8)

(

cout<<“紅球"<<i?"個,白球"<<j?"個,黑球"vvk<<”個。\nH;

number++;

}

cout?"Totalnumber:H?number;

return0;

)

21、*張三說李四說謊,李四說王五說謊,王五說張三和李四都說謊。判斷3人中到底誰真

誰假。

#include<iostream>

usingnamespacestd;

#defineZHANGSAN(L==0)

#defineLISI(W==0)

#defineWANGWU(Z==0&&L==0)

intmain(){

intZ=0,L=0,W=0;

for(Z=0;Z<=1;Z++)

for(L=0;L<=1;L++)

for(W=0;W<=1;W++)

if(ZHANGSAN=二Z&&LISI==L&&WANGWU==W){

Z?cout<〈"張三說的是真話\n”:cout<〈”張三說的是假話\n”;

L?cout?"李四說的是真話坨”:cout<<"李四說的是假話\n";

W?cout<<"王五說的是真話3":cout<〈"王五說的是假話\n";

)

return0;

22、*兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽簽決

定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找

出三隊賽手的名單。

#include<iostream>

usingnamespacestd;

intmain()

chari,j,k;〃i是A的對手;j是B的對手;k是C的對手

for(i=,X,;i<=,Z';i++)

for產(chǎn)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<<"C-"?k?endl;

return0;

第4章函數(shù)

一、選擇題

(1)D(2)C(3)A(4)B(5)A

二、編程題

1、編寫函數(shù)把華氏溫度轉(zhuǎn)換成攝氏溫度,公式為C=g(F-32)。輸入輸出在主函數(shù)中完

成。

#include<iostream>

usingnamespacestd;

doubleconvertToF(double);

intmain()

(

doubletemper;

cout<<"輸入要轉(zhuǎn)換的華氏溫度值:”;

cin?temper;

cout<<”轉(zhuǎn)換后的攝氏溫度為:"<<convertToF(temper)?endl;

return0;

)

doubleconvertToF(doubleF)

(

return(F-32)*5/9;

)

2、已知y=其中,s/t為雙曲正弦函數(shù),即s以t)=二二。編寫程序,輸入x的

“sh(2x)+sh(3x)2

值,計算y的值。

#include<iostream>

usingnamespacestd;

#include<cmath>

doublesh(doublet)

(

return(exp(t)-exp(-t))/2;

)

doubley(doublex){

returnsh(1+sh(x))/(sh(2*x)+sh(3*x));

)

intmain(){

doublex;

cout?nPleaseinputx:\n";

cin?x;

cout?y(x);

return0;

)

3、求400之內(nèi)的“親密對數(shù)二所謂“親密對數(shù)”,即整數(shù)A的所有因子之和等于整數(shù)B,

而B的所有因子之和等于A(說明:一個整數(shù)的因子是指除了本身之外的所有因子,包含

Do

#include<iostream>

#include<cmath>

usingnamespacestd;

voidmain(){

intFactorSum(intfac);

intanotherNum;

for(inti=l;i<=400;i++){

anotherNum=FactorSum(i);

if(FactorSum(anotherNum)==i&&i<anotherNum)

cout?"("?i?","?anotherNum<<")";

intFactorSum(intfac){〃親密對數(shù)計算

intsum=1;

for(inti=2;i<fac;i++){

if(0==fac%i){

sum+=i;

returnsum;

4、有些回文數(shù)同時還是一個數(shù)的平方。比如676是回文數(shù),同時也是26的平方,稱為平方

回文。編程找出100000以內(nèi)的平方回文。

#include<iostream>

usingnamespacestd;

#include<cmath>

boolpalindrome(intx){

intm,newed=0;

m=x;

do{

newed=newed*10+m%10;

m/=10;

}while(m>0);

if(x==newed)returntrue;

returnfalse;

)

intmain(){

for(intn=l;n<=100000;n++){

if(palindrome(n)&&((int)sqrt(n))*((int)sqrt(n))==n)

cout?n?"

)

return0;

}

5、設(shè)計函數(shù)intdigit(longn,intk),返回整數(shù)n從右邊開始第k個數(shù)字的值,若不存在第k個

數(shù)字則返回-1。例如:

digit(123456,2)=5

digit(3456,6)=-l〃位數(shù)不夠,返回-1

#include<iostream>

#include<cmath>

usingnamespacestd;

voidmain()

(

intnum,k;

COUt<<”請輸入待測整數(shù):”;

cin?num;

COUt<<”請輸入待測位數(shù)(從右邊開始):”;

cin?k;

intdigit(longint,int);

cout?num<〈”從右邊數(shù)第“<<k?“位數(shù)字是"<<digit(num,k)?endl;

)

intdigit(longintn,intk)

(

if(k<=0)return-1;//簡單的異常處理

if(n==0&&k==1)return0;

unsignedlongi=1;

n=(n<0?-n:n);〃這行可以用n=abs(n)替換

for(k=k-1;k>0;k—)

(

n=n/10;

)

if(n>=l)returnn%10;

elsereturn-1;

6、編寫兩個函數(shù),分別計算兩個整數(shù)的最大公約數(shù)和最小公倍數(shù)。

#include<iostream>

usingnamespacestd;

intmain(){

inthcf(int,int);〃函數(shù)聲明

intlcd(int,int,int);

intu,v,h,l;

cin?u?v;

h=hcf(u,v);〃求最大公約數(shù)

cout?"H.C.F="?h?endl;

]=lcd(u,v,h);〃求最小公倍數(shù)

cout?"L.C.D="?l?endl;

return0;

)

inthcf(intu,intv){

intt,r;

if(u<v){〃交換

t=u;u=v;v=t;

}

while((r=u%v)!=0){

u=v;

v=r;

)

retum(v);

)

intlcd(intu,intv,inth){

retum(u*v/h);

)

7、求出2007000所有這樣的整數(shù),它們的各位數(shù)字之和等于5,其中判斷一個數(shù)的各位數(shù)

字之和是否為5的功能封裝為一個函數(shù)。

#include<iostream>

usingnamespacestd;

intmain(){

intcount=0,s,k,i;

for(i=200;i<=1000;i++){

s=0;

k=i;

while(k>0){

s=s+k%10;

k=k/10;

if(s!=5)continue;

else{

count++;

cout?i?"

if(count%10==0)cout?endl;

)

)

return0;

}

8、寫一個函數(shù)驗證哥德巴赫猜想:一個不小于6的偶數(shù)可以表示為兩個素數(shù)之和,如6=3+3,

8=3+5,,10=3+7.......在主函數(shù)中輸入一個不小于6的偶數(shù)n,然后調(diào)用函數(shù)gotbaha,在gotbaha

函數(shù)中再調(diào)用prime函數(shù),prime函數(shù)的作用是判別一個數(shù)是否為素數(shù)。在gotbaha函數(shù)中

輸出以下形式的結(jié)果:34=3+31

#include<iostream>

#include<cmath>

usingnamespacestd;

voidgotbaha(inta);

boolIsPrime(inta);

intmain(){

inta;

cin?a;

gotbaha(a);

return0;

)

voidgotbaha(inta){

inti;

for(i=3;i<=a/2;i+=2){

if(IsPrime(i)&&IsPrime(a-i))

cout?a?'-n?i?"+n?a-i?endl;

)

}

boolIsPrime(inta){

inti;

fbr(i=2;i<=int(sqrt(a));i++){

if(a%i==0)returnfalse;

)

if(i>=sqrt(a))returntrue;

elsereturnfalse;

)

9、組合數(shù)公式為。器=£工,編寫程序,輸入zn和"的值,計算C九其中階乘計算寫成函

數(shù)。注意算法優(yōu)化。要求,主函數(shù)調(diào)用一下函數(shù)組合數(shù):

intfabricate(intm,intn);〃返回C丸

fabricate函數(shù)內(nèi)部調(diào)用multiplicate函數(shù)

intmultiplicate(intp,intq);〃返回pX(p—1)X...Xq

程序由4個文件組成。頭文件用于存放函數(shù)原型,作為調(diào)用接口;其它3個源文件

分別是main,fabricate和multiplicate函數(shù)定義。

#header.h

intfabricate(intm,intn);

intmultiplicate(intp,intq);

//main.cpp

#include<iostream>

usingnamespacestd;

#include"header.h"

intmain(){

intm,n;

cout?"Pleaseinputm,n:\nH;

cin?m?n;

cout?fabricate(m,n);

return0;

)

#fabricate.cpp

#include"header.h"

intfabricate(intm,intn){

returnmultiplicate(m,1)/(multiplicate(m-n,1)*multiplicate(n,1));

}

#multiplicate.cpp

intmultiplicate(intp,intq){

intt=l;

for(inti=p;i>=q;i—)

t*=i;

returnt;

)

10、編寫函數(shù)sumSeries,它的功能是:計算下列級數(shù)的和。

S=1+x+J+*…其中n和x由鍵盤輸入。

#include<iostream>

usingnamespacestd;

intmain(){

intn;

floata,sum,x;

cin?n?x;

sum=l,a=x;

for(inti=1;i<=n;){

sum+=a;

++i;

a*=x/i;

)

cout?sum;

return0;

)

11、編寫函數(shù)toOcr(intn),將十進制數(shù)n轉(zhuǎn)換為對應(yīng)的八進制數(shù)。

#include<iostream>

#include<cmath>

usingnamespacestd;

voidmain()

(

inttoOcr(intn);

intnum;

cout<<”請輸入一個十進制整數(shù):

cin?num;

COUtVV”對應(yīng)的八進制數(shù)是:”;

cout?toOcr(num);

)

inttoOcr(intn)

(

intremainder;

if(n<=7)returnn;

else

(

remainder二n%8;

returnremainder+10*toOcr(n/8);

)

)

12、用遞歸方法求n階勒讓德多項式的值,遞歸公式為

1(n=0)

匕(x)=,x(n=l)

((2n-l)-x-Pi(九)一(〃一1)?pn_2(x))/n(n>l)

#include<iostream>

#include<cmath>

usingnamespacestd;

voidmain(){

floatp(int,double);

intn;

doublex;

cout<v”請輸入n和x的值:”;

cin?n?x;

cout?"P"?n?"("?x?H)=n?p(n,x);

)

floatp(intn,doublex){

if(n==0)

return(l);

elseif(n==l)

retum(x);

else

retum(((2*n-l)*x*p((n-l),x)-(n-l)*p((n-2),x))/n);

)

13、用遞歸法將一個整數(shù)n轉(zhuǎn)換成字符串。例如,輸入483,應(yīng)輸出字符串“483”。n的位

數(shù)不確定,可以是任意位數(shù)的整數(shù)。

#include<iostream>

usingnamespacestd;

intmain()

{

voidconvert(intn);

intnumber;

cout?"inputaninteger:";

cin?number;

cout?"output:H?endl;

if(number<0)

(

cout?n-n;

number=-number;

)

convert(number);

cout?endl;

return0;

}

voidconvert(intn)

inti;

charc;

if((i=n/10)!=0)

convert(i);

c=n%10+'0‘;

cout?""?c;

)

14、編寫一個遞歸函數(shù),將整數(shù)的每個位上的數(shù)字按相反的順序輸出。例如,輸入1234,輸

出4321o

#include<iostream>

usingnamespacestd;

intmain(){

voidconvert(intn);

intnumber;

cout?"inputaninteger:";

cin?number;

cout?"output:"?endl;

if(number<0){

cout?n-n;

number二-number;

}

convert(number);

return0;

)

voidconvert(intn){

if(n<10)cout?n;

else{

cout?n%10;

convert(n/10);

)

)

15、用牛頓迭代法求根。方程為63+加;2+5+1=°。系數(shù)以仄C、d的值依次為1、

2、3、4由主函數(shù)輸入。求出根后由主函數(shù)輸出。設(shè)方程為/(嗎=(),則牛頓迭代公式為:

/i+i=g-/(g)"’&),其中尸(%)是〃>)的導(dǎo)函數(shù)。迭代初值由鍵盤輸入。

#include<iostream>

#include<cmath>

usingnamespacestd;

intmain()

doublevalue(double,double,double,double);

doublea,b,c,d;

cout?ninputa,b,c,d:H;

cin?a?b?c?d;

cout?"x="?value(a,b,c,d)?endl;

return0;

}

doublevalue(doublea,doubleb,doublec,doubled)

(

doublex=l,x0,f,fl;

do{

x0=x;

f=((a*x0+b)*x0+c)*x0+d;

fl=(3*a*x0+2*b)*x0+c;〃導(dǎo)數(shù)求值

x=x0-f/fl;}〃為什么這樣寫?

while(fabs(x-xO)>=1e-6);

returnx;

)

16>*使用梯形法計算定積分。/(冗)比¥的值,其中a=0,b=1,f(x)=sin(x)o

提示:將積分區(qū)間分成ri等份,每份的寬度為八=等,在區(qū)間[a+/,a+(i+l)網(wǎng)上

使用梯形的面積近似原函數(shù)的積分,貝I:

rgra+G+DAgh

I/(x)dx=ZIf(x)dx(f(a+%)+f(a+(i+l)/i)

ai=0。+%i=l

=h曄普+詼))

這就是數(shù)值積分的梯形求積公式。71越大或八越小,積分就越精確。本題也可以取1000。

#include<iostream>

usingnamespacestd;

#include<cmath>

doubleintegrate(floata,floatb,intn=1000){

doubleh=(b-a)/n;

doubleresult=(sin(a)+sin(b))/2;

for(inti=l;i<=n-l;i++)

result+=sin(a+i*h);

result*=h;

returnresult;

)

intmain(){

doublea,b;

cin?a?b;

intn;

cout?integrate(0,1,1000);

return0;

)

17、使用重載函數(shù)編寫程序分別把兩個數(shù)和三個數(shù)從大到小排列。

#include<iostream>

usingnamespacestd;

voidsort(inta,intb){

inttemp;

if(a>b){

temp二a;

a=b;

b=temp;

)

cout?a?","?b?endl;

)

voidsort(floatx,floaty,floatz){

floattemp;

if(x>y){

temp二x;

x=y;

y=temp;

)

if(z<x)cout?z?n,"?x?",n?y?endl;

elseif(z<y)cout?x?',,',?z?","?y?endl;

elsecout?x?",''?y?',"?z?endl;

)

intmain(){

voidsort(inta,intb);

voidsort(floatx,floaty,floatz);

floatx,y,z;

inta,b;

cout<<”請輸入兩個整數(shù):"?endl;

cin?a?b;

cout<<"排序從小到大為:"?endl;

sort(a,b);

cout<<”請輸入三個浮點數(shù):"?endl;

cin?x?y?z;

cout<〈

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論