C语言第三次作业--嵌套循环
一、PTA实验作业
题目1:硬币数
1. 本题PTA提交列表
2. 设计思路
- 步骤一:定义整型变量fen5,fen2,fen1,表示1分2分和5分,零钱数额x,总硬币数total,换法count
- 步骤二:变量初始化count=0,输入零钱数额x
- 步骤三:先计算5分的最多个数,再计算2分个数,最后计算1分个数
- 步骤四:如果满足fen55+fen22+fen1*1==x,则依次输出5分,2分一分的个数以及total的值(total=fen5+fen2+fen1),count加一
- 步骤五:重复步骤三
- 步骤六:输出count的值
3. 本题调试过程碰到问题及解决办法
运行后count的值太大,调试了一下发现下一步确实有加上1,只是最开始数值不对,然后我就意识到是自己没有将count赋初值,改正了过来。- 运行与题目给出的答案一致,但是PTA就是显示部分正确,然后自己测试了其他的数值,发现输入的数值大了之后5分就没有从小到大排列,于是我就把循环的递加改成了递减,终于改对了。
题目2:梅森数
1. 本题PTA提交列表
2. 设计思路
- 步骤一:定义整型变量n,i,m,j,n为幂指数,m用于存放pow(2,i)-1的值,i,j为循环变量
- 步骤二:输入n
- 步骤三:如果n=1,直接输出None,
- 步骤四:如果n>=2,令i=1,计算m=pow(2,i)-1,并执行步骤5
- 步骤五:令j=2,如果m%j==0,则停止步骤5,如果,否则j++;直到j>sqrt(m)停止循环步骤5.i加一
- 步骤六:重复步骤4,直到i>n
3. 本题调试过程碰到问题及解决办法
第二个循环原本我用的是j<=i,如上图,后来答案就直接63了
然后我就调试了一下,发现如果是j<=i,那么第二次循环最开始就只能做一次,后来我就翻书又仔细看了前面的章节里关于素数的判断部分,然后改正了回来
然后提交提示部分正确,没有考虑为空集的情况,后来想了一下空集就是没有素数,只有1的时候就是没有一个素数,于是加进一个n==1的判断条件就正确了。
题目3:歌唱比赛评分系统
1. 本题PTA提交列表
2. 设计思路
- 步骤一:定义整型变量repeat为评分系统的重复次数,i,j为循环变量,grade为每个评委打出的成绩,max用于存放一组成绩中的最大值,min用于存放一组成绩中的最小值,定义浮点型变量score存放选手的最终成绩
- 步骤二:输入repeat的值
- 步骤三:令i=1,输入n的值,赋初值sum=0,输入第一个成绩grade,将第一个成绩赋值给max,min和sum
- 步骤四:j=1,再输入一个grade,sum=sum+grade,如果grade<min,则将grade赋值给min,如果grade>max,则将grade赋值给max,j加一
- 步骤五:重复步骤四,直到j=n
- 步骤六:计算score=(sum-min-max)*1.0/(n-2);输出score的值,并保留两位小数,i++;
- 步骤七:重复步骤三,直到i>repeat
3. 本题调试过程碰到问题及解决办法
最开始做题是时候觉得很乱,不知道要怎么同时判断最大值和最小值,一直修改,改到跟输入例题答案一样了,很开心,但还是错误的。然后其实我对题目还是很懵。
后来想到可以分别判断最大值和最小值,答案正确了之后还是提交部分正确,再然后调试了一下文艺出错,想到前面题目没有赋初值,就加入了sum=0,但是最开始是放在定义那里的,不对,后来跟同学一起讨论,终于把sum=0放在了第一个循环里,就对了。
二、同学代码结对互评
1. 互评同学名称:梁才玉
2..我的代码、互评同学代码截图
- 梁才玉的截图
- 我的截图
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?
- 不同:才玉的代码先进行循环,再循环里判断n=1的情况,我的是先把n=1的情况分出来,再进行循环
- 各自优势:才玉的代码直接进入循环,让思维直接进入了判断是否为素数的代码里,然后在循环里判断n=1的情况也比较清楚。
我的代码先判断n=1,再在n>=2的情况判断梅森数的个数 - 我个人比较喜欢我自己的代码风格,因为这样就不用在循环里再嵌一个判断条件,个人觉得更加清楚一些,不会乱。
三、本周题目集的PTA最后排名
四、本周学习总结(1分)
1.你学会了什么?
- 懂得了变量初始化的重要性,学会了变量初始化的应用,有一些题,比如说求阶乘相加的题,如果没有变量初始化就会使得结果相差很大,例如本次作业的第7第8题,都要在正确的地方将一些值赋值为0,这些通过调试也就很好发现,错了这么多次变量初始化,深刻得记住了!
- 上周博客内容里不会的调试问题这周也会了,觉得使用调试会比较快得发现自己问题在哪儿,错在哪里,更加省时间。
- 学会了如何嵌套,先找到第一个循环(范围较大,限制第二个循环的循环次数),再找到第二个循环,然后一定要找准循环结束的条件!
- 学会了耐心认真对待编程。说实话我最开始写编程耐心不够,这一次那个空心菱形的题我是最后才做的,结果一直在那里写写了3个小时,因为是中午吃完饭就开始写,所以中途好几次都想去睡觉,最后还是坚持下来了,虽然写三个小时时间很长,但是写完还是很开心的,我感觉自己有了进步。
2.本周的内容,你还不会什么?
- 虽然对题意的理解上好了一些,但是仍然感觉自己再理解题目这方面还是比较吃力的,那个换硬币的题目我最开始是以为从大到小输出就是先5分再2分再1分就可以的了,理解题意真的真的真的很重要,我希望我能够一点点改善这个问题。其他的都还好,好几题都提交了好多遍,总共的提交列表都有两大页,错误我都记住了,总的来说还是感觉认真耐心得完成作业收获真的很大。