华中科技大学C++实验34Word文档下载推荐.docx
《华中科技大学C++实验34Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《华中科技大学C++实验34Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
cin>
>
input;
if(input-int(input)==0)
if(int(input)%2)
cout<
number"
input<
isodd."
elsecout<
iseven."
error!
!
'
\t'
thetextnumbershouldberoundnumber"
endl;
return0;
}(3)如果对输出结果的显示格式不满意,请修改。
\n'
}
(4)请修改if(input%2)中的表达式,使程序仍然能正确执行。
if(int(input)&
1)
2.编程求一元二次方程ax2+bx+c=0的根。
包括以下判断和结果,若输入a=0,给出提示;
△=b2-4ac,若△>
0,输出两个不等的实根;
若△=0,输出两个相等实根;
若△<
0,输出两个复数根。
(1)参照主教材的例2.8编写源程序并调试运行,并记录结果。
比较与例2.8的不同之处。
a=0b=0c=4
a=0b=2c=4
a=1b=2c=0
a=2b=5c=1
(2)思考if–else嵌套使用时的注意事项是什么?
注意if和else的配套情况
3.编写程序:
输入一门课程的成绩,若高于90分,输出“A
grade”;
若高于80分而低于90分,输出“Bgrade”;
若高于70分而低于80分,输出“C
若高于60分而低于70分,输出“D
否则输出“Notpassed”。
【要求】
1.使用if–else语句和switch语句两种方法实现。
If语句
{
intg;
Ç
ë
Ê
ä
È
¿
Î
³
Ì
É
¼
¨
cin>
g;
if(g>
=90)cout<
Agrate"
elseif(g>
=80)cout<
Bgrate"
=70)cout<
Cgrate"
=60)cout<
Dgrate"
Notpassed"
Switch语句
switch(g){
default:
cout<
NOTPASSED"
break;
case90:
case91:
case92:
case93:
case94:
case95:
case96:
case97:
case98:
case99:
case100:
case80:
case81:
case82:
case83:
case84:
case85:
case86:
case87:
case88:
case89:
case70:
case71:
case72:
case73:
case74:
case75:
case76:
case77:
case78:
case79:
case60:
case61:
case62:
case63:
case64:
case65:
case66:
case67:
case68:
case69:
return0;
2.分析if–else语句和switch语句的区别,switch语句特别适合于什么情况使用?
If-else可以用函数来限定条件
Switch则限定了条件表达式的取值只能是开关量不能使连续量。
Switch特别适合条件表达式本身不符合数据类型的要求,但经过处理后可以用switch语句来实现
3.思考使用switch语句时应注意什么?
各个case分支出现的次序可以使任意的,通常将default放在最后。
Break语句可选
每个常量表达式的取值必须各不相同,否则将引起歧义
允许多个常量表达式对应同一个语句序列
4、编写程序:
输入一个数,判断其是否是3或7的倍数,可分为4种情况输出。
(1)是3的倍数,但不是7的倍数。
(2)不是3的倍数,是7的倍数。
(3)是3的倍数,也是7的倍数。
(4)既不是3的被数,也不是7的倍数。
#include<
请输入一个数"
switch(g%21){
不是3的倍数,也不是7的倍数"
case0:
是3的倍数,也是7的倍数"
case7:
case14:
不是3的倍数是7的倍数"
case3:
case6:
case9:
case12:
case15:
case18:
是3的倍数,不是7的倍数"
★(选做题)5.编程计算个人所得税。
个人所得税率表如下:
月收入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%。
intg,a;
请输入个人收入"
a=g-1200;
if(a>
100000)cout<
个人所得税为"
(a-100000)*0.45+(100000-80000)*0.4+(80000-60000)*0.35+(60000-40000)*0.3+(40000-20000)*0.25+(20000-5000)*0.2+(5000-2000)*0.15+(2000-500)*0.1+500*0.05<
elseif(a>
80000)cout<
(a-80000)*0.4+(80000-60000)*0.35+(60000-40000)*0.3+(40000-20000)*0.25+(20000-5000)*0.2+(5000-2000)*0.15+(2000-500)*0.1+500*0.05<
elseif(a>
60000)cout<
(a-60000)*0.35+(60000-40000)*0.3+(40000-20000)*0.25+(20000-5000)*0.2+(5000-2000)*0.15+(2000-500)*0.1+500*0.05<
elseif(a>
40000)cout<
(a-40000)*0.3+(40000-20000)*0.25+(20000-5000)*0.2+(5000-2000)*0.15+(2000-500)*0.1+500*0.05<
elseif(a>
20000)cout<
(a-20000)*0.25+(20000-5000)*0.2+(5000-2000)*0.15+(2000-500)*0.1+500*0.05<
elseif(a>
5000)cout<
(a-5000)*0.2+(5000-2000)*0.15+(2000-500)*0.1+500*0.05<
elseif(a>
2000)cout<
(a-2000)*0.15+(2000-500)*0.1+500*0.05<
elseif(a>
500)cout<
(a-500)*0.1+500*0.05<
elseif(a>
0)cout<
(a-500)*0.05<
elsecout<
个人所得税为0"
return0;
实验四循环结构程序设计
一、实验目的
1.掌握3种循环结构:
while,do—while,for的区别与联系,以及它们之间相互转换的方法,并能正确使用它们。
2.掌握与循环语句相关的break语句和continue语句的使用方法
二.实验内容
1.输入正整数n,计算n的阶乘。
【分析】由于n!
=1*2*3*……*n,因此,要计算n的阶乘可以从1开始,由1的阶乘乘以2得到2的阶乘,再乘以3得到3的阶乘.......以此类推。
(1)分别输入数据-2,1,5,10,20调试运行程序,并记录程序结果。
-2
1
5
10
20
(2)删除程序中//A处的赋值语句return1;
重新以上述数据调试运行程序,结果是否正确,如果不正确,该如何修改?
不正确,当输入时-2时,
出现了一个1
改为,
(3)删除程序中//B处的语句result=1;
重新以上述数据调试运行程序,结果是否正确,如果不正确,该如何修改?
不正确,当输入是20等正整数时,
给result把值赋回去即可
(4)将程序中语句doubleresult=0;
改为intresult=0;
重新以上述数据调试运行程序,结果如何?
为什么?
结果无影响,因为输入计算的本来就是整型,result也是整型
2.范例:
编程计算求π的近似值。
【程序】
(1)输入程序编译后使用Debug跟踪,单步执行程序,记录以下变量值的变化。
i
term
sum
0
1
2
3
4
5
:
回答以下问题:
a)从跟踪结果分析,term和sum的值有什么错误?
Term,Sum的值滞后了一步
b)循环结束后,i的值是多少?
用什么简单的办法可以看到?
c)对程序作何修改可以使其得到正确的结果?
cmath>
voidmain()
longinti=1;
doublesum=0,term,pi;
do
{
term=1.0/(i*i);
sum+=term;
i+=1;
}
while(term>
1e-12);
pi=sqrt(sum*6);
pi="
pi<
3.将输入的小写字母转换成大写字母。
【分析】由ASCII码表可以看出,大写英文字母的ASCII码值在65至90之间,小写英文字母的ASCII码值在97至122之间,每一个英文字母的大写和小写的ASCII码相差32。
chari,j;
请输入小写字母:
i;
j=i-32;
相应的大写字母为:
j<
4.编程:
设计一个程序,输入一个日期,要求算出这一天是本年的第几天。
【分析】要算出某天是当年的第几天,应该将当年中本月之前所有月的天数相加,再加上本月至此的天数。
但这里有一个闰年问题,2月是一个特殊月,闰年的2月有29天,非闰年的2月只有28天。
【提示】判断某年是闰年的条件是:
该年号能被4整除但不能被100整除,或者能被400整除。
例如,1996、2000是闰年,但1800不是闰年。
intn,y,r,f,d;
请输入日期,格式同2012224"
n>
y>
r;
if(n%4==0&
&
n%100!
=0||n%400==0)
f=29;
elsef=28;
switch(y){
case1:
d=0;
case2:
d=31;
case3:
d=31+f;
case4:
d=31+f+31;
case5:
d=31+f+31+30;
d=31+f+31+30+31;
case7:
d=31+f+31+30+31+30;
case8:
d=31+f+31+30+31+30+31;
case9:
d=31+f+31+30+31+30+31+31;
case10:
d=31+f+31+30+31+30+31+31+30;
case11:
d=31+f+31+30+31+30+31+31+30+31;
d=31+f+31+30+31+30+31+31+30+31+30;
default:
输入月份不正确!
!
return1;
d+=r;
该日是本年的第"
d<
天"
5.约瑟夫(Josephus)问题:
n个人围坐成一圈,从1开始顺序编号;
游戏开始,从第一个人开始由1到m循环报数,
报到m的人退出圈外,问最后留下的那个人原来的序号。
【分析]】本题首先要定义一个数组,其元素个数为n。
n定义为常变量,以便定义数组。
数组元素的值标识该人是否出局,1在圈内,0出局。
值为0的元素不参加报数。
可用一个整型数k做计数器,采用倒计数,记录留下的人数。
【提示】数组是线性排列的,而人是围成圈的,用数组表示要有一种从数组尾部跳到其头部的技巧,即下标加1除以n求余数。
#include<
using
namespace
std;
int
main()
n,m,i,s=0;
请输入人数n,数字m"
cin>
m;
for(i=2;
i<
=n;
i++)
s=(s+m)%i;
胜利者是"
s+1<
return
0;
★(选做题)6.输入若干字符,统计其中数字字符、空白字符和其他字符的个数,输入EOF结束。
【分析】要对字符进行统计,需要循环语句反复输入字符,读入字符后用switch语句判断字符的种类:
要统计3种字符数,需要定义3个用于计数的变量nDigit,nWhite,nOther,
并置初始值0;
读入字符用cin.get()函数,在这里用while循环比较合适。
白字符指空白键、Tab键和回车键。
EOF表示EndofFile,其值为-1,从键盘输入CTRL+Z键即可。
这里采用重载的intcin.get()函数,它返回的是整型数,所以能返回EOF。
1.程序中的变量c,可以定义为char类型吗?
请试之,并解释原因。
2.请注意程序中case分支语句后的break语句,break能去掉吗?
3.如果要分别统计0-9中个数字出现的次数,怎样才能有效地实现,请修改程序。
4.如果要统计输入的一段文字中出现的行数、单词数和字符数,又怎样有效地实现,请完成之。