#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void Inputidscore(int ID[],int score[][3],int n);
void AverCour(int sumcourse[],int score[][3],int n,int aveforcour[]);
void Averstud(int sum[],int score[][3],int n,int aveforscore[]);
void Descbysum(int n,int sum[],int score[][3]);
void AscbyID(int score[][3],int ID[],int n);
void outputsort(int ID[],int score[][3],int n);
void search(int ID[],int score[][3],int n);
void Checkinput(int searchnum);
void Caculation(int total[][4],int aveforscore[],int n);
void Caculaofpecent(int percent[1][5],int total[1][5],int n);
void analyse(int total[1][5],int precent[1][5]);
void lastoutput(int ID[],int sum[], int aveforscore[], int score[][3],int n);
int main(void)
{
int score[30][3],sumcourse[3],n,aveforcour[3],aveforscore[30],sum[30],total[1][5],percent[1][5];
long ID[30];
printf("Please input student's total number:\n");
scanf("%d",&n);
Inputidscore(ID,score,n);
outputsort(ID,score,n);
AverCour(sumcourse,score,n,aveforcour);
Averstud(sum,score,n,aveforscore);
Descbysum(n,sum,score);
outputsort(ID,score,n);
AscbyID(score,ID,n);
outputsort(ID,score,n);
search(ID,score,n);
analyse(total,percent);
lastoutput(ID,sum,aveforscore, score, n);
return 0;
}
//输入学生的学号和成绩
//老毛病又犯了,写完函数的基本之后,没有补充应该需要什么样的数值传入函数
void Inputidscore(int ID[],int score[][3],int n)
{
int i,j;
printf("Please enter students' ID number and Chinese Math English score:\n");
for( i=0;i<n;i++)
{
printf("Please enter ID:");
scanf("ld%",&ID[i]);
for(j=0;j<3;j++)
{
printf("Please enter score:");
scanf(" %d",&score[i][j]);
}
}
}
//这里看课本的时候感觉是会的,自己写的时候总是糊涂,
//哪怕练过一些题目,总结总结:如何利用循环对不同形式的二维数组进行排序和求平均值
void AverCour(int sumcourse[],int score[][3],int n,int aveforcour[])
{
int i,j;
for(j=0;j<n;j++)
{
sumcourse[j] = 0;
for(i=0;i<3;i++)
{
sumcourse[j]=sumcourse[j]+score[i][j];
}
aveforcour[j] = (float)sumcourse[j]/n;
}
}
//计算每个学生总成绩与平均分
void Averstud(int sum[],int score[][3],int n,int aveforscore[])
{
int i, j;
for(i=0;i<n;i++)
{
for(j=0;j<3;j++)
{
sum[i]=sum[i]+score[i][j];
}
aveforscore[i]=(float)sum[i]/3;
}
}
//按总成绩由高到低排出次序表
void Descbysum(int n,int sum[],int score[][3])
{
int i,j,k,temp,b;
for(i=0;i<j;i++)
{
for(j=1;j<n;j++)
{
if(sum[i]<=sum[j])
{
temp=sum[j];
sum[j]=sum[i];
sum[i]=temp;
k=i;
for(b=0;b<n;b++)
{
temp=score[k][b];
score[k][b]=score[j][b];
score[j][b]=temp;
}
}
}
}
}
//按学号由小到大排序次序表
void AscbyID(int score[][3],int ID[],int n)
{
int i,j,a,temp;
for(i=0;i<n;i++)
{
for(j=1;j>i;j++)
{
if(ID[i]>ID[j])
{
temp=ID[i];
ID[i]=ID[j];
ID[j]=temp;
for(a=0;a<3;a++)
{
temp=score[i][a];
score[i][a]=score[j][a];
score[j][a]=temp;
}
}
}
}
}
//输出排序后的次序表
void outputsort(int ID[],int score[][3],int n)
{
int i,j;
for(i=0;i<n;i++)
{
printf(" %12ld\t ",ID[i]);
for(j=0;j<3;j++)
{
printf(" %4d\t ",score[i][j]);
}
printf("\n");
}
}
//按学号查询学生排名及各科考试成绩
void search(int ID[],int score[][3],int n)
{
int i,searchnum;
printf("Please enter your searching ID number:/n");
scanf("%ld",&searchnum);
Checkinput(searchnum);
for(i=0;i<n;i++)
{
if(ID[i]==searchnum)
{
printf("%ld %d %d %d",ID[i],score[i][0],score[i][1],score[i][2]);
}
}
}
//判断学号是否输入正确
void Checkinput(int searchnum)
{
if(searchnum<=0)
{
printf("Input error!/n Please enter your searching number again:/n");
scanf("%ld",&searchnum);
Checkinput(searchnum);
}
else return;
}
//按各科平均成绩的5个类别,统计每个成绩类别的人数
void Caculation(int total[][4],int aveforscore[],int n)
{
int i,j,a,b;
for(a=0;a<3;a++)
{
for(i=0;i<n;i++)
{
b = aveforscore[i]/10;
switch(b)
{
case 9:
case 10:total[0][0]++;
break;
case 8:total[0][1]++;
break;
case 7:total[0][2]++;
break;
case 6:total[0][3]++;
break;
case 5:
case 4:
case 3:
case 2:
case 1:total[0][4]++;
break;
}
}
}
}
//按照每个学生的平均成绩,统计每个成绩类别所占百分比
void Caculaofpecent(int percent[1][5],int total[1][5],int n)
{
int i;
for(i=0;i<5;i++)
{
percent[0][i]=total[0][i]/n;
}
}
//输出每个成绩所占百分比以及每个成绩类别所占人数
void analyse(int total[1][5],int precent[1][5])
{
int i,j;
printf("100~90 89~80 79~70 69~60 59~0/n");
printf("total ");
for(i=0;i<5;i++)
{
printf("%d",total[1][i]);
}
printf("/n precent ");
for(j=0;j<5;j++)
{
printf(" %d",precent[1][j]);
}
}
//输出每个学生的学号、考试成绩,课程总分和平均分
void lastoutput(int ID[],int sum[], int aveforscore[], int score[][3],int n)
{
int i,j;
printf(" ID SCROE SUM AVERAGE");
for(i=0;i<n;i++)
{
printf("%ld",ID[i]);
for(j=0;j<3;j++)
{
printf(" %d",score[i][j]);
}
printf(" %d",sum[i]);
printf(" %d",aveforscore[i]);
printf("/n");
}
}