| 这个作业属于那个课程 | C语言程序设计II |
|---|---|
| 这个作业要求在哪里 | C语言I作业09 |
| 我在这个课程的目标是 | 熟练掌握break、continue的使用,熟悉使用循环的嵌套解决问题 |
| 这个作业在那个具体方面帮助我实现目标 | 在作业中不断总结错误,更好地掌握了C语言 |
| 参考文献 | C语言 |
1.PTA实验作业

1.1 题目名1:7-2 换硬币
- 题目内容描述:将一笔零钱换成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数据处理
- 数据表达:根据题意定义了变量c,c表示零钱数额,即输入。定义了变量x表示5分币的个数,定义了变量y表示2分币的个数,定义了变量z表示1分币的个数。
- 数据处理:伪代码
将输入的钱定义为c,变量x输出5分币的个数,变量y输出2分币的个数,变量z输出1分币的个数。count为多少种换法。
开始
int main()
{
定义变量c表示输入
scanf("%d",&c);//输入零钱数额
for(int x=(c-2-1)/5;x>=1;x--)//5分硬币个数
{
for(int y=(c-1-5*x)/2;y>=1;y--)//2分硬币个数
{
int z=c-5*x-2*y;//1分硬币个数
int total;//当前方法硬币个数
total=x+y+z;
count++;//方法数加一
输出显示换法
}
}
显示换法总数
结束
}
1.1.2实验代码截图

1.1.3 造测试数据
| 输入数据 | 输出数据 | 说明 |
|---|---|---|
| 8 | fen5:1, fen2:1, fen1:1, total:3,count = 1 | 只有一种换法,每种硬币各一枚,共3个币,一种换法 |
| 9 | fen5:1, fen2:2, fen1:1, total:4;fen5:1, fen2:1, fen1:3, total:5,count = 2 | 有两种换法①5分一个,2分两个,1分一个,一共四个币②5分一个,2分两个,1分三个,一共5个币。共两种换法 |
1.1.4 PTA提交列表及说明

- 答案错误:求5分币的表达式错误,没有写x>=1.
- 编译错误:第18行count = %d\n写成count = %d/n,符号打错
- 编译错误:第15行将“:”符号打成“;”符号
- 编译错误:第15行"fen5:%d, fen2:%d, fen1:%d, total:%d\n"逗号后面没有打空格。
1.2 题目2:7-6 跟奥巴马一起画方块
- 题目内容描述:
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!
输入格式:
输入在一行中给出正方形边长N(3≤N≤21)和组成正方形边的某种字符C,间隔一个空格。
输出格式:
输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。
输入样例:
10 a
输出样例:
aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa
1.2.1数据处理
- 数据表达:定义了变量m,m,a,n表示边长,a表示某字符。
- 数据处理:伪代码
将输入的边长定义为n,变量a代表输入的某字符,用if-else语句判断条件进行运行,用两个for循环语句并重新定义两个变量i,j用于辅助判断。
开始 int main()
{
定义变量
显示输入("%d %c", &n, &a);
if if语句进行条件,如果为偶数
{
m = n / 2;
}
else 不满足条件进行下一步
{
m = n / 2 + 1;
}
for (定义变量i,语句循环条件)
{
for (定义变量j,语句循环条件)
{
输出;
}
输出;
}
结束;
1.2.2实验代码截图

1.2.3 造测试数据
| 输入数据 | 输出数据 | 说明 |
|---|---|---|
| 5 a | aaaaa aaaaa aaaaa | 由5 a组成的矩形 |
| 3 f | fff fff | 由3 f组成的矩阵 |
| 3 c | ccc ccc | 由3 c组成的矩阵 |
1.2.4 PTA提交列表及说明

- 编译错误:19行将输出显示printf("%c", a)打成了printf("%c", m)
- 答案错误:第6行的语句scanf("%d %c", &n, &a)打成了scanf("%d %c", &m, &a)
- 编译错误:17行循环语句进行条件判断错误,写成了j<i。
2.代码互评
同学代码(黄浩东)

自己代码

比较
- 1.从变量上来说,我将变量分开定义,先定义变量c,而后每个for循环语句后又定义x,y,z,用来表示三种钱币,而他是将变量一次性定义完。
- 2.因为给出待换的零钱数额∈(8,100),所以他的语句进行条件是各纸币总量不得超过100,而我的语句是直接计算。
3.对比两分代码,我是顺着题意出发,而他是逆向思维,互有可取之处。逆向思维是我可以值得学习的地方。
同学代码(袁思凡)

- 自己代码

比较
- 1.我定义了变量m,n。同时在for语句中定义了i,j。他是在开端直接将所有变量都列出,而后张直接用。
- 2.我是通过if语句判断n除以2的余数是否为0,不为0则加上1达到四舍五入的行数,而他则是直接一条语句判断。
- 3.对比两份代码,我认为他的代码更加简洁,但是我的变量定义的更加灵活,可以相互学习,相互借鉴。
3.学习总结
3.1 学习进度条
| 周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
|---|---|---|---|---|
| 第六周 | 20小时 | 150行 | 无 | 无 |
| 第七周 | 24小时 | 150行 | 运用if,else语句 | 对符号的意思不太理解 |
| 第八周 | 18小时 | 200行 | 运用for循环语句 | 无 |
| 第九周/10.25 | 8小时 | 200行 | 学习了自定义函数 | 符号容易弄混 |
| 第十周/11.1 | 26小时 | 250行 | 熟悉并掌握了多分支结构 | 各个运算符的意思还不太理解 |
| 第十一周/11.8 | 24小时 | 300行 | 熟悉唱我多分支结构switch语句 | 对空格的使用还比较疑惑 |
| 第十二周/11.21 | 16小时 | 280行 | 学会了break、continue的使用和循环的嵌套解决问题 | 对循环的嵌套还不怎么懂 |
3.2 累积代码行和博客字数

3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
- 本周学习了break、continue的使用,并学了用循环的嵌套解决问题,但是对循环的嵌套还不太懂,需要多多学习。
- 昨天通过pta老师发布的视频学习了指针变量,还需要通过写些题来巩固知识。


