C语言第二次博客作业---分支结构
一、PTA实验作业
题目1:计算分段函数[2]
本题目要求计算下列分段函数f(x)的值:
注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。
1.实验代码
double x,y; scanf("%lf",&x); if(x>=0){ y=sqrt(x); } else{ y = pow(x+1,2)+2*x+1/x; } printf("f(%.2f) = %.2f\n",x,y);
2.设计思路
• 第一步:定义浮点形变量• x,y
• 第二步:输入x
• 第三步:如果x>=0,y=sqrt(x),否则 y=pow(x+1,2)+2*x+1/x
• 第四步:输出y的值,并保留两位小数
3.本题调试过程碰到问题及解决办法
• 问题:在输入时scanf(“%.2f”,&x);
解决方法:后来想到后面的printf有要精确小数的,就分别去掉一个调试了一下。
4.本题PTA提交列表
题目2:输出三角形面积和周长
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√
s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
1.实验代码
int a,b,c; (a>0&&b>0&&c>0); double s,area,perimeter; scanf("%d%d%d",&a,&b,&c); if((a+b>c)&&(a+c>b)&&(b+c>a)){ perimeter=(a+b+c)*1.0; s=(a+b+c)/2.0; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("area = %.2f; perimeter = %.2f\n",area,perimeter); } else{ printf("These sides do not correspond to a valid triangle");
2.设计思路
• 第一步:定义整型变量边长a,b,c,浮点型变量s,面积area,周长perimeter
• 第二步:输入a,b,c的值
• 第三步:如果a+b>c并且b+c>a并且a+c>b,则perimeter=(a+b+c)*1.0; s=(a+b+c)/2.0; area=sqrt(s*(s-a)*(s-b)*(s-c));并且输出面积area和周长perimeter的值,并且保留两位小数
• 第四步:否则,则输出 “These sides do not correspond to a valid triangle”
3.本题调试过程碰到问题及解决办法
• 问题:原本写成perimeter=a+b+c; s=(a+b+c)/2; devc++上运行答案总是不对
解决方法:后来经同学指导,才想起来面积和周长是定义的浮点型,a,b,c是整型,根据题目要求的输出改成perimeter=(a+b+c)*1.0; s=(a+b+c)/2.0;
• 问题: 在devc++运行答案正确了之后,提交课堂派依旧不对,提交很多次还是不对
解决方法:重新看了很多次题目要求后,发现在输出“These sides do not correspond to a valid triangle”时习惯性加了一个句点,“These sides do not correspond to a valid
triangle.”,没有看清输出要求带来的不必要的麻烦。
4.本题PTA提交列表
题目3:出租车计价
本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
•起步里程为3公里,起步费10元;
•超起步里程后10公里内,每公里2元;
•超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
•营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
1.实验代码
int time; double distance,money; scanf("%lf%d",&distance,&time); if(distance>0&&distance<=3){ money=10+(time/5)*2; } else if(distance>3&&distance<=10){ money=10+(distance-3)*2+(time/5)*2; } else{ money=10+2*7+(distance-10)*3+(time/5)*2; } printf("%.0f\n",money);
2.设计思路
• 第一步:定义整型变量时间time,浮点型变量距离distance,费用money
• 第二步:输入distance和time的值
• 第三步:如果0<distance<=3,则费用money=10+(time/5)*2
• 第四步:如果3<distance<=10,则费用money=10+(distance-3)*2+(time/5)*2
• 第五步:否则费用 money=10+2*7+(distance-10)*3+(time/5)*2;
3.本题调试过程碰到问题及解决办法
• 问题:题意不理解,认为步骤4是3<distance<=13,答案一直不对
解决方法:后来试了3<distance<=10
• 问题:题目没有看清,一直都没有将时间的费用乘以2,导致结果错误
解决方法:重新认真看了几遍题目,发现问题
4.本题PTA提交列表
题目4:程序设计联考
自从湖南农业大学、吉首大学和怀化学院组织程序设计课程联考以后,举办联考的经验越来丰富。尤其是在使用PTA系统作为考试平台之后,联考工作得到了很多学校的认可和支持。所以,现在参与联考的学校比较多。为了便于区分考生,考生账号的第一位是学校代号。1代表Hunan Agricultural University,2代表Jishou University,3代表Huaihua University,4代表Aerospace University,5代表Ocean University。 请编写程序根据考生的账号区分考生的学校。
1.实验代码
int a,number; //a为一个六位整数,number为六位整数的第一位数字 scanf("%d",&a); number=a/100000; switch(number){ 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.设计思路
•第一步:定义整型变量a,number,a为六位整数
•第二步:输入a的值
•第三步:利用number=account/100000计算出第一个数字
•第四步:运用switch(number),case1输出Hunan Agricultural University,case2输出Jishou University,case3输出Huaihua University,case4输出Aerospace University,case5输出Ocean University,否则输出Other University
3.本题调试过程碰到问题及解决办法
•问题:case开始的时候没用空格隔开,没写default
解决方法:翻书,请教同学发现问题,然后调试多遍通过了
4.本题PTA提交列表
二、截图本周题目集的PTA最后排名。
PTA排名
提交列表
三、本周学习总结
1.你学会了什么?
上周不会的switch现在会了,知道了case和break用处和使用方法,也会了switch与if的嵌套 。懂得了switch与if的if效率高区别,switch可以用break结束判断,if不行,所以switch也会比效率高,但是if语句的条件可表示范围,switch不可以,等等。还有字符型变量的输入,懂得ch=getchar(),putchar()是一次只能输入一个的,经常情况下要使用循环结构输入多个。单引号引起来的不管是数字还是符号都算作字符等等。
2.本周的内容,你还不会什么?
1. 题意理解依旧困难,遇到复杂的分支结构,思考后还是不清楚
2. 对于用乘以1.0使得数据成为浮点型,还是不清楚具体要在哪里加上
3. devc++上的调试还不是很会,有时还是一直盯着查看错误,很耗时
3.你碰到什么困难,打算如何解决?
困难:题目不是理解不清楚就是审题不认真,复杂的题型不敢下手,看书经常前面刚看后面做题的时候就忘了
如何解决:我以后在做题前就先慢慢地把题目审清楚,看书记不住就多看几遍,多敲代码敲代码敲代码,越来越熟练就越来越不害怕下手复杂的程序。