C语言I博客作业09
问题 | 答案 |
---|---|
这个作业属于那个课程 | C语言程序设计IIII |
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/10028 |
我在这个课程的目标是 | 熟练掌握各大语句,运算符,函数,尝试用简单的代码解决复杂的问题 |
这个作业在那个具体方面帮助我实现目标 | 熟悉break、continue的使用,熟悉使用循环的嵌套解决问题 |
参考文献 | 《C语言程序设计》 |
一、PTA实验作业
1.1换硬币
题目内容:
将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
输入格式:
输入在一行中给出待换的零钱数额x∈(8,100)。
输出格式:
要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。
1.1.1数据处理
数据表达:定义了五个整型变量i,j,k,x,count。i指5分硬币数量,j指2分硬币数量,k指1分硬币数量,x指待换的零钱数额,count指换法个数。
数据处理:置count为0,调用scanf()函数输入x。使用嵌套循环,使用了三个for语句,先将x转换成相应的至多的5分硬币数量(或2分,或1分),通过循环筛选出符合题意的换法。运用if语句,当硬币面额等于零钱数额时,按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法,并累加count的值,换行输出换法个数。
伪代码
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
9 | fen5:1, fen2:1, fen1:2, total:4 count = 1 |
较小零钱数额 |
11 | fen5:1, fen2:2, fen1:2, total:5 fen5:1, fen2:1, fen1:4, total:6 count = 2 |
两种换法 |
12 | fen5:1, fen2:3, fen1:1, total:5 fen5:1, fen2:2, fen1:3, total:6 fen5:1, fen2:1, fen1:5, total:7 count = 3 |
三种换法 |
13 | fen5:2, fen2:1, fen1:1, total:4 fen5:1, fen2:3, fen1:2, total:6 fen5:1, fen2:2, fen1:4, total:7 fen5:1, fen2:1, fen1:6, total:8 count = 4 |
题目示例 |
1.1.4 PTA提交列表及说明
答案错误:在按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法时,total后面忘记打:
1.2跟奥巴马一起画方块
题目内容:
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!
输入格式:
输入在一行中给出正方形边长N(3≤N≤21)和组成正方形边的某种字符C,间隔一个空格。
输出格式:
输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。
1.2.1 数据处理
数据表达:定义了字符op,双精度浮点型变量z,整型变量x,n,y,N,i,j。op指组成正方形边的某种字符,z指行数的小数部分,x指列数,n指x/2的余数,y指行数,N时正方形边长,i和j是循环变量。
数据处理:调用scanf()函数输入x,op。 运用if语句,如果n为0或者z<0.5( y为整数或者y的小数部分小于0.5),直接将y的值赋给正方形边长N,否则将y进1再赋值给N.然后进行嵌套循环,运用了两个for语句,输出字符画出的正方形。
伪代码
1.2.2 实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
3 o | ooo ooo |
正方形边长较小 |
7 u | uuuuuuu uuuuuuu uuuuuuu uuuuuuu |
行数需要四舍五入 |
10 a | aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa |
题目示例 |
1.2.4 PTA提交列表及说明
编译错误:后面在for循环中使用了i作为循环变量,但是开始时忘记定义i了。不能只检查算法的部分,定义的部分也要注意。
二、代码互评
2.1.1题目截图
2.1.2代码截图(左边的是同学代码,右边的是自己代码)
- 不同之处:1.她根据x的取值范围(x∈(8,100)),算出至多的5分硬币数量为19,至多的2分硬币数量为49,1分硬币的数量则用待换的零钱数额x减去5分硬币和2分硬币的数量表示。使用嵌套循环,每次循环都会减少5分硬币数量或2分硬币数量,筛选出硬币面额等于零钱数额的组合。
2.我使用嵌套循环,运用了三个for语句,先将x转换成相应的至多的5分硬币数量(或2分,或1分),通过循环筛选出符合题意的换法。运用if语句,当硬币面额等于零钱数额时,按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。
2.2.1题目截图
2.2.2代码截图(左边的是同学代码,右边的是自己代码)
- 不同之处:1.她运用了两个if语句,并且在两个if语句中分别嵌套了两个for语句,如果正方形边长N的余数为0,运用嵌套的for语句直接输出字符画出的正方形;如果正方形边长N的余数不等于0,运用嵌套的for语句,改变了大循环的终止条件,再输出字符画出的正方形。
2.我运用if语句,如果n为0或者z<0.5( y为整数或者y的小数部分小于0.5),直接将y的值赋给正方形边长N,否则将y进1再赋值给N.然后进行嵌套循环,运用了两个for语句,输出字符画出的正方形。
三、学习总结
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结构解决问题 | 不知道如何写伪代码 |
第九周 | 8小时 | 158行 | 熟悉break、continue的使用,熟悉使用循环的嵌套解决问题 | 对复杂的嵌套循环还是有些难理解 |
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
- 这周学习的嵌套循环比较复杂,二重循环的执行过程是首先把外层循环变量i固定在一个值上,然后执行内层循环,内层循环j变化一个轮次;外层循环变量i加1后,重新执行内层循环,j再变化一个轮次。因此,内外层循环变量不能相同。我在做相关题目时把循环初始化语句放错了位置,混淆了外层循环和内层循环的初始化。通过举例分析后能加强逻辑分析,更好的理解嵌套循环。