程序设计基础C++ 实验报告3信息开发.docx
《程序设计基础C++ 实验报告3信息开发.docx》由会员分享,可在线阅读,更多相关《程序设计基础C++ 实验报告3信息开发.docx(12页珍藏版)》请在冰豆网上搜索。
程序设计基础C++实验报告3信息开发
实验项目(03)—实验报告
项目
名称
编写简单程序
指导教师
曹晶华
实验室
A7-315
实验日期
2012年3月31日
学生
姓名
程思航
成绩
实验步骤(算法、代码、方法)
(1)求一元二次方程ax2+bx+c=0的根。
其中系数a(a≠0)、b、c的值由键盘输入。
分析:
输入系数a(a≠0)、b、c后,令delta=b2–4ac,结果有三种情况:
处理:
若delta=0,方程有两个相同实根;
若delta>0,方程有两个不同实根;
若delta<0,方程无实根。
输出:
方程有两个相同实根为,方程有两个不同实根分别为,方程无实根
代码:
#include
#include
usingnamespacestd;
voidmain(){
//因为不是整形,所以不可用int
floata,b,c,delta;
floatx1,x2,x;
cout<<"◎一般方程:
a^2+bx+c=0"<cout<<"◎请分别输入系数a,b,c的值(a≠0):
"<cin>>a>>b>>c;
//先输入在列等式否则会显示没有初始化
delta=b*b-4*a*c;
if(delta<0){cout<<"△该方程无实根!
"<else{if(0==delta){x=(-b)/2/a;cout<<"△该方程有两个相等时实根:
x1=x2="<else{x=sqrt(delta);x1=(-b+x)/2/a;x2=(-b-x)/2/a;
cout<<"△该方程有两个不相等时实根:
x1="<}
}
(2)某商店出售四种商品:
A商品每公斤2.75元;B商品每个12.5元;C商品每米26.8元;D商品每台512元,超过3台优惠10%,超过8台优惠15%。
为其设计一个计算价格的程序(输入购买四种商品的数量,计算出应付款金额并显示付款金额明细单)。
分析
输入:
购买商品A,B,C,D的数量countA,countB,countC,countD。
处理:
商品付款金额sum=A商品数量*单价+B商品数量*单价+C商品数量*单价+D商品数量*单价
若D商品数量小于3,则D商品的总金额为单价*D商品数量;
若D商品数量大于3而小于8,则D商品的总金额为优惠10%后的单价*实际数量;
若D商品数量大于于8,则D商品的总金额为优惠15%后的单价*实际数量;
输出:
计算后的总金额sum。
代码:
#include
usingnamespacestd;
voidmain(){
doublecountA,countB,countC,countD;
doublesumA,sumB,sumC,sumD;
doublesum;
cout<<"★输入A商品的公斤数:
";
cin>>countA;
cout<<"★输入B商品的个数:
";
cin>>countB;
cout<<"★输入C商品的米数:
";
cin>>countC;
cout<<"★输入D商品的台数:
";
cin>>countD;
sumA=countA*2.75;
sumB=countB*12.5;
sumC=countC*26.8;
sumD=countD*512;
sum=sumA+sumB+sumC+sumD;
if(countD>=8){sumD*=0.85;}
else{if(countD>=3){sumD*=0.9;}};
cout<<"★A商品"<cout<<"★B商品"<cout<<"★C商品"<cout<<"★D商品"<cout<<"●●总计:
"<"<}
(3)输入一个int型的百分制成绩d,程序负责将其转换为等级字母并输出。
若d处于90到100之间,输出“grade=A”;若d处于80到89之间,输出“grade=B”;若d处于70到79之间,输出“grade=C”;若d处于60到69之间,输出“grade=D”;若d为其他分数值时,输出“grade=E”。
若输入数据不处于0~100之间时,提示出错信息后结束程序。
算法分析
将百分制成绩被10除后的值记为m,结果只能在10,9,8,7,6,5…中取值。
可使用case语句完成相应的操作,输入其值对应的等级信息。
算法描述如下:
M=10或M=9:
输出“A”
M=8:
输出“B”
M=7:
输出“C”
M=6:
输出“D”
M=其他:
输出“E”
若输入数据不处于0~100之间时,提示出错信息后结束程序。
代码:
#include
usingnamespacestd;
intmain(){
inti,score;
cout<<"☆你考试考了多少分?
(0~100):
";
cin>>score;
if(score>100||score<0){cout<<"分数值必须在0到100之间!
";}
else{i=score/10;switch(i){
case10:
case9:
cout<<"Grade=A!
"<break;
case8:
cout<<"Grade=B!
"<break;
case7:
cout<<"Grade=C!
"<break;
case6:
cout<<"Grade=D!
"<break;
default:
cout<<"Grade=E!
"<//break;(这个break可有可无)
}}
return0;
}
(4)运输公司对所运货物实行分段计费。
设运输里程为s,则运费打折情况如下:
s<250不打折扣
250<=s<5002%折扣
500<=s<10005%折扣
1000<=s<20008%折扣
2000<=s<300010%折扣
3000<=s15%折扣
设每公里每吨的基本运费为p,货物重量为w,总运输里程在某段中的里程为Δs,折扣为d,则该段运费为:
p*w*Δs*(1-d)
设计程序,当输入p、w和s后,计算运费f。
•算法分析
总费用为各段费用之和,可采用不加break的switch语句。
分析:
switch语句要求条件表达式取值为确定的若干个开关量,而不能使用关系表达式,用里程s进行判断似乎不符合条件。
但是分析发现,里程s的分段点均是250的倍数,因此,将里程s除以250,取整数商c,可得到若干整数值。
因此算法描述如下:
3000>=s
15%折扣
2000<=s<3000
10%折扣
1000<=s<2000
8%折扣
500<=s<1000
5%折扣
250<=s<500
2%折扣
s<250
不打折扣
代码:
#include
usingnamespacestd;
intmain(){
intc;
doubles,p,w,d;
floatf;
cout<<"★每公里每吨的基本运费p,货物重量为w和里程s:
";
cin>>p>>w>>s;
c=s/250;
f=0;
switch(c){
default:
d=0.15;f+=p*w*(s-3000)*(1-d);
case8:
case9:
case10:
case11:
d=0.1;f+=p*w*(s-2000)*(1-d);
case4:
case5:
case6:
case7:
d=0.08;f+=p*w*(s-1000)*(1-d);
case2:
case3:
d=0.05;f+=p*w*(s-500)*(1-d);
case1:
d=0.02;f+=p*w*(s-250)*(1-d);
case0:
d=0;f+=p*w*s*(1-d);
}
cout<<"△运输单价:
"<
"<"<
cout<<"☆☆折扣后运费:
"<return0;
}
实验结果(结论及
分析)
第一题结果
第二题结果
第三题结果
第四题结果
教师
评语