一、PTA实验作业
1.1求整数的位数及各位数字之和
题目内容描述:
对于给定的正整数N,求它的位数及其各位数字之和。
输入格式:
输入在一行中给出一个不超过(10^9)的正整数N。
输出格式:
在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。
1.1.1数据处理
数据表达:定义了三个整型变量n,count,sum。n指输入的不超过十的九次方的正整数,count是用来统计n的位数,sum指n的各位数字之和。
数据处理:置count、sum为0,调用scanf()函数输入n。运用while语句,当n>0时执行循环。在while的循环体语句中,先使用count来统计n的位数,然后对n进行取余并累加sum的值,最后执行n/=10,通过判断while语句的表达式决定是否继续下一次循环。
伪代码
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 |
输出数据 |
说明 |
321 |
3 6 |
示例 |
9 |
1 9 |
较小的数,一位数 |
568 |
3 19 |
三位数 |
378421 |
6 25 |
六位数 |
999999999 |
9 81 |
较大的数,九位数 |
1.1.4 PTA提交列表及说明
答案错误:在对n取余时,把运算符%打成/,这是思路不清晰以及写完代码后没有检查导致的。
1.2爬动的蠕虫
题目内容描述:
一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?
这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。
输入格式:
输入在一行中顺序给出3个正整数N、U、D,其中D<U,N不超过100。
输出格式:
在一行中输出蠕虫爬出井的时间,以分钟为单位。
1.2.1 数据处理
数据表达:定义了五个整型变量N、U、D、time,altitude。N指井的深度,U指蠕虫每1分钟可以向上爬的距离,D休息的过程中蠕虫下滑的距离,time指蠕虫爬出井的时间,altitude指蠕虫实际爬的距离。
数据处理:置N,U,D,time,altitude为0。调用scanf()函数输入N、U、D。在for循环中嵌套if-else语句。奇偶数分开计算然后进行循环。在第偶数分钟时,蠕虫实际爬的距离即为上爬的距离减去下滑的距离;在第奇数分钟时,蠕虫实际爬的距离即为上爬的距离。在循环中不断累积每分钟的实际爬行距离,然后运用了if语句,如果实际爬行距离大于或等于井深,则跳出循环,输出蠕虫爬出井的时间。
伪代码
1.2.2 实验代码截图
1.2.3 造测试数据
输入数据 |
输出数据 |
说明 |
12 3 1 |
11 |
示例 |
6 2 1 |
9 |
井比较浅 |
99 5 2 |
65 |
井比较深 |
87 30 2 |
7 |
上爬速度远远大于下滑速度 |
1.2.4 PTA提交列表及说明
运行超时:程序无法在规定时间内运行结束,检查后发现没有设置循环终止条件。但这个循环终止条件无法加在for语句的第二个表达式里,否则计算出的结果会是错误的。于是我在for语句中运用了if语句,如果实际爬行距离大于或等于井深,则跳出循环,输出蠕虫爬出井的时间。
二、代码互评(左边和中间的是同学代码,右边的是自己代码)
题目截图
不同之处:
- 第一位同学运用while语句,表达式为high+U<N,即当实际爬行距离加上最后一分钟的上爬距离小于井深时执行循环。high用来累加i的值。(i是用来统计每两分钟实际爬行的距离。)每次循环时time会加2,即每次循环的时间周期为2分钟。最后输出时间时加了上爬的一分钟。
- 第二位同学运用while语句,表达式为s<N,即爬行的实际距离小于井深时执行循环。s用来累加上爬距离U的值。h是用来累加每分钟蠕虫爬出井的时间。在while语句中嵌套了if语句。如果实际爬行距离s依旧小于井深U,将上爬距离减去下滑距离,赋值给s,再给h加上下滑所需要的一分钟时间。
- 我在for循环中嵌套if-else语句。奇偶数分开计算然后进行循环。在第偶数分钟时,蠕虫实际爬的距离即为上爬的距离减去下滑的距离;在第奇数分钟时,蠕虫实际爬的距离即为上爬的距离。在循环中不断累积每分钟的实际爬行距离,然后运用了if语句,如果实际爬行距离大于或等于井深,则跳出循环,输出蠕虫爬出井的时间。
三、学习总结
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行 |
多分支结构、字符型数据类型和逻辑运算符 |
对各运算符的优先级和结合性,多分支结构不熟悉 |
第七周 |
10小时 |
185行 |
熟悉多分支结构switch语句的使用 |
面对比较复杂的题时难以解决 |
第八周 |
8小时 |
159行 |
使用while和do-while结构解决问题 |
不知道如何写伪代码 |
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
- 在课堂上,老师会用几乎一节课的时间来讲上次作业的PTA,剩下一节课时间讲新的知识点。预习是非常重要的。当我提前预习过这个知识点,在课堂上听老师讲时就能跟着老师的节奏来,不会出现老师一讲一个新知识点就一脸懵逼的情况,在做PTA时也会更加有效率。在实践课中,两节课的时间完成一道调试程序的题,一道编程题,一道改错题,对我而言难度比较大,特别是写改错题进行调试时,不知道如何下手。而且经常会犯一些简单的小错误,导致在同一个环节做无数遍。实践课反映了我课后学习的时间不够充分,不够细心。合理安排课后学习时间,课前新知识预习是我应该督促自己去做的。