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

一、PTA实验作业

题目1.编程打印空心字符菱形

1.本题PTA提交列表

2.设计思路

观察菱形可知本题可将菱形打出的处理分为上下两部分,且上下两部分仅需做相反的处理即可因此本题就着重与处理上半部分菱形的处理

  • (1)定义菱形的高度为height,控制循环次数半部分循环的数据a,控制字符前空格数的数据为s,字符变量为op,控制字符间空格数的数据为b。
  • (2)输入数据op和height。(如果输入顺序为height然后op要注意二者间需要空格)。
  • (3)给a赋予初值a=1,a++.
  • (4)观察菱形可知第一行的空格数量为height/2第二行为height/2-1...(即每一行都是height/2-a)因此给s赋予初值为a。
  • (5)输入一个空格,并让s=s+1。
  • (6)当s<=hight/2时重复步骤5。
  • (7)输出字符op.
  • (8)观察题目可以将第一行和其他行进行区别单独弄出来。
  • (9)当a不等于1时
  • (10)继续输入空格观察可知字符间由空格是从第二行开始的因此让b=a-1让第二行变成第一行,空格数为1,3,5,7.(即2b-1),因此要执行2b-1次循环,则s=3b-2
  • (11)输出空格,b=b+1。
  • (12)当s>=b时重复步骤11.
  • (13)输出字符op.
  • (14)输出转行,然后op=op+1.
  • (15) 当a<=height/2+1重复步骤3
  • (16)因为最后一次op++操作并没有被执行,因次要将op-1。后执行下半部分菱形的编写。
  • (17)给a赋予初值a=height/2,a--.
  • (19)观察菱形的空格数量为height/2-a 因此给s赋予初值为a。
  • (20)输入一个空格,并让s=s+1。
  • (21)当s<=hight/2时重复步骤5。
  • (22)输出字符op.
  • (23)观察题目可以将最后一行行和其他行进行区别单独弄出来。
  • (24)当a不等于1时
  • (25)继续输入空格观察可知字符间由空格是从第二行开始的因此让b=a-1让第二行变成第一行,空格数为2b-1,因此要执行2b-1次循环,则s=3b-2
  • (26)输出空格,b=b+1。
  • (27)当s>=b时重复步骤11.
  • (28)输出字符op.
  • (29)输出转行符,然后op=op-1.
  • (30) 当a>=1重复步骤17

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

   我认为本题最难的就是在于找到空格个数的改变关系,也就是在字符前面和两个字符中间的空格个数,我的做法是先看它数目怎么增加比如123,135.。。。而且要和a也就是控制循环的数目进行联系也就是找规律勒,想135这种显然每个数据间都是增加2的而a只能a++所以是2a才可以进行匹配。而本题另外的一个难点就是思考流程,观察题目其实很容易发现它就是由重复输入空格字符,换行符组成,只要进行合理的排序,流程问题也就解决了。本题有些像数字金字塔,可是又相对较为复杂但思路大体相同。


说明我的下半部分菱形的第一个该打出来字母的是不对的,因此我应该在执行循环前进行op--。

题目2:梅森数

1. 本题PTA提交列表

2.设计思路

  • (1)定义整数n,控制循环变量i,储存2的n次方-1的值的变量s,控制判断是否为质数的循环变量a,判断是否有小于s的梅森数b=0.
  • (2)输入一个n.
  • (3)令i=1.
  • (4) 并让s=s=pow(2,i)-1;并让i=i+1。
  • (5)令a=2.
  • (6) a=a+1;如果除以a等于0则结束循环.
  • (7)如果a递增到s-1则输出s;并让b1.
  • (8)当a<s时重复步骤6.
  • (7)当i<=n时重复步骤4.
  • (8)如果b==0则输出None.

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

本题思路比较简单,除了编译错误没什么大的问题因此没用到调试。

3. 歌唱比赛评分系统

1.本题PTA提交列表

2.设计思路,

  • (1)定义最大值为max,最小值为mun,重复次数为repeat;中间的值为temp用以储存中间值;循环控制变量为i,评委人数为n;每个评委的分数为score;总的分数为total=0
  • (2)输入循环次数
  • (3)for(i=0;i<repeat;i++) {
  • (4)输入人数n和每个人的分数score
  • (5)让分数score等于最大值max
  • (6)再输入一个分数score
  • (7)如果分数大于最大值,则将最大值max赋予最小值min,并且让max=score
  • (8)否则则最小值min=score;
  • (9)for(j=0;j<n-2;j++) {
  • (10)输入一个分数score;
  • (11)当score大于max时;让temp=max,max=score;score=temp
  • (12)当score<min)时;使temp=min; max=score;score=temp;
  • (13)让total=total+score } }
  • (14)输出total/(n-2)

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

本题我遇到最大的问题就是不知道题目要求我们要怎么输入,开始我的程序是

后来在学长的教导下更改了n应该要两次而不是一次。

二、同学代码结对互评

1.互评同学名称:张志鑫

2.我的代码、互评同学代码截图:

我:

他:

3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?

虽然这一题相对来说比其他题目要简单但我觉得它很有代表性。
不同点:我的程序少用了一个变量。缩进也不大相同。
各自优势:我的可能比较简单八;而他的就是注解比较多更方便他人阅读
我更喜欢:将我的优势和他的优势都掌握的代码。

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

PTA排名

四、本周学习总结

1.你学会了什么?

本周我们学了嵌套循环和函数,我学会了比较多的套路来解决问题,还有就是对程序的调试,我认为这对我以后的程序编写有着很大的意义,而函数这一块是我也正在尽量的去适应,这对以后程序的维护和编写是非常重要的。

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

嵌套循环的思想还不够熟练,看到题目并不能很快的就反应过来要用嵌套循环去解决会更加简单,因为机器的循环和我们所想的并不是完全一样的,我也正在适应这种思维编写方式。

posted @ 2017-11-06 23:29  这个人有毒啊  阅读(340)  评论(2编辑  收藏  举报