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.对于全局变量和局部变量理解还不够透彻,课堂派那两个选择小题都出错了

posted @ 2017-11-11 18:45  evfun  阅读(343)  评论(2编辑  收藏  举报