项目四 学生成绩的排序_第1页
项目四 学生成绩的排序_第2页
项目四 学生成绩的排序_第3页
项目四 学生成绩的排序_第4页
项目四 学生成绩的排序_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目四学生成绩的排序项目要求一个班有40位学生参加了期终考试(考了三门课),现要按成绩的高低输出成绩单。程序的运行要求:(成绩任意输入,为了方便,假设只有五个同学)项目分析从项目要求中可以看出,本项目首先需要输入40个学生的姓名及三门课的成绩;第二是求出每个同学的总分及平均分;第三要求对成绩的总分高低进行排序,并将排序结果输出。从先简单后复杂的原则出发,所以,将这一项目分成解四个任务介绍,任务一是多个学生一门课成绩的输入/输出;任务二是多个学生一门课成绩的排序;任务三是学生姓名的输入/输出;任务四是多个学生多门成绩的排序。任务1多个学生一门课成绩的输入、输出一、问题情景一个班40位同学参加了一次数学考试,现要输入全班同学的成绩,并按逆序输出。分析:全班一共有四十个同学,显然定义四十个简单变量x1,x2,……x40,然后输出是不科学的。因为是逆序输出,因而要求输入的每个同学的成绩都必须保存。那么如何解决这个问题呢?其实,仔细分析一些,不难发现每个同学的成绩都具有相同类型。这样,就须引入了一个新的概念,即数组。二、具体实现#include"stdio.h“#defineN10main(){inti,score[N];printf("请输入本班同学的成绩:");for(i=0;i<N;i++)scanf("%d",&score[i]);printf("按逆序输出本班同学的成绩:");for(i=N-1;i>=0;i--)printf("%3d",score[i]);}程序运行结果注:为了程序运行方便,假设只有10人掌握的知识点为:首先是数组的定义;第二是数组的初始化;第三是数组的引用;三、相关知识(一)一维数组的定义和引用数组的意义和概念。1.一维数组的定义一维数组的定义方式为:类型说明符数组名[常量表达式];例如:inta[20];它表示数组名为a,该数组的长度为20,最多可以存放20个元素,每个元素均为int类型。说明:(1)数组名等同变量名,命名规则也与变量名一样。对“intx;”,我们称变量x,对“inta[20];”我们称数组a。(2)数组名后是用方括号括起来的常量表达式。inta[3+5];charc[10];(3)常量表达式表示数组的长度,数组一经定义,长度就固定不变,换言之,C语言不允许对数组的大小作动态定义,所以方括号括起来的是常量表达式,不可以是变量。下面这样的定义是错的:

intn=8;chara[n];三、相关知识(续)(4)数组的下标从0开始。例如:inta[20];表示定义了20个数组元素,分别为a[0]、a[1]、a[2]、a[3]、…a[19]。若要引用第i个元素,则可以表示成a[i]。(5)数组的类型实际上就是指数组元素的取值类型,对于同一数组,它所有元素的数据类型都是相同的;(6)数组名不能与其他变量名相同;例如:

main(){inta;floata[10];………..}是非法的!(7)允许在同一个类型说明中,定义多个数组和多个变量;例如:inta,b,c,d[10],e[5];2.一维数组的引用数组必须先定义,才能使用。数组元素的表示形式:数组名[下标]下标可以是常量、表达式、变量。例如a[3]、a[5-3]、a[i]【例4-1】数组元素的使用。输入十个学生的成绩,并将其输出。#include"stdio.h"main(){inti,a[10];printf("输入数组元素:");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("输出数组元素:");for(i=0;i<10;i++)printf("%5d",a[i]);}程序结果如果,要求第一个学生的成绩用下标1表示,第二个学生的成绩用下标2表示,……第十个学生的成绩用下标10表示,则应定义为inta[11]。输入10个平时成绩给a[1]到a[10]输入10个期终成绩给b[1]到b[10]for(i=0;i<10;i++)c[i]=0.4*a[i]+0.6*b[i];输出总评成绩c[1]直到c[10]【例4-2】求学生的总评成绩。现有十个学生,从键盘上输入他们的平时成绩、期终成绩,输出总评成绩。总评成绩=平时成绩*40%+期终成绩*60%.#include"stdio.h"main(){inti;floata[11],b[11],c[11];printf("输入平时成绩:");for(i=1;i<=10;i++)scanf("%f",&a[i]);printf("输入期终成绩:");for(i=1;i<=10;i++)scanf("%f",&b[i]);for(i=1;i<=10;i++)c[i]=0.4*a[i]+0.6*b[i];printf("输出总评成绩:");for(i=1;i<=10;i++)printf("%5.1f",c[i]);printf("\n");}3.一维数组的初始化(1)定义数组时对数组元素赋以初值。intx[5]={1,2,3,4,5};等价于:x[0]=1;x[1]=2;…;x[4]=5;(2)可以只给一部分元素赋初值。intx[5]={1,2};系统自动给指定值的数组元素赋值:x[0]=1,x[1]=2,其他元素值均为0。(3)如果一个数组的全部元素值都为0,可以写成:intx[5]={0,0,0,0,0};或intx[5]={0};(4)对全部元素赋初值时,可以不指定长度。intx[5]={1,2,3,4,5};等价于intx[]={1,2,3,4,5};

但是,inta[10]={0,1,2,3,4};不能改写为:inta[]={0,1,2,3,4};3.一维数组的初始化示例1:详见s4-3.c

数组的定义、初始化、基本输入输出。示例2:详见s4-4.c

数组元素的引用。示例3:详见s4-5.c

用数组求4个数的最小值和最大值。示例4:详见s4-6.c

产生100个1~50的随机整数,要求每行输出10个数。任务2多个学生一门课成绩的排序一、问题情景一个班40位同学参加了一次数学考试,现要输入全班同学的成绩,并按学生成绩高低进行排序。分析输入40位同学的数学成绩,我们在任务1中已学会,只要定义一个数组intmath[40],然后用一个循环输入就行;而对学生成绩进行排序,可以看成是:先求最高分,然后求次高分,……一直到倒数第二个数找出为止。所以先要解决的是:求多个同学的最高分。然后再在剩下的分数中找次高分,不断重复,直到剩下的最后一个数是最小数为止。比较法#include"stdio.h"#defineN10main(){inti,math[N],t,j;printf("请输入多个同学的成绩:");for(i=0;i<N;i++)scanf("%d",&math[i]);for(j=0;j<N-1;j++)//循环N-1次,就可以分离出前N-1个数for(i=j+1;i<N;i++)//分离第j个数,则一定与第j+1至最后一个数比较if(math[j]<math[i]){t=math[j];math[j]=math[i];math[i]=t;}printf("多个同学的成绩排序为:");for(i=0;i<10;i++)printf("%3d",math[i]);printf("\n");}冒泡法#include"stdio.h"#defineN10main(){inti,math[N],t,j;printf("请输入多个同学的成绩:");for(i=0;i<N;i++)scanf("%d",&math[i]);for(j=0;j<N-1;j++)for(i=0;i<N-1-j;i++)if(math[i]<math[i+1]){t=math[i];math[i]=math[i+1];math[i+1]=t;}printf("多个同学的成绩排序为:");for(i=0;i<10;i++)printf("%3d",math[i]);printf("\n");}三、相关知识(一)根据问题情景中的剖析,首先要解决的第一个问题是求最高分。【例4-3】求本班同学的最高分,并将它与第一位数互换。分析:首先是输入十个成绩给math[0]到math[9](为了程序运行方便,假设只有十个同学)第二步是math[0]与math[1]比较,如果math[0]<math[1],则math[0]与math[1]两数互相交换。第三步是math[0]与math[2]比较,如果math[0]<math[2],则math[0]与math[2]两数互相交换。不断重复,直到math[0]与math[9]比较,如果math[0]<math[9],则math[0]与math[9]两数互相交换。经过上述过程后的math[0]就是最高分了。#include"stdio.h"main(){inti,math[10],t;printf("请输入本班同学的成绩:");for(i=0;i<10;i++)scanf("%d",&math[i]);for(i=1;i<10;i++)if(math[0]<math[i]){t=math[0];math[0]=math[i];math[i]=t;}printf("本班同学中的最高分:");printf("%d\n",math[0]);}(二)根据问题情景中的剖析,解决第二个问题,即排序。【例4-4】多个学生一门成绩的排序(比较法)。分析:上例已求出了多个学生成绩的最高分,显然,再在剩下的数中执行程序,则可以求出次高分;for(i=2;i<10;i++)if(math[1]<math[i]){t=math[1];math[1]=math[i];math[i]=t;}若原先有十个数,则重复九次就可以达到排序的目的,也就是再嵌套一个循环。

#include"stdio.h"main(){inti,math[10],t,j;printf("请输入多个同学的成绩:");for(i=0;i<10;i++)scanf("%d",&math[i]);for(j=0;j<9;j++)

/*循环九次,就可以分离出前九个数*/for(i=j+1;i<10;i++)/*分离第j个数,则一定与第j+1至最后一个数比较*/if(math[j]<math[i]){t=math[j];math[j]=math[i];math[i]=t;}printf("多个同学的成绩排序为:");for(i=0;i<10;i++)printf("%3d",math[i]);printf("\n");}【例4-5】多个学生一门成绩的排序。(用冒泡法排序)分析:冒泡法:顾名思义,像水中冒泡一样,水泡越大,则它浮上水面的速度就越快。思路:将相邻两个数比较,将小的调到后头。例如,对18,9,1,2,6按从大到小的顺序排序。(1)先将18,9比较,因为18>9,所以18与9不交换。即数还是18,9,1,2,6;(2)将9与1比较,因为9>1,所以9与1不交换。即数还是18,9,1,2,6;(3)将1与2比较,因为1<2,所以1与2交换。即18,9,2,1,6(4)将1与6比较,因为1<6,所以1与6交换。即18,9,2,6,1for(i=0;i<4;i++)if(a[i]<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}经过以上四步,就将最小数1沉在最下面了。接下来所要做的就是在剩下的四个数18,9,2,6中挑出小数就行.显然只要比较三次,就可以完成。即:

for(i=0;i<3;i++)if(a[i]<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}再接下来就是在在剩下的三个数18,9,6中挑出小数就行,显然只要比较二次,就可以完成。即:for(i=0;i<2;i++)if(a[i]<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}最后,在剩下的二个数18,9中挑出大数就行,显然只要比较一次,就可以完成。即:for(i=0;i<1;i++)if(a[i]<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}总结:也就是再嵌套一个循环就行。即:for(j=0;j<4;j++)for(i=0;i<4-j;i++)if(a[i]<a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}所以,多个学生成绩的排序用冒泡法程序表示成:#include"stdio.h"main(){inti,math[10],t,j;printf("请输入多个同学的成绩:");for(i=0;i<10;i++)scanf("%d",&math[i]);for(j=0;j<9;j++)for(i=0;i<9-j;i++)if(math[i]<math[i+1]){t=math[i];math[i]=math[i+1];math[i+1]=t;}printf("多个同学的成绩排序为:");for(i=0;i<10;i++)printf("%3d",math[i]);printf("\n");}(三)一维数组实例main(){intj,k,fa[20];fa[0]=1;fa[1]=1;for(j=2;j<20;j++)fa[j]=fa[j-1]+fa[j-2];for(j=0;j<20;j++)printf(“%d,”,fa[j]);}程序结果【例4-6】求出斐波那契数列的前20项并输出。(前两项为1,从第三项开始每一项是前两项的和)分析:因为有20项,所以定义一个数组intfa[20],由题意知fa[0]=1;fa[1]=1,后面的项就可以用一个循环表示。任务3学生姓名的输入输出一、问题情景一个班里有40个学生,在选举班干部时有10个候选人,现要求输出候选人名单。请用C编程解决此问题。分析:此题的主要内容是学会姓名的输入/输出。二、具体实现(为了程序运行简单,假设只有五个同学)#include"stdio.h"#include"string.h"#defineN5main(){charname[N][12];chartt[20];inti,j;printf("请输入%d个候选同学的姓名:\n",N);for(i=0;i<N;i++)gets(name[i]);printf("-------------------\n");printf("输出%d个候选同学的姓名:\n",N);printf("-------------------\n");for(i=0;i<N;i++)puts(name[i]);}本任务所要掌握的知识点是:字符数组的输入输出

三、相关知识(一)一维字符数组1.一维字符数组的定义例如:charc[10];意思是定义一个字符数组c,它有10个元素。C[0]=’I’;c[1]=’□’;c[2]=’a’;c[3]=’m’;c[4]=’□’;c[5]=’h’;c[6]=’a’;c[7]=’p’;c[8]=’p’;c[9]=’y。该数组的下标从0到9,数组元素值如右图所示。china\0china\0\0\0\0\0I□am□happy2.一维字符数组的初始化(1)定义时逐个字符给数组中各元素。charc[5]={‘c’,’h’,’i’,’n’,’a’};(2)可省略数组长度。charc[]={‘c’,’h’,’i’,’n’,’a’};系统根据初值个数确定数组的长度,数组c的长度自动为5。(3)字符数组可以用字符串来初始化。

charc[6]=”china”charc[10]={“china”}/*加不加花括号都没关系*/3.一维字符数组的引用方法一:用%c格式符逐个输入输出。例如:charc[6];for(i=0;i<6;i++){scanf(“%c”,&c[i]);printf(“%c”,c[i]);}方法二:用%s格式符进行字符串输入输出。例如:charc[6];scanf(“%s”,c);printf(“%s”,c);(1)输出时,遇’\0’结束,且输出字符中不包含’\0’。(2)“%s”格式输入时,遇空格或回车结束,但获得的字符中不包含回车及空格本身,而是在字符串末尾添’\0’。charc[10];scanf(“%s”,c);输入数据“Howareyou”,结果仅“How”被输入数组c中。(3)一个scanf函数输入多个字符串,输入时以空格键作为字符串间的分隔。例如:chars1[5],s2[5],s3[5];scanf(“%s%s%s”,s1,s2,s3);输入数据”Howareyou”,s1,s2,s3获得的数据如下图所示。(4)“%s”格式符输出时,若数组中包含一个以上’\0’,遇第一个’\0’时结束。S1S2s3How\0\0are\0\0you\0\0【例4-7】三个同学姓名的输入输出。程序如下:#include"stdio.h"main(){charname1[10],name2[10],name3[10];printf("请输入姓名:\n");scanf("%s%s%s",name1,name2,name3);printf("输出的姓名为:\n");printf("%s,%s,%s\n",name1,name2,name3);}

程序的运行结果表明:%s输入时,空格或回车表示输入的分隔符4.常用的字符串处理函数(1)输入字符串函数——gets()格式:gets(字符数组)

例如:chars[12];gets(s);功能:从键盘输入1个字符串。允许输入空格。【例4-8】将例4-7改为gets()输入:#include"stdio.h"main(){charname1[10],name2[10],name3[10];printf("请输入姓名:\n");gets(name1);gets(name2);gets(name3);printf("输出的姓名为:\n");printf("%s,%s,%s\n",name1,name2,name3);}注意:gets()允许输入空格(2)输出字符串函数格式:puts(字符数组)如:chars[6]=”china”;puts(s);功能:把字符数组中所存的字符串,输出到标准输出设备中,并用’\n’代替’\0’【例4-9】将例4-7改为gets()、puts()函数。#include"stdio.h"main(){charname1[10],name2[10],name3[10];printf("请输入姓名:\n");gets(name1);gets(name2);gets(name3);printf("输出的姓名为:\n");puts(name1);puts(name2);puts(name3);}程序结果(二)二维字符数组1.二维字符数组的定义:charstr[10][8]定义一个二维数组str,共有10行8列共80个元素。2.二维字符数组的初始化:(1)chars1[3][3]={{‘a’,’b’,’c’},{‘d’,’e’,’f’},{‘1’,’2’,’3’}};如右图所示。

(2)chars1[3][3]={“abc123”};3.二维字符数组的引用:(1)输入/输出二维字符数组中第i行(假设i=2)方法一:charname[10][12];gets(name[2]);puts(name[2]);方法二charname[10][12];scanf("%s",name[2]);printf("%s",name[2]);意思是:输入/输出二维字符数组中第2行的值。注意:gets(name[2]);与scanf("%s",name[2]);输入时有些不一样

gets(name[2]);printf("%s\n",name[2]);程序运行时输入zhangming,则输出zhangming

scanf("%s",name[2]);printf("%s\n",name[2]);则程序运行时输入zhangming,输出zhang四、知识扩展1、字符串比较函数格式:strcmp(字符串1,字符串2)其中字符串1、字符串2可以是字符串常量,也可以是一维字符数组。如:strcmp(str1,str2);strcmp(“China”,”English”);strcmp(str1,”beijing”)功能:比较二个字符串的大小。2、拷贝字符串函数格式:strcpy(字符数组1,字符串)其中字符串可以是字符串常量,也可以是字符数组。如:charc[30];strcpy(c,”Goodmoning”);功能:将“字符串”完整地复制到“字符数组1”中,字符数组1中原有内容被覆盖。如果字符串1>字符串2,则函数大于0;如果字符串1=字符串2,则函数值为0;如果字符串1<字符串2,则函数值小于0。【例4-10】输入三个同学的姓名,按ASCII码从大到小的顺序排序。#include"stdio.h"#include"string.h"/*因为用到strcmp()和ctrcpy()函数*/main(){charname1[10],name2[10],name3[10];chartt[20];printf("请输入姓名:\n");gets(name1);gets(name2);gets(name3);if(strcmp(name1,name2)<0){strcpy(tt,name1);strcpy(name1,name2);strcpy(name2,tt);}if(strcmp(name1,name3)<0){strcpy(tt,name1);strcpy(name1,name3);strcpy(name3,tt);}if(strcmp(name2,name3)<0){strcpy(tt,name2);strcpy(name2,name3);strcpy(name3,tt);}printf("输出的姓名为:\n");puts(name1);puts(name2);puts(name3);}用中英文表示的运行结果【例4-11】输入十个候选人同学的姓名,按ASCII码从大到小的顺序排序。定义一个二维数组name[10][12]for(i=0;i<10;i++)输入name[i]用冒泡法排序输出排序好的姓名分析:首先要输入10个候选同学的姓名,所以要定义一个二维字维数组name[10][12],表示一共可以寄放10个同学的姓名,而每个同学的姓名最长可以放12个字符。接下来用一个循环输入10个同学的姓名。然后可以用冒泡法或选择法对此10个同学的姓名进行排序。最后输出排序后的姓名。#defineN5/*为了程序运行简单,所以定义了五个同学*/#include"stdio.h"#include"string.h"main(){charname[N][12];chartt[20];inti,j;printf("请输入%d个候选同学的姓名:\n",N);for(i=0;i<N;i++)gets(name[i]);for(i=0;i<N-1;i++)for(j=0;j<N-1-i;j++)if(strcmp(name[j],name[j+1])<0){strcpy(tt,name[j]);strcpy(name[j],name[j+1]);strcpy(name[j+1],tt);}printf("输出十个候选同学的姓名(按ASCII码排序):\n");for(i=0;i<N;i++)puts(name[i]);}任务4多个学生多门课成绩的排序一、问题情景一个班40个同学参加了三门课的考试,现要求输出按总成绩的高低排序的成绩单。成绩单的格式如下:排序姓名课1课2课3总分平均分1张三988788273912李四96868827090……分析:本问题要解决姓名的输入/输出,这个在任务3中已解决。同时也需输入/输出40个同学三门课的成绩,并进行相应的总分及平均分的计算。最后按总分的高低进行排序。所以将这一任务分解为二个小任务。一个是40个同学三门课成绩的输入/输出(其知识点是二维数组);另一个是计算相应的平均分及总分并进行排序。二、具体实现(为了在程序运行时方便,所以假设只有5个学生)#include"stdio.h"#include"string.h"#defineN5main(){inti,j;intscore[N][3],t;charname[N][10],nn[10];floatsum[N]={0},avg[N];//每个同学的总分及平均分printf("请输入五个同学三门课的成绩:\n");/*输入记录*/for(i=0;i<N;i++){printf("第%d个同学的记录:",i+1);scanf("%s",name[i]);for(j=0;j<3;j++)scanf("%d",&score[i][j]);}/*计算每个同学的总分与平均分*/for(i=0;i<N;i++){for(j=0;j<3;j++)sum[i]=sum[i]+score[i][j];avg[i]=sum[i]/3.0;}/*排序成绩*/for(i=0;i<N-1;i++)for(j=0;j<N-1-i;j++)if(sum[j]<sum[j+1]){t=sum[j];sum[j]=sum[j+1];sum[j+1]=t;t=avg[j];avg[j]=avg[j+1];avg[j+1]=t;//这个同学的所有数据都要交换任务4多个学生多门课成绩的排序t=score[j][0];score[j][0]=score[j+1][0];score[j+1][0]=t;t=score[j][1];score[j][1]=score[j+1][1];score[j+1][1]=t;t=score[j][2];score[j][2]=score[j+1][2];score[j+1][2]=t;strcpy(nn,name[j]);strcpy(name[j],name[j+1]);strcpy(name[j+1],nn);}printf("----------------------------------------------------\n");printf("输出排序后五个同学三门课的成绩:\n");printf("----------------------------------------------------\n");printf("排序\t姓名\t课1\t课2\t课3\t总分\t平均分\n");for(i=0;i<N;i++){printf("第%d名:\t",i+1);printf("%s\t",name[i]);for(j=0;j<3;j++)printf("%d\t",score[i][j]);printf("%.0f\t%.1f\t",sum[i],avg[i]);printf("\n");}printf("-----------------------------------------------------\n");}三、相关知识(一)二维数组的定义1.二维数组定义的一般形式类型说明符数组名[常量表达式][常量表达式]例如:inta[3][4定义了一个3×4(3行4列)的整型数组a2.二维数组的理解二维数组是一种特殊的一维数组例如inta[3][4];a为数组名,先看第一维,表明它是一个具有3个元素的特殊的一维数组,三个元素分别为a[0],a[1],a[2]。再看第二维,表明每个元素又是一个包含4个元素的一维数组,如a[0]这个元素包含4个元素:a[0][0],a[0][1],a[0][2],a[0][3](二)二维数组的引用二维数组元素的表示形式:数组名[下标][下标]例:inta[3][4],表示行下标值最小从0开始,最大为3-1=2;列下标值最小为0,最大为4-1=3,即:a[0][0]a[0][1]a[0][2]a[0][4]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3](三)二维数组的初始化二维数组初始化的方法如下。(1)分行给二维数组赋初值inta[3][4]={{1,2,3,4},{4,5,6,7},{6,7,8,9}};(2)将所有数据写在一个花括弧内,按数值排列的顺序对各元素赋初值。inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}

(3)可以对部分元素赋初值。inta[3][4]={{1,2},{4},{6,7,8}};a数组分布如图所示。(4)如果对全部数组元素赋值,则第一维的长度可以不指定,但必须指定第二维的长度,全部数据写在一个大括号内。如:inta[][3]={1,2,3,4,5,6,7,8,9,10,11,12};第一维长度4省略。120040006780(四)二维数组的应用【例4-12】输入五个同学三门课的成绩并输出。#include"stdio.h"#defineN5main(){inti,j;intscore[N][3];printf("请输入五个同学三门课的成绩:\n");for(i=0;i<N;i++)for(j=0;j<3;j++)scanf("%d",&score[i][j]);printf("输出五个同学三门课的成绩:\n");for(i=0;i<N;i++){printf("第%d位同学:",i+1);for(j=0;j<3;j++)printf("%5d",score[i][j]);printf("\n");}}【例4-13】输入五个同学三门课的成绩,计算各门课的总分及平均分,并输出。#include"stdio.h"#defineN5main(){inti,j;intscore[N][3],sum[3]={0},avg[3];printf("请输入五个同学三门课的成绩:\n");for(i=0;i<N;i++)for(j=0;j<3;j++)scanf("%d",&score[i][j]);/*计算每门课的总分及平均分*/for(j=0;j<3;j++){for(i=0;i<N;i++)sum[j]=sum[j]+score[i][j];avg[j]=sum[j]/N;}printf("-------------------------\n");printf("输出五个同学三门课的成绩:\n");for(i=0;i<N;i++){printf("第%d位同学:",i+1);for(j=0;j<3;j++)printf("%5d",score[i][j]);printf("\n");}printf("-------------------------\n");printf("总分为:");for(j=0;j<3;j++)printf("%5d",sum[j]);printf("\n");printf("平均分为:");for(j=0;j<3;j++)printf("%5d",avg[j]);printf("\n");}任务5举一反三【例4-15】输入20个数,输出它们的平均值及其中与平均值之差的绝对值为最小的数组元数。分析:(1)定义一个数组inta[20],输入20个数组元素并将其相加到s中,那么平均值就是avg=s/20;(2)接下来的问题是求最小值。先假设第一个数最接近平均数,即min=fabs(a[0]-avg),k=0,然后将min与fabs(a[1]-avg)相比,若大,则新的min=fabs(a[1]-avg),k=1,再将min与fabs(a[2]-avg)相比,若大,则新的min=fabs(a[2]-avg),k=2,这样不断重复多次,直到与fabs(a[19]-avg)比完;(3)输出最小值。#include"stdio.h"#include"math.h"main(){inti,k,a[20];floats=0,avg

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论