c++ 机械工业出版社课后习题.docx

上传人:b****4 文档编号:3497685 上传时间:2022-11-23 格式:DOCX 页数:56 大小:27KB
下载 相关 举报
c++ 机械工业出版社课后习题.docx_第1页
第1页 / 共56页
c++ 机械工业出版社课后习题.docx_第2页
第2页 / 共56页
c++ 机械工业出版社课后习题.docx_第3页
第3页 / 共56页
c++ 机械工业出版社课后习题.docx_第4页
第4页 / 共56页
c++ 机械工业出版社课后习题.docx_第5页
第5页 / 共56页
点击查看更多>>
下载资源
资源描述

c++ 机械工业出版社课后习题.docx

《c++ 机械工业出版社课后习题.docx》由会员分享,可在线阅读,更多相关《c++ 机械工业出版社课后习题.docx(56页珍藏版)》请在冰豆网上搜索。

c++ 机械工业出版社课后习题.docx

c++机械工业出版社课后习题

习题1

1、编写一个程序,读取圆的半径,打印圆的直径、周长和面积。

π用常量值3.14159。

在输出中进行这些计算。

#include

usingnamespacestd;

intmain()

{

doubler,P=3.14159;

cout<<"Pleaseenterther:

"<

cin>>r;

cout<<"d\tc\ts"<

cout<<2*r<<"\t"<<2*P*r<<"\t"<

return0;

}

2、编写一个程序,读取5个整数并确定和打印其中的最大值。

#include

usingnamespacestd;

intmain()

{

inta[5],max,i;

cout<<"pleaseenterfivenumbers:

"<

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

cin>>a[i];

max=a[0];

for(i=1;i<5;i++)

{

if(a[i]>max)

max=a[i];

}

cout<<"maxis"<

return0;

}

3、编写一个程序,读取一个整数并确定和打印其为奇数或偶数。

#include

usingnamespacestd;

intmain()

{

intn;

cout<<"Pleaseenteranumber:

"<

cin>>n;

if(n%2==0)

cout<<"even!

"<

else

cout<<"odd!

"<

return0;

}

4、用八条输出语句显示下列棋盘图案,然后用更少的语句显示这个棋盘图案。

********

********

********

********

********

********

********

********

#include

usingnamespacestd;

intmain()

{

cout<<"********"<

cout<<"********"<

cout<<"********"<

cout<<"********"<

cout<<"********"<

cout<<"********"<

cout<<"********"<

cout<<"********"<

return0;

}

习题2

2.1输入n,求1!

+2!

+3!

+…+n!

#include

usingnamespacestd;

intmain()

{

intfun(intx);

intn,i,s=0;

cout<<"pleaseenteranumber:

"<

cin>>n;

for(i=1;i<=n;i++)

s=s+fun(i);

cout<<"1!

+2!

+3!

+…+n!

="<

return0;

}

intfun(intx)

{

inty;

if(x==1||x==0)

y=1;

else

y=x*fun(x-1);

returny;

}

2.2猴子吃桃问题:

猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第十天吃以前发现只剩下一个桃子,问猴子共摘了几个桃子。

#include

usingnamespacestd;

intmain()

{

intr=1,n,d=9;

for(d=9;d>0;d--)

{

n=2*(r+1);

r=n;

}

cout<<"total="<

return0;

}

2.3从键盘输入一组非0整数,以输入0标志结束,求这组整数的平均值,并统计其中正数和负数的个数。

#include

usingnamespacestd;

intmain()

{

inta[100],i,j,sum=0,n1=0,n2=0;

doubleave;

cout<<"Pleaseinputthearray(endwith0):

"<

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

{

cin>>a[i];

if(a[i]==0)

break;

}

for(j=0;j

{

sum=sum+a[j];

if(a[j]>0)

n1=n1+1;

else

n2=n2+1;

}

ave=(double)sum/i;

cout<<"average="<

cout<

return0;

}

2.4编程找出1~500之中满足除以3余2,除以5余3,除以7余2的整数。

#include

usingnamespacestd;

intmain()

{

inti;

for(i=1;i<=500;i++)

{

if(i%3==2)

if(i%5==2)

if(i%7==2)

cout<

}

cout<

return0;

}

2.5编程求1000之内的所有完全数。

所谓完全数指的是一个数恰好等于它的所有因子和。

例如6=1+2+3,就是一个完全数。

#include

usingnamespacestd;

intmain()

{

inti,j,s;

for(i=2;i<=1000;i++)

{

s=0;

for(j=1;j

{

if(i%j==0)

s=s+j;

}

if(i==s)//完全数的条件

{

cout<

cout<<"其因子分别为";

for(j=1;j

{

if(i%j==0)

cout<

}

cout<

}

}

return0;

}

2.6将100元换成用10元、5元和1元的组合,共有多少种组合方法。

#include

usingnamespacestd;

intmain()

{

inti,j,k,n=0;

for(i=0;i<=10;i++)//计算组合方法总数

{

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

{

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

{

if((i*10+j*5+k)==100)

n=n+1;

}

}

}

cout<<"共有"<

cout<<"分别为"<

cout<<"十块\t"<<"五块\t"<<"一块"<

for(i=0;i<=10;i++)//分别将各种组合输出

{

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

{

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

{

if((i*10+j*5+k)==100)

{

cout<

<

<

}

}

}

}

return0;

}

习题3

3.1设计函数,将小写英文字符变为对应的大写字符。

#include

usingnamespacestd;

intmain()

{

chari,j;

charfun(chara);//函数声明

cout<<"请输入一个小写字母"<

cin>>i;

j=fun(i);

cout<

return0;

}

charfun(chara)//转换函数

{

charb;

b=a-32;

returnb;

}

3.2设计两个函数,分别求两个整数的最大公约数和最小公倍数。

#include

usingnamespacestd;

intmain()

{

inta,b,g,l;

intgcd(inta,intb);//gcd为英语最大公约数的首字母缩写,下面的lcm即为最小公倍数的缩写

intlcm(inta,intb);

cout<<"请输入两个不等的整数:

"<

cin>>a>>b;

g=gcd(a,b);

l=lcm(a,b);

cout<<"最大公约数为"<

cout<<"最小公倍数为"<

return0;

}

intgcd(inta,intb)//用更相减损法求最大公约数

{

intc;

while(a!

=b)

{

if(a>b)

{

c=a-b;

a=c;

}

else

{

c=b-a;

b=c;

}

}

returna;

}

intlcm(inta,intb)//最小公倍数等于两数的积除以两数的最大公约数

{

intg,l;

g=gcd(a,b);

l=a*b/g;

returnl;

}

3.3设计函数digit(num,k),返回整数num从右边开始的第k位数字的值。

例如:

digit(4647,3)=6

digit(23523,7)=0

#include

usingnamespacestd;

intmain()

{

intdigit(intnum,intk);

intnum,k;

cout<<"请输入一个正整数及所求位数:

"<

cin>>num>>k;

cout<

return0;

}

intdigit(intnum,intk)

{

inta=1,b=1,i,j;

for(i=1;i<=k-1;i++)

a=a*10;

for(i=1;i<=k;i++)

b=b*10;

j=(num/a)-10*(num/b);

returnj;

}

3.4设计函数factors(num,k),返回整数num中包含因子k的个数,如果没有该因子,则返回0。

#include

usingnamespacestd;

intmain()

{

intfactors(intnum,intk);

intnum,k;

cout<<"请输入一个整数及所求因子"<

cin>>num>>k;

cout<

return0;

}

intfactors(intnum,intk)

{

intn=0;

while(num%k==0)

{

n=n+1;

k=k*k;

}

returnn;

}

3.5歌德巴赫猜想指出:

任何一个充分大的偶数都可以表示为两个素数之和。

例如:

4=2+26=3+38=3+5……50=3+47

将4~50之间的所有偶数用两个素数之和表示。

判断一个整数是否为素数用函数完成。

/*歌德巴赫猜想指出:

任何一个充分大的偶数都可以表示为两个素数之和。

例如:

4=2+26=3+38=3+5……50=3+47

将4~50之间的所有偶数用两个素数之和表示。

判断一个整数是否为素数用函数完成。

*/

#include

usingnamespacestd;

intmain()

{

intfun(intx);//声明判断素数的函数

inti,j,k;

for(i=4;i<=50;i=i+2)

{

for(j=1;j<=50;j++)

{

if(fun(j)==1)//代表j为素数

{

for(k=j;k<=50;k++)

{

if(fun(k)==1)

{

if(i==j+k)

cout<

}

}

}

}

}

return0;

}

intfun(intx)//判断素数的函数

{

inti,y;

if(x<=1)

y=0;

else

{

y=1;

for(i=2;i

{

if(x%i==0)

{

y=0;

break;

}

}

}

returny;

}

习题4

4.1引用作为函数参数时为什么能实现两个实参之间的数据交换?

为什么对应实参不能为引用?

为什么返回值为引用的函数可以作为左值?

答:

因为当函数参数为实参的引用时,实际上是将实参的地址传递给了形参,它们共用同一个地址,所以当形参改变时,实参之间的数据也改变了;

因为引用不是一种独立的数据类型,所以对应实参不能为引用;

因为引用与变量共用相同的内存空间,当返回值为引用时,实际上就是返回的变量的值。

4.2构造一个日期时间类(Timedate),数据成员包括年、月、日和时、分、秒,函数成员包括设置日期时间和输出时间,其中年、月请用枚举类型,并完成测试。

(包括用成员函数和用普通函数)

#include

#include

usingnamespacestd;

enumyear{Y2000,Y2001,Y2002,Y2003,Y2004,Y2005,Y2006,Y2007,Y2008,Y2009,Y2010,Y2011};//

enummonth{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec};

classTimedate

{

private:

yearY;

monthM;

intD,H,Min,S;

public:

Timedate()

{

Y=Y2011;

M=Jan;

D=1;

H=0;

Min=0;

S=0;

};

voidset(yeara,monthb,intc,intd,inte,intf)

{

Y=a;

M=b;

D=c;

H=d;

Min=e;

S=f;

};

voidshow()

{

cout<<"日期:

\n";

switch(Y)

{

caseY2000:

cout<<"2000年";break;

caseY2001:

cout<<"2001年";break;

caseY2002:

cout<<"2002年";break;

caseY2003:

cout<<"2003年";break;

caseY2004:

cout<<"2004年";break;

caseY2005:

cout<<"2005年";break;

caseY2006:

cout<<"2006年";break;

caseY2007:

cout<<"2007年";break;

caseY2008:

cout<<"2008年";break;

caseY2009:

cout<<"2009年";break;

caseY2010:

cout<<"2010年";break;

caseY2011:

cout<<"2011年";break;

}

switch(M)

{

caseJan:

cout<<"1月";break;

caseFeb:

cout<<"2月";break;

caseMar:

cout<<"3月";break;

caseApr:

cout<<"4月";break;

caseMay:

cout<<"5月";break;

caseJun:

cout<<"6月";break;

caseJul:

cout<<"7月";break;

caseAug:

cout<<"8月";break;

caseSep:

cout<<"9月";break;

caseOct:

cout<<"10月";break;

caseNov:

cout<<"11月";break;

caseDec:

cout<<"12月";break;

}

cout<

cout<<"时间:

\n"

<

<

<

cout<

};

voidget(year&a,month&b,int&c,int&d,int&e,int&f)

{

a=Y;

b=M;

c=D;

d=H;

e=Min;

f=S;

};

};

voidshow(Timedatea)

{

yearY;

monthM;

intD,H,Min,S;

a.get(Y,M,D,H,Min,S);

cout<<"日期:

\n";

switch(Y)

{

caseY2000:

cout<<"2000年";break;

caseY2001:

cout<<"2001年";break;

caseY2002:

cout<<"2002年";break;

caseY2003:

cout<<"2003年";break;

caseY2004:

cout<<"2004年";break;

caseY2005:

cout<<"2005年";break;

caseY2006:

cout<<"2006年";break;

caseY2007:

cout<<"2007年";break;

caseY2008:

cout<<"2008年";break;

caseY2009:

cout<<"2009年";break;

caseY2010:

cout<<"2010年";break;

caseY2011:

cout<<"2011年";break;

}

switch(M)

{

caseJan:

cout<<"1月";break;

caseFeb:

cout<<"2月";break;

caseMar:

cout<<"3月";break;

caseApr:

cout<<"4月";break;

caseMay:

cout<<"5月";break;

caseJun:

cout<<"6月";break;

caseJul:

cout<<"7月";break;

caseAug:

cout<<"8月";break;

caseSep:

cout<<"9月";break;

caseOct:

cout<<"10月";break;

caseNov:

cout<<"11月";break;

caseDec:

cout<<"12月";break;

}

cout<

cout<<"时间:

\n"

<

<

<

cout<

}

intmain()

{

Timedater;

r.set(Y2011,Apr,1,14,30,50);

r.show();

show(r);

r.set(Y2010,Jun,8,1,50,00);

r.show();

show(r);

return0;

}

4.3设计并测试一个矩形类(Rectangle),属性为矩形的左下与右上角的坐标,矩形水平放置。

操作为计算矩形周长与面积。

测试包括用成员函数和普通函数。

#include

usingnamespacestd;

classRectangle

{

private:

intx1,x2,y1,y2;

public:

Rectangle()

{

cout<<"请输入左下角和右上角的坐标:

"<

cin>>x1>>y1>>x2>>y2;

};

intgetleftx()

{

returnx1;

};

intgetlefty()

{

returny1;

};

intgetrightx()

{

returnx2;

};

intgetrighty()

{

returny2;

};

intcircumference()//成员函数

{

return2*(x2-x1+y2-y1);

};

doublearea()

{

doubles;

s=(double)(x2-x1)*(y2-y1);

returns;

};

};

intcir(intx1,inty1,intx2,inty2)//普通函数

{

intc;

c=2*(x2-x1+y2-y1);

returnc;

}

doublear(intx1,inty1,intx2,inty2)

{

doubles;

s=(double)(x2-x1)*(y2-y1);

returns;

}

intmain()

{

Rectangler;

intc;

doubles;

c=r.circumference();//调用成员函数

s=r.area();

cout<<"周长为"<

cout<<"

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1