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

一、PTA实验作业

题目1.查询水果价格

1. 本题PTA提交列表

2.设计思路

  • 第一步:定义整型变量number,i分别用于存放水果对应的序号,循环的次数
  • 第二步:输出[1] apple\n[2] pear\n[3] orange\n[4] grape\n[0] exit,之后在换行
  • 第三步:输入水果序号number,令i的初值为1
  • 第四步:当i<=5时,执行接下来的下步骤
  • 第五步:如果满足number等于0的条件,则执行
  • 第六步:当number不等于0且i<=5,则执行接下来的步骤
  • 第七步:使用switch语句,变量设为number,如果number1,则输出price = 3.00并换行,break语句跳出switch语句
    如果number
    2,则输出price = 2.50并换行,break语句跳出switch语句
    如果number3,则输出price = 4.10并换行,break语句跳出switch语句
    如果number
    4,则输出price = 10.20并换行,break语句跳出switch语句
    如果都不是,则输出price = 0.00并换行,break语句跳出switch语句
  • 第八步:读取新的水果序号,并i++
  • 第九步:如果满足number不等于0且i<=5的条件,执行第七步
  • 第十步:如果满足i<=5的条件,执行第五步,否则,执行接下来的步骤

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

  • 问题:输入1 2 3 3 4 4 5 6 7 8时 输出多了一行


  • 调试发现i的初值为0,使循环结构多循环了一次

  • 解决方法:令i的初值为1

题目2.换硬币

1.本题PTA提交列表

2.设计思路

  • 第一步:定义整型变量x,fen5,fen2,fen1,count,total,分别用于存放待换零钱数额,5分硬币数量,2分数量,1分数量,换法的次数,每方法的硬币总个数
  • 第二步:令count的初值为0,输入待换零钱数额
  • 第三步:如果满足x>8且x<100的条件,执行下一步骤
  • 第四步:令fen5的初值为19,如果满足fen5>0,则执行下一步骤
  • 第五步:令fen2的初值为49,如果满足fen2>0,则执行下一步骤,都在执行第四步,fen5--
  • 第六步:令fen1的初值为99,如果满足fen1>0则执行下一步骤,否则执行执行第五步,fen2--
  • 第七步:如果满足5fen5+2fen2+fen1==x的条件,则运行total=fen5+fen2+fen1,分别输出fen5:,fen2:,fen1:的方式输出各个硬币的数量,count++,fen1--
  • 第八步:以count = 的方式输出count

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

  • 问题:不会按PTA格式
    而是

  • 解决方法:最开始fen5,fen2,fen1都从1开始,那么让它们从最大开始依次往下减

题目3.梅森数

1.本题PTA提交列表

2.设计思路

  • 第一步:输入整型变量n,j,i,Mersenne,maxnumber,分别用于存放2的幂方,j,i用于存放循环次数,Mersenne存放所有不超过2​n−1的梅森数,maxnumber存放2​n−
  • 第二步:输入n,运算maxnumber=pow(2,n)-1
  • 第三步:如果满足n<20,则执行下一步,都在执行第八步
  • 第四步:令i的初值为1,如果满足i<=n,则执行下一步,否则执行第八步
  • 第五步:运算Mersenne=pow(2,i)-1,如果满足Mersenne<=maxnumber,则执行下一步
  • 第六步:令j的初值为2,如果满足j<=Mersenne,执行下一步
  • 第七步:如果Mersenne%j==0,使用break语法,跳出循环,执行第四步,i++
    如果j>Mersenne/2输出Mersenne,换行,并使用break语法,跳出循环 ,执行第四步,i++
  • 第八步:如果i==2,输出None

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

  • 问题:最开始第六步的条件是i<=sqrt(Mersenne),结果发现无结果输出,调试发现一开始j的值为2,sqrt(Mersenne)的值为1,不满足条件

  • 解决方法:特殊情况特殊对待,将sqrt(Mersenne)改为Mersenne,可以完成输出且正确

二、同学代码结对互评

1.互评同学名称

  • 熊志坚

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

  • 志坚同学的代码:
  • 我的代码:

3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。

  • 不同:我用了一个嵌套的while语句,志坚用了一个for语句,其余没有太大不同点
  • 各自优势:我:使用了while语句嵌套循环,少定义一个变量。
    志坚:就用了一个scanf语句读取,定义时便给变量赋予了初值,而且用英文定义了变量。
  • 我比较喜欢我的代码风格
  • 志坚同学在for循环语句里if语句中的条件,我认为tmp<5与number0同时成立的条件是错的,因为for循环的条件就是tmp<=5,所以如果第五次输入的是0,tmp等于5,不能同时成立,就只能输出4组水果价格就必须结束 ,但是志坚同学的代码输出的答案却有5组而不是4组,条件改为只留number0就足够。
    有图有真相 志坚同学:
    我:

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

四、本周学习总结

1.你学会了什么?,

  • 这周主要学了嵌套循环,首先嵌套循环里印象最深的就是九九乘法口诀,
    正常型里for循环语句的条件只要稍微改下不等式关系就成了杨辉三角型,
    挺好玩的代码。其次,也能较为熟练的使用break语法跳出循环,已达到
    自己想要的结果,再者调试又得到了充分练习,虽然有时候调试到差点
    崩溃,但是坚持下来感觉还是不错的,比如说PTA中打空心菱形那题。总的来说学习收获不少。

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

  • 比如说PTA中空心菱形那题,定义字符型变量op,op++,令op最初为B,后面会以C,D,E.......的方式输出,不懂得其原理
  • 嵌套循环里,有些时候虽然看起来有两个for嵌套语句,但往往第一的for句拿来当类似if语句的作用,不能体现出嵌套
  • 面对嵌套题目还是比较吃力,还需多加努力和练习。
posted @ 2017-11-11 11:08  朱杰伟  阅读(555)  评论(6编辑  收藏  举报