一、PTA实验作业

1.1计算火车运行时间
题目内容描述:本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。
输入格式:输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。
输出格式:在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。
1.1.1数据处理
数据表达:先用int定义了四个整型变量h、m、a、b。hh和mm分别用来表示两位小时数和两位分钟数。a和b分别用来表示火车的出发时间和到达时间。
数据处理:需要注意出发和到达是在同一天内,通过计算h=(b/100)-(a/100)可以得到火车运行时间的两位小时数,通过计算m=(b%100)-(a%100)可以得到两位分钟数。还运用了if语句进行判断,当m<0(即出发时间的两位分钟数小于到达时间的两位分钟数),这时候要执行h=h-1和m=60+m(即将一个小时换算成60分钟,使输出的两位分钟数为正 )。由于题目给出的输出格式为hh:mm,所以调用printf()函数时格式控制为%02d:%02d才能输出正确答案。
1.1.2实验代码截图

1.1.3造测试数据
输入数据 |
输出数据 |
说明 |
1201 1530 |
03:29 |
示例 |
0800 1300 |
05:00 |
整点出发,整点到达 |
0000 2359 |
23:59 |
能用的最久时间 |
0537 1109 |
05:32 |
上午出发,上午到达 |
1.1.4PTA提交列表及说明

答案错误:调用printf()函数输出时,格式控制%和d中间没加02,导致输出的小时和分钟没有取成两位整数。
1.2输出闰年
题目内容描述:输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。
输入格式:输入在一行中给出21世纪的某个截止年份。
输出格式:逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。
1.2.1 数据处理
数据表达:用int定义了两个整型变量year、i。置i为2001。year指输入的21世纪的某个截止年份。
数据处理: 题目中给出了输出的三种情况。运用if-else语句进行判断,如果输入的年份小于2001或大于2100(即非21世纪的年份)输出"Invalid year!"。否则(即输入年份属于21世纪),运用for语句执行循环,当输入年份为闰年时(此时判断的逻辑关系式为(i%4==0&&i%100!=0)||(i%400==0)),输出21世纪中截止该年份以来的所有闰年年份。第三种情况我也运用了if语句,当输入年份大于2000且小于2003时,不存在任何闰年。
1.2.2 实验代码截图

1.2.3 造测试数据
输入数据 |
输出数据 |
说明 |
2000 |
Invalid year! |
不是21世纪的年份 |
2003 |
None |
不存在任何闰年 |
2020 |
2004 2008 2012 2016 2020 |
是21世纪年份,且存在闰年 |
1.2.4 PTA提交列表及说明

编译错误:在调用if语句时,没有在(i%4==0&&i%100!=0)||(i%400==0)两边加上括号,导致编译错误。
二、代码互评
2.1.1题目截图

2.1.2自己代码截图

同学代码截图

相同之处:都设置了六个变量(变量名称不同但作用相同),都运用了for语句执行循环。
不同之处:她运用了两个if语句来分别判断输入的成绩等于0和大于等于60两种情况,分别执行不同的语句;我运用了if-else语句来判断两种情况,分别调用printf()函数输出不同的结果。
2.2.1题目截图

2.2.2自己代码截图

同学代码截图

相同之处:都运用if-else语句进行判断,如果输入的年份小于2001或大于2100(即非21世纪的年份)输出"Invalid year!"
不同之处:1.我在调用scanf()函数之前就用int定义了i,并置i为2001;她在调用for语句时使用int定义i。
2.我使用if语句判断,当输入年份大于2000且小于2003时(此时的逻辑关系式为year>2000&&year<=2003),不存在闰年;她使用if语句判断当count的累加次数为0(即count==0)时,不存在闰年。
三、学习总结
3.1 学习进度条
周 |
这周所花的时间 |
代码行 |
学到的知识点简介 |
目前比较迷惑的问题 |
第一周 |
6小时 |
29行 |
对C语言、markdown语法,编程有了初步的认识 |
对编程一窍不通,只会照着书上打 |
第二周 |
8小时 |
19行 |
学会如何提问,安装MinGW-w64并用它编译C程序 |
markdown语法掌握不熟练 |
第三周 |
10小时 |
96行 |
关系运算、if-else语句、格式化输入语句scanf(),以及常用的数学库函数 |
对编程中各大语句的运用不熟悉 |
第四周 |
13小时 |
93行 |
for循环语句实现指定次数的循环程序设计 |
运用for语句时经常犯很多错误 |
第五周 |
10小时 |
161行 |
用C语言编写程序 |
对编写函数和调用函数还有很多不熟悉 |
第六周 |
12小时 |
168行 |
多分支结构、字符型数据类型和逻辑运算符 |
对各运算符的优先级和结合性,多分支结构不熟悉 |
3.2 累积代码行和博客字数

3.3学习内容总结

3.4学习感悟
每周都会学习新的知识点,新的知识点总是有一些难以理解的地方.这时候把新的知识和以前学过的旧知识放在一起整理归纳,不仅可以温习巩固旧知识,而且可以使新知识更加易于理解.例如这周学习的else-if语句和之前学过的嵌套的if-else语句都可以实现多分支结构.但由于else-if语句的逻辑结构更清晰,应用范围更广;这周学习的逻辑运算符和之前学习的算数运算符,关系运算符等都是运算符的种类.运算符的优先级和结合性能决定表达式的计算顺序;调用函数处理整形数据和浮点型数据的输入输出时,有专门的格式控制说明%d和%lf,字符型数据的格式控制说明为%c.