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\n",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的并列循环,不理解,感觉有点凌乱;
- 嵌套循环的设计思路也就是算法不会写,感觉很凌乱,没有写出层次感;
- 全局变量还不大会。