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

一、PTA实验作业

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

  1. 本题PTA提交列表
    1232108-20171103200001888-1327207577.png

  2. 设计思路
    1232108-20171103205234951-388118579.png

3.本题调试过程碰到问题及解决办法
刚开始这题无从下手,后来仔细观察发现空格数目是递减的,但是最难的是中间的空格,始终不得要领,最后请教同学,才明白中间的空格和行数有关,所以又加了一个循环来输出中间的空格

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

  1. 本题PTA提交列表
    1232108-20171103211422998-104955136.png

  2. 设计思路
  • 1.定义七个整型变量i,j,repeat,n,max,min,sum,一个浮点型变量score
  • 2.输入repeat的值
  • 3.i=1
  • 4.i++,sum=0
  • 5.输入n和score的值
  • 6.max=score,min=score
  • 7.j=1
  • 8.j++,sum=sum+score
  • 9.若min>score,则min=score,若max<score,则max=score
  • 10.若 j==n,跳出循环
  • 11.输入score的值
  • 12.若j<=n,返回第7步,否则执行下一条语句
  • 13.score=(sum-max-min)/(n-2)
  • 14.输出score的值并保留两位小数
  • 15.若i<=repeat,返回返回第3步

3.本题调试过程碰到问题及解决办法
刚开始的时候没有在进入第一个循环时重置sum的值,导致sum的值累加了,从而第二次repeat时错误
1232108-20171103213044670-366150607.png

后来经过调试发现问题

题目3:7-8 餐饮服务质量调查打分

  1. 本题PTA提交列表
    1232108-20171105120127435-1282284543.png

  2. 设计思路
  • 1.定义十一个变量i,j,n,k,repeat,grade,grade1,grade2,grade3,grade4,grade5
  • 2.输入repeat的值
  • 3.i=1
  • 4.输入n值
  • 5.grade1=0,grade2=0,grade3=0,grade4=0,grade5=0
  • 6.j=1
  • 7.j++,
  • 8.输入grade的值
  • 9.若grade==1,则grade1++;若grade==2,则grade2+;若grade==3,则grade3++;若grade==4,则grade4++;若grade==5,则grade5++,
  • 10.若 j<=n,返回第七步,否则执行下一条语句
  • 11.输出"1:"
  • 12.k=1
  • 13.k++
  • 14.输出"*",若k<=grade1,返回第13步,否则执行下一条语句。
  • 15.输出换行符
  • 16.同理,按照12~16步的方法输出当k分别第2,3,4,5行的星号
  • 17.若i<=repeat,返回第4步

3.本题调试过程碰到问题及解决办法
这道题难点主要在怎么利用循环来输出星号,刚开始我的侧重点在嵌套上,然后怎么想也实现不了,然后我就想会不会不是嵌套的问题,然后我就引入一些变量来控制星号的循环,这样问题就解决了

二、同学代码结对互评

1.互评同学名称:Soyam(黄泽彬)

2.我的代码、互评同学代码截图
这是泽彬的代码
1232108-20171108121610856-418316844.png
这是我的代码

int repeat,n,max,min,sum;//max放最高分,min放最低分,sum放总分 
    double score;//score放成绩 
    scanf("%d",&repeat);
    for(int i=1;i<=repeat;i++)
    {
        sum=0;
        scanf("%d",&n);
        scanf("%lf",&score);//输入评委人数和成绩 
        max=score;
        min=score;//先把第一个成绩给最大值和最小值 
        for(int j=1;j<=n;j++)
        {
        
            sum=sum+score;//总分累加 
        //用if语句选出最大值和最小值 
            if(min>score)
            {
                min=score;
            }
            if(max<score)
            {
                max=score;
            }
            if(j==n)
            break; //当j=n时,跳出循环,不然会多输一个值 
            scanf("%lf",&score);
        }
        score=(sum-max-min)/(n-2);//算出平均分 
        printf("score:%.2f\n",score);
    }

3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
泽彬的代码存在一些问题,下面是改进
1232108-20171108122644559-709807520.png
他的代码总的来说思路还算清晰,虽然有些错误但是方向是对的,只是应该适当的加一些注释,这样可读性会更高一些。
他的代码中是先给min,max一个初值,而我是把输入的一个值给min,max,虽然我这样做比较麻烦但是通用性更高,而他的代码只适用本题的条件

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

PTA排名
1232108-20171108123525903-2034135937.png

四、本周学习总结

1.你学会了什么?

  • 用do-while语句构成的循环,在while后的表达式为零时结束循环
  • 嵌套循环时是先执行最里面的循环,然后一层一层退出来,所以这样计算量很大,我们应该要压缩循环次数,比如课本上的搬砖那题
  • 学会了用变量来累积次数,从而实现满足某个条件后跳出循环

2.本周的内容,你还不会什么?
打印空心菱形那题真的很难,字母的递增不是很理解,看题目时经常完全没有思路,我觉得还是要多练,练得多了就熟练了。

转载于:https://www.cnblogs.com/hbw985609191/p/7780493.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值