第3章习题参考答案.docx

上传人:b****5 文档编号:5609743 上传时间:2022-12-29 格式:DOCX 页数:22 大小:30.20KB
下载 相关 举报
第3章习题参考答案.docx_第1页
第1页 / 共22页
第3章习题参考答案.docx_第2页
第2页 / 共22页
第3章习题参考答案.docx_第3页
第3页 / 共22页
第3章习题参考答案.docx_第4页
第4页 / 共22页
第3章习题参考答案.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

第3章习题参考答案.docx

《第3章习题参考答案.docx》由会员分享,可在线阅读,更多相关《第3章习题参考答案.docx(22页珍藏版)》请在冰豆网上搜索。

第3章习题参考答案.docx

第3章习题参考答案

第3章程序设计初步

习题参考答案

1、(略)

2、解

#include

#include

usingnamespacestd;

constfloatpi=3.;//也可定义为符号#definepi3.

voidmain()

{floath,r,l,s,sq,vq,vz;

cout<<"pleaseenterr,h:

";

cin>>r>>h;

l=2*pi*r;

s=r*r*pi;

sq=4*pi*r*r;

vq=3.0/4.0*pi*r*r*r;

vz=pi*r*r*h;

cout<

:

fixed)<

:

right)

<

(2);

cout<<"l="<

cout<<"s="<

cout<<"sq="<

cout<<"vq="<

cout<<"vz="<

}

3、输入一个华氏温度,要求输出摄氏温度。

公式为C=

(F-32),输出要有文字说明,取两位小数。

解:

#include

#include

voidmain()

{floatc,f;

cout<<"请输入一个华氏温度:

";

cin>>f;

c=5.0/9.0*(f-32);//注意5和9要用实型表示,否则5/9值为0

cout<

:

fixed)<

(2)<<"摄氏温度为:

"<

}

4、编程序,用getchar函数读入两个字符给c1,c2,然后分别用putchar函数和cout语句输出这两个字符。

并思考以下问题:

(1)变量c1,c2应定义为字符型或整型?

抑或二者皆可?

(2)要求输出c1和c2值的ASCII码,应如何处理?

解:

#include

usingnamespacestd;

voidmain()

{charc1,c2;//可定义为int

cout<<"请输入两个字符c1,c2:

";

c1=getchar();//将输入的第一个字符赋给c1

c2=getchar();//将输入的第二个字符赋给c2

cout<<"用putchar函数输出结果为:

";

putchar(c1);

putchar(44);

putchar(c2);

putchar('\n');

cout<<"用cout语句输出结果为:

";

cout<

}

回答思考的问题:

(1)c1和c2应定义为字符型。

若定义为整型,则用putchar函数时输出的是字符,而用上述的cout语句时输出的是a和b的ASCII码。

(2)若想输出a和b的ASCII码,可以将a、b定义为整型,并且用cout语句输出a,b即可。

5、整型变量与字符变量是否在任何情况下都可以互相代替?

如:

charc1,c2;

与intc1,c2;是否无条件等价?

答:

字符数据与整型数据只是在一定条件下可以通用,具体包括以下几种:

(1)将一个整数一个字符型变量。

(2)将一个字符赋给一个整型变量

(3)字符数据与整型数据可以混合运算。

(4)在调用函数时函数的实参向形参传值,字符数据与整型数据之间可以通用。

但不是任何情况下二者都可以通用。

一是字符变量占一个字节,而整型占四个字节,整数超过255则不能转换。

二是用cout语句输出时是按类型进行输出的。

6、答:

(略)

7、答:

在求一个逻辑表达式时,若结果值为“真”,则在C++中以1表示;若其值为“假”,则以0表示。

但在判断一个逻辑量的值时,以0代表“真”,以非0代表“假”。

8、

#include

usingnamespacestd;

intmain()

{inta=3,b=4,c=5,x,y;

cout<<(a+b>c&&b==c)<

cout<<(a||b+c&&b-c)<

cout<<(!

(a>b)&&!

c||1)<

cout<<(!

(x=a)&&(y=b)&&0)<

cout<<(!

(a+b)+c-1&&b+c/2)<

}

结果为:

(1)0

(2)1(3)1(4)0(5)1

9、法一

#include

usingnamespacestd;

intmain()

{inta,b,c,max;

cout<<"pleaseenterthreeintegernumbers:

";

cin>>a>>b>>c;

max=a;

if(max

if(max

cout<<"max="<

}

法二:

#include

usingnamespacestd;

intmain()

{inta,b,c,temp,max;

cout<<"pleaseenterthreeintegernumbers:

";

cin>>a>>b>>c;

temp=(a>b)?

a:

b;/*将a和b中的大者存入temp中*/

max=(temp>c)?

temp:

c;/*将a和b中的大者与c比较,最大者存入max*/

cout<<"max="<

}

10、

#include

usingnamespacestd;

intmain()

{intx,y;

cout<<"enterx:

";

cin>>x;

if(x<1)y=x;

elseif(x<10)y=2*x-1;

elsey=3*x-11;

cout<<"x="<

}

11、

#include

usingnamespacestd;

voidmain()

{floatscore;

chargrade;

cout<<"pleaseenterscoreofstudent:

";

cin>>score;

while(score>100||score<0)

{cout<<"dataerror,enterdataagain.";

cin>>score;

}

switch(int(score/10))

{case10:

case9:

grade='A';break;

case8:

grade='B';break;

case7:

grade='C';break;

case6:

grade='D';break;

default:

grade='E';

}

cout<<"scoreis"<

}

12、给出一个不多于5位数的正整数,要求:

①求出它是几位数;②分别输出每一位数字;③按逆序输出各位数字,如原数是123,应输出321。

解答一:

#include

usingnamespacestd;

voidmain(){

longn;

inta,b,c,d,e;

cin>>n;

a=n/10000;

b=n%10000/1000;

c=n%1000/100;

d=n%100/10;

e=n%10;

if(a!

=0)

{cout<<"这是一个五位数!

";

cout<<"这五位数字是:

"<

cout<<"这五位数字逆序是:

"<

}

elseif(b!

=0)

{cout<<"这是一个四位数!

";

cout<<"这四位数字是:

"<

cout<<"这四位数字逆序是:

"<

}

elseif(c!

=0)

{cout<<"这是一个三位数!

";

cout<<"这三位数字是:

"<

cout<<"这三位数字逆序是:

"<

}

elseif(d!

=0)

{cout<<"这是一个两位数!

";

cout<<"这两位数字是:

"<

cout<<"这两位数字逆序是:

"<

}

else

{cout<<"这是一个一位数!

";

cout<<"这一位数字是:

"<

}

}

解答二:

#include

usingnamespacestd;

intmain()

{longintnum;

intindiv,ten,hundred,thousand,ten_thousand,place;

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

cout<<"enteraninteger(0~99999):

";

cin>>num;

if(num>9999)place=5;

elseif(num>999)place=4;

elseif(num>99)place=3;

elseif(num>9)place=2;

elseplace=1;

cout<<"place="<

//计算各位数字

ten_thousand=num/10000;

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

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

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

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

cout<<"originalorder:

";

switch(place)

{case5:

cout<

cout<<"reverseorder:

";

cout<

break;

case4:

cout<

cout<<"reverseorder:

";

cout<

break;

case3:

cout<

cout<<"reverseorder:

";

cout<

break;

case2:

cout<

cout<<"reverseorder:

";

cout<

break;

case1:

cout<

cout<<"reverseorder:

";

cout<

break;

}

return0;

}

13、

(1)

#include

usingnamespacestd;

voidmain()

{longi;//i为利润

floatbonus,bon1,bon2,bon4,bon6,bon10;

bon1=*0.1;//利润为10万元时的奖金

bon2=bon1+*0.075;//利润为20万元时的奖金

bon4=bon2+*0.05;//利润为40万元时的奖金

bon6=bon4+*0.03;//利润为60万元时的奖金

bon10=bon6+*0.015;//利润为100万元时的奖金

cout<<"enteri:

";

cin>>i;

if(i<=)

bonus=i*0.1;//利润在10万元以内按10%提成奖金

elseif(i<=)

bonus=bon1+(i-)*0.075;//利润在10万元至20万时的奖金

elseif(i<=)

bonus=bon2+(i-)*0.05;//利润在20万元至40万时的奖金

elseif(i<=)

bonus=bon4+(i-)*0.03;//利润在40万元至60万时的奖金

elseif(i<=)

bonus=bon6+(i-)*0.015;//利润在60万元至100万时的奖金

else

bonus=bon10+(i-)*0.01;//利润在100万元以上时的奖金

cout<<"bonus="<

}

(2)

#include

usingnamespacestd;

voidmain()

{longi;

floatbonus,bon1,bon2,bon4,bon6,bon10;

intc;

bon1=*0.1;

bon2=bon1+*0.075;

bon4=bon2+*0.05;

bon6=bon4+*0.03;

bon10=bon6+*0.015;

cout<<"enteri:

";

cin>>i;

c=i/;

if(c>10)c=10;

switch(c)

{case0:

bonus=i*0.1;break;

case1:

bonus=bon1+(i-)*0.075;break;

case2:

case3:

bonus=bon2+(i-)*0.05;break;

case4:

case5:

bonus=bon4+(i-)*0.03;break;

case6:

case7:

case8:

case9:

bonus=bon6+(i-)*0.015;break;

case10:

bonus=bon10+(i-)*0.01;

}

cout<<"bonus="<

}

14、输入4个整数,要求按由小到大的顺序输出。

#include

usingnamespacestd;

voidmain()

{intt,a,b,c,d;

cout<<"enterfournumbers:

";

cin>>a>>b>>c>>d;

cout<<"a="<

if(a>b)

{t=a;a=b;b=t;}

if(a>c)

{t=a;a=c;c=t;}

if(a>d)

{t=a;a=d;d=t;}

if(b>c)

{t=b;b=c;c=t;}

if(b>d)

{t=b;b=d;d=t;}

if(c>d)

{t=c;c=d;d=t;}

cout<<"thesortedsequence:

"<

cout<

}

15、输入两个正整数m和n,求其最大公约数和最小公倍数。

#include

usingnamespacestd;

voidmain()

{intp,r,n,m,t;

cout<<"pleaseentertwopositiveintegernumbersn,m:

";

cin>>n>>m;

p=n*m;//先将n和m的乘积保存在p中,以便求最小公倍数时用

while(m!

=0)//求n和m的最大公约数

{r=n%m;n=m;m=r;}

cout<<"HCF="<

cout<<"LCD="<

}

16、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

#include

usingnamespacestd;

voidmain()

{charc;

intletters=0,space=0,digit=0,other=0;

cout<<"enteroneline:

:

"<

while((c=getchar())!

='\n')

{if(c>='a'&&c<='z'||c>='A'&&c<='Z')

letters++;

elseif(c=='')

space++;

elseif(c>='0'&&c<='9')

digit++;

else

other++;

}

cout<<"letter:

"<

"<

"<

"<

}

17、求sn=a+aa+aaa+……+a…a之值,其中a是一个数字。

例如2+22+222+2222+22222(此时n=5),n由键盘输入。

#include

usingnamespacestd;

voidmain()

{inta,n,i=1,sn=0,tn=0;

cout<<"a,n=:

";

cin>>a>>n;

while(i<=n)

{tn=tn+a;//赋值后的tn为i个a组成数的值

sn=sn+tn;//赋值后的sn为多项式前i项之和

a=a*10;//也可用tn=tn*10;

++i;

}

cout<<"a+aa+aaa+...="<

}

法二:

#include

voidmain()

{inta,n,i,t=0,sum=0;

cout<<"Entera,n:

";

cin>>a>>n;

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

{t=t*10+a;

sum=sum+t;

}

cout<<"sum="<

}

18、求

(即求1!

+2!

+3!

+……+20!

)。

法一(单重循环)

#include

usingnamespacestd;

voidmain()

{floats=0,t=1;

intn;

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

{

t=t*n;//求n!

s=s+t;//将各项累加

}

cout<<"1!

+2!

+...+20!

="<

}

法二(双重循环)

#include

voidmain(){

intn,m,t,sum=0;

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

{t=1;

for(m=1;m<=n;m++)t=t*m;

sum=sum+t;

}

cout<<"sum="<

}

19、输出100——999中的所有“水仙花数”。

#include

usingnamespacestd;

voidmain()

{inti,j,k,n;

cout<<"narcissusnumbersare:

"<

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<

}

cout<

}

20、一个数如果恰好等于它的因子之和,这个数就称为“完数”。

如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。

编程找出1000之内的所有完数。

并按下面格式输出其因子:

6,isfactorsare1,2,3

解:

法一:

#include

usingnamespacestd;

voidmain()

{constintm=1000;//定义寻找范围

intk1,k2,k3,k4,k5,k6,k7,k8,k9,k10;

inti,a,n,s;

for(a=2;a<=m;a++)//a是2~1000之间的整数,检查它是否为完数

{n=0;//n用来累计a的因子的个数

s=a;//s用来存放尚未求出的因子之和,开始时等于a

for(i=1;i

if(a%i==0)//如果i是a的因子

{n++;//n加1,表示新找到一个因子

s=s-i;//s减去已找到的因子,s的新值是尚未求出的因子之和

switch(n)//将找到的因子赋给k1,...,k10

{case1:

k1=i;break;//找出的笫1个因子赋给k1

case2:

k2=i;break;//找出的笫2个因子赋给k2

case3:

k3=i;break;//找出的笫3个因子赋给k3

case4:

k4=i;break;//找出的笫4个因子赋给k4

case5:

k5=i;break;//找出的笫5个因子赋给k5

case6:

k6=i;break;//找出的笫6个因子赋给k6

case7:

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

当前位置:首页 > 工程科技 > 能源化工

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

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