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

本文详细解析了PTA平台上的三个编程挑战题:打印空心字符菱形、寻找梅森数及歌唱比赛评分系统的实现方法。针对每道题目,不仅提供了清晰的设计思路,还分享了调试过程中遇到的问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、PTA实验作业

题目1:7-3 编程打印空心字符菱形

1.本题PTA提交列表

1120968-20171107231445169-1584341446.png

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.本题调试过程碰到问题及解决方法

1120968-20171108143045278-1452522167.png

第一次运行的时候发现所有字符不是左对其的,而是有空几个空格,而且你输入的行数越多,空格就越多,这个时候我的代码控制第一个空格是这样的
1120968-20171108143246856-639676455.png

1120968-20171108143252825-634816832.png

最后经过多次实验,发现前面的空格和我输入的行数呈(n-1)/2的关系,所以在控制第一个空格的循环里再减去(n-1)/2就行了

题目2.7-5 梅森数

1.本题PTA提交列表

1120968-20171108143848169-387549543.png

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.本题调试过程碰到问题及解决方法

1120968-20171108144923356-1707581460.png

刚开始我发现输入后无法输出,后来发现是因为执行循环后j忘了+1
然后我去PTA提交 发现部分正确,重新读了一遍题,发现没有输出None的条件,补上就行了

题目3.7-7 歌唱比赛评分系统

1.本题PTA提交列表

1120968-20171108145301169-1822964160.png

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.本题调试过程碰到问题及解决方法

    1120968-20171108150643544-942295863.png

这是我原本的代码,我一直以为n只用输入一次,在结果正确的情况下,直接提交PTA,结果就是各种答案错误。
重复提交了很多次,弄的我心态差点崩了,最后是看同学的代码才发现原来n是要重复输入的

二、同学代码互评

7-3 编程打印空心字符菱形
我的代码
1120968-20171108151320403-975541049.png
吴越的代码
1120968-20171108151358028-1532114639.png
我是通过找每一行的规律,从左到右慢慢输出,而吴越是直接找中间位置的树,以mid左右标志,向两边展开,很神奇的思路
但是这样实现起来比较有难度,也不容易想到,我觉得我的代码比较复杂,正常人没有我的解释可能要看半天才能看懂,有待提高

7-5 梅森数
我的代码
1120968-20171108152752888-2086147537.png
吴越的代码
1120968-20171108152822122-863157782.png

思路都差不多,只是他用了函数,我没有用函数,而且我的代码其实是有缺陷的,我的代码输入None的条件太过简单,不是很全面,但是这道题在n>2的情况下是不可能没有梅森数的,所以也就对了

7-7 歌唱比赛评分系统
我的代码
1120968-20171108153249184-1231343637.png

吴越的代码
1120968-20171108153401263-447031441.png

思路基本一样,但是他读懂了题目的意思,我没读懂,然后在我的代码的基础上做了一定的优化

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

1120968-20171108153603966-192982237.png

四、本周学习总结

1.你学会了什么?

我学会了多种循环的嵌套使用,如何输出一些特殊的图形

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

经常题目看茬,没能理解题目的意思,以及在重复输入时,偶尔会忘记各种变量的初始化

转载于:https://www.cnblogs.com/zc-565095526/p/7788827.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值