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

    一、表格

    问题 答案
    这个作业属于那个课程 C语言程序设计II
    这个作业要在哪里 C语言I博客作业09
    我在这个课程的目标是 深入了解C语言,争取掌握更多的数据类型及结构,熟练地编译有效代码
    这个作业在那个具体方面帮助我实现目标 学习到了循环的嵌套,深入学习了循环,更加提升使用循环的能力
    参考文献 C语言程序设计、百度

    二、本周作业

    1. PTA实验作业

    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 数据处理

    定义整型变量x,count=0,a,b,c。其中x是输入的数值、count是用来计数(有多少中方法)的,给其赋值为0、a,b,c分别表示五分、两分、一份的个数
    输入数值
    for(a=20;a>=1;a--)
    题目中有输入的值有范围,所以五分钱的硬币最多不到20个,运用循环依此减一
    for(b=50;b>=1;b--)
    则两分钱硬币的个数不会到50个,循环减一
    for(c=100;c>=1;c--)
    一分钱的不会到100个,循环减一
    if(x==5*a+2*b+c)
    printf("fen5:%d, fen2:%dfen1:%d,total:%d
    ",a,b,c,a+b+c);
    如果x,a,b,c满足条件则输出
    count++;
    进行计数,即输出了多少次
    printf("count = %d",count);
    输出次数,即有多少种方法
    

    1.1.2 实验代码截图

    1.1.3 造测试数据

    输入 输出 说明
    13 fen5:2, fen2:1, fen1:1, total:4/nfen5:1, fen2:3, fen1:2, total:6/nfen5:1, fen2:2, fen1:4, total:7/nfen5:1, fen2:1, fen1:6, total:8/ncount = 4 验证题目数据
    9 fen5:1, fen2:1, fen1:2, total:4/ncount = 1 取最小数

    1.1.4 PTA提交列表及说明

    说明:这道题不是很难,先在DEV上编写测试过才放在PTA上提交的。重点就是三个嵌套的循环和循环终止的条件。


    1.2 题目名2

    7-3 找完数 (20 分)

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

    定义整型变量m,n,i,j,s,k,x=0。其中m,n是输入的值、i,j是用来控制变量、s代表所给范围中的数、k代表完数的因子、x用于计数(所给范围有多少完数)给其赋值为0
    输入m,n
    for(i=m;i<=n;i++)
    给i赋值给m,循环到n,用于寻找完数
    s=0;
    因为下面s会累加,所以给s赋初始值为0
    for(j=1;j<i;j++)
    给j赋初始值为1,循环到i但不能等于i,用于寻找因子
    if(i%j==0)
    s=s+j;
    如果i于j满足条件,s开始累加                
    if(s==i)
    printf("%d = 1",i);
    如果满足条件,说明s是完数,先输出完数的第一个因子1
    for(k=2;k<j;k++)
    从2开始循环,寻找该完数的其他因子
    if(i%k==0)
    printf(" + %d",k);
    满足条件的k即为其他因子,输出其他因子
    printf("
    ");
    在循环结束,即因子寻找完毕后,输出换行
    x++;
    每输出一个换行,x从0开始累加,来计算有多少个完数 
    if(x==0)
    printf("None");
    如果x等于0,说明没有完数,则输出None
        
    

    1.2.2 实验代码截图


    1.2.3 造测试数据

    输入 输出 说明
    2 30 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14 验证题目数据
    2 5 None 没有完数
    7 30 28 = 1 + 2 + 4 + 7 + 14 有一个完数

    1.2.4 PTA提交列表及说明

    部分正确:在没有完数的情况下是错误的,发现我把是空集的情况和正常输出的情况放在了一起,导致错误。后把他挪到整个for语句后可以正常输出。


    2. 代码互评

    自己代码①

    同学代码①

    评论:

    • 这两份代码思路是一样的,但是其中的表达式不同
    • 我的代码是用a,b,c来代表三种硬币的个数,并且初始值分别是20,50,100.该同学的代码是用x,y,z来表示是三个硬币的数量,其初始值是x=(a-2-1)/5,y=(a-5-1)/2,z=a-5x-2y.
    • 很明显该同学的代码会更具体一些,但运行上应该没啥差别。

    自己代码②

    同学代码②

    评论:

    • 这道题我比这位同学多用了一个变量x用于存放行数。这位同学是直接在for语句中表示具体行数。
    • 我是判断n是偶数就直接除以二赋值给x,奇数的话除以二再加一。
    • 该同学是让j=0开始循环一直到j<(N*5)。
    • 综上,我多用了一个if-else语句没有这位同学简单,但我的代码更好理解一些吧。

    3. 学习总结

    3.1 学习进度条

    周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较困惑的问题
    1/9-21 2天 30 初步接触编程,学习编译Hello,World!
    2/9-30 2天 20 学习了浮点型变量,及温度转换
    3/9-15 3天 76 使用分段函数了解到if-else语句以及数据类型 对于定义数值还是不太清楚
    4/10-16 3天 100 for语句 for循环进行中不清楚循环的细节
    5/10-24 3 天 155 学习到了自定义函数 自定义函数的具体定义过程,实参形参有些迷惑
    6/11-1 3天 250 学习使用if-else与for语句的嵌套,初步了解了字符型变量 对于字符型变量不是很懂,不明白其作用
    7/11-7 2天 200 这周学习了新的分支结构switch结构,这也适用于选择的情况,其作用类似于if-else。 switch后面的变量表达式和case后的常量表达式弄不清。
    8/11-15 3天 150 学习了新的循环结构while语句和do-while语句,和for语句有不一样的地方,但其作用是一样的,他们循环的条件不一样。 不能熟练运用while语句去解决实际问题
    9/11-22 3天 151 这周学习了循环的嵌套,可以多次循环。可以解决行与列这种类型的题、以及需要多次循环一个数一个数来的题型等等 感觉知识掌握的还行,但是运用的时候弄不清循环的次数和条件

    3.2 累计代码行和博客字数

    3.3 学习内容总结

    3.4 学习体会

    1. 这周主要学习了两个知识点:① continue语句和break语句的使用和区别,continue只能用于循环结构中,其作用是跳出后面语句继续循环;break可用于循环语句以及switch语句中,其作用是终止循环或终止语句。② 循环的嵌套,可用于多次循环,解决行与列的问题、以及依次输入数等等较复杂的问题。
    2. 这周学习到的知识还是很具体化,知识是可以理解的但是在运用上存在着问题。主要是在做pta时有复杂的问题会搞不清怎样使用循环能表达题目的意思。
    3. 随着学习的知识越来越复杂,题目也越来越复杂,感觉到自己能力的确是不够。有些题目不知道该怎末用学到的知识去表达、用程序的方式来表达计算的过程。感觉自己的思维太固化,不能以计算机所理解的方式去思考。还是要加油学习,但也不能死学,主要是需要改变思考问题的方式。
  • 相关阅读:
    SQL进程死锁排查
    SQL 日期转换
    SQL Server 删除日志文件
    SQL 修复表
    charindex函数--->检索字符在字符串中的起始位置
    SQL使用链接服务器执行远程数据库上的存储过程
    C# 学习第二天笔记
    C# 学习笔记第一天
    SQL Prompt 5 功能按键说明
    自定义排序(Icompare)
  • 原文地址:https://www.cnblogs.com/wangxiana/p/11905658.html
Copyright © 2011-2022 走看看