C语言I作业09

一、本周作业头##

这个作业属于那个课程|C语言程序设计II
--|:--😐:--
这个作业要求在哪里|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<m≤n≤10000),中间以空格分隔。

输出格式####

逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子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循环语句,如何计算累加题|不知道什么时候用include<math.h>
10/19-10/26|15h|334|如何编写自定义函数及更加熟练掌握for循环|自定义函数的使用
10/26-11/2|14h|355|如何使用逻辑表达式及else-if语句|如何去寻找else-if之间的关系
11/2-11/8|13h|284|如何使用switch语句|switch语句与for循环同用时的关系
11/9-11/15|16h|231使用while语句以及字符型变量的输入输出,#include<string.h>的使用|数组的使用
11/16-11/22|10h|203|使用循环的嵌套解决问题,以及break,continue语句|在多个循环中如何输出换行

3.2 累积代码行和博客字数

3.3 学习内容总结和感悟

3.3.1 学习内容总结

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

posted @ 2019-11-20 23:07  曾子豪  阅读(282)  评论(1编辑  收藏  举报