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


    一、PTA实验作业

    题目一:梅森数

    1. 本题PTA提交列表

    2. 设计思路

    • 第一步:定义变量n,mei,i,j,n表示2的次方数,mei表示pow(2,n)-1的值;
    • 第二步:初始化变量,i=2,j=2;
    • 第三步:输入n;
    • 第四步:如果n=1,输出None;
    • 第五步:否则执行步骤六;
    • 第六步:判断i,i<=n成立则mei=pow(2,i)-1;,i++,执行步骤七;
    • 第七步:判断j,j<=mei成立则,如果mei%j==0,j++;如果j>mei/2&&mei!=1,输出mei;
    • 第八步:重复步骤七,直到输出mei或者j>mei;
    • 第九步:跳到步骤六,重复步骤六、七,直到i>n;

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

    • 判断素数的部分出错,导致有些是素数的没有输出,有些不是素数的反而输出了,其中3一直输不出来。
    • 经过调试,发现i=2时根本没进循环,导致没有输出3,第二个for中i<=mei,而不是i<=mei/2,还有判断素数的代码用continue,导致一些不是素数的也输出




    • 代码本身也有错误,当j>mei/2&&mei!=1时,为素数就应该输出,最后改正代码,得到正确答案

    题目二:换硬币

    1. 本题PTA提交列表

    2. 设计思路

    • 第一步:定义变量change表示零钱数额,total表示硬币数量,count表示换法个数;定义变量i,j,r;
    • 第二步:初始化变量,total=0,count=0,i=20,j=50,r=100;
    • 第三步:输入change;
    • 第四步:进入第一个循环,判断i,满足i>0&&i<=20,i--,执行步骤五;
    • 第五步:进入第二个循环,判断j,满足j>0&&j<=50,j--,执行步骤六;
    • 第六步:进入第三个循环,判断r,满足r>0&&r<=100,r--;
    • 第七步:如果满足5i+2j+r==change,total=i+j+r,count++;
    • 第八步:输出("fen5:%d, fen2:%d, fen1:%d, total:%d ",i,j,r,total)
    • 第九步:重复四到八的操作,直到跳出循环;
    • 第十步:输出count;

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

    • 一开始i,j,r均从0开始,然后i++,j++,r++,count输出正确,但是答案错误;
    • 后面用printf语句进行结果的比对,发现i,j,r均要从大到小;
    • count的输出不正常,每次循环都会输出一次;
    • 最后经过调试,发现输出count的printf语句位置放错;

    题目三:歌唱比赛评分系统

    1. 本题PTA提交列表

    2. 设计思路

    • 第一步:定义变量repeat表示运算次数,n表示成绩个数,number表示输入成绩,total表示成绩之和,max和min分别表示最大值和最小值,score表示最后成绩,定义i,j;
    • 第二步:赋初值,total=0,score=0;
    • 第三步:输入repeat;
    • 第四步:进入第一个循环,令i=repeat,若i>0&&i<10,i--,
    • 第五步:输入n,number;
    • 第六步:min=numbe,max=number,total=number;
    • 第七步:进入第二个循环,另j=1,若j<n,j++;
    • 第八步:输入number;
    • 第九步:total=total+number
    • 第十步:如果max<number,max=number;min>number,min=number;
    • 第十一步:重复七到八,知道j>=n;
    • 第十二步:score=1.0*(total-min-max)/(n-2)
    • 第十三步:输出score;

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

    • 第一组数据运行结果正确,到第二组数据运算错误,换句话说只能执行一次;
    • 经过调试,发现错误出在,每结束一次运算,要再输入一次n,所以scanf(“%d”,n)应该放在第一个循环的里面;


    • 最后将scanf(“%d”,n)放在第一个循环的里,就可以进行多次运算

    二、同学代码结对互评

    1.互评同学名称

    • 朱杰伟

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

    朱杰伟:
    我的:

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

    • 不同点:我用了for循环,用i作为循环条件,在for循环里面判断number的值,再输出结果;而他用的是while循环,同样i为条件,然后再不同条件下判断number的值;
    • 我的优势:简单,容易理解;他的优势:严谨,代码的质量较高
    • 我更喜欢自己的代码风格。

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

    四、本周学习总结

    1.你学会了什么?

    • 学会判断哪些题目应该或者可以用嵌套循环解决,这类问题至少有2个变量,当变量1不变而个变量2在有规律的按顺序的变,当变量2的循环范围结束时,变量1才执行下一个变量,这时变量2又做一次有规律的按顺序的变,变量1的循环被称为外循环,变量2被称为内循环,也就是说外循环执行一次,内循环执行一圈;
    • 学会了嵌套循环的基本格式,两个for语句如果是嵌套的关系,最好要缩进,当for内有两个或两个以上的语句是,不要忘了要加大括号;
    • 学会了如何编写打印数字图形的代码,比如九九乘法表;
    • 对于调试工具的应用更懂了一些,特别是有些题用监控变量不直观的时候,可以用一些printf语句来看变量的变化。

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

    • 打印空心字符菱形的代码还不会打,对于一些逻辑性强的应用型题目理解能力不是很强;
    • 对于for的嵌套循环里面,还有for的并列循环,不理解,感觉有点凌乱;
    • 嵌套循环的设计思路也就是算法不会写,感觉很凌乱,没有写出层次感;
    • 全局变量还不大会。
  • 相关阅读:
    Visual C++ 2005如何引用静态链接库(.lib)
    CodeSnippets: Recursively remove all .svn directories [shell] [svn] [bash]
    静态连接库的生成和使用
    vc生成静态库例子
    Remove the .pyc files from current directory tree and from svn (Python recipe) by Senthil Kumaran
    boost 1.52在windows下的配置
    CMake Cross Platform Make
    std::equal_range
    Windows环境下使用Boost
    Js$.extend方法使方法参数更灵活
  • 原文地址:https://www.cnblogs.com/mayifang/p/7806738.html
Copyright © 2020-2023  润新知