C语言I博客作业09

一、表格


问题 答案
这个作业属于那个课程 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\n",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("\n")语句删掉
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("\n");
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语言又有了新的认识,虽然相对刚开学来说好一些,但在写作业时有时还是会出现一些错误,有的时候也不是能够很好的理解题目内容。接下来的时间要提高一下自己的理解力。

posted on 2019-11-22 18:58  欣欣以向荣  阅读(239)  评论(11编辑  收藏  举报

导航