C语言第二次博客作业---分支结构
一、PTA实验作业
题目1:7-1 计算分段函数
本题目要求计算下列分段函数f(x)的值:
1.实验代码
double x,y;
scanf("%lf",&x);
if(x>=0){
y=pow(x,0.5);
}
else{
y=pow(x+1,2)+2*x+1/x;
}
printf("f(%.2lf) = %.2lf",x,y);
2 设计思路
- 1.先定义两个变量x,y。
- 2.输入x的值。
- 3.如果x>=0,则用公式 y=pow(x,0.5);计算,如果x<0则用公式 y=pow(x+1,2)+2*x+1/x;进行计算。
- 4.输出f(x)的值。
3.本题调试过程碰到问题及解决办法
- 1.在定义语句 scanf("%lf",&x);时忘记在x前面加上&。 解决办法:系统提示编译错误后就仔细看了一遍程序,把&加上去就可以运行了。
- 2.没有注意f(x) = result之间的空格。 解决办法:加上空格就对了。
4.本题PTA提交列表
题目2:7-4 输出三角形面积和周长
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√
s(s−a)(s−b)(s−c) ,其中s=(a+b+c)/2。
1.实验代码
int side1,side2,side3;
double area,perimeter,s;
scanf("%d %d %d",&side1,&side2,&side3);
if (side1+side2>side3&&side2+side3>side1&&side1+side3>side2){
s=(side1+side2+side3)*1.0/2;
area=sqrt(s*(s-side1)*(s-side2)*(s-side3));
perimeter=side1+side2+side3;
printf("area = %.2f; perimeter = %.2f\n",area,perimeter);
}
else
printf("These sides do not correspond to a valid triangle");
2 设计思路
- 1.定义三个变量 side1,side2,side3;来表示输入的三条边长,再定义三个变量area,perimeter,s;来分别表示三角形的面积,周长,以及1/2周长。
- 2.如果输入的三个数满足两边之和大于第三边,即side1+side2>side3&&side2+side3>side1&&side1+side3>side2,则将这三个边长代入公式s=(side1+side2+side3)1.0/2;计算1/2周长。将1/2周长代入area=sqrt(s(s-side1)(s-side2)(s-side3));计算面积。将三条边长代入 perimeter=side1+side2+side3;中计算出周长。
- 3.输出area,perimeter.
- 3.如果不满足两边之和大于第三边则输出"These sides do not correspond to a valid triangle".
3.本题调试过程碰到问题及解决办法
- 在s=(side1+side2+side3)*1.0/2;算式中没有乘以1.0,导致运算结果一直不正确。
- 解决办法:在devc中监视变量s,area,perimeter.调试运行时输入5 5 3,调试过程中s的值却为6,回去看程序发现是整数除以整数问题没注意,在算式里乘以1.0就对了。
4.本题PTA提交列表
题目3:7-6 出租车计价
-
本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
-
起步里程为3公里,起步费10元;
-
超起步里程后10公里内,每公里2元;
-
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
-
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
1.实验代码
double mile,y,fx;
int time;
scanf("%lf%d",&mile,&time);
if(time<5){
fx=0;
}
else{
fx=time/5*2;
}
if(mile<=3){
y=10;
printf("%.0lf\n",y+fx);
}
else if(mile>3&&mile<=10){
y=10+2*(mile-3);
printf("%.0lf\n",y+fx);
}
else {
y=24+3*(mile-10);
printf("%.0lf\n",y+fx);
2 设计思路
- 1.定义三个变量mile表示行驶路程,y表示正常行驶的收费,time表示临时停车的时间,fx表示临时停车的收费。
- 2.如果time小于5则fx=0,如果fx大于5,则fx=time/5*2;
- 3.如果mile小于3,y=10,如果mile大于3小于10,y=10+2(mile-3);如果mile大于10,y=24+3(mile-10);
- 4.输出总费用即y+fx
3.本题调试过程碰到问题及解决办法
- 1.最后输出的值部分正确,部分不正确,后来发现是因为没有四舍五入。 解决办法:一开始先去百度怎么四舍五入,可是还是没有正确,最后是问了同学将printf后的%lf,改成%。0lf就正确了。
- 2.提交pta后显示部分正确。 解决办法:回去仔细读了遍题发现时间定义成了双精度浮点型,改成整型就对了。
4.本题PTA提交列表
题目4:7-8 程序设计联考
自从湖南农业大学、吉首大学和怀化学院组织程序设计课程联考以后,举办联考的经验越来丰富。尤其是在使用PTA系统作为考试平台之后,联考工作得到了很多学校的认可和支持。所以,现在参与联考的学校比较多。为了便于区分考生,考生账号的第一位是学校代号。1代表Hunan Agricultural University,2代表Jishou University,3代表Huaihua University,4代表Aerospace University,5代表Ocean University。 请编写程序根据考生的账号区分考生的学校。
1.实验代码
int account,math;
scanf("%d",&account);
math=account/100000;
switch(math){
case 1:
printf("Hunan Agricultural University\n");
break;
case 2:
printf("Jishou University\n");
break;
case 3:
printf("Huaihua University\n");
break;
case 4:
printf("Aerospace University\n");
break;
case 5:
printf("Ocean University\n");
break;
default:
printf("Other University\n");
break;
2 设计思路
- 1.定义两个变量,account表示考生账号,math表示考生账号的第一位。
- 2.math=account/100000计算出math的值。
- 3.如果math=1输出"Hunan Agricultural University“,如果math=2输出"Jishou University”,如果math=3输出"Huaihua University“,如果math=4输出”Aerospace University“,如果math=5输出”Ocean University“。
- 4.如果math等于其他值则输出"Other University”
3.本题调试过程碰到问题及解决办法
- 1.一开始不知道要用switch语句,用了if-else语句 。 解决办法:将if-else语句改为switch语句。
- 2.提交到pta提示部分正确。 解决办法:将输出的量与题目对照发现学校名称打错了,改过来就正确了。
4.本题PTA提交列表
PTA排名
三、本周学习总结
1.你学会了什么?
- 1.if-else语句的运用比之前熟练了一点,switch语句也可以进行简单的应用。
- 2.真正体会到了整数除以整数问题中乘不乘1.0的差别。
- 3学会了用devc调试程序来找出自己程序的错误。
2.本周的内容,你还不会什么?
- 如果需要判断一个范围内的一些数一定要求用switch语句来做的话可能就不怎么会写。
3.你碰到什么困难,打算如何解决?
- 1.在输入变量的值scanf中变量前老是忘记加&,导致devc停止运行。经过这几次印象已经挺深了,以后对这个问题也会多加注意。
- 2.判断条件时经常把“==”误用成“=”,然后输出的结果与正确答案相差非常大,以后会记住并注意的。