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

一PTA实验作业

题目1.歌唱比赛评分系统。

1.本题PTA提交列表

2.设计思路

  • 1.定义n为输入分数,i,j用于控制循环次数,repeat为操作次数,score为最终得分,最大值max,最小值min,result为累加总分。
  • 2.输入repeat。
  • 3.使用for循环语句,当j<=repeat时,执行max=0,min=100,result=0,输入n。
  • 4.当n>=3且n<=10时,执行第五和六步。
  • 5.嵌套for循环,当i<=n时,输入score。
  • 6.如果score大于max,max=score,如果score小于min,min=score,同时将score累加到result上。
  • 7.输出result减去最大最小值后的平均值。同时将result赋为0.

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

最开始没有明白repeat的意思,所以我的程序只能执行一次,后来改正后发现,我没有将多次的repeat运算分开,而是集合在算了,通过调试发现这是因为我在每一次repeat运算的结束没有将result赋初值,所以多次的repeat运算结果加到了一起,然后我一直以为我很对了,PTA却不过,因为我的调试次数太少,所以没有发现最后一个问题,那就是每次repeat运算后max,min也要重新赋初值,不然它们在第一次的运算中所赋的值会带到下一次运算中。

题目二.投硬币

1.本题PTA提交列表

2.设计思路

  • 1.定义fen1,fen2,fen5为硬币个数,count为操作次数,x为钱数
  • 2.输入x,同时将count赋初值为0.
  • 3.使用for循环语句,fen5为x/5,在fen5等于0前,递减。
  • 4.同上,使用for循环语句限制fen1,fen2的值和循环次数。
  • 5.当钱数之和等于x时,输出fen5,fen2,fen1和fen1+fen2+fen5,同时count加一。
  • 6.当上述循环执行完,输出count。

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

这道题费了我好大的劲,因为我一开始的思路实在是太复杂了,最开始我想到的是使用while语句,利用x%5以后的数据来计算fen2,fen1,这样,从一开始就要分成x%5大于等于3和小于3两种情况,然后fen2=x%5/2,还要再通过while语句递减,此时又得考虑到x%5不能为偶的情况,否则fen1就等于0了,所以又添了if语句。最后,当我终于以为自己屡清关系时,提交PTA又只得了8分。崩溃。于是改成for语句,思路基本不变,程序缩短,依然不对。于是请教同学,才发现这道题只要将fen5,fen2,fen1该满足的条件,如必须大于0,放在for循环括号里,程序就会乖乖帮我找数据,且不满足条件不循环,不满足条件不输出。我之前的思维误区是爱僵硬地一步一步来,每走一步看前面有几条岔路,再一条条说清了,现在发现,在c语言里,应该是我限制了哪些路能走,哪些不能,让程序乖乖跑去。

题目三.餐饮服务质量打分

1.本题PTA提交列表

2.设计思路

  • 1.定义a,b,c,d,e为分数1,2,3,4,5,repeat为操作次数,i,j,m为循环次数,number为输入的分数。
  • 2.输入repeat。
  • 3.使用for循环,当i<=repeat时,输入n,同时给a,b,c,d,e赋初值0.
  • 4.使用for循环语句,输入分数,当为1时,a+1,为2,b+1,下同。
  • 5.输出1:,使用for循环,输出*,个数为第四步各字母累加的最终值。

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

这道题有许多小问题,一是将a,b,c,d,e赋初值为零的语句没有写在第一次循环内,二是换行的表示,最开始是想在printf*后面加一个if语句嵌入'\n',但是经调试发现不行,经同学指导改成\n2:的形式,然后最后再加一个换行。

二同学代码结对互评

1.互评同学名称

何君霞

2.我的代码

#include<stdio.h>
int main()
{
	int n,repeat,score,i,max,min,j;//n为输入分数,i,j用于控制循环次数,repeat为操作次数,score为最终得分
	double result;//result为累加总分
	scanf("%d",&repeat);
	for(j=1;j<=repeat;j++){//控制操作次数
	  max=0;
	  min=100;
	  result=0.00;//给变量赋初值
		scanf("%d",&n);
		if(n>=3&&n<=10){
		    for(i=1;i<=n;i++){//循环输入分数,每次重新比较并重新更新max,min的值
		        scanf("%d",&score);
		        if(score>max){//重新比较筛选最大值
		     	max=score;
	        	}
		        if(score<min){//重新比较筛选最小值
		     	min=score;
	        	}
		        result=result+score;	//累加每一次的分数
	        }
	    printf("score:%.2f\n",(result-max-min)*1.0/(n-2));//扣去最大最小值同时输出
	    result=0;//将累加和重新赋值为0
     	}
	}
	return 0;
 } 

3.同学代码

#include<stdio.h>
int main()
{
  int repeat,i,n,j;                        //repeat表示运算次数,n表示评委人数,ij为循环变量
  double score,max,min,sum,average;        //score表示得分,max表示最高分数,min表示最低分数,sum表示分数总和,average表示最终结果
  scanf("%d\n",&repeat);                   //输入repeat
	for(i=1;i<=repeat;i++){                  //做repeat次运算
	  max=0;
	  min=0;
	  sum=0;
	  scanf("%d\n",&n);                      //输入n和第一个得分
    scanf("%lf",&score);
    min=max=sum=score;	                   //先让最大值,最小值,和总和等于第一个分数
		for(j=1;j<n;j++){                    
			scanf("%lf",&score);                 //输入下一个分数
			sum+=score;                          //sum等于分数的累加
			while(score>max)                     //如果输入的分数比最大值大,则让最大值等于该分数
			    max=score;
      while(score<min)                     //如果输入的分数比最小值大,则让最小值等于该分数
          min=score;
	    }
	  average=(sum-min-max)*1.0/(n-2);       //最终结果为去掉最大值,去掉最小值,剩余成绩的平均分
	  printf("score:%.2f\n",average);        //输出结果并换行,进行下一次运算
	}
    return 0;
}

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

我和她的代码思路大体相同,但是有一些细节不一样

  • 第一点,我对变量的定义除了result外都是int型,而她的代码将和分数有关的都定义成了double型,因为题目要求是输出数据要保留两位小数,所以她的定义会比我更好,因为我的数据在运算中要注意int型到double型的转换,而她的则不用。
  • 第二点,在第一个for循环语句中,她即把该有的值赋为0,又重新将它们赋为和score等值,我觉得这是重复的步骤,应该可以不需要赋初值为0。
  • 我和她的代码有一个明显的思路差异就是我是将该有的值赋初值为零,然后在下一次for循环运算中才开始输入第一个score,并运算,而她的代码则是在第一个for循环中就输入第一个score,同时将该有的值赋成该值,再进入下一个for循环,输入第二个score,并运算。这次的比较拓宽了我的思路。

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

四本周学习总结

1.你学会了什么?

本周学的是函数,但是我一直在忙于打PTA的嵌套循环代码,写博客,所以这周接触更多的是嵌套循环,我觉得我这一周学的更多的是一种思路,因为嵌套循环的可变性太多了,看看自己的代码,再看看别人的,就有了一个新思路,同时,思路之间的高低也立现,如何锻炼出更好简洁的思路,这是我目前关心的,此外,也许是题目越来越难,我感到做题困难,所以又温习了一遍语法书,故而发现了一些以前落下的知识点,比如switch语句只能判断整形数据和字符型变量,类似的知识点,就不一一列举了。还有函数学会了函数声明,函数定义,全局变量,局部变量等等。

2.你还不会什么?

这周其实对函数的学习有点落下,有一些内容不太理解,没记清,我会再仔细看一遍书,和课堂派上的一些题目。

posted @ 2017-11-11 17:03  一叶落而秋将至  阅读(503)  评论(6编辑  收藏  举报