C语言博客作业--嵌套循环
一、PTA实验作业
题目1:7-3 编程打印空心字符菱形
1.本题PTA提交列表
2.设计思路
- 定义整形变量 n,i,j和字符型变量c
- 输入c和n
- 进入第一次外层循环,用来控制空心字符菱形的上半部分,即for (i = 1; i <= n / 2 + 1; i++)
- 第一个内层循环控制到第一个字符前一直输出空格 即for (j = 0; j < n-(n-1)/2-i ; j++) printf(" ");
- 输出第一个字符
- 第二个内层循环控制从第二行开始,第一个字符到第二个字符之间的空格,即for (j = 1; i - 1 > 0 && j <= 2 * i - 3; j++) printf(" ");
- 输出第二个字符
- 第二个外层循环控制空心字符菱形的下半部分, for (i = n / 2; i > 0; i--)
- 其中第一个内层循环控制到第一个字符前的空格,即(j = 0; j<n - (n - 1) / 2 - i; j++)printf(" ");
- 输出第一个字符
- 第二个内层循环控制除了最后一行,第一个字符到第二个字符之间的空格,即for (j = 1; i - 1>0 && j <= 2 * i - 3; j++) printf(" ");
- 除了最后一行之外,输出第二个字符;
- 换行
3.本题调试过程碰到问题及解决方法
第一次运行的时候发现所有字符不是左对其的,而是有空几个空格,而且你输入的行数越多,空格就越多,这个时候我的代码控制第一个空格是这样的
最后经过多次实验,发现前面的空格和我输入的行数呈(n-1)/2的关系,所以在控制第一个空格的循环里再减去(n-1)/2就行了
题目2.7-5 梅森数
1.本题PTA提交列表
2.设计思路
- 定义整形变量 n,num,i,flag,j
- 输入n
- 当n>1时执行判断语句
- 让flag=1,j=2
- num=2^n-1;
- 当j<num时进入循环
- 让num%j,如果结果为0,flag=0,跳出循环
- j++
- 如果flag==1,输出num并换行
- 重复步骤4-9,直到i>n
- 如果在第三步不执行判断语句,则输出None
3.本题调试过程碰到问题及解决方法
刚开始我发现输入后无法输出,后来发现是因为执行循环后j忘了+1
然后我去PTA提交 发现部分正确,重新读了一遍题,发现没有输出None的条件,补上就行了
题目3.7-7 歌唱比赛评分系统
1.本题PTA提交列表
2.设计思路
- 定义整形变量repeat,n,i,z,b,j,和数组a[10],double型变量score
- 输入循环次数repeat
- 当b<repeat时进入第一层循环,这层循环控制需要循环几次评分系统
- b++,i=0
- 输入个数n
- score=0
- 当i<n时进入第二层循环,这层循环控制输入数组a[i]作为每个评委的评分
- 输入评分a[i],i++
- 对所有评分进行排序 for (j = 0; j < n - 1; j++)
{
for (i = 0; i < n - 1 - j; i++)
if (a[i] > a[i + 1]) {
z = a[i];
a[i] = a[i + 1];
a[i + 1] = z;
}
} - 对除了第一个和最后一个之外的所有评分进行相加for (i = 1; i < n - 1; i++) score += a[i];
- 求平均数score = score / (n - 2);
- 按照格式输出成绩
3.本题调试过程碰到问题及解决方法
这是我原本的代码,我一直以为n只用输入一次,在结果正确的情况下,直接提交PTA,结果就是各种答案错误。
重复提交了很多次,弄的我心态差点崩了,最后是看同学的代码才发现原来n是要重复输入的
二、同学代码互评
7-3 编程打印空心字符菱形
我的代码
吴越的代码
我是通过找每一行的规律,从左到右慢慢输出,而吴越是直接找中间位置的树,以mid左右标志,向两边展开,很神奇的思路
但是这样实现起来比较有难度,也不容易想到,我觉得我的代码比较复杂,正常人没有我的解释可能要看半天才能看懂,有待提高
7-5 梅森数
我的代码
吴越的代码
思路都差不多,只是他用了函数,我没有用函数,而且我的代码其实是有缺陷的,我的代码输入None的条件太过简单,不是很全面,但是这道题在n>2的情况下是不可能没有梅森数的,所以也就对了
7-7 歌唱比赛评分系统
我的代码
吴越的代码
思路基本一样,但是他读懂了题目的意思,我没读懂,然后在我的代码的基础上做了一定的优化
三、截图本周题目集的PTA最后排名
四、本周学习总结
1.你学会了什么?
我学会了多种循环的嵌套使用,如何输出一些特殊的图形
2.本周的内容,你还不会什么?
经常题目看茬,没能理解题目的意思,以及在重复输入时,偶尔会忘记各种变量的初始化