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

输出格式

逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子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实验代码截图

C语言I作业09_第1张图片

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实验代码截图

C语言I作业09_第2张图片

1.2.3 造测试数据

输入数据 输出数据 说明
x=13 C语言I作业09_第3张图片 当x=13有四种换法
x=16 C语言I作业09_第4张图片 当x=16有七种换法
x=8 当x=8有一种换法

1.2.4 PTA提交列表及说明

编译错误:inlcude这个单词打错了
其他错误:开始是在Dev上写然后又在PTA上写所以没什么错误。但在Dev上开始写的代码i,j,k都是从1开始, 然后依次递增;而PTA上要的是从大到小,
所以虽然运行出的结果和输出案例是一样的。但是我开始的代码没有从大到小顺序输出算法。所以就改成i,j,k都是从最大值开始,依次递减;由此就可以
先输出大的算法依次到小。

2.代码互评

自己代码 同学代码
C语言I作业09_第5张图片 C语言I作业09_第6张图片

不同点:

1.根据代码的复杂程度来看,我的代码比该同学的更加的简单;该同学把算五分,两分,一分的表达式列出来求解,而我是通过一个条件判断出是否是完数。
2.循环结构,我使用了三个for循环嵌套,而该同学使用了两个for循环嵌套。

自己代码 同学代码
C语言I作业09_第7张图片 C语言I作业09_第8张图片

不同点:

1.我的代码比该同学的代码要简单很多,我用了两个for循环的嵌套使用,而该同学用了四个for循环。
2.该同学的代码比我的要详细些,他把是偶数还是奇数的情况都用for循环来求解了,更加具有严谨性。

3.学习总结

3.1 学习进度条

周/日期 这周所花的时间 代码行 学到的知识点简介
10/8-10/12 5h 224 if-else语句和输入输出格式
10/13-10/18 12h 263 for循环语句,如何计算累加题
10/19-10/26 15h 334 如何编写自定义函数及更加熟练掌握for循环
10/26-11/2 14h 355 如何使用逻辑表达式及else-if语句
11/2-11/8 13h 284 如何使用switch语句
11/9-11/15 16h 231使用while语句以及字符型变量的输入输出,#include的使用 数组的使用
11/16-11/22 10h 203 使用循环的嵌套解决问题,以及break,continue语句

3.2 累积代码行和博客字数

C语言I作业09_第9张图片

3.3 学习内容总结和感悟

3.3.1 学习内容总结
C语言I作业09_第10张图片

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

你可能感兴趣的:(C语言I作业09)