《c程序设计》习题答案吴乃陵Word格式文档下载.docx
- 文档编号:20789672
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:277
- 大小:140.47KB
《c程序设计》习题答案吴乃陵Word格式文档下载.docx
《《c程序设计》习题答案吴乃陵Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《《c程序设计》习题答案吴乃陵Word格式文档下载.docx(277页珍藏版)》请在冰豆网上搜索。
常变量
intm=5;
变量
'
charch='
chars[]="
1.4将下列算式或叙述用C++表达式描述。
(1)
(2)(x+y)/((x-y)*ay)
(3)位于原点为圆心,a,b为半径的圆环中的点坐标。
(4)。
(5)并且字符ch不为'
\0'
。
pi/2+sqrt(asin(x)*asin(x)+c*c)
(x+y)/((x-y)*pow(a,y))
((x*x+y*y)>
=a*a)&
((x*x+y*y)<
=b*b)
(a!
=b)&
=c)&
(b!
=c)
(k<
=20)&
(ch!
='
)
1.6设有语句:
inta,b;
floatx,y;
charch1,ch2,ch3;
cin>
a>
b>
x>
y>
ch1;
ch2=cin.get();
ch3;
若从键盘输入:
321.87abc
执行后各变量取值如何?
注意abc三字符两两间有空格。
a是3,b是2,x是1.8,y是7,ch1是’a’,ch2是空格,ch3是’b’。
1.7设有语句:
inta,b,c,d;
oct>
hex>
c>
dec>
d;
若从键盘输入:
23232323
执行后各变量的值用十进制表示各是多少?
a:
19,b:
19,c:
35,d:
23
1.8对于习题1.7,若执行:
cout<
a<
′\t′<
hex<
b<
oct<
c<
endl;
显示结果是什么?
190x13043
第二章基本控制结构程序设计习题
一.基本概念与基础知识自测题
2.1程序阅读题
inta=3,b=100;
下面的循环语句执行
(1)次,执行后a、b的值分别为
(2)、(3)。
while(b/a>
5){
if(b-a>
25)a++;
elseb/=a;
}
解答:
本题检查学生整除的概念。
跟踪:
a
b
b/a
循环次数
b-a
3
100
33
1
97
4
25
2
96
5
20
95
…
15
6
85
16
14
84
17
停
(1)14
(2)17
(3)100
intx,y,n,k;
下面程序段的功能是备选答案中的
(1),当n=10,x=10打印结果是
(2)。
n;
k=0;
do{
x/=2;
k++;
}while(k<
n);
y=1+x;
y=y*y;
y<
备选答案:
A.B.C.D.
第一个循环使x成为:
;
y成为:
第二个循环使y成为:
(1)B
考虑整除,当x连除4次2以后即为0,所以:
为0
(2)1
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
,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){
缺考!
}
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){
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{
输入一个字母:
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;
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<
}
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;
1000;
a++){
sum_yz=0;
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>
\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));
if(n>
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;
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比赛
st1[0]<
-'
st2[j]<
st1[1]<
st2[k]<
st1[2]<
st2[l]<
st1[3]<
st2[m]<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c 程序设计 c 程序设计习题答案吴乃陵 程序设计 习题 答案 吴乃陵