C语言博客作业--嵌套循环

一、PTA实验作业

题目1:换硬币

1. 本题PTA提交列表

2. 设计思路

  • 第一步:定义5个整形变量,money,count,fen5,fen2,fen1,money为待换金额,count表示换法数量,fen5表示5分的数量,fen2表示2分的数量,fen1表示1分的数量。
  • 第二步:初始化count为0。
  • 第三步:输入x。
  • 第四步:fen5=money/5,当fen5大于0时,循环第五步到第十一步。
  • 第五步:fen2=money/2,当fen2大于0时,循环第六步到第十步。
  • 第六步:fen1=money,当fen1大于0时,循环第七步到第九步。
  • 第七步:如果 fen5 * 5 + fen2 * 2 + fen1 == money,输出fen5,fen2,fen1,fen5+fe2+fen1。
  • 第八步:count++。
  • 第九步:fen1--。
  • 第十步:fen2--。
  • 第十一步:fen5--。
  • 第十二步:输出count。

3.本题调试过程碰到问题及解决办法

  • (1)

当我采用这样的写法时,输入8输出结果fen5,fen2,fen1都为0,而调试却都为1,我意识到我的函数定义类型错了。并且我反复读题意识到我循环次数过多,于是我反复都提也发现moeny的单位是分不是元。

  • (2)

这种写法答案是对的,我通过调试每一步也是对的,但提交显示答案错误,我意识到可能是格式出错,题目的语句有点模棱两可,于是我将fen5,和fen2从大到小输出,结果就对了。

题目2:梅森数

1.本题提交列表

2.设计思路

  • 第一步:定义四个整形变量,n,i,k,number,number。
  • 第二步:输入n。
  • 第三步:初始化i为2,当i小于等于n时,循环第四步到第十步。
  • 第四步:number=pow(2,i)-1。
  • 第五步: 初始化k=2,当k小于等于number时,循环第六步到第九步。
  • 第六步:如果number余k不等于0,即k不能被整除时,继续循环。
  • 第七步:否则如果k等于number时输出number。
  • 第八步:否则退出循环。
  • 第九步:k++。
  • 第十步:i++。
  • 第十一步:如果n等于1,输出None。

3.本题调试过程碰到问题及解决办法

  • (1)

一开始我这么做,结果运行时间过长,我意识到是循环次数过多于是我便简化循环,只写了两个循环就是这样的:

  • (2)

我输入n为5,调试后发现number的值超过了可以理应的最大值31,我意识到循环条件错误了,就将循环条件改成了i小于等于n。

题目3:歌唱比赛评分系统

1.本题提交列表

2.设计思路

  • 第一步:定义8个整形变量i,j,n,repeat,score,sum,max,min,repeat存放做下列计算次数,max存放最大值,min存放最小值。
  • 第二步:定义一个双精度浮点型变量average存放平均值
  • 第三步:初始化sum等于0。
  • 第四步:输入repeat。
  • 第五步:初始化i为1,当i小于等于repaet时,循环第六步到第十九步。
  • 第六步:输入n和score。
  • 第七步:max=score,sum=sum+score。
  • 第八步:输入一个socre1,sum=sum+score1,判断score1是否大于max,如果大于max,那么max等于score1,min=max。
  • 第九步:否则min=socre1。
  • 第十步:初始化j=1,当j小于等于n-2时,循环第十一步到第十五步。
  • 第十一步:输入score。
  • 第十二步:sum=sum+score。
  • 第十三步:如果score小于min,那么min=score。
  • 第十四步:否则如果score大于max,那么max=score。
  • 第十五步:j++。
  • 第十六步:average等于1.0*(sum-max-min)/(n-2)。
  • 第十七步:输出average,并保留两位小数。
  • 第十八步:sum=0.
  • 第十九步:i++。

3.本题调试过程碰到问题及解决办法

  • (1)我发现第二次执行repeat中的语句时,不能控制输入几个数字,解决方法:把n的输入也放到repeat中去。
  • (2)第二次进入repeat时,sum数值明显过大,算出的average也太大,说明我把上一次循环的sum也算到这次的repea循环中去了,解决方法:在repeat循环体的结尾写一个sum=0。

二、同学代码结对互评

1.严伟杰

2.

3.

我的代码与他的不同在于他输入一个score表示了max和min两个值,而我输入了两个score来表示max和min,他的代码优势在于简洁,用最简短的语句实现了max和min的赋值,而我的代码可能逻辑性更强一点,我更喜欢他的代码风格简单易懂,而我的代码太过冗长。

三、截图本周题目集的PTA最后排名

本周学习总结

1.你学会了什么

我学会了循环嵌套,还学会了continue和break的用法。continue是进入下一次循环,跳过continue之后的循环体,而break则是跳出循环。初学了函数,明白了函数声明,函数定义,形参,实参。函数声明是一个句子要加而函数定义不用,形参必须是变量两,而实参则可以是常量,变量或者表达式,并且目前学的return语句只能返回一个值。也明白了局部变量和全局变量,局部变量用于当前函数中,而全局变量用于从代码开始到结束,允许全局变量和局部变量同名,同名时,局部变量为先。还学会了静态变量,静态变量就是对于他赋值的话,只有赋值一次,之后用到时,都是用到上次的值。

2.本周的内容,你还不会什么?

对于循环嵌套的内容还掌握的不够熟练,比如pta循环嵌套的第三题编程打印空心字符菱形,对于该题初看一点思路都没有,如何控制空格和字符按题目要求的输出,后来和舍友一起讨论才有一点思路,然后百度了一下,然后自己才能做的出来,该题让我明白自己对循环嵌套还掌握的不够。初次预习函数,对函数的格式理解也还不够深刻。

posted @ 2017-11-10 14:03  你们走啊  阅读(371)  评论(7编辑  收藏  举报