这个作业属于哪个课程 C语言程序设计
这个作业要求在哪里 C语言I作业09:第十三周作业
我在这个课程的目标是 学会使用C语言,并做一个属于自己的小程序
这个作业在哪个具体方面帮助我实现目标 学会并熟练for循环以及if-else语句的嵌套,锻炼自己思考问题的能力
参考文献 C语言程序设计(第三版);百度

1.PTA实验作业

1.1 换硬币

将一笔零钱换成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代表零钱,通过scanf语句输入。f、t、o、分别代表五分、两分、一分的硬币的个数,结果由for循环计算得出。total代表硬币的总数,由表达式total=f+t+o得出。count代表循环次数,也就是代表几种不同的换法。
数据结构:
表达式:f * 5+t * 2+o == x;total=f+t+o
结构式:for循环的嵌套(其中还嵌入了if语句)

伪代码:

开始 ;
给出几个变量:零钱;三种不同分值的硬币个数(fen5、fen2、fen1);硬币的总数;循环次数 ;
输入零钱 ;
循环输入fen5 ;
(嵌套)循环输入fen2 ;
(嵌套)循环输入fen1 ;
判断是否fen5 * 5+fen2 * 2+fen1 等于零钱 ;
若yes →输出每种硬币的数量以及总数 ;
用计数器记录循环次数 ;
输出循环次数(输出不同换法的数量) ;
结束 ;

1.1.2实验代码截图

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 有四种不同的换法
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 有六种不同的换法
9 fen5:1,fen2:1,fen1:2,total:4 count = 1 只有一种方法

1.1.4 PTA提交列表及说明

提交列表说明:
①因为习惯问题,下意识写成f++、t++、o++;
②没有判定f * 5+t * 2+o==x,以及后面想到后少写一个‘=’;
③忽略了一个硬币的总数total;
④输出硬币数量时,写成f+1,t+1,o+1,结果完全错误;
⑤输出count时,没有根据题意把“=”两边打上空格,以及输出硬币数量时,在fen5=××,后面没有打上空格。

1.2 找完数

所谓完数就是该数恰好等于除自身外的因子之和。例如: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代表输入的两个数,也就是需要输出的完数的范围,用scanf语句输入;x代表完数,首先给它赋值与m值相等,然后用for循环语句逐个数增加寻找满足条件的数;sum代表所有因子之和;i代表因子,主要用于判断该x数是否为完数,j代表除了1之外的因子。a代表循环次数,用于判断[m,n]里有没有完数。
数据结构:
表达式:x%i==0;
结构式:用了for循环的嵌套结构,其中参有多个if语句。

伪代码:

开始 ;
给出几个变量:能取的完数的范围;完数;因子;循环次数;因子之和 ;
输入完数的取值范围 ;
循环输入可能为完数的值 ;
(嵌套for循环语句)
给因子之和赋值0 ;
for循环输入可能为因子的值 ;
(再嵌套if语句)判断该数是否为完数的因子 ;
若yse → 放入sum中 ;
(嵌套if语句) ;
判断 所有因子之和是否等于完数 ;
若yse → 暂时输出完数 = 1 (方便后面输出,1是任何完数的因子) ;
(再嵌入for循环和if语句) ;
判断后面的数是否是该完数的因子 ;
若yes → 输出 + 该因子 ;
换行 ;
输出循环次数 ;
判断循环次数是否为0 ;
若yes → 输出None ;
结束 ;

1.2.2实验代码截图

1.2.3 造测试数据

输入数据 输出数据 说明
3 36 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14 [3,36]里有两个完数分别是6和28
8 90 28 = 1 + 2 + 4 + 7 + 14 [8,90]里有一个完数28
50 88 None [50,88]里没有完数

1.2.4 PTA提交列表及说明

提交列表说明:
①没有把sum=0也放入循环里,忽略了下一个完数判断时,因子之和应归零;
②没有给循环次数赋值为0;
③输出答案中的有些空格没有打;
④没有根据题意把输出结果换行;
⑤没有取完数为边界;

1.3 跟奥巴马一起画方块

美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!
输入格式:

输入在一行中给出正方形边长N(3≤N≤21)和组成正方形边的某种字符C,间隔一个空格。

输出格式:

输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。

输入样例:

10 a

输出样例:

aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa

1.3.1数据处理

数据表达:定义了四个变量,其中三个整型变量和一个字符型变量,i和j分别代表列和行的循环变量,n代表列和行的字符的数量,char op表示能接收字符。char op和n通过scanf语句输入。
数据结构:
结构式:使用了for循环的嵌套。

伪代码:

开始;
定义变量:控制行和列的数量循环变量以及该循环变量的取值限制n,和能接收字符的字符型变量op;
输入n和某字符;
开始列和行的循环叠加(列为行的一半)
输出字符;每输出一行输出一个换行;
结束;

1.3.2实验代码截图

1.3.3 造测试数据

输入数据 输出数据 说明
10 a 一行十个a,一列五个a
11 a 一行十一个a,一列六个a
16 b 一行十六个a,一列八个a

1.3.4 PTA提交列表及说明

提交列表说明:
①一开始觉得该题和打印九九乘法表差不多,因此忽略了,输入数据为单数的情况,因为定义的n为整型变量,所以当它取单数/2时,结果是错误的。
②忽略了换行。

2.代码互评

同学代码截图

自己代码截图

代码比较

整体上,我和该同学的代码同样简洁又美观;
内容上,该同学多用了一个if语句判断i*j的结果是否是两位数,若是两位数便多数出一个空格。而我的是利用C语言的用法规则直接用了一个“%-4d”表示宽度为4且左对齐,简洁了代码也方便了自己。
该同学能够想到使用空格使宽度准确为四,这点值得表扬。

同学代码截图

自己代码截图

代码比较

我的代码较该同学的简洁许多,原因在于,该同学多操作了一步,若长为单数,宽就加一;而我用n/2.0,直接就达到了四舍五入的效果。
表扬自己能够在迷惑的时候查找资料弄懂问题。
表扬该同学,首先使m=n/2,然后在循环内添加一个判定,从而达到即使是单数也能输出正确。体现了他在解答过程时有明确的思路。

3.学习总结

3.1 学习进度条

周/日期 这周所花的时间 代码行 博客字数 学到的知识点简介 目前比较迷惑的问题
10/14-20 5h 100行 918字 for循环结构 不能够熟练for语句
10/20-27 7h 120行 1194字 自定义函数 对定义和调用函数知识点上还是很模糊
10/28-3 8h 380行 1290字 char字符型 有些代码所用的格式
11/4-10 8h 150行 1309字 switch语句 怎么寻找到解题的正确思路
11/11-17 6h 160行 1100字 do-while语句和其他循环语句 怎么综合运用已学内容
11/18-24 16h 260行 2453字 break、continue的用法以及它们之间的关系 使用很多个for循环和if语句时容易混乱

3.2 累积代码行和博客字数

3.3 学习内容总结和感悟

3.3.1 学习内容总结

3.3.2 学习体会

首先,重点感谢某位同行者大佬给的思路指导,以及细节解说!
然后这次博客作业丰富了很多也改善了很多,从伪代码的改进和思维导图内容的丰富以及博客字数的增加上看,质量在逐渐提升,这也说明自己在慢慢进步着。老师经常用考试方式来提醒我们考试迫在眉睫,而在这种给我们制造学习压力的情景下,就我自己来说,是取到了非常大的成效。某位助教偷偷跟我说,这次pta上的四个题目他一个小时就做完了,这引起我深深的沉思,不知不觉中,自己和优秀学生的差距如此大了呢。我尽量说服自己不要方。坚持脚踏实地去的学习,每天进步一点就是收获。只要肯花时间,就没有难的事情。

posted on 2019-11-21 14:59  c张梦颖  阅读(398)  评论(6编辑  收藏  举报