zoukankan      html  css  js  c++  java
  • C语言I博客作业09

    这个作业属于那个课程 C语言程序设计II
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/10027
    我在这个课程的目标是 熟练地掌握运用C语言,锻炼思维逻辑能力,为以后其他语言的学习打好基础.
    这个作业在那个具体方面帮助我实现目标 学习for循环的嵌套以及了解break语句和continue语句的用法和区别
    参考文献 《C语言程序设计》《C Primer Plus》百度百科 伪代码基本写法

    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”。

    1.1.1数据处理

    数据表达:用了变量m,n,i,j,sum,count.m,n通过直接输入得到,其他的通过赋值得到.类型全为整型.
    数据处理:m,n表示输入的两个正整数,i和j表示循环起始变量,sum表示因子累加和,count表示完数的个数.
    所用表达式:count=0;sum=0;m%i0;sum=sum+i;summ;m%j0;count0;count++;
    流程结构:Begin
    输入两个正整数m和n
    count←0
    for m←m to n
    {
    sum←0
    for i←1 to m
    {
    if(m%i0)
    then[sum←sum+i]
    }
    if(sum
    m)
    then[printf("%d = 1",m)
    for j←2 to m
    {
    if(m%j0)
    printf(" + %d",j)
    }
    printf(" ")
    count++;]
    }
    if(count
    0)
    then[printf("None");]
    End

    1.1.2实验代码截图

    1.1.3 造测试数据

    输入数据 输出数据 说明
    2 30 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14 sample等价
    2 28 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14 取完数为边界
    2 3 None 没有完数
    2 1000 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14 496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248 随机值
    2 10000 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14 496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248 8128 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 127 + 254 + 508 + 1016 + 2032 + 4064 最大范围

    1.1.4 PTA提交列表及说明


    1.编译错误:for语句用逗号分开的,我的语句是for(i=1;i<m,i++)正确的应该是for(i=1;i<m;i++).
    2.部分正确:我将sum=0放在for循环之前,导致每次循环开始sum值不同,部分正确,应该讲sum=0放在for(i=1;i<m;i++)的内部.

    1.2换硬币

    将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
    输入格式:输入在一行中给出待换的零钱数额x∈(8,100)。
    输出格式:要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。

    1.2.1数据处理

    数据表达:用了变量x,count,total,a,b,c;x通过直接输入得到,其他的通过赋值得到,类型全为整型.
    数据处理:x表示输入的零钱数额,count表示换法个数,total表示硬币总数量,a,b,c分别表示5分、2分和1分硬币的数量.
    所用表达式:count=total=0;a=(x-8)/5;b=(x-8-a5)/2;c=x-8-a5-b2;count++;
    流程结构:Begin
    输入零钱数额x
    count←0
    total←0
    a←(x-8)/5
    for a←0 to a-1
    {
    b←(x-8-a
    5)/2
    for b←0 to b-1
    {
    c←x-8-a5-b2
    printf("fen5:%d, fen2:%d, fen1:%d, total:%d",a+1,b+1,c+1,a+b+c+3)
    count←count+1
    printf(" ")
    }
    }
    printf("count = %d",count)
    End

    1.2.2试验代码截图

    1.2.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 sample 一般小x
    9 fen5:1, fen2:1, fen1:2, total:4 count = 1
    15 fen5:2, fen2:2, fen1:1, total:5 fen5:2, fen2:1, fen1:3, total:6 fen5:1, fen2:4, fen1:2, total:7 fen5:1, fen2:3, fen1:4, total:8 fen5:1, fen2:2, fen1:6, total:9 fen5:1, fen2:1, fen1:8, total:10 count = 6
    11 fen5:1, fen2:2, fen1:2, total:5 fen5:1, fen2:1, fen1:4, total:6 count = 2

    1.2.4PTA提交列表及说明


    1.答案错误:忽视了题目要求每种硬币至少有一枚,导致一分钱的硬币可能为0,将a=x/5;b=(x-a5)/2;修改为a=(x-8)/5;b=(x-8-a5)/2;并且将 printf("fen5:%d, fen2:%d, fen1:%d, total:%d",a,b,c,a+b+c+);修改为printf("fen5:%d, fen2:%d, fen1:%d, total:%d",a+1,b+1,c+1,a+b+c+3);先保证每种硬币都有一枚.

    2.代码互评

    我的代码:

    同学(1)的代码:

    代码差异:
    1.代码整体思路一致,但同学(1)运用了数组长度为1000的数组number.
    2.第二个for语句循环次数不一样,我的是for(i=1;i<m;i++),而同学(1)的是for(j=2;j<i;j++).
    3.count的初始赋值不同,导致机构出现差异.
    我的代码:

    同学(2)的代码:


    代码差异:
    1.定义变量不同,他比多定义了一个起始变量.
    2.我定义了一个flag=0,而同学(2)定义的是count=0;当m到n中有完数时,我的flag=1;而同学(2)count++.
    3.判断区间m到n是否有完数的条件不同,我的是flag0,而同学(2)是count0.

    3.学习总结

    3.1学习进度条

    周数/日期 这周所花的时间 代码行 学到的知识点简介 目前比较疑惑的问题
    第三周(10/08--10/12) 12个小时 300行左右 定义函数,if-else,for循环语句 输入与输出格式,空语句
    第四周(10/14--10/18) 15个小时 250行左右 for循环语句,基础的循环程序设计,数据的输出宽度 数据的输出宽度概念不太清晰,表达式的定义,空语句的定义
    第五周(10/23--10/26) 12个小时 350行左右 自定义函数的声明与调用,break跳出循环,while()循环语句 自定义函数的应用
    第六周(10/30--11/01) 18个小时 500行左右 if-else的嵌套,学习逻辑运算,条件语句,字符类型以及字符型数据的输入与输出 对字符型数据的输入与输出了解太少,缺乏练习,没有理解到getchar()字符输入函数与putchar()字符输出函数以及它们的运用
    第七周(11/05--11/07) 24个小时 720行左右 使用switch语句的三种情况,在switch语句中使用break语句,数组的定义与使用 continue语句的使用,for语句的嵌套循环
    第八周(11/12--11/15) 19个小时 810行左右 学习使用while和do-while语句实现次数不确定的循环,使用break语句处理多循环条件,以及了解while,do-while,for三种语句的差异 ASCII码和char类型和int类型的转换,进制数转化的多种方式
    第九周(11/19--11/21) 16个小时 600行左右 学习了for循环的嵌套以及了解break语句和continue语句的用法和区别 静态数组和动态数组的区别

    3.2累积代码行和博客字数

    3.3学习内容总结和感悟

    3.3.1学习内容总结

    3.3.2学习体会

    这个学期的学习已经临近尾声了,但我发现我还存在很多的问题,做题目没法很快的找到思路与问题的本质,写完代码就提交,出错了再去找错误点,一个一个慢慢地试,感觉效率很低.学习c语言越到后面感到困难,问题也越来越多,自我认识原因是之前的学习中没有及时巩固,可能那个时候明白了,但是没有深入挖掘与思考,在之后的学习中又慢慢遗忘了.所以,温故而知新是非常重要的,只有这样,才能在计算机学习方面越来越远,越飞越高.不经一番寒彻骨,怎得梅花扑鼻香.

  • 相关阅读:
    zookeeper使用场景
    zookeeper安装配置
    hadoop 远程调试
    deep learning笔记
    Sentiment Analysis(1)-Dependency Tree-based Sentiment Classification using CRFs with Hidden Variables
    PRML阅读笔记 introduction
    Python 学习笔记(2)
    python nltk 学习笔记(5) Learning to Classify Text
    python nltk 学习笔记(4) Writing Structured Programs
    python nltk 学习笔记(3) processing raw text
  • 原文地址:https://www.cnblogs.com/wllrky/p/11897439.html
Copyright © 2011-2022 走看看