一、表格
问题 | 答案 |
---|---|
这个作业属于那个课程 | C语言程序设计II |
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/10027 |
我在这个课程的目标是 | 学习好C语言,熟练掌握编译代码的相关技巧,解决自己所遇到的问题 |
这个作业在那个具体方面帮助我实现目标 | 学会break、continue的使用以及循环的嵌套 |
参考文献 | 百度,C语言程序设计,《C Primer Plus》 |
二、本周作业
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,j,m,count,total;其中x是零钱数额,i是五分钱个数,j是二分钱个数,m是一分钱个数,count用于计数,total是硬币个数
输入x的数值
for(i=20;i>=1;i=i-1)
根据题目要求五分钱最多会有20个,所以直接从最大值开始依次进行减一
for(j=50;j>=1;j=j-1)
根据题目要求二分钱最多会有50个,所以直接从最大值开始依次进行减一
for(m=100;m>=1;m=m-1)
根据题目要求一分钱最多会有100个,所以直接从最大值开始依次进行减一
if(5*i+2*j+1*m==x)
用if语句进行判断钱数总和是不是等于输入的数值
total=i+j+m;
printf("fen5:%d, fen2:%d, fen1:%d, total:%d
",i,j,m,total);
count++;
最后输出“count = 换法个数”。
1.1.2实验代码截图
1.1.3 造测试数据
1.1.4 PTA提交列表及说明
提交列表说明:
1.答案错误:开始的时候没有输入if语句进行判断,后改正为if(5*i+2*j+1*m==x)
2.格式错误:将for语句中的printf("
")语句删掉
3.格式错误:答案输出来等号两边没有空格,所以将printf("count=%d",count);修改为printf("count = %d",count);
4.答案正确:。。。
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 数据处理
定义整型变量输出int m,n,sum,count,k,a;其中m和n是输入的2个正整数,count是完数的个数,sum是题目范围中的完数,a是因子,k是中间数
输入m,n的值
for(k=m;k<=n;k++)
根据题目要求所给的范围
for(a=1;a<k;a++)
if(k%a==0)
判断是否有余数
if(sum==k)
判断sum是否等于K
printf("%d = 1",sum);
输出因子1
for(a=2;a<k;a++)
循环寻找因子
如果是则进行累加输出
如果count=0则进行输出None
1.2.2 实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
2 30 | 6 = 1 + 2 + 3/28 = 1 + 2 + 4 + 7 + 14 | 验证题目所给数据 |
36 80 | None | 随机验证数据 |
7 30 | 28 = 1 + 2 + 4 + 7 + 14 | 随机验证数据 |
1.2.4 PTA提交列表及说明
提交列表说明:
1.编译错误:将 printf("%d=1",sum);语句修改为 printf("%d = 1",k);语句
2.部分正确:将sum=0从第二个for语句中修改到第一个for语句之中
3.部分正确:将for语句中printf(" + %d",sum);修改为printf(" + %d",a);
4.部分正确:程序运行出来的答案没有进行换行,所以在最后的for语句中加上 printf("
");
5.答案正确:。。。
2.代码互评
同学代码一:
自己代码一:
代码比较:
1.关于变量我比同学多定义了一个total用来计算硬币的个数,而同学的是直接用i+j+k.
2.其实我们的总的思路是差不多的,只是我们for语句中关于算硬币的算法不同。
3.我是直接算出来然后写上去,而同学的是用i=x/5;j=x/2;k=x来表示。
同学代码二:
自己代码二:
代码比较:
1·从行数上看我的代码比同学的代码长了好多,同学的看起来更简洁一点。
2.我的代码是分俩种情况进行讨论分了奇数和偶数,而同学的代码直接就写出来了,没有分情况讨论。
3.通过比较代码我发现同学运用了一个语句getchar()语句,这个语句的意思是可以从键盘输入一个字符,而我的scanf("%c",&c)意思是差不多的,只是表达不一样。
3.学习总结
3.1 学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第一周(9.19-3.27) | 四天 | 40 | Hello world编程和Markdown语法 | 对待大部分内容都不理解 |
第二周(9.25-10.4) | 四天 | 35 | 华氏度与摄氏度的转换 | 不理解数据类型 |
第三周(10.8-10.11) | 三天 | 90 | if-else语句、格式化输入语句 | 分不清整型变量和浮点型变量 |
第四周(10.15-10.17) | 三天 | 100 | 有关for循环体的运用 | 有时候不清楚循环体是什么 |
第五周(10.22-10.25) | 三天 | 130 | 使用自定义函数来编程和生成乘方表和阶乘表 | 不知道如何调试函数以及在哪里设置断点 |
第六周(10.30-11.2) | 四天 | 180 | 分支结构、字符型数据类型 | 对待字符型题目还是不能够准确理解 |
第七周(11.06-11.08) | 三天 | 190 | 学会多分支结构switch语句的使用 | 有时不能准确理解case后的有些语句 |
第八周(11.13-11.15) | 三天 | 200 | 学会使用while和do-while结构解决问题 | 不能准确判断while的循环条件 |
第九周(11.20-11.22) | 三天 | 195 | 学会break、continue的使用以及循环的嵌套 | 有时候对循环条件判断错误 |
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
1.在这一周我们学习了有关break、continue的使用以及循环的嵌套结构。
2.首先break语句是强制循环结束,然后continue语句的作用是跳出循环体中continue后面的语句,继续下一次循环。
3.循环的嵌套结构,可用于多次循环,解决行与列的问题、以及依次输入数等等较复杂的问题。例如本次作业的九九乘法表。
4.现在学习的知识点越来越多,是我对待C语言又有了新的认识,虽然相对刚开学来说好一些,但在写作业时有时还是会出现一些错误,有的时候也不是能够很好的理解题目内容。接下来的时间要提高一下自己的理解力。