C语言I博客作业08
| 问题 | 答案 |
|---|---|
| 这个作业属于那个课程 | C语言程序设计II |
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/9934 |
| 我在这个课程的目标是 | 熟练掌握各大语句,运算符,函数,尝试用简单的代码解决复杂的问题 |
| 这个作业在那个具体方面帮助我实现目标 | 熟悉使用while和do-while结构解决问题 |
| 参考文献 | 《C语言程序设计》 |
一、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时也会更加有效率。在实践课中,两节课的时间完成一道调试程序的题,一道编程题,一道改错题,对我而言难度比较大,特别是写改错题进行调试时,不知道如何下手。而且经常会犯一些简单的小错误,导致在同一个环节做无数遍。实践课反映了我课后学习的时间不够充分,不够细心。合理安排课后学习时间,课前新知识预习是我应该督促自己去做的。

浙公网安备 33010602011771号