作业要求:【https://edu.cnblogs.com/campus/hljkj/CS201802/homework/2292】
PTA第3次作业(条件)7-7 计算火车运行时间 (15 分)
本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。输入格式:输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。
输出格式:在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。
输入样例:1201 1530
输出样例:
03:29
一.实验代码
#include<stdio.h> int main() { int a,b,c,d; scanf("%d %d",&a,&b); c=b/100-a/100; d=b%100-a%100; if(d<0){d=60+d; c=c-1; } printf("%02d:%02d",c,d); return 0; }
二.解题思路:
1.步骤
1).先输入四个整数变量a,b,c,d,因为需要输入数据所以用scanf()将输入的部分的代码打出来。
#include<stdio.h> int main() { int a,b,c,d; scanf("%d %d",&a,&b);
2).计算输入了两个四位数,小时和分钟连在一起所以需要先缩小100倍,这样小时在小数点前分钟在后,到达减去出发就是经过的时间,所以c算出的就是小时。
c=b/100-a/100;
3).分钟d则需要用%来取余得出。
d=b%100-a%100;
4).分钟有时会得出来负数,所以需要加上条件,来确保正确的输出,在分钟上加60,小时则减去1。
if(d<0){d=60+d; c=c-1; }
5).最后是输出的格式要按照题目来写代码。
printf("%02d:%02d",c,d); return 0; }
运行后的结果:
2.流程图
三.调试过程碰到的问题及解决办法
最开始的时候犯了个低级的错误一个是用scanf函数没有在变量前面加“&”,提交的时候出现了错误。
另外就是只考虑到了,用缩小后100倍后的表示到达时间的数减去出发时间的数先求出小时,再用取余求分钟,但是在格式输入正确的情况下运行不出来,然后我想到了借位,用if语句,加了一个限定的条件最后可以运行处正确结果
然后又进行了调试
PTA第4次作业(条件)7-2 高速公路超速处罚 (15 分)
按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。
输入格式:输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。
输出格式:在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。
输入样例1:65 60
输出样例1:OK
输入样例2:110 100
输出样例2:Exceed 10%. Ticket 20
0
输入样例3:200 120
输出样例3:Exceed 67%. License Revoked
一.实验代码
#include<stdio.h> #include<math.h> int main() { int speed,limspeed,a; scanf("%d %d",&speed,&limspeed); a=100.0*(speed-limspeed)/limspeed+0.50; if (a<10){ printf("OK"); } else if(10<=a&&a<50){ printf("Exceed %d%%. Ticket 200",a); } else if(a>=50){ printf("Exceed %d%%. License Revoked",a); } return 0; }
二.解题思路
1.步骤
1).先定义变量(都是整型变量)speed,limspeed,a分别为车速,限速和百分比的整数部分。
#include<stdio.h> #include<math.h> int main() { int speed,limspeed,a;
2).调用scanf函数输入speed和limspeed。
scanf("%d %d",&speed,&limspeed);
3).根据题目的意思写出计算的式子。
a=100.0*(speed-limspeed)/limspeed+0.50;
4).根据题意调用if,else if来输出三种情况的结果,但要注意给出的输出格式。
if (a<10){ printf("OK"); } else if(10<=a&&a<50){ printf("Exceed %d%%. Ticket 200",a); } else if(a>=50){ printf("Exceed %d%%. License Revoked",a); } return 0; }
三种情况的输出结果:
2.流程图
三.调试过程碰到的问题及解决办法
最开始还是犯了和上一个题一样的问题,就是scanf函数和if else用来表示并且的“&”没有写。导致无法运行出结果。
另外一个问题是输出a在第三步的条件下输出的是66,后来想到了应该是取整时的问题,然后加上0.50输出结果就为67了。
最后一个问题是不知道怎么才能让输出的结果里有%,查了一下之后才知道需要以这种形式写才会有“%d%%”。
然后进行了调试
speed=200,limspeed=100
speed=110,limspeed=100
speed=65,limspeed=60
个人总结
1.通过本周的学习我学会了if else语句的用法, 知道了借位,还有如何四舍五入的取整。
2.在学习时也遇到了忘记打“&”的情况,还有一些不会的东西,比如输出时如何含有“%”,在遇到不会的东西时,问了别人,也在网上查找了有关的的东西,最后弄懂了。
作业点评:
1.http://www.cnblogs.com/chumengGTRlhz/p/9885207.html