一、PTA实验作业
题目1.计算分段函数[2]
本题目要求计算下列分段函数f(x)的值:
注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。
1.实验代码
double x , fx;
scanf("%lf",&x);
if(x >= 0){
fx = sqrt(x);
}
else{
fx = pow(x+1,2)+2*x+1/x;
}
printf("f(%.2f) = %.2f",x,fx);
2.设计思路
- (1)定义两个浮点型变量x,fx
- (2)输入数据x
- (3)如果x>=0,执行fx = sqrt(x);
- (4)否则,执行fx = pow(x+1,2)+2*x+1/x;
- (5)按“f(x) = fx”的格式输出,其中x与fx都保留两位小数
3.本题调试过程碰到问题及解决办法
- (1)问题:本题代码编写正确,未出现问题
4.本题PTA提交列表
题目2. 输出三角形面积和周长
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
1.实验代码
int a,b,c;
float area,s,perimeter;
scanf("%d%d%d",&a,&b,&c);
s=(a+b+c)/2.0;
area=sqrt(s*(s-a)*(s-b)*(s-c));
perimeter=a+b+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)定义三个整型变量a,b,c三个浮点型变量area,s,perimeter
- (2)输入正整数a,b,c
- (3)s=(a+b+c)/2.0;
area=sqrt(s(s-a)(s-b)*(s-c));
perimeter=a+b+c; - (4)如果满足任意两边之和大于第三边,即a+b>c&&a+c>b&&b+c>a,按"area = 面积; perimeter = 周长"的格式输出,保留两位小数
- (5)否则,输出These sides do not correspond to a valid triangle
3.本题调试过程碰到问题及解决办法
-
(1)问题:
①s=(a+b+c)/2;在此表达式中a,b,c为整型变量,2为整数,s为浮点型变量,而整型/整型≠浮点型。
②看到题目中的"任意两边之和大于第三边",条件中便用上||,导致错误。
-
(2)解决方法:
①原表达式改为s=(a+b+c)*1.0/2或s=(a+b+c)/2.0或把a,b,c改为浮点型变量,即式中有一个浮点型数就可以输出浮点型结果
②任意两边之和大于第三边 三种情况都应进入同一个条件,所以把||改为&&
4.本题PTA提交列表
题目3. 出租车计价
本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
起步里程为3公里,起步费10元;
超起步里程后10公里内,每公里2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
1.实验代码
int time;
float kilometer,price1,price2;
scanf("%f%d",&kilometer,&time);
if(kilometer<=3){
price1=10;
}
else if(kilometer<=10){
price1=10+2*(kilometer-3);
}
else {
price1=10+2*7+3*(kilometer-10);
}
if (time<5){
price2=price1;
}
else{
price2=price1+time/5*2;
}
printf("%.0f",price2);
2.设计思路
- (1)定义一个整型变量time,三个浮点型变量 kilometer,price1,price2;
- (2)输入数据kilometer,time;
- (3)如果kilometer<=3,执行price1=10;
- (4)如果kilometer>=3&&kilometer<=10,执行price1=10+2*(kilometer-3);
- (5)否则,执行price1=10+27+3(kilometer-10);
- (6)如果time<=5,执行price2=price1;
- (7)否则,执行price2=price1+time/5*2;
- (8)输出price2,结果四舍五入,保留到元。
3.本题调试过程碰到问题及解决办法
-
(1)问题:
①PTA中写道"输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)" , 因此在scanf语句中用了%.1f
②题目部分理解错误,导致else if 中条件定义错误
③对如何可以做到四舍五入不了解
-
(2)解决方法:
①通过询问,得知scanf不能精度控制,应把%.1f改为%f
②多次阅读题目,正确理解后重新更改else if中的条件,把kilometer<=13改为kilometer<=10
③通过询问,得知使用%.0f即可对结果进行四舍五入,不用过于繁琐
4.本题PTA提交列表
题目4.程序设计联考
自从湖南农业大学、吉首大学和怀化学院组织程序设计课程联考以后,举办联考的经验越来丰富。尤其是在使用PTA系统作为考试平台之后,联考工作得到了很多学校的认可和支持。所以,现在参与联考的学校比较多。为了便于区分考生,考生账号的第一位是学校代号。1代表Hunan Agricultural University,2代表Jishou University,3代表Huaihua University,4代表Aerospace University,5代表Ocean University。 请编写程序根据考生的账号区分考生的学校。
1.实验代码
int account,ten_thousand;
scanf("%d",&account);
ten_thousand=account/100000;
switch(ten_thousand){
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,ten_thousand
- (2)输入1个6位的正整数account
- (3)ten_thousand=account/100000
- (4)如果ten_thousand=1,输出Hunan Agricultural University
- (5)如果ten_thousand=2,输出Jishou University
- (6)如果ten_thousand=3,输出Huaihua University
- (7)如果ten_thousand=4,输出Aerospace University
- (8)如果ten_thousand=5,输出Ocean University
- (9)否则,输出Other University
3.本题调试过程碰到问题及解决办法
-
(1)问题:
①题目中缺少空格,复制到代码中导致错误,以为是输出时需要加引号。
-
(2)解决方法:在查错过程中,试着在输出时加入引号发现不能单纯直接加引号,通过百度得知了输出语句中应如何添加引号。并在询问同学后得知题目中缺少空格,在代码中添加空格后得到正确答案
4.本题PTA提交列表
二、截图本周题目集的PTA最后排名。
PTA提交列表
PTA排名
三、本周学习总结
1.你学会了什么?
- switch语句:
①case后只能跟常量,不能跟表达式,否则程序将会产生错误。
②switch中使用break语句可用于跳出正在执行的switch语句,否则就继续执行其后的所有语句段。- if-else语句、else-if语句:
①if后面有两条及以上语句时,要加{ },if后面只有一条语句时,可不加{ }。
②else与if匹配准则:else与最靠近它的、没有与别的else匹配过的if相匹配。- switch语句和if else if 多分支语句不同点:
①if-else需要判断每个分支。而switch只进入满足条件分支,无需比较其他分支。switch语句效率更高。
②switch语句只能处理等值条件判断的情况,case后只能是常量。
③switch语句判断的值必须是整型,if判断整型数和浮点数都可以。- 字符型数据:
①字符型变量定义时用类型名char
②字符输入函数:getchar(),输出函数:putchar()- 其他:
①a是变量,'a'是字符常量;变量放数据,常量不能变。
②在输出时含有引号,可以使用转义序列,如:printf(""Hello World"");
2.本周的内容,你还不会什么?
- 字符型数据的输入输出还不熟悉,脱离课本后无法独立使用。
- case后什么情况需要加' '还不明白。
3.你碰到什么困难,打算如何解决?
- 困难:对switch语句还不熟悉,过于依赖课本。对新知识的吸收效率低,理解不透彻。对于调试的问题,还没熟悉调试的方法,因此在查错过程中不喜欢使用调试工具。
- 解决方法 :积累做过的有用到switch语句的题目,多次复习打代码,寻找此类题型的规律。在接下来的作业中,在dev c++中我会尽量多使用到调试来查找错误点,熟练调试的流程并加以应用。
- 备注: 在此次PTA作业中,因先在dev c++中编译运行成功后复制到PTA中,因此多题都是一次提交即正确。