C语言I博客作业09
本周作业头
| 问题 | 答案 |
|---|---|
| 这个作业属于那个课程 | C语言程序设计II |
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/10033 |
| 我在这个课程的目标是 | 熟悉break、continue的使用,学习使用循环的嵌套解决问题 |
| 这个作业在那个具体方面帮助我实现目标 | 在PTA上面完成编程作业,百度上查资料 |
| 参考文献 | 《C语言程序设计》 |
1.PTA实验作业

1.1 题目名1:将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
输入格式:
输入在一行中给出待换的零钱数额x∈(8,100)。
输出格式:
要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。
输入样例:
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.1数据处理
- 数据表达:使用了整形变量x,i,w,a,b,c,d,count,x表示零钱数额,在循环中i储存五分硬币个数,w储存一分硬币个数,a表示最多五分硬币个数减一,b减去五分剩余的钱,c储存二分硬币个数,d减去五分和二分剩下的钱,储存换法个数。
- 数据处理:表达式:fen5:%d, fen2:%d, fen1:%d, total:%d\n,i+1,w+1,d+1,i+w+d+3。
- 伪代码:
x←x-8 /排除第一种算法/
a←x/5 /计算余下的钱能换几个五分硬币/
for(i←a;i>←0;i--) /将a赋值给i,用来储存每次循环的五分硬币个数,并判断是否还有五分硬币/
b←x-5i /减去五分剩余的钱/
c←b/2 /储存二分硬币个数8/
for(w←c;w>←0;w--) /将二分硬币个数赋值给w,并判断是否还剩余二分硬币/
d←x-5i-2w /计算除去二分硬币和五分硬币的/
输出五分硬币,二分硬币,一分硬币,总硬币个数
count++;
end for
end for
输出换法个数
end
1.1.2实验代码截图

1.1.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 | 零钱为13时,共4种换法,8枚硬币 |
| 5 | count = 0 | 零钱为5时,没有换法 |
| 10 | fen5:1, fen2:2, fen1:1, total:4/fen5:1, fen2:1, fen1:3, total:5/count = 2 | 零钱为10时,共2种换法,5枚硬币 |
| 15 | fen5:2, fen2:2, fen1:1, total:5/fen5:2, fen2:1, fen1:3, total:6/fen5:1, fen2:4, fen1:2, total:7/fen5:1, fen2:3, fen1:4, total:8/fen5:1, fen2:2, fen1:6, total:9/fen5:1, fen2:1, fen1:8, total:10/count = 6 | 零钱为15时,共6种换法,10枚硬币 |
1.1.4 PTA提交列表及说明

- Q1.编译错误:硬币的赋值错误导致编译错误。
- A1.找到错误之后加了一个for语句。
- Q2:部分正确:硬币的数量没有依次从大到小的顺序
- A2:重新调换了一下顺序。
1.2 题目2:所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。
输入格式:
输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。
输出格式:
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。
输入样例:
2 30
输出样例:
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
1.2.1 数据处理
- 数据表达:使用了m,n,i,sum,j,k,z整形变量,分别表示两个正整数,完数和因子。
1.2.2 实验代码截图

1.2.3 造测试数据
| 输入数据 | 输出数据 | 说明 |
|---|---|---|
| 2 30 | 6 = 1 + 2 + 3/28 = 1 + 2 + 4 + 7 + 14 | 因子三个,完数28 |
| 6 25 | 6 = 1 + 2 + 3 | 三个因子,无完数 |
| 8 40 | 28 = 1 + 2 + 4 + 7 + 14 | 完数为28 |
1.2.4 PTA提交列表及说明

- Q1:部分正确:没有逐行输出给定范围内每个完数的因子累加形式的分解式。
- A1:好好阅读题目输出格式才知道,于是就改了过来。
2.代码互评
同学代码截图
(来自软件三班童英俊同学的代码)

自己代码截图

- 代码比较
- 不同点:他使用的整形变量较少,只有四个,而我使用的整形变量较多。
- 相同点:都使用了表达式:fen5:%d, fen2:%d, fen1:%d, total:%d\n,来求5分、2分和1分硬币的数量。
- 总的来说他的代码较少,写起来会比较简便,而我的代码较长。
3.学习总结
3.1 学习进度条
| 周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
|---|---|---|---|---|
| 第一周 | 四个小时 | 40行 | 初步接触编程与c语言,在电脑上显示Hello World | 对所有编程的事物都很懵 |
| 第二周 | 十二个小时 | 65行 | 了解MinGW-w64安装教程并完成了GCC编译器的安装,并用 MinGW-w64 来编译 C程序 | 不是很熟练地掌握安装和编译 |
| 第三周 | 十五个小时 | 100行 | 练习对表格的使用和PTA里的题目,对编程开始提高速度和准确性 | 有些难的编程题目是真的很难做动 |
| 10.14~10.20 | 20小时 | 150行 | 学习指定次数的循环程序设计,以及power的用法 | 循环程序的题型很多,有些也比较复杂,不是很容易理解 |
| 10.20~10.27 | 20小时 | 180行 | 能模仿编程,认识函数,编辑思维导图 | 用C语言编写程序生成乘方表与阶乘表没有很掌握好 |
| 第十周 | 32小时 | 526行 | 多分支结构、字符型数据类型和逻辑运算符 | 循环类的题目没有完全掌握 |
| 第十一周 | 40小时 | 760行 | 学会用switch语句 | 对于break语句的一般的三种使用方法没有运会得当 |
| 第十二周 | 42小时 | 805行 | 使用while和do-while结构解决问题 | 对新学习的循环语句没有掌握好 |
| 第十三周 | 35小时 | 1000行 | 学习break、continue的使用,学习使用循环的嵌套解决问题 | 对continue语句的使用还有一些困扰 |
3.2 累积代码行和博客字数

3.3 学习内容总结和感悟
3.3.1 学习内容总结

3.3.2 学习体会
- 1.这周又新学习了两种新的循环语句,对循环结构这个知识点算是更清晰一点啦。
- 2.对C语言的学习还得下功夫,上课时总喜欢打瞌睡,有些知识根本没听。
- 3.要养成提前预习的好习惯,只有这样,才能稳稳地跟上老师的节奏。

浙公网安备 33010602011771号