C语言I博客作业09
| 这个作业属于那个课程 | C语言程序设计II |
|---|---|
| 这个作业要求在哪里 | C语言I作业09 |
| 我在这个课程的目标是 | 熟练运用循环嵌套语句,continue语句 |
| 这个作业在那个具体方面帮助我实现目标 | 在PTA的练习中逐渐熟练语句用法,和对知识的自我总结上 |
| 参考文献 | 集美大学林丽老师、百度文库、C语言程序设计 |
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数据处理
*数据表达*:conut代表方法数,a代表一分钱,b代表两分钱,c代表三分钱,x为输入的钱数,它们都为整型变量;
*数据处理*:
int count=0,a,b,c,x; 定义整型变量count,a,b,c,x
scanf("%d",&x); 输入x(钱数)
for(c=20;c>=1;c--) 使用for循环语句分别考虑出一分、两分、五分的个数
{
for(b=50;b>=1;b--)
{
for(a=100;a>=1;a--)
{
if(x==a+2*b+5*c)当a,b,c满足这个式子时便可输出
{
printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",c,b,a,a+b+c);输出a,b,c,a+b+c的个数
count++; 方法总数进行累加
}
}
}
}
printf("count = %d",count);输出方法数
return 0;结束
1.1.2实验代码截图

1.1.3 造测试数据
| 输入数据 | 输出数据 | 说明 |
|---|---|---|
| 8 | 1 1 1 3;1 | 取题目的边界值,必须有一个一分,两分,五分;方法数为1种 |
| 15 | 2 2 1 5;2 1 3 6;1 4 2 7;1 3 4 8;1 2 6 9;1 1 8 10;6 | 取15时有六种方法 |
| 10 | 1 2 1 4;1 1 3 5;2 | 取10时有2种方法 |
1.1.4 PTA提交列表及说明

* 答案错误:没有对count进行赋值,看了错误提示发现的
* 部分正确:等号附近没打空格,看错误提示发现的
* 编译错误:printf语句后没打分号,看错误提示发现的
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数据处理
*数据表达*:n,m用来组成区间范围,sum为因子的和,a用来判断是否为因子,i用来判断1-N的数,j为每次分解后的因子数,它们均为整型变量
*数据处理*:
int n,m,sum=0,j,i,a=0; 定义变量
scanf("%d %d",&m,&n); 输入n,m确定取值范围
if(1<m<=n<=10000)
{
for(i=m;i<=n;i++) 循环i的值,用来寻找完数
{
sum=1;
for(j=2;j<i;j++) 循环j的值,得出因子数
{
if(i%j==0) 判断j是否是i的因子数
sum+=j; 累加j的值
}
if(sum==i) 当因子数之和等于i时
{
printf("%d = 1",i); 输出i=1
for(j=2;j<i;j++) 再循环j
if(i%j==0) 当i除以j没有余数时
printf(" + %d",j); 输出+j
printf("\n");
a++; 因子个数的累加
}
}
if(a==0) 当因子个数为零时
printf("None\n"); 输出None
}
return 0; 结束
1.2.2实验代码截图

1.2.3 造测试数据
| 输入数据 | 输出数据 | 说明 |
|---|---|---|
| 10 50 | 28=1+2+4+7+14 | 在10到50的范围内,完数只有28,因子为1,2,4,7,14 |
| 10 20 | None | 在10到20的范围中,没有完数,输出了None |
| 5 50 | 6=1+2+3;28=1+2+4+7+14 | 在5到50的范围内完数有6,28;因子分别为1,2,3和1,2,4,7,14 |
1.2.4 PTA提交列表及说明

*编译错误:printf语句后面忘记打分号了,看了错误提示发现的
2.代码互评
自己代码:

同学代码:

* 自己代码:通过一步步循环将钱的个数逐步递减,再判断是否满足式子x=a+2*b+5*c,如果满足就将其输出。
* 同学代码:先循环变量,再用式子判断变量,再接着循环判断,一直到判断出每个硬币的个数再将其输出。
总结:同学的和我的在判断顺序上不同,但是我的较为容易理解一些
自己代码:

同学代码:

* 同学代码:同学先使用了if-else语句对行数分别进行判断再进行计算,接着用for语句循环,得出结果。
* 自己代码:我一开始用了for语句循环,并令i=1;i<1.0*n/2;这样可使n/2有小数时多加一个“一”,就不用分开讨论了,便可得到结果。
总结:同学代码比较详细易懂,我的代码比较简洁
3.学习总结
3.1 学习进度条
| 周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较困惑的问题 |
|---|---|---|---|---|
| 第六周 | 4天 | 20 | 用 MinGW-w64 来编译C程序,学习编程计算温度的转化 | 无 |
| 第七周 | 3天 | 99 | 学习用if,else等语句编译程序 | 无 |
| 第八周 | 2天 | 75 | 学习使用循环语句,用for来编译程序 | 无 |
| 第九周 | 3天 | 94 | 学习各种使用函数eg:fact(i) | for循环与while循环的区别 |
| 第十周 | 2天 | 213 | 学习使用多种分支结构 | 对分支结构中for循环有点迷糊不太能理解 |
| 第十一周 | 1天 | 135 | 学习使用switch语句 | 无 |
| 第十二周 | 1天 | 96 | 学习使用while语句 | 无 |
| 第十三周 | 1天 | 83 | 学习使用循环嵌套,continue语句 | 循环嵌套的顺序 |
3.2 累积代码行和博客字数

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

3.3.2 学习体会
在本周的学习中,我接触到了循环嵌套的方法,在听老师讲解的时候觉得不太难,但是到了自己做的时候还是经常遇到很多的问题,比如循环时输出的顺序,结构,还有数据经常出现格式问题。在PTA的完成过程中我遇到了很多问题,解决了一部分,还有一部分正在尝试解决。也学会一些新的东西,也逐渐琢磨出循环嵌套的使用,但是我还不够熟练,很明显的感觉自己不够熟练。不过博客作业中的每次总结中,我都能进一步的理解和思考自己的代码和思路。随着PTA的难度正在增加,我也要更加努力了!!!


浙公网安备 33010602011771号