C语言I博客作业09
| 问题 | 答案 | 
|---|---|
| 这个作业属于那个课程 | C语言程序设计II | 
| 这个作业要求在哪里 | C语言I博客作业09 | 
| 我在这个课程的目标是 | 熟练掌握C语言 | 
| 这个作业在哪个具体方面帮助我实现目标 | 学会了如何去使用for嵌套来做编程题,熟悉了break、continue的使用方法,了解了字符型的输入 | 
| 参考文献 | Markdown基本语法 | 
一.PTA实验作业

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)数据处理
 数据表达:
         用了整形变量x,fen5,fen2,fen1,count=0
         x是用户传入的要求计算零钱数额
         fen5,fen2,fen1,count=0分别用来保存用户要求输出的5分硬币数量,2分硬币数量,1分硬币数量和换法个数
数据处理:伪代码
 定义整型变量x,fen5,fen2,fen1,count=0; x为输入的钱数,fen5为5分钱的个数,fen2为2分钱的个数,fen1为1分钱的个数,count为多少种换法。
 
    输入用户要求的钱数x; 
    for(fen5=x/5; fen5>=1; fen5--)
        for(fen2=x/2; fen2>=1; fen2--)
    
            计算出一分硬币的个数
            if(fen1>=1) 
                输出5分,2分,1分硬币的个数和硬币总数 
                count换法累加 
        end for
    end for
    输出换法个数 
(2)实验代码截图

(3)造测试数据
| 输入数据 | 输出数据 | 说明 | 
|---|---|---|
| 9 | fen5:1, fen2:1, fen1:2, tatal:4 count : 1 | 最小x | 
| 99 |  | 最大x | 
| 88 |  | 随机试验 | 
| 20 |  | 随机试验 | 
(4)PTA提交列表及说明

提交列表说明
 1.答案错误:误将total打为tatal,开始没有看出来,以为是像第一题一样要左对齐在d前加了一个-2
 2.答案错误:误将total打为tatal,不应该将%d改为%-2d,将total改为tatal,将%d改回来后答案正确
 刚开始做的时候定义了一个x1用来保存输入钱数减去8后的数,后来发现这样定义太麻烦还要定义其他的数来储存减去8后即每个方法中的每种硬币的个数减一的数,而且完全没有必要这样子做,后面做博客园的时候发现变量x1忘记删除了,后来将x1删除又提交了一次截的图。
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)数据处理
 数据表达:
          用了整形变量n,m,i,j,sum,flag=0
          n,m是用户传入的要求找完数的范围
          i用来保存在n、m范围内的每一位数
          j用来保存从2开始每一个小于i的数,用来找因子
          sum用来保存一个数的所有因子和,用来判断数的因子和是否等于这个数
          flag立一个flag用来判断该数是否属于完数
数据处理:伪代码
 定义变量n,m,i,j,sum,flag=0,n和m为用户输入的数,i和j用于循环,sun用来保存数的因子和,flag用来判断该数是否属于完数
     输入m和n 
     for(i=m;i<=n;i++)
	     对sum初始化为1 
	     for(j=2;j<i;j++)
		     if(i%j==0) Then 
		         对sum加上j并赋值给sum 			
	     end for 
	     if(sum==i) Then 
		     输出“sum = 1” 
		     for(j=2;j<i;j++)
		    	 if(i%j==0) Then 
				     输出“ + 因子” 
		     end for 
		     输出\n用来换行 
		     将1赋值给flag 
     end for 
     if(flag==0) Then 
     输出None
(2)实验代码截图

(3)造测试数据
| 输入数据 | 输出数据 | 说明 | 
|---|---|---|
| 6 28 | 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14 | 取完数为边界 | 
| 2 9999 |  | 最大范围 | 
| 10 20 | None | 空集 | 
| 6 6 | 6 = 1 + 2 + 3 | 6==6 | 
(4)PTA提交列表及说明

提交列表说明
 一次性正确,第一次提交的代码多加了一个if(i==1) contiune;用来判断i是否等于1,如果i=1则结束本次循环,后来做博客园的时候发现题目中说了1<m≤n≤10000,所以if(i==1) contiune;完全多余,后来将这个去掉重新提交了一次截的图。
二.代码互评
| 同学(柏朝晖)代码 | 同学(杨宇)代码 | 自己代码 | 
|---|---|---|
|  |  |  | 
比较
 (1)第一份代码用了三层循环嵌套,第一层用来处理5分硬币个数,第二层用来处理2分硬币个数,第三层处理1分的;而我的代码是用两个for循环嵌套处理fen5和fen2,然后再根据剩余的钱计算出fen1的个数,再判断fen1>=1是否成立来确定是否能构成题目要求的一种分硬币的方法。相对来说他的代码因为第三层for使编译时间比我的长,相比较之下,我的代码更好一些。
 (2)第一份定义变量用的是数字5、2、1的英文字母而我自己用了题目输出示例的字母来定义变量,相对来说我的更容易见名知意。第二份的定义的变量也有点奇怪
 (3)第二份跟我最开始的思路一样,先将输入的钱数减去8,即减去每种硬币一个加起来的钱数。然后就可以只用两层for循环分别了处理5分的和2分的,1分的就可以直接用`x-5*i-2*m+1`来解决,而我的代码还用了一个if(fen1>=1)来判断是否能构成题目要求的一种分硬币的方法。相比较之下,她的代码思路比较好。
三.学习总结
1.学习进度条
| 周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 | 
|---|---|---|---|---|
| 第四周 | 7小时 | 100行 | 在屏幕上显示Hello World! | 暂无 | 
| 第五周 | 8小时 | 100行 | 求华氏温度对应的摄氏温度 | 暂无 | 
| 第六周 | 30小时 | 200行 | 如何用 MinGW-w64 来编译C程序 | 暂无 | 
| 第七周 | 24小时 | 300行 | 运用if语句完成各种数学程序 | 对于&&的用法不了解 | 
| 第八周 | 24小时 | 300行 | 学会了for循环语句 | 暂无 | 
| 第九周 | 24小时 | 300行 | 学会了如何去自定义一个函数 | 暂无 | 
| 第十周 | 30小时 | 400行 | 学会了if-else语句的嵌入 | 对“(Y%100)这个表达式意味着当Y不能整除4时(Y%100的余数不等于0时)表达式为真”这句话不是很懂 | 
| 第十一周 | 24小时 | 450行 | 学会了如何去使用switch语句来做编程题 | 暂无 | 
| 第十二周 | 24小时 | 450行 | 学会了如何去使用while循环来做编程题 | 对字符型的输入不太了解 | 
| 第十三周 | 26小时 | 372行 | 学会了如何去使用for嵌套来做编程题,学会了continue的使用方法 | 对字符型的输入和输出不太了解,对数组完全不了解 | 
2. 累积代码行和博客字数
| 时间 | 博客字数 | 代码行数 | 
|---|---|---|
| 第四周 | 510 | 100 | 
| 第五周 | 510 | 200 | 
| 第六周 | 1149 | 400 | 
| 第七周 | 2027 | 700 | 
| 第八周 | 3791 | 1000 | 
| 第九周 | 5294 | 1300 | 
| 第十周 | 6900 | 1700 | 
| 第十一周 | 8614 | 2150 | 
| 第十二周 | 10495 | 2600 | 
| 第十三周 | 13019 | 2972 | 

3 .学习内容总结和感悟
(1)学习内容总结

(2) 学习体会
 现在我的学习进度完全是跟着老师走的,而且老师上课讲的东西有时候还不能熟练运用,而别人早已经走到前面去了。对别人来说一个小时就能将PTA做完而我有时候做一个题目想3、4个小时还没有思路最后只能求助百度,我觉得我应该反思一下了。
 以后尽量多刷点题目扩展一下逻辑思维能力,有剩余时间的话提前预习一下数组,感觉很多题目都要用到这个东西。
 感觉调试有点难搞,每次机课作业都很赶,需要多练习一下,学好了调试以后就好找代码出现的错误了。

 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号