C语言I博客作业08
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zswxy/CST2020-2/ |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-2/homework/11611 |
| 这个作业的目标 | 学会并熟悉循环结构,分清楚break与continue的区别,熟练运用嵌套解决问题 |
| 学号 | 20208999 |
1.PTA实验作业(20分/题)

1.1 7-4 一钱生多钱 (10分)
在日常生活中,我们常常需要将一些大额的人民币换算成零钱,已知我们有许多面值5元,2元和1元的人民币。
编程实现:输入我们需要兑换的金钱数,然后我们用这些面值5元,2元和1元的人民币来兑换,要求每一种面值都至少有1张,然后输出有多少种兑换方式。
1.1.1数据处理
数据表达:本题定义了x,count,j,m,k五个个整型变量,对x做格式化输入,count赋值为0,其余分别用于存储硬币数量。
数据处理: for (int j = x; j > 0; j--) {
for (int m = x / 2; m > 0; m--) {
for (int k = x / 5; k > 0; k--){
if (5 * k + 2 * m + j == x) {
printf("five=%d,two=%d,one=%d\n", k, m, j);
}
}
}
}
用循环嵌套的递减来解决此问题,设置for语句三重递减循环,第一重定义j等于x,当j大于0时,j-1并进行第二重循环,m用于表示两分硬币数,k表示五分硬币数,最后从大到小排序输出。
1.1.2实验代码截图

1.1.3 造测试数据
| 输入数据 | 输出数据 | 说明 |
|---|---|---|
| 8 | five=1,two=1,one=1 | 零钱数为最小极限值 |
| 100 | five=1,two=1,one=93 | 零钱数为最大极限值 |
| five=1,two=2,one=91 | ||
| .... | ||
| 13 | five=1,two=1,one=6 | 实验样例 |
| five=1,two=2,one=4 | ||
| five=1,two=3,one=2 | ||
| five=2,two=1,one=1 |
1.1.4 PTA提交列表及说明

提交列表说明:
答案错误:我的输出样式与题目中的要求不符合,恰好相反。
处理方法:将三重循环的每个for语句重新排序,将第三重提到第一重,第一重提到第三重。
格式错误:输出的大小写与符号与题目不符
处理方式:将题目要求复制上去
1.2 7-5 幸运彩票 (15分)
彩票的号码有 6 位数字,若一张彩票的前 3 位上的数之和等于后 3 位上的数之和,则称这张彩票是幸运的。本题就请你判断给定的彩票是不是幸运的。
1.2.1 数据处理
数据表达:定义了n,sum1,sum2整型变量,a,b两个字符型变量,对n输入,用getchar输入字符,对sum1,sum2赋值为零
数据处理:while (n--)
{
int sum1 = 0;
int sum2 = 0;
for (int i = 0; i < 3; i++)
{
scanf("%c", &a);
sum1 += a;
}
for (int i = 0; i < 3; i++)
{
scanf("%c", &b);
sum2 += b;
}
if (sum1 == sum2)
{
printf("You are lucky!\n");
}
else
{
printf("Wish you good luck.\n");
}
getchar();
}
1.2.2 实验代码截图

1.2.3 造测试数据
| 输入数据 | 输出数据 | 说明 |
|---|---|---|
| 2 | 实验输入样例 | |
| 233008 | You are lucky! | |
| 123456 | Wish you good luck. | |
| 2 | 6个数全为0 | |
| 000000 | You are lucky! | |
| 222333 | Wish you good luck. |
1.2.4 PTA提交列表及说明

提交列表说明:
答案错误:在对定义的字符a做格式化输入时没有用%c而是用了%d
2.代码互评(5分)
同学代码:


本人代码:

- 不同点:1.同学主要用for的嵌套循环来解决问题,而我先用了while的递减再用for嵌套循环解决问题
2.我定义了字符型变量与整型变量来解决问题,同学定义了无符号的整型变量与数组来解决问题。
3.我将每位数用字符输入后储存在整型变量内进行判断,同学利用余数相加储存来判断结果
3.学习总结(15分)
3.1 学习进度条(5分)
| 周/日期 | 这周所花时间 | 代码行 | 学到的知识点简介 | 目前比较疑惑的问题 |
|---|---|---|---|---|
| 第一周/11.2-11.8 | 15h | 350 | 学习了for循环结构 | 无 |
| 第二周/11.9-11.15 | 21h | 480 | 学习了自定义函数的调用 | 无 |
| 第二周/11.16-11.22 | 35h | 540 | 学习了if else分支结构,字符型定义 | 无 |
| 第四周/11.23-11.29 | 46h | 660 | 学习了switch语句 | 无 |
| 第五周/11.30-12.6 | 50h | 780 | 学习了while语句与do while语句 | 在while内镶嵌其他语句 |
| 第六周/11.7-12.13 | 60h | 830 | 学习了嵌套循环,认识了continue和break的区别 | 在嵌套循环的用法 |
3.2 累积代码行和博客字数(5分)

3.3 学习内容总结和感悟(5分)
3.3.1 学习内容总结

跳出多重循环的方法:1. 使用goto
- 写成函数 return
- 直接修改外层循环条件
- 在外层循环设置判断条件
- 在大循环后面判断标志加入break
以上内容在CSDN论坛中查阅得知
3.3.2 学习体会
- 作业越来越难了,空闲时间多看看书学习,练习代码能力
- 每天都要打一段时间的代码,可以经常看看视频教学
- 要多去参考资料,打代码不能只是照猫画虎,那样毫无作用

浙公网安备 33010602011771号