C语言博客作业--嵌套循环
一、PTA实验作业
题目1:查询水果价格
1.本题PTA提交列表
2.设计思路
- (1)定义整型变量choice,i;浮点型变量price;choice存放选择类型,i控制选择次数,price存放价格
- (2)输出[1] apple\n[2] pear\n[3] orange\n[4] grape\n[0] exit后换行
- (3)i=1,当i<=5时执行步骤4.5.6.7
- (4)输入选择类型choice
- (5)如果choice等于0,跳出循环,否则,执行6
- (6)对choice进行选择:
当choice为1时,输出price = 3.00并换行,break语句跳出switch语句
当choice为2时,输出price = 2.50并换行,break语句跳出switch语句
当choice为3时,输出price = 4.10并换行,break语句跳出switch语句
当choice为4时,输出price = 10.20并换行,break语句跳出switch语句
如果都不是,则输出price = 0.00并换行,break语句跳出switch语句 - (7)i++
3.本题调试过程碰到问题及解决办法
- 部分正确:一开始没有理解输入0时直接退出的意思,输出成default的输出结果,PTA提示choice==0时错误,开始时没搞清楚错误点,写成结果还是部分正确,后仔细看题后尝试修改答案正确。以后要看懂题再来写代码。
题目2:梅森数
1.本题PTA提交列表
2.设计思路
- (1)定义整型变量n,i,j,m;n为正整数,i,j控制循环,m存放梅森数
- (2)输入正整数n
- (3)当n等于1时,输出“None”,否则,执行4-10语句
- (4)令i=2,当i小于等于n时,执行5-10语句
- (5)m=pow(2,i)-1
- (6)令j=2,当j小于等于m/2时,执行7-9语句
- (7)如果m%j等于0,break语句跳出for循环
- (8)如果j大于m/2,输出梅森数m
- (9)j++
- (10)i++
3.本题调试过程碰到问题及解决办法
- 编译错误:最后输出梅森数m的时候忘记换行,加\n即可
- 部分正确:一开始思路很乱,代码复杂,输入正整数n后运行无输出结果,后在同学帮助下检查发现把梅森数放在了第一个for循环的条件里,对梅森数并没有定义,造成思路混乱。
后整理思路:先对梅森数进行定义,再对形如2^n-1的数用之前学过的判断素数的方式判断是否为梅森数,最后输出结果。修改代码正确
题目3:歌唱比赛评分系统
1.本题PTA提交列表
2.设计思路
- (1)定义整型变量repeat,n,i,j,f,max,min和浮点型变量score=0;f存放分数,repeat存放重复循环次数,max存放最高分,min存放最低分,i,j控制循环,n存放成绩个数
- (2)输入循环次数repeat
- (3)令i=1,当i小于等于repeat时,执行4-13语句
- (4)max=0,min=100,score=0
- (5)令j=1,当j小于等于n时,执行6-10语句
- (6)输入成绩个数n
- (7)如果分数f大于等于max,max=f
- (8)如果分数f小于等于min,min=f
- (9)总分score=score+f
- (10)j++
- (11)最终分数score=(score-max-min)/(n-2)
- (12)输出最终分数score
- (13)i++
3.本题调试过程碰到问题及解决办法
-
答案错误:repeat=1时,调试各种数值输出的score都是正确的,一直没找出毛病,但是当repeat>1时,输出的score就是错误的了,如图,后检测变量发现没有给score在for循环中赋初值导致,错误代码如图,赋值后正确,以后要特别注意循环的时候赋初值的位置
-
格式错误:括号数量没检查清楚
二、同学代码结对互评
1.互评同学名称
林怡鹏
2.我的代码、互评同学代码截图
我的代码
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,j,m;
scanf("%d",&n);//n<20
if(n==1){
printf("None");
}
else{
for(i=2;i<=n;i++){
m=pow(2,i)-1;
for(j=2;j<=m/2;j++)
if(m%j==0)break;
if(j>m/2)
printf("%d\n",m);
}}
return 0;
}
互评同学代码
int n, i, j,t=2;
scanf("%d", &n);
if (n ==1) {
printf("None");
}
else {
for (i = 3; i <= pow(2, n) - 1; i = pow(2, t) - 1) {
for (j = 2; j <= i / 2; j++)
if (i%j == 0)
break;
if (j > i / 2 && i != 1) {
printf("%d\n", i);
}
t++;
}
}
return 0;
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
代码的差异不是很大,我的变量会少一些,他加了个变量t来存放最高次数,共同点是我们注释都偏少,可读性低,以后多加注释可能看起来会更加的清晰
易懂。
更喜欢自己的代码,变量过多且没有注释容易混乱,但后续的题目也要注意添加注释,增加代码可读性。
三、截图本周题目集的PTA最后排名。
四、本周学习总结
1.你学会了什么?
- 学会了如何自定义函数,以及自定义函数如果在主函数后要进行函数声明
- 知道了在循环中对于初值的赋值位置要特别注意,调试时对于多次循环要注意调试大于1次的情况,以防大于1时结果出错
2.本周的内容,你还不会什么?
1.嵌套循环开始就比上周的学习难度提升了,像菱形那题我认为对于数学关系的寻找也是解题的关键,把其他题做完才最后做了这题,也有在网上查找解题方法,才搞清把图形打出来的思路
2.对于函数的定义和调用暂时不是很熟练,有时候还要翻书看定义、调用函数的格式
3.对于全局变量和局部变量理解还不够透彻,课堂派那两个选择小题都出错了