一、本周作业头
这个作业要求在哪里 |
https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/10027 |
我在这个课程的目标是 |
熟练掌握好C语言,培养自己的思维能力,同时加快敲代码速度。 |
这个作业在那个具体方面帮助我实现目标 |
帮助我熟练的掌握循环的嵌套使用 |
参考文献 |
百度百科、CSDN博客、C语言程序设计 |
二、本周作业
1.PTA实验作业

1.1 找完数
所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。
输入格式
输入在一行中给出2个正整数m和n(1
输出格式
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。
若区间内没有完数,则输出“None”。
输入样例:
2 30
输出样例
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
1.1.1数据处理
数据表达:用了m,n,i,j,sum,k,count=0;其中m,n代表区间[m,n];i,j,k代表循环起点;sum代表因子之和;count表示用于判断是否是完数。均为整型
数据处理:
Begin
int m,n,i,j,sum,k,count←0;
输入n,m;
for i←m to n
sum←0
for j←1 to i
if i%j==0
sum←sum+j
if i==sum
printf("%d = 1",i);
for k←2 to j
if j%k==0
printf(" + %d",k);
printf("\n");
count++;
if count==0
{
printf("None");
}
END
1.1.2实验代码截图

1.1.3 造测试数据
m=2,n=30 |
6 = 1 + 2 + 3, 28 = 1 + 2 + 4 + 7 + 14 |
6,28属于完数 |
m=2,n=100 |
6 = 1 + 2 + 3, 28 = 1 + 2 + 4 + 7 + 14 |
6,28属于完数 |
m=2,n=500 |
6 = 1 + 2 + 3, 28 = 1 + 2 + 4 + 7 + 14, 496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248 |
6,28,496属于完数 |
1.1.4 PTA提交列表及说明

多处错误:if(count==0)写成if(count=0) , printf("\n");放在第三个循环内。
部分正确:count没有赋初值0。
部分正确:sum=0放在循环外,导致答案错误,在循环内表示每次循环sum的初值为0.
1.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.2.1数据处理
数据表达:x,i,j,k,count=0,total;x代表待换的零钱数额;i代表五分硬币数,j代表二分硬币数;k代表一分硬币数。total代表硬币总数,count代表换法个数,变量均为整型。
数据处理:
Begin
int x,i,j,k,count←0,total;
scanf x;
for i←x to 0
for j←x to 0
for k←x to 0
if x←5*i+2*j+k
total←i+j+k
count←count+1;
printf fen5:%d, fen2:%d, fen1:%d, total:%d\n",i,j,k,i+j+k;
printf count ← %d",count
End
1.2.2实验代码截图

1.2.3 造测试数据
x=13 |
 |
当x=13有四种换法 |
x=16 |
 |
当x=16有七种换法 |
x=8 |
 |
当x=8有一种换法 |
1.2.4 PTA提交列表及说明

编译错误:inlcude这个单词打错了
其他错误:开始是在Dev上写然后又在PTA上写所以没什么错误。但在Dev上开始写的代码i,j,k都是从1开始, 然后依次递增;而PTA上要的是从大到小,
所以虽然运行出的结果和输出案例是一样的。但是我开始的代码没有从大到小顺序输出算法。所以就改成i,j,k都是从最大值开始,依次递减;由此就可以
先输出大的算法依次到小。
2.代码互评
不同点:
1.根据代码的复杂程度来看,我的代码比该同学的更加的简单;该同学把算五分,两分,一分的表达式列出来求解,而我是通过一个条件判断出是否是完数。
2.循环结构,我使用了三个for循环嵌套,而该同学使用了两个for循环嵌套。
不同点:
1.我的代码比该同学的代码要简单很多,我用了两个for循环的嵌套使用,而该同学用了四个for循环。
2.该同学的代码比我的要详细些,他把是偶数还是奇数的情况都用for循环来求解了,更加具有严谨性。
3.学习总结
3.1 学习进度条
10/8-10/12 |
5h |
224 |
if-else语句和输入输出格式 |
10/13-10/18 |
12h |
263 |
for循环语句,如何计算累加题 |
10/19-10/26 |
15h |
334 |
如何编写自定义函数及更加熟练掌握for循环 |
10/26-11/2 |
14h |
355 |
如何使用逻辑表达式及else-if语句 |
11/2-11/8 |
13h |
284 |
如何使用switch语句 |
11/9-11/15 |
16h |
231使用while语句以及字符型变量的输入输出,#include的使用 |
数组的使用 |
11/16-11/22 |
10h |
203 |
使用循环的嵌套解决问题,以及break,continue语句 |
3.2 累积代码行和博客字数

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

3.3.2 学习体会
又是一周的学习,学习的结构也越来越复杂了;这周主要学习了循环嵌套的使用,使用循环的嵌套可以解决许多复杂的问题,比如求解1!+2!+····+100!使用循环的嵌套
就变得更简单。同时学习的越多越要和前面所学习的知识联系起来,做到尽量使自己的代码变得精炼而又通俗易懂。同时现在明显的感觉到了做题一定要有数学的思维逻辑,
不然就是一头雾水,不知道如何下手,PTA的第二题开始一点思路都没有,通过请教了一位以前的同学才慢慢的找到了思路,慢慢地把代码敲了出来。所以想要敲出代码一定
要学好高数,努力的培养自己的数学思维以及一定的逻辑能力。