C语言I博客作业09

这个作业属于那个课程 C语言程序设计II
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/10027
我在这个课程的目标是 熟练地掌握运用C语言,锻炼思维逻辑能力,为以后其他语言的学习打好基础.
这个作业在那个具体方面帮助我实现目标 学习for循环的嵌套以及了解break语句和continue语句的用法和区别
参考文献 《C语言程序设计》《C Primer Plus》百度百科 伪代码基本写法

1.PTA实验作业

1.1找完数

所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。
输入格式:输入在一行中给出2个正整数m和n(1<m≤n≤10000)中间以空格分隔。
输出格式:逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。

1.1.1数据处理

数据表达:用了变量m,n,i,j,sum,count.m,n通过直接输入得到,其他的通过赋值得到.类型全为整型.
数据处理:m,n表示输入的两个正整数,i和j表示循环起始变量,sum表示因子累加和,count表示完数的个数.
所用表达式:count=0;sum=0;m%i0;sum=sum+i;summ;m%j0;count0;count++;
流程结构:Begin
输入两个正整数m和n
count←0
for m←m to n
{
sum←0
for i←1 to m
{
if(m%i0)
then[sum←sum+i]
}
if(sum
m)
then[printf("%d = 1",m)
for j←2 to m
{
if(m%j0)
printf(" + %d",j)
}
printf("\n")
count++;]
}
if(count
0)
then[printf("None");]
End

1.1.2实验代码截图

1.1.3 造测试数据

输入数据 输出数据 说明
2 30 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14 sample等价
2 28 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14 取完数为边界
2 3 None 没有完数
2 1000 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14 496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248 随机值
2 10000 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14 496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248 8128 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 127 + 254 + 508 + 1016 + 2032 + 4064 最大范围

1.1.4 PTA提交列表及说明


1.编译错误:for语句用逗号分开的,我的语句是for(i=1;i<m,i++)正确的应该是for(i=1;i<m;i++).
2.部分正确:我将sum=0放在for循环之前,导致每次循环开始sum值不同,部分正确,应该讲sum=0放在for(i=1;i<m;i++)的内部.

1.2换硬币

将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
输入格式:输入在一行中给出待换的零钱数额x∈(8,100)。
输出格式:要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。

1.2.1数据处理

数据表达:用了变量x,count,total,a,b,c;x通过直接输入得到,其他的通过赋值得到,类型全为整型.
数据处理:x表示输入的零钱数额,count表示换法个数,total表示硬币总数量,a,b,c分别表示5分、2分和1分硬币的数量.
所用表达式:count=total=0;a=(x-8)/5;b=(x-8-a5)/2;c=x-8-a5-b2;count++;
流程结构:Begin
输入零钱数额x
count←0
total←0
a←(x-8)/5
for a←0 to a-1
{
b←(x-8-a
5)/2
for b←0 to b-1
{
c←x-8-a5-b2
printf("fen5:%d, fen2:%d, fen1:%d, total:%d",a+1,b+1,c+1,a+b+c+3)
count←count+1
printf("\n")
}
}
printf("count = %d",count)
End

1.2.2试验代码截图

1.2.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 sample 一般小x
9 fen5:1, fen2:1, fen1:2, total:4 count = 1
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
11 fen5:1, fen2:2, fen1:2, total:5 fen5:1, fen2:1, fen1:4, total:6 count = 2

1.2.4PTA提交列表及说明


1.答案错误:忽视了题目要求每种硬币至少有一枚,导致一分钱的硬币可能为0,将a=x/5;b=(x-a5)/2;修改为a=(x-8)/5;b=(x-8-a5)/2;并且将 printf("fen5:%d, fen2:%d, fen1:%d, total:%d",a,b,c,a+b+c+);修改为printf("fen5:%d, fen2:%d, fen1:%d, total:%d",a+1,b+1,c+1,a+b+c+3);先保证每种硬币都有一枚.

2.代码互评

我的代码:

同学(1)的代码:

代码差异:
1.代码整体思路一致,但同学(1)运用了数组长度为1000的数组number.
2.第二个for语句循环次数不一样,我的是for(i=1;i<m;i++),而同学(1)的是for(j=2;j<i;j++).
3.count的初始赋值不同,导致机构出现差异.
我的代码:

同学(2)的代码:


代码差异:
1.定义变量不同,他比多定义了一个起始变量.
2.我定义了一个flag=0,而同学(2)定义的是count=0;当m到n中有完数时,我的flag=1;而同学(2)count++.
3.判断区间m到n是否有完数的条件不同,我的是flag0,而同学(2)是count0.

3.学习总结

3.1学习进度条

周数/日期 这周所花的时间 代码行 学到的知识点简介 目前比较疑惑的问题
第三周(10/08--10/12) 12个小时 300行左右 定义函数,if-else,for循环语句 输入与输出格式,空语句
第四周(10/14--10/18) 15个小时 250行左右 for循环语句,基础的循环程序设计,数据的输出宽度 数据的输出宽度概念不太清晰,表达式的定义,空语句的定义
第五周(10/23--10/26) 12个小时 350行左右 自定义函数的声明与调用,break跳出循环,while()循环语句 自定义函数的应用
第六周(10/30--11/01) 18个小时 500行左右 if-else的嵌套,学习逻辑运算,条件语句,字符类型以及字符型数据的输入与输出 对字符型数据的输入与输出了解太少,缺乏练习,没有理解到getchar()字符输入函数与putchar()字符输出函数以及它们的运用
第七周(11/05--11/07) 24个小时 720行左右 使用switch语句的三种情况,在switch语句中使用break语句,数组的定义与使用 continue语句的使用,for语句的嵌套循环
第八周(11/12--11/15) 19个小时 810行左右 学习使用while和do-while语句实现次数不确定的循环,使用break语句处理多循环条件,以及了解while,do-while,for三种语句的差异 ASCII码和char类型和int类型的转换,进制数转化的多种方式
第九周(11/19--11/21) 16个小时 600行左右 学习了for循环的嵌套以及了解break语句和continue语句的用法和区别 静态数组和动态数组的区别

3.2累积代码行和博客字数

3.3学习内容总结和感悟

3.3.1学习内容总结

3.3.2学习体会

这个学期的学习已经临近尾声了,但我发现我还存在很多的问题,做题目没法很快的找到思路与问题的本质,写完代码就提交,出错了再去找错误点,一个一个慢慢地试,感觉效率很低.学习c语言越到后面感到困难,问题也越来越多,自我认识原因是之前的学习中没有及时巩固,可能那个时候明白了,但是没有深入挖掘与思考,在之后的学习中又慢慢遗忘了.所以,温故而知新是非常重要的,只有这样,才能在计算机学习方面越来越远,越飞越高.不经一番寒彻骨,怎得梅花扑鼻香.

posted @ 2019-11-21 18:05  wllrky  阅读(318)  评论(2编辑  收藏  举报