C语言I博客作业09

这个作业属于那个课程 C语言程序设计II
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/10028
我在这个课程的目标是 精通c语言
这个作业在那个具体方面帮助我实现目标 学会了循环的嵌套
参考文献 c语言程序设计

1.PTA实验作业(20分/题)

从PTA题目集中选出2个你最满意的题目完成以下内容,选择题目难度越大,分值越高,每题20分(每项5分),内容要求如下:

1.1 题目名1

7-2 换硬币 (20 分)
将一笔零钱换成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数据处理

#include"stdio.h"
int main()
{
    声明变量 待换的零钱, 5分数, 2分数, 1分数, 硬币数, 情况数 = 0;
    给待换的零钱赋值;
    5分最多的情况 = (待换的零钱 - 2分 - 1分) / 5;
    for ( 5分硬币从最多到一个的情况)
    {
        for (2分硬币从最多到一的情况)
        {
            1分数 = 待换的零钱 - 5 * 5分数 - 2 *2分数;
            硬币数 =5分数 + 2分数 + 1分数;
            情况数++;
            printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n", 5分数,2分数,1分数, 硬币数);
        }
    }
    printf("count = %d\n", 情况数);
}

1.1.2实验代码截图

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

1.1.3 造测试数据

输入数据 输出数据 说明
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 题目所给
2 count = 0 c<8
8 fen5:1, fen2:1, fen1:1, total:3 count = 1 c=8

1.1.4 PTA提交列表及说明

本题在编程上没有什么问题,主要是硬币数量的各种情况的逻辑关系比较难理清,理清后叶就没什么问题了。

1.2 题目2

7-3 找完数 (20 分)
所谓完数就是该数恰好等于除自身外的因子之和。例如: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.2.1 数据处理

int main()
{
    int m, n, count = 0;
    scanf("%d %d", &m, &n);
    for (int i = m; i <= n; i++)
    {
        if (i == sum(i))//判断是否为完数
        {
            count++;//判断是否存在完数
            printf("%d = ", i);
            for (int j = 1; j < i; j++)
            {
                if (i % j == 0)
                {
                    if (j == 1)
                        printf("1");
                    else
                        printf(" + %d", j);
                }
            }
            printf("\n");
        }
    }
    if (count == 0)
        printf("None");
    return 0;
}
int sum(int n)//判断是否为完数
{
    int sum = 0;
    for (int i = 1; i < n; i++)
    {
        if (n % i == 0)//判断是否为因子
            sum += i;//将因子加起来
        else
            continue;
    }
    return sum;
}

1.2.2 实验代码截图

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

C语言I博客作业09_第3张图片

1.2.3 造测试数据

输入数据 输出数据 说明
2 30 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14 题目所给
2 4 None 没有的情况
5 9 6 = 1 + 2 + 3 有一组

1.2.4 PTA提交列表及说明

答案错误:由于没有将j=1的情况拿出来单独考虑,导致多输出了一个+
解决方法:将j=1的情况单独考虑

2.代码互评(5分)

找2份同学代码,和自己代码比较,建议互评代码尽量找代码风格差异较大。

同学代码截图

同学1

C语言I博客作业09_第4张图片

同学2

C语言I博客作业09_第5张图片

自己代码截图

C语言I博客作业09_第6张图片
1:这位同学将几个循环直接放在了一起,但是第三个for循环是多余的
2:这位同学可以将式子进行一下合并
3:我的代码就这两个的集合了

3.学习总结(15分)

3.1 学习进度条(5分)

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
第一周 2h 72 输出 对于输出的符号还不熟
第二周 3.5h 57 计算 算法陌生
第三周 3.5h 81 分支结构 分支的逻辑理不清
第四周 1.5h 180 for循环,+= 终止条件理不清
第五周 2h 600 函数结构 对于算法的处理比较迷惑
第六周 2h 1000 嵌套 对于嵌套的结构过多会解读的很吃力
第七周 2h 1246 switch结构 switch结构里的case最后若是不加break会怎么样
第八周 3h 1102 while结构 字符的运用不熟
第九周 3h 1002 循环嵌套 代码思维不够

3.2 累积代码行和博客字数(5分)

C语言I博客作业09_第7张图片

3.3 学习内容总结和感悟(5分)

3.3.1 学习内容总结

C语言I博客作业09_第8张图片

3.3.2 学习体会

通过本周的学习,我对于循环的嵌套有了更深一层的了解,而且通过做题我感觉到了写C语言题目时是很考验思维的,很多题目都需要
反向思维,顺着推的话总是会出现很多问题,所以我也需要更多练习来提升自己的反向思维能力。

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