C++第二章习题解答Word文件下载.docx

上传人:b****2 文档编号:3909753 上传时间:2023-05-02 格式:DOCX 页数:26 大小:41.78KB
下载 相关 举报
C++第二章习题解答Word文件下载.docx_第1页
第1页 / 共26页
C++第二章习题解答Word文件下载.docx_第2页
第2页 / 共26页
C++第二章习题解答Word文件下载.docx_第3页
第3页 / 共26页
C++第二章习题解答Word文件下载.docx_第4页
第4页 / 共26页
C++第二章习题解答Word文件下载.docx_第5页
第5页 / 共26页
C++第二章习题解答Word文件下载.docx_第6页
第6页 / 共26页
C++第二章习题解答Word文件下载.docx_第7页
第7页 / 共26页
C++第二章习题解答Word文件下载.docx_第8页
第8页 / 共26页
C++第二章习题解答Word文件下载.docx_第9页
第9页 / 共26页
C++第二章习题解答Word文件下载.docx_第10页
第10页 / 共26页
C++第二章习题解答Word文件下载.docx_第11页
第11页 / 共26页
C++第二章习题解答Word文件下载.docx_第12页
第12页 / 共26页
C++第二章习题解答Word文件下载.docx_第13页
第13页 / 共26页
C++第二章习题解答Word文件下载.docx_第14页
第14页 / 共26页
C++第二章习题解答Word文件下载.docx_第15页
第15页 / 共26页
C++第二章习题解答Word文件下载.docx_第16页
第16页 / 共26页
C++第二章习题解答Word文件下载.docx_第17页
第17页 / 共26页
C++第二章习题解答Word文件下载.docx_第18页
第18页 / 共26页
C++第二章习题解答Word文件下载.docx_第19页
第19页 / 共26页
C++第二章习题解答Word文件下载.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++第二章习题解答Word文件下载.docx

《C++第二章习题解答Word文件下载.docx》由会员分享,可在线阅读,更多相关《C++第二章习题解答Word文件下载.docx(26页珍藏版)》请在冰点文库上搜索。

C++第二章习题解答Word文件下载.docx

}while(k<

n);

y=1+x;

y=y*y;

cout<

<

y<

endl;

备选答案:

A.

B.

C.

D.

第一个循环使x成为:

y成为:

第二个循环使y成为:

(1)B

考虑整除,当x连除4次2以后即为0,所以:

为0

(2)1

2.1.3请看如下程序段:

if(num==1)cout<

”Alpha”;

elseif(num==2)cout<

”Bata”;

elseif(num==3)cout<

”Gamma”;

elsecout<

”Delta”;

当num的值分别为1、2、3时,上面程序段的输出分别为

(1)、

(2)、(3)。

检查条件语句与字符串输出概念:

(1)Alpha

(2)Bata

(3)Gamma

2.1.4执行下面程序段后,m和k的值分别为

(1)、

(2)。

intm,k;

for(k=1,m=0;

k<

=50;

k++){

if(m>

=10)break;

if(m%2==0){

m+=5;

continue;

m-=3;

注意continue语句的使用

初值

m=0

k=1

第1次循环后

m=5

k=2

第2次循环后

m=2

k=3

第3次循环后

m=7

k=4

第4次循环后

m=4

k=5

第5次循环后

m=9

k=6

第6次循环后

m=6

k=7

第7次循环后

m=11

k=8

第8次循环

m=11结束

k=8,k++未做

(1)11

(2)8

二.编程与综合练习题

2.2有一个函数:

编写程序,输入x,输出y。

解:

#include<

iostream>

usingnamespacestd;

intmain(){

doublex,y;

cout<

"

输入x="

;

cin>

x;

if(x<

1)y=x;

elseif(x<

10)y=2*x-1;

elsey=3*x-11;

y="

return0;

}

2.3设计程序将输入的百分制成绩转换为五分制输出,90分以上为5分,8089分为4分,7079分为3分,6069分为2分,60分以下为1分。

10分一档用10进行整除获得,转换用开关语句实行。

intmark,result;

//mark是百分制成绩,result是5分制

请输入百分制成绩:

mark;

if(mark<

0){

cout<

缺考!

return0;

}

switch(mark/10){

case9:

case10:

result=5;

输出五分制成绩:

result<

break;

case8:

result=4;

case7:

result=3;

case6:

result=2;

case5:

case4:

case3:

case2:

case1:

case0:

result=1;

default:

输入错误!

2.4编程计算个人所得税。

个人所得税率表如下:

月收入1200元起征,超过起征点500元以内部分税率5%,超过500元到2,000元部分税率10%,超过2,000元到5,000元部分税率15%,超过5,000元到20,000元部分税率20%,超过20,000元到40,000元部分税率25%,超过40,000元到60,000元部分税率30%,超过60,000元到80,000元部分税率35%,超过80,000元到100,000元部分税率40%,超过100,000元部分税率45%。

应该从最高税率段开始计算,分段叠加。

先算两万元以上各段,每两万为一档,采用switch语句,注意没有使用break语句。

后面各低收入段,用if语句,也没有使用else,这两种方法是对应的。

第二要注意计算的入口处,收入减去该段的下限,进行计算,以后各段都是完整的段,计算十分简单。

doubleincome,tax=0;

intk;

请输入个人月收入:

income;

if(income<

=1200){

免征个人所得税"

elseincome-=1200;

if(income>

20000){

k=income/20000;

switch(k){

default:

tax+=(income-100000)*0.45;

income=100000;

case4:

tax+=(income-80000)*0.40;

income=80000;

case3:

tax+=(income-60000)*0.35;

income=60000;

case2:

tax+=(income-40000)*0.30;

income=40000;

case1:

tax+=(income-20000)*0.25;

income=20000;

}

5000){

tax+=(income-5000)*0.20;

income=5000;

2000){

tax+=(income-2000)*0.15;

income=2000;

500){

tax+=(income-500)*0.10;

income=500;

tax+=income*0.05;

应征所得税:

tax<

2.5编程打印如下图形:

*

***

*****

*******

难点在三角形左边的空格的控制,嵌套一个循环语句完成此任务。

inti,j;

for(i=1;

i<

=4;

i++){

for(j=4-i;

j>

0;

j--)cout<

"

//三角形每行前部的空格

for(j=1;

j<

=2*i-1;

j++)cout<

*"

for(i=1;

=3;

i++)cout<

***\n"

2.6编程输出下列图形,中间一行英文字母由输入得到。

A

BBB

CCCCC

DDDDDDD

CCCCC

BBB

A

分上三角和下三角两部分分别处理左边的空格。

charin;

do{

输入一个字母:

cin>

in;

if((in>

=97)&

&

(in<

=122))in-=32;

//小写改大写

}while((in<

65)||(in>

90));

intline=in-'

A'

for(i=0;

=line;

i++){//上三角

for(j=line-i;

//前方空格

=2*i+1;

'

'

char(i+'

);

for(i=line;

i>

i--){//下三角(少一行)

for(j=0;

=line-i;

char(i-1+'

2.7输入n,求1!

+2!

+3!

+…+n!

通常求和作为外循环,阶乘作为内循环。

这里考虑到:

n!

=n*(n-1)!

,利用递推法运算速度大大提高,同时两者可合并为一个循环。

本程序考虑了输入的健壮性。

cstdlib>

intn,i,jch=1;

doubleresult=0;

//result是结果

请输入正整数n:

if(n<

1){

return1;

result=1;

for(i=2;

=n;

jch*=i;

//jch是i的阶乘,注意n!

这样可少一层循环

result+=jch;

2.8猴子吃桃问题:

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

采用递推法。

从最后一天逆推到第一天,9次循环。

constintday=10;

inti,x=1;

//最后一天只有一个

day;

i++)x=(x+1)*2;

//从一天前推到九天前

开始共有桃子"

x<

个。

\n"

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

将这组整数放在整型数组中,一边输入一边求和及统计正数和负数的个数,平均数由和除以整数数量取得。

fstream>

intstem[256],sum=0,pnum=0,nnum=0,i=0;

从键盘输入一组非0整数,以输入0标志结束:

stem[i];

while(stem[i]!

=0){

sum+=stem[i];

//求和

if(stem[i]>

0)pnum++;

//正数数量

elsennum++;

//负数数量

i++;

if(!

i)cout<

0个数"

else{

平均值="

(double)sum/(pnum+nnum)<

//平均值习惯不用整数

正数个数="

pnum<

负数个数="

nnum<

}

法二

intmain()

{

intn;

intsum=0;

intnum1=0,num2=0;

inti=0;

while

(1)

{

if(n==0)break;

i++;

sum=sum+n;

if(n>

0)num1++;

elsenum2++;

平均数"

sum/i<

正数"

num1<

负数"

num2<

2.10编程找出1500之中满足除以3余2,除以5余3,除以7余2的整数。

中国古代数学问题(韩信点兵),采用穷举法。

注意三个条件同时成立用&

inti;

=500;

i++)

if((i%3==2)&

(i%5==3)&

(i%7==2))cout<

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

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

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

采用穷举法。

两重循环,外层是从1到999依次处理,内层是求该数的所有因子的和,并判断是否等于该数。

inti,a,sum_yz;

//sum_yz是a的因子和

for(a=1;

a<

1000;

a++){

sum_yz=0;

for(i=1;

a;

i++)if(a%i==0)sum_yz+=i;

//求因子运算未改变循环控制变量a的值,否则要用另一个变量b来代替a来参加运算

if(a==sum_yz)cout<

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

考虑10元最多10张,5元最多20张,余下是1元。

inti,j,k,count=0;

for(i=0;

=10;

i++)//i是10元张数,j是5元张数,k是1元张数

=20;

j++){

k=100-10*i-5*j;

if(k>

cout<

\t'

count++;

}

count<

2.13利用反正切展开计算的近似值,要求误差10-5,公式如下:

令x=1,可计算出/4的近似值。

初看每一项的递推通式不易写出,但每一项全看作奇数项,而偶数项全为零,则很容易写出:

第1项为x,第3项为第1项乘以x的平方除以项序号3乘以-1,其余类推。

同时和的误差小于最后一项的绝对值。

#include<

cmath>

constdoublee=1e-5;

doublex,a,sum;

inti=3;

请输入正切值:

a=x;

sum=x;

a*=x*x*(-1);

sum+=a/i;

i+=2;

}while(fabs(a/i)>

e);

arctg("

)="

sum<

2.14用迭代法求方程x2+10cosx=0的根,误差限为10-5。

迭代公式如下:

迭代法也是用循环语句实现,数学上迭代法可能收敛,也可能发散,解答中加了最大迭代次数的限制。

doublex0,x1;

intn=0;

输入初始近似值:

x1;

x0=x1;

x1=(x0*x0-10*(x0*sin(x0)+cos(x0)))/(2*x0-10*sin(x0));

//x0是上次算出的结果,x1用作保存新算出的结果

n++;

}while((fabs(x1-x0)>

e)&

(n<

=1e5));

1e5)

超出迭代1e5次\n"

elsecout<

方程x*x+10*cos(x)=0的一个根为:

x1<

方程误差为:

x1*x1+10*cos(x1)<

2.15两队选手每队5人进行一对一的比赛,甲队为A、B、C、D、E,乙队为J、K、L、M、N,经过抽签决定比赛配对名单。

规定A不和J比赛,M不和D及E比赛。

列出所有可能的比赛名单。

这是一个组合问题,使用穷举法。

共有5个位置,设甲队5名队员位置不变,乙队改变队员位置,进行配对。

注意第1个位置可在5个队员中任选一个,以后的位置必须扣除已选过的队员。

并扣除不能配对的情况,即得所有可能的比赛名单。

charst1[5]={'

'

B'

C'

D'

E'

},st2[5]={'

J'

K'

L'

M'

N'

};

inti=0,j,k,l,m,n;

for(j=0;

5;

j++){//0号位

if(j==0)continue;

//A选手不与选手J比赛,即st1[0]不与st2[0]比赛

for(k=0;

k++){//1号位

if(k==j)continue;

//剔除乙队占据0号位的选手

for(l=0;

l<

l++){//2号位

if(l==j||l==k)continue;

//剔除乙队占据0、1号位的选手

for(m=0;

m<

m++){//3号位

if(m==j||m==k||m==l)continue;

//剔除乙队占据0、1、2号位的选手

if(m==3)continue;

//st1[3]不与st2[3]比赛,即D不与M比赛

for(n=0;

n<

n++){//4号位

if(n==j||n==k||n==l||n==m)continue;

//剔除乙队占据0、1、2、3号位的选手

if(n==3)continue;

//st1[4]不与st2[3]比赛,即E不与M比赛

cout<

st1[0]<

-'

st2[j]<

st1[1]<

st2[k]<

st1[2]<

st2[l]<

st1[3]<

st2[m]<

st1[4]<

st2[n]<

i++;

}

}

2.16编程模拟选举过程。

假定四位候选人:

zhang、wang、li、zhao,代号分别为1、2、3、4。

选举人直接键入候选人代号,14之外的整数视为弃权票,-1为终止标志。

打印各位候选人的得票以及当选者(得票数超过选票总数一半)名单。

用5个元素的整型数组,分别放弃权票和各候选人的得票,然后用开关语句打印。

iomanip>

enumcandidate{feipiao,zhang,wang,li,zhao}cand;

intvote[5]={0},i,k=0,n;

while(n!

=-1){

k++;

if(n>

=1&

=4)vote[n]++;

elsevote[0]++;

cand=(candidate)i;

switch(cand){

casefeipiao:

cout<

setw(10)<

feipiao"

vote[cand]<

break;

casezhang:

zhang"

vote[cand];

if(vote[cand]>

k/2)cout<

当选"

elsecout<

break;

casewang:

wang"

caseli:

li"

casezha

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

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2