C语言第二次博客作业---分支结构
一、PTA实验作业
题目1:计算分段函数[2]
本题目要求计算下列分段函数f(x)的值:
1.实验代码
double x,result;
scanf("%lf",&x);
if(x>=0){
result=sqrt(x);
}
else{
result=pow(x+1,2)+2*x+1/x;
}
printf("f(%.2f) = %.2f",x,result);
2 设计思路
- (1)定义两个浮点型变量x,result。
- (2)输入x的值。
- (3)若x>=0,result=x开平方。
- (4)若想x<=0,result=pow(x+1,2)+2*x+1/x。
- (5)最后以保留两位小数的形式输出result的值。
3.本题调试过程碰到问题及解决办法
在做本题时,没有什么思路和语法上的错误,主要是格式上,输出中存在空格的遗漏,导致格式错误。
4.本题PTA提交列表
题目2: 输出三角形面积和周长
1.实验代码
double a,b,c,s,area,perimeter;
scanf("%lf%lf%lf",&a,&b,&c);
perimeter=a+b+c;
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
if(a+b>c && a+c>b && b+c>a)
{
printf("area = %.2f; perimeter = %.2f",area,perimeter);
}
else{
printf("These sides do not correspond to a valid triangle");
}
2 设计思路
- (1)定义3个整形变量a,b,c,来代表三角形的三个边长。
- (2)再定义三个浮点型变量s,area,perimeter,s=(a+b+c)/2,area代表面积,perimeter代表周长。
- (3)输入三角形的三边边长a,b,c,
- (4)如果a+b>c 并且 a+c>b 再加上 b+c>a,说明这三条边能构成一个三角形。
- (5)则perimeter=a+b+c,s=(a+b+c)/2,area=sqrt(s(s-a)(s-b)*(s-c)),计算出周长和面积的值,并输出。
- (6)若这三条边不能构成三角形则输出These sides do not correspond to a valid triangle。
3.本题调试过程碰到问题及解决办法
(1)首先第一次在定义变量时没有考虑到s和area,应该为浮点型,导致结果不正确。
(2)再者调用数学函数时没有在前面开头输入编译预处理命令,#include<math.h>
(3)再者就是没有看清题目要求保留几位小数导致结果错误。
4.本题PTA提交列表
题目3: 出租车计价
1.实验代码
int minute;
double mileage,fee,extra;
scanf("%lf%d",&mileage,&minute);
if(mileage<=3){
fee=10;
}
else if(mileage>3 && mileage<=10){
fee=10+(mileage-3)*2;
}
else{
fee=10+14+(mileage-10)*3;
}
if(minute<5){
extra=0;
}
else{
extra=minute/5*2;
}
fee=fee+extra;
printf("%.0f",fee);
2 设计思路
- (1)定义一个整形变量minute,三个浮点型变量mileage,fee,extra(extra代表停车时所多需要交的钱,mileage代表里程。
- (2)输入mileage,minute的值。
- (3)如果里程数小于三公里,则fee=10,如果里程数在3公里到10公里之间,则fee=10+(mileage-3)2,如果里程高于十公里,则fee=10+14+(mileage-10)3
- (4)如果停车的时间mnute<5,则extra=0,否则extra=minute/5*2。
- (5)最后将fee和extra的值相加放到fee上,最后输出fee的值。
3.本题调试过程碰到问题及解决办法
(1)第一点就是对题目的含义没有理解透彻,导致结果一直错误,我还一直很纳闷,感觉自己思路没有错可是就是不会对,后来看了同学的代码,与自己对照下,再次去看题目,才理解透彻。
(2)再者就是刚开始对于时间这个额外的前不知道要怎样加到总钱数上,最后是由助教教我在定义一个extra的变量,使得思路更加清晰。
4.本题PTA提交列表
题目4: 程序设计联考
1.实验代码
int account,x;
scanf("%d",&account);
x=account/100000;
switch (x){
case 1:printf("Hunan Agricultural University");break;
case 2:printf("Jishou University");break;
case 3:printf("Huaihua University");break;
case 4:printf("Aerospace University");break;
case 5:printf("Ocean University");break;
default:printf("Other University");break;
}
2 设计思路
- (1)首先定义account,x,这两个整形变量。
- (2)在输入一个大于六位数的account。
- (3)x=account/100000,得出x的值。
- (4)进行条件判断
switch (x){
当x= 1:输出("Hunan Agricultural University");break;
当x= 2:输出("Jishou University");break;
当x= 3:输出("Huaihua University");break;
当x= 4:输出("Aerospace University");break;
当x= 5:输出("Ocean University");break;
否则 :输出("Other University");break;
进行以上操作。最后输出相应的答案。
3.本题调试过程碰到问题及解决办法
这题相对比较简单,就只有因为刚开始接触switch语句是有点不熟悉,在最后漏了个defoult导致结果错误。
4.本题PTA提交列表
二、本周题目集的PTA最后排名。
三、本周学习总结
1.你学会了什么?
本周学习了条件语句的使用,懂得了简单的对于if,if lse,和else if,还有if的嵌套语句的使用,还有switch语句的使用,还学会了如何对自己的代码进行调试。
还接触了for循环语句
2.本周的内容,你还不会什么?
对于本周的内容都有大致的掌握,可是对于if嵌套语句,和没有else的if语句还不太会用,不是很理解其用法。
3.你碰到什么困难,打算如何解决?
我觉得遇到问题先自己思考,不懂的话我会去于同学探讨,或则问助教。