项目三 学生成绩的分组汇总

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

项目三学生成绩的分组汇总项目要求一个班中有四个小组,求本学期期中考试中每个小组数学成绩的总分及平均分。项目分析第一必须做到在一个小组中对学生数学成绩的平均分与总分进行计算;然后就是重复进行4次。所以,将这一项目分成二个任务介绍,任务一是求一个小组学生成绩的总分及平均分;任务二是求四个小组学生成绩的总分及平均分。分析:如果本小组一共有十个同学,显然不可能定义十个变量x1,x2,……x10,然后在程序中表示成sum=x1+x2+x3+……+x10。求一个小组的学生总成绩的步骤就是:先输入第一个学生的成绩,然后将这个成绩加到总分中,接下来,输入第二个学生的成绩,再将第二个学生的成绩加入到总分中,不断重复,直到小组中最后一个同学的成绩输入并加入到总分为止。重复执行就是循环。重复工作是计算机特别擅长的工作之一。任务1求一个小组学生成绩的总分及平均分一、问题情景一个班进行了一次考试,现要输入第一小组学生的成绩,计算这一小组的总分与平均分,并按要求输出。二、具体实现#includestdio.hmain(){intscore,i,sum=0;floatavg;i=1;printf(请输入本小组10个学生的成绩:);while(i=10){scanf(%d,&score);sum=sum+score;i=i+1;}avg=sum/10.0;printf(本小组10个学生的总分为:%d\n,sum);printf(本小组10个学生的平均分为:%.2f\n,avg);}while(i=10){scanf(“%d”,&score);sum=sum+score;i=i+1;}三、相关知识(一)常见的三种循环语句1.while循环【语法】(1)一般格式:while(循环继续条件){循环体语句组;}(2)执行过程1)求解“循环继续条件”,如果其值为非0,则转2);否则转3)。2)执行循环体语句组,然后转1)。3)退出while循环。i=1;while(i=10){scanf(“%d”,&score);sum=sum+score;i=i+1;}首先i的初值为1,显然1=10,满足循环条件,即输入score,然后将score加入到sum中,i=2;由于2=10,还是满足循环条件,执行第二次循环体。即输入score,然后将score加入到sum中,i=3;……这样一直重复,直到i=11,不再满足循环继续条件;从而跳出循环体。所以这段程序的意思是输入10次score,并将每一次输入的score加入到sum中。任务情景中的程序及流程图#includestdio.hmain(){intscore,i,sum=0;floatavg;i=1;printf(请输入本小组10个学生的成绩:);while(i=10){scanf(%d,&score);sum=sum+score;i=i+1;}avg=sum/10.0;printf(本小组10个学生的总分为:%d\n,sum);printf(本小组10个学生的平均分为:%.2f\n,avg);}while的进一步练习【例3-1】本学期期末考试进行了三门课程的测试。成绩单下来后,8个室友兄弟要一比高低,这就要得到每个人三门课程的总分和平均分,用C语言实现之。分析:(1)定义五个实型变量x,y,z,s和avg,依次放每一名学生的三门课程成绩、这三门课程的总成绩和平均分;(2)每次取出一名学生的三门课程成绩,依次给x,y,z,然后再一起放到s中,就可以得到该同学的三门课的总分和平均分。(3)以上步骤重复执行8次。#includestdio.hmain(){inti;floatx,y,z,sum,avg;i=1;while(i=8){printf(请输入第%d个同学三门课的成绩,i);scanf(%f%f%f,&x,&y,&z);sum=x+y+z;avg=sum/3;printf(第%d个同学的总分为%.2f,平均分%.2f\n,i,sum,avg);i=i+1;}}【例3-2】用while语句求sum=1+2+3+……+100。分析:求sum=1+2+3+……+100,可以分解成:sum=0;sum=sum+1;sum=sum+2;……sum=sum+i……sum=sum+100所以,可以看成sum=sum+i重复了100次,而i恰好等于1~100#includestdio.hmain(){inti,sum=0;i=1;while(i=100){sum+=i;i++;}printf(“1+2+3+……+100的和为:%d\n”,sum);}【例3-3】将1~100之间不能被3整除的数输出。分析:定义变量i其初值为1,验证1是否能被3整除?若不能整除,则输出i,然后将i累加到2,再次验证2是否被被3整除?若不能整除,则输出i,这样一直重复,直到i值100。#includestdio.hmain(){inti;i=1;while(i=100){if(i%3!=0)printf(“%3d”,i);i++;}}程序如下do…while语句(1)一般形式:do{循环体语句组;}while(循环继续条件);(2)执行过程1)执行do后面的循环体语句组;2)求解while后面的“循环继续条件”,如果其值为非0,则转1);否则转3)。3)退出while循环。循环变量赋初值循环体语句组while(循环继续条件);求一个小组学生成绩的总分及平均分的程序可改写为:#includestdio.hmain(){intscore,i,sum=0;floatavg;i=1;printf(请输入本小组10个学生的成绩:);do{scanf(%d,&score);sum=sum+score;i=i+1;}while(i=10);avg=sum/10.0;printf(本小组10个学生的总分为:%d\n,sum);printf(本小组10个学生的平均分为:%.2f\n,avg);}(1)do…while,总是先执行一次循环体,然后再求循环继续条件,因此,无论循环继续条件是否为“真”,循环体至少执行一次;(2)do…while循环与while循环十分相似;(3)它们的主要区别是:while循环先判断循环条件再执行循环,循环体可能一次也不执行,do…while循环先执行循环体,然后再求循环继续条件,循环体至少执行一次。将例3-1用do…while语句来改进实现。求8个室友兄弟每个人三门课程的总分和平均分#includestdio.hmain(){inti;floatx,y,z,sum,avg;i=1;do{printf(请输入第%d个同学三门课的成绩,i);scanf(%f%f%f,&x,&y,&z);sum=x+y+z;avg=sum/3;printf(第%d个同学的总分为%.2f,平均分%.2f\n,i,sum,avg);i=i+1;}while(i=8);}将例3-2用do…while语句来改进实现。求sum=1+2+3+……+100。#includestdio.hmain(){inti,sum=0;i=1;do{sum+=i;i++;}while(i=100);printf(“1+2+3+……+100的和为:%d\n”,sum);}将例3-3用do…while语句来改进实现。将1~100之间不能被3整除的数输出。#includestdio.hmain(){inti;i=1;do{if(i%3!=0)printf(“%3d”,i);i++;}while(i=100);}for语句(1)一般形式:for(表达式1;表达式2;表达式3)循环体语句(2)执行过程1)先执行“表达式1”;2)然后判别“表达式2”,当“表达式2”的值为真时,则转3);否则转4)。3)执行循环体语句组,然后转2)4)退出for循环。(1)“表达式1”为初始化表达式;(2)“表达式2”为条件表达式,是一个逻辑量,用于判断循环继续的条件是否成立,其值为真时,循环继续,否则循环中止;(3)“表达式3”为修正表达式,一般为赋值表达式,用于定义循环变量的增值。求一个小组学生成绩的总分及平均分的程序可改写为:#includestdio.hmain(){intscore,i,sum=0;floatavg;printf(请输入本小组10个学生的成绩:);for(i=1;i=10;i++){scanf(%d,&score);sum=sum+score;}avg=sum/10.0;printf(本小组10个学生的总分为:%d\n,sum);printf(本小组10个学生的平均分为:%.2f\n,avg);}for的进一步练习【例3-7】将例3-1用for语句来改进实现。(求八位室友每个人三门课的总分及平均分)#includestdio.hmain(){inti;floatx,y,z,sum,avg;for(i=1;i=8;i++){printf(请输入第%d个同学三门课的成绩,i);scanf(%f%f%f,&x,&y,&z);sum=x+y+z;avg=sum/3;printf(第%d个同学的总分为%.2f,平均分%.2f\n,i,sum,avg);}}【例3-8】将例3-2用for语句来改进实现。求sum=1+2+3+……+100。#includestdio.hmain(){inti,sum=0;for(i=1;i=100;i++){sum+=i;}/*由于循环体只有一条语句,所以可将“{sum+=i;}”的花括号省略*/printf(“1+2+3+……+100的和为:%d\n”,sum);}程序运行结果为:“1+2+3+……+100的和为:5050”将例3-3用for语句来改进实现。将1~100之间不能被3整除的数输出。#includestdio.hmain(){inti;for(i=1;i=100;i++){if(i%3!=0)printf(“%3d”,i);}/*由于循环体只有一条语句,所以可将“{if(i%3!=0)printf(“%3d”,i);}”的花括号省略*/}编程实现百钱买百鸡。有一老大爷去集贸市场买鸡,他想用100元钱买100只鸡,而且要求所买的鸡有公鸡、母鸡、小鸡。已知公鸡2元一只,母鸡3元一只,小鸡0.5元一只。问老大爷要买多少只公鸡、母鸡、小鸡恰好花去100元钱,并且买到100只鸡?分析x+y+z=100x+3y+0.5z=100y=1.5z-100x=200-2.5z假设公鸡买x只,母鸡买y只,小鸡买z只,则由题意可得:(1)当z=2时,计算y与x的值(2)当z=4时,计算y与x的值(3)当z=8时,计算y与x的值(4)一直计算到z=98时,计算y与x的值显然,如果x,y的值都大于零,则输出x,y,z。所以用for循环的程序如左:#includestdio.hmain(){intx,y,z;for(z=2;z=100;z=z+2){y=1.5*z-100;x=200-2.5*z;if(x0&&y0)printf(“公鸡数为%d,母鸡数为%d,小鸡数为%d\n,x,y,z);}}知识扩展(一)for语句的多种表示方法(1)for语句可省略“表达式1”。(2)for语句可省略“表达式2”。(3)for语句可省略“表达式3”。(4)for语句可省略“表达式1”和“表达式3”。(5)“表达式1”和“表达式3”可以是一个简单的表达式,也可以是逗号表达式。for(i=1;i=10;i++)s=s+i;i=1;for(;i=10;i++)s=s+i;“表达式1”的作用是设置循环初始条件,“表达式1”省略后,应在for语句前面设置循环初始条件。但“表达式1”后的分号不能省略。若省略“表达式2”,则不判断循环条件,认为循环条件始终为真,循环将无终止地进行下去。一般用条件语句退出循环。“表达式3”可省略,但程序必须在“循环体语句”中设置循环变量增值,来修改循环条件,以确保循环能正常结束。如:for(i=1;i

1 / 39
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功