一、第二次PTA作业
题目1.计算分段函数
本题目要求计算下列分段函数f(x)的值:
注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。
1.实验代码
float x,result;
scanf("%f",&x);
if(x>=0)
{result=sqrt(x);}
else
{result=pow(x+1,2)+2*x+1/x;}
printf("f(%.2f) = %.2f",x,result);
return 0;
2.设计思路
-
定义x后判断x的分支情况
-
用if语句对x进行分支使程序进入不同分支运行
-
将结果在printf语句进行输出
3.本题调试碰到问题及解决办法
- 运用sqrt函数的时候忘记加上math.h使程序无法运行
题目2.输出三角形面积和周长
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
1.实验代码
int a,b,c;
float s,area,perimeter;
scanf("%d %d %d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a)
{
s=(float)(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
perimeter=a+b+c;
printf("area = %.2f; perimeter = %.2f",area,perimeter);
}
else
printf("These sides do not correspond to a valid triangle");
return 0;
2.设计思路
-
先用if语句判断三个数能否构成三角形
-
在能构成三角形的分支中运用数学公式求出所要求的值
-
用printf语句输出所得值
-
在无法构成三角形的分支中说明无法构成三角形
3.本题调试碰到问题及解决办法
- 一开始没有注意到整数相除等于0这个情况导致得数一直错误,之后发现问题在a+b+c前写入(float)使之强制转换成浮点数
题目3.出租车计价
本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
起步里程为3公里,起步费10元;
超起步里程后10公里内,每公里2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)
1.实验代码
int time,money;
float m;
scanf("%f %d",&m,&time);
if(m<=3)
{money=10;}
else if(m<10)
{money=10+(m-3)*2+0.5;}
else
{money=24+(m-10)*3+0.5;}
if(time>=5)
{money=money+(float)(2*(float)(time/5));}
printf("%d",money);
return 0;
2.设计思路
-
定义时间与公里数后判断公里数后运用if语句分支结构
-
根据题目列出公式求值,再判断时间是否大于5分钟将所求值加上时间收费得出结果
-
将所求得值用printf语句输出
3.本题调试碰到问题及解决办法
-
题目要求四舍五入可是c语言整形会自动消去小数位,我用加上0.5的方法使结果算是四舍五入但是不确定这种方法正不正确
-
对于时间变量什么时候考虑的问题想了一会,一开始直接放在公里数的分支里发现步骤太繁琐,后面想到直接忽视小于5的情况后单独一个分支就简化很多
题目4.程序设计联考
自从湖南农业大学、吉首大学和怀化学院组织程序设计课程联考以后,举办联考的经验越来丰富。尤其是在使用PTA系统作为考试平台之后,联考工作得到了很多学校的认可和支持。所以,现在参与联考的学校比较多。为了便于区分考生,考生账号的第一位是学校代号。1代表Hunan Agricultural University,2代表Jishou University,3代表Huaihua University,4代表Aerospace University,5代表Ocean University。 请编写程序根据考生的账号区分考生的学校
1.实验代码
int account,n;
scanf("%d",&account);
n=account/100000;
switch(n){
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;
}
return 0;
2.设计思路
-
定义学校代号后除以100000取第一位
-
运用switch语句列出所有情况并输出学校名称
3.本题调试碰到问题及解决办法
-
本题较简单对switch语句熟悉就很轻松
-
直接复制题目OtherUniversity时错了,中间空格才正确,对pta题目和输出有矛盾的问题已经习惯了
二、截图本周题目集的PTA提交列表及最后排名。
PTA提交列表
PTA排名
三、本周学习总结
1.你学会了什么
发现整形相除等于0后复习了去年的强制使之变成浮点数的方法
学会了如何对小数进行四舍五入,虽然不知道这个方法正不正确
在多分支中对特殊情况把握还不准确,通常要多试几次才能发现有其他特殊情况
2.本周的内容你还不会什么
目前的代码量都较少所以分支结构中的分支也较少,以后分支多的时候对各个情况的把握可能会出现偏差导致在一个问题里陷下去,之后要多运用调试的方法来查看代码中的错误点,才能使变成更有效率
3.你碰到什么困难,打算如何解决?
同样因为去年这些东西都学过题目也做过所以思路很清晰就把代码敲出来了,主要也是因为题目简单只要细心完全没有难度,不过也有一些去年学过但今年没有去接触就有点淡忘的知识点例如强制转换浮点型,这些都要回到课本复习一遍,最近有点过于脱离课本顾着打代码导致有些基础问题开始犯了,之后要合理分配打代码和看书复习的时间安排