《C++程序设计基础教程 第2版》-刘厚泉(习题解答)刘丽敏_第1页
《C++程序设计基础教程 第2版》-刘厚泉(习题解答)刘丽敏_第2页
《C++程序设计基础教程 第2版》-刘厚泉(习题解答)刘丽敏_第3页
《C++程序设计基础教程 第2版》-刘厚泉(习题解答)刘丽敏_第4页
《C++程序设计基础教程 第2版》-刘厚泉(习题解答)刘丽敏_第5页
已阅读5页,还剩113页未读 继续免费阅读

下载本文档

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

文档简介

C++程序设计基础教程(第2版)

课后习题参考答案

第1章C++基础

一、选择题

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

二、程序阅读题(写出各程序的输出结果)

(1)

***

***

(2)

inputa,b:310

7

(3)

5.6(输入)

98.4704

三、编程题

1、编写程序,输入两个数,按由大到小的顺序输出这两个数。

#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章基本数据类型与运算符

一、选择题

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

二、程序阅读题(写出各程序的输出结果)

(1)

abcHabc

abc\abc

(2)

i=2

i=2

(3)

10333.2

04t3

(4)

011

122

212

(5)

1

1

3

(6)

2

/*结果为2,预期应为3。主要的原因是在将双精度实型数据的表示是近似值,在转换为整

型数据时有误差*/

三、填空题

(1)

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

(2)

1

(3)

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

(4)

0.0双精度实型

149.0双精度实型

84.0双精度实型

四、编程题

1、编写程序,输入整型数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位正整数,分离出个位、十位和百位,并输出各位数之和。

#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、编程计算数学上的符号函数:

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、编程求三个数中最小数,要求用户输入三个数,显示其中的最小值。

#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、编写程序,输入月份输出其英文名称和天数。

#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以内能同时被3和5整除的奇数。

#include<iostream>

usingnamespacestd;

intmain()

{

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

(

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

cout«i«H

)

return0;

)

10、给出一个不多于5位的正整数,(1)求它是几位数,(2)从最高位到最低位输出每位数

字,(3)从最低位到最高位输出各位数字。

【方法一】

#include<iostream>

usingnamespacestd;

intmain()

(

intnum;

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

/*分别代表个位,十位,百位,千位,万位和位数*/

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;

〃计算各位数字

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;

/*分别代表个位,十位,百位,千位,万位和位数*/

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

cin»num;

inttmp二num;

while(tmp)

bitCount++;

tmp/=10;

)

cout<<”它的位数为:"<<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、对于一个整数num,逆向输出其各位数字,同时求出其位数以及各位数字之和。

#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各位数字之和:n«sum«endl;

cout«“位数:"<<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、求正整数n的阶乘n!,其中l<=n<=13。

#include<iostream>

usingnamespacestd;

intmain()

intnum;

cin»num;

longfac=l;

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

fac*=i;

cout«num«"!="«fac;

return0;

)

14、使用循环语句,对cos(x)多项式求和。

22n-2

rY4Ji

cos(x)=l-—+---(-1严+...

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、一个整数如果是另一个整数的完全平方,那么就称该数为完全平方数,如0、1、4、9、

16.............要求不允许使用开方函数sqrt(),计算输出100以内的所有完全平方数。

#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、回文数的概念:即是给定一个数,这个数顺读和逆读都是一样的。例如:121,1221是

回文数,123,1231不是回文数。编程实现回文整数的判断。

#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、输出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字的立方之和

等于该数本身。例如,153是一个水仙花数,因为153=展+53+33。

#include<iostream>

usingnamespacestd;

intmain(){

inti,j,k,n;

cout«"narcissusnumbersare:n«endl;

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

(

i=n/100;〃百位数

j=n/10-i*10;〃十位数

k=n%10;//个位数

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

cout«n«"

)

cout«endl;

return0;

)

18、求1000之内所有“完数”。所谓的“完数”是指一个数恰好等于它的所有因子之和。例

如6是完数,因为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是一个完数"<<endl;

cout«"itsfactorsare:";

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

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

cout«endl;

}

)

return0;

)

19、猴子吃桃问题。猴子第1天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;

第2天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半

多一个,到第10天想再吃时,只剩下一个桃子了。问第一天共摘了多少个桃子?

#include<iostream>

usingnamespacestd;

intmain(){

intday,xl,x2;

day=9;

x2=l;

while(day>0){

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

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产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章函数

一、选择题

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

二、编程题

1、编写函数把华氏温度转换成摄氏温度,公式为C=g(F-32)。输入输出在主函数中完

成。

#include<iostream>

usingnamespacestd;

doubleconvertToF(double);

intmain()

(

doubletemper;

cout<<"输入要转换的华氏温度值:”;

cin»temper;

cout<<”转换后的摄氏温度为:"<<convertToF(temper)«endl;

return0;

)

doubleconvertToF(doubleF)

(

return(F-32)*5/9;

)

2、已知y=其中,s/t为双曲正弦函数,即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之内的“亲密对数二所谓“亲密对数”,即整数A的所有因子之和等于整数B,

而B的所有因子之和等于A(说明:一个整数的因子是指除了本身之外的所有因子,包含

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){〃亲密对数计算

intsum=1;

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

if(0==fac%i){

sum+=i;

returnsum;

4、有些回文数同时还是一个数的平方。比如676是回文数,同时也是26的平方,称为平方

回文。编程找出100000以内的平方回文。

#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、设计函数intdigit(longn,intk),返回整数n从右边开始第k个数字的值,若不存在第k个

数字则返回-1。例如:

digit(123456,2)=5

digit(3456,6)=-l〃位数不够,返回-1

#include<iostream>

#include<cmath>

usingnamespacestd;

voidmain()

(

intnum,k;

COUt<<”请输入待测整数:”;

cin»num;

COUt<<”请输入待测位数(从右边开始):”;

cin»k;

intdigit(longint,int);

cout«num<〈”从右边数第“<<k«“位数字是"<<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、编写两个函数,分别计算两个整数的最大公约数和最小公倍数。

#include<iostream>

usingnamespacestd;

intmain(){

inthcf(int,int);〃函数声明

intlcd(int,int,int);

intu,v,h,l;

cin»u»v;

h=hcf(u,v);〃求最大公约数

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

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

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所有这样的整数,它们的各位数字之和等于5,其中判断一个数的各位数

字之和是否为5的功能封装为一个函数。

#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、写一个函数验证哥德巴赫猜想:一个不小于6的偶数可以表示为两个素数之和,如6=3+3,

8=3+5,,10=3+7.......在主函数中输入一个不小于6的偶数n,然后调用函数gotbaha,在gotbaha

函数中再调用prime函数,prime函数的作用是判别一个数是否为素数。在gotbaha函数中

输出以下形式的结果: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、组合数公式为。器=£工,编写程序,输入zn和"的值,计算C九其中阶乘计算写成函

数。注意算法优化。要求,主函数调用一下函数组合数:

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

fabricate函数内部调用multiplicate函数

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

程序由4个文件组成。头文件用于存放函数原型,作为调用接口;其它3个源文件

分别是main,fabricate和multiplicate函数定义。

#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、编写函数sumSeries,它的功能是:计算下列级数的和。

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、编写函数toOcr(intn),将十进制数n转换为对应的八进制数。

#include<iostream>

#include<cmath>

usingnamespacestd;

voidmain()

(

inttoOcr(intn);

intnum;

cout<<”请输入一个十进制整数:

cin»num;

COUtVV”对应的八进制数是:”;

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、用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”。n的位

数不确定,可以是任意位数的整数。

#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、编写一个递归函数,将整数的每个位上的数字按相反的顺序输出。例如,输入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=°。系数以仄C、d的值依次为1、

2、3、4由主函数输入。求出根后由主函数输出。设方程为/(吗=(),则牛顿迭代公式为:

/i+i=g-/(g)"’&),其中尸(%)是〃>)的导函数。迭代初值由键盘输入。

#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;〃导数求值

x=x0-f/fl;}〃为什么这样写?

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

returnx;

)

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

提示:将积分区间分成ri等份,每份的宽度为八=等,在区间[a+/,a+(i+l)网上

使用梯形的面积近似原函数的积分,贝I:

rgra+G+DAgh

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

ai=0。+%i=l

=h晔普+诙))

这就是数值积分的梯形求积公式。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、使用重载函数编写程序分别把两个数和三个数从大到小排列。

#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<<”请输入两个整数:"«endl;

cin»a»b;

cout<<"排序从小到大为:"«endl;

sort(a,b);

cout<<”请输入三个浮点数:"«endl;

cin»x»y»z;

cout<〈

温馨提示

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

评论

0/150

提交评论