例题
学生成绩表
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define STU_N 40
#define COURSE_N 3
void ReadScore (int score[][COURSE_N],long num[],int n);
void AverforStud (int score[][COURSE_N],int sumS[],float averS[],int n);
void AverforCourse (int score[][COURSE_N],int sumC[],float averC[],int n);
void Print (int score[][COURSE_N],int sumC[],float averC[],int sumS[],float averS[],long num[],int n);
int main()
{
int score[STU_N][COURSE_N],sumS[STU_N],sumC[COURSE_N],n;
float averS[STU_N],averC[COURSE_N];
long num[STU_N];
printf("Please input the total number of student:");
scanf("%d",&n);
ReadScore (score,num,n);
AverforStud (score,sumS,averS,n);
AverforCourse (score,sumC,averC,n);
Print (score,sumC,averC,sumS,averS,num,n);
return 0;
}
/*读入学号及各科成绩*/
void ReadScore (int score[][COURSE_N],long num[],int n)
{
int i,j;
for (i = 0; i < n; i++)
{
printf("Please input ID:\n");
scanf("%ld",&num[i]);
printf("please input the score:\n");
for (j = 0; j < COURSE_N; j++)
scanf("%d",&score[i][j]);
}
return;
}
/*求出每位学生成绩总和及平均成绩*/
void AverforStud (int score[][COURSE_N],int sumS[],float averS[],int n)
{
int i,j,sum;
for (i = 0; i < n; i++)
{
sum = 0;
for (j = 0; j < COURSE_N; j++)
sum += score[i][j];
sumS[i] = sum;
averS[i] = (float)sumS[i]/COURSE_N;
}
return;
}
/*求出各科成绩总和及平均成绩*/
void AverforCourse (int score[][COURSE_N],int sumC[],float averC[],int n)
{
int i,j,sum;
for (i = 0; i < COURSE_N; i++)
{
sum = 0;
for (j = 0; j < n; j++)
sum += score[j][i];
sumC[i] = sum;
averC[i] = (float)sumC[i]/n;
}
return;
}
/*输出成绩表*/
void Print (int score[][COURSE_N],int sumC[],float averC[],int sumS[],float averS[],long num[],int n)
{
int i,j;
printf("Counting results:\n");
printf("Student's ID\tMT\tEN\tPH\tSUM\tAVER\n");
for (i = 0; i < n; i++)
{
printf("%12ld\t",num[i]);
for (j = 0; j < COURSE_N; j++)
printf("%4d\t",score[i][j]);
printf("%4d\t%5.1f",sumS[i],averS[i]);
printf("\n");
}
printf("SumofCourse\t");
for (j = 0; j < COURSE_N; j++)
printf("%4d\t",sumC[j]);
printf("\n");
printf("AverofCourse\t");
for (j = 0; j < COURSE_N; j++)
printf("%4.1f\t",averC[j]);
printf("\n");
return;
}
求众数
int Mode (int score[],int n)
{
int count[N] = {0},max = 0,i,grade,mode;
for (i = 0; i < n; i++)
count[score[i]]++; //count[]内元素序号表示分数,元素表示分数重复次数
for (grade = 1; grade <= n-1; grade++)
{
if (max < count[grade]) //若某分数重复次数大于之前记录的重复次数max
{
max = count[grade];
mode = grade; //用mode记录重复次数最大的分数
}
}
return mode;
}