第1个回答 2017-03-15
#include<stdio.h>
#include<stdlib.h>
void ReadScore(int score[], long id[], int n);
void Calculate(int score[], int n);
void ScoreSort(int score[], long id[], int n);
void IDSort(int score[], long id[], int n);
void Pri(int score[], long id[], int n);
void StaAnalysis(int score[], int n);
int Search(int score[], long id[], int n);
int main()
{
int score[30] = {0};//学生成绩
long id[30] = {0};//学生学号
int n = 0;
int m = 0;
st: printf("1. Input record\n");
printf("2. Calculate total and average score of course\n");
printf("3. Sort in descending order by score\n");
printf("4. Sort in ascending order by score\n");
printf("5. Search by number\n");
printf("6. Statistic analysis\n");
printf("7. List record\n");
printf("8. Exit\n");
printf("Please input command(number) :\n");
scanf("%d", &m);
switch (m)
{
case 1:
{
do
{
printf("Input students'number:\n");
scanf("%d",&n);
}while(n <= 0) ;//处理 非法数据
ReadScore(score, id, n);
printf("Input OK!\n");
goto st;
}
case 2:
{
Calculate(score, n);
goto st;
}
case 3:
{
IDSort(score, id, n);
printf("In descending order according to student ID:\n");
goto st;
}
case 4:
{
ScoreSort(score, id, n);
printf("League table:\n");//输出名次表
goto st;
}
case 5:
{
ScoreSort(score, id, n);
Search(score, id, n);
goto st;
}
case 6:
{
StaAnalysis(score, n);
goto st;
}
case 7:
{
Pri(score, id, n);
goto st;
}
case 8:
{
exit(0);
}
default:
{
printf("Illegal command!");
goto st;
}
}
return 0 ;
}
/*函数功能;读入学生学号和成绩*/
void ReadScore(int score[],long id[], int n)
{
int j = 0;
int i = 0;
for (; i < n; i++)
{
er: printf("Input students'ID:\n");
scanf("%ld", &id[i]);
//防止输入相同学号 及学号小于零
for(j = i; j >= 1; j--)
{
if(id[i] == id[j-1]||id[i] < 0)
{
goto er;
}
}
do
{
printf("Input students'score:\n");
scanf("%d", &score[i]);
}while(score[i] < 0||score[i] > 100);//限制输入成绩在0~100
}
}
/*函数功能:计算并输出学生课程总分和平均分*/
void Calculate(int score[], int n)
{
int sum = 0;//总分
int ave = 0;//平均分
int i;
for(i = 0; i < n; i++)
{
sum += score[i];
}
printf("The sum score is %d\n", sum);
printf("The average is %.2f\n", (float)sum/n);
}
/*函数功能:按选择法对成绩由高到低排列*/
void ScoreSort(int score[], long id[], int n)
{
int i,j,k;
long tempt;
for(i = 0; i < n-1; i++)
{
k = i;
for(j = i+1; j < n; j++)
{
if(score[k] < score[j])
{
k = j;//记录最大数下标位置
}
}
if(k != i)//如果最大数下标不是i,交换score[i]与score[k] ,id[i]与id[k]
{
tempt = score[k];
score[k] = score[i];
score[i] = tempt;
tempt = id[k];
id[k] = id[i];
id[i] = tempt;
}
}
}
/*函数功能:按选择法对学号由低到高排列*/
void IDSort(int score[], long id[], int n )
{
int i, j, k;
long tempt;
for(i = 0; i < n-1; i++)
{
k = i;
for(j = i+1; j < n; j++)
{
if(id[k] > id[j])
{
k = j;//记录最小数下标位置
}
}
if(k != i)//如果最小数下标不是i,交换score[i]与score[k],id[i]与id[k]
{
tempt = score[k];
score[k] = score[i];
score[i] = tempt;
tempt = id[k];
id[k] = id[i];
id[i] = tempt;
}
}
}
/*函数功能:输出所有学生的成绩及其学号*/
void Pri(int score[], long id[], int n)
{
int i;
for(i = 0; i < n; i++)
{
printf("%ld: %d\n",id[i],score[i]);
}
}
/*函数功能:输入学号,输出对应学生排名及考试成绩*/
int Search(int score[], long id[], int n)
/* {
int low,high,mid;
long x;
low = 0;
high = n-1;
printf("Input students'ID number:\n");
printf("%d", n);
scanf("%ld", &x);
do{
mid = low + (high - low)/2;
if(x > id[mid])
low = mid + 1;
if(x < id[mid])
high = mid - 1;
if(x == id[mid])
{
printf("NO.%d %d\n", mid+1, score[mid]);
return 0;
}
}while(high >= low);
printf("Not found!\n");
return 0;
}*/
{
int m = 0;
long a;
int i;
do{
printf("Input ID number:\n");
scanf("%ld", &a);
for(i = 0; i < n; i++)
{
if(id[i] == a)
{
printf("NO.%d %d\n", i+1, score[i]);
printf("1. Continue to search\n");
printf("2. Back\n");
printf("Input command:\n");
scanf("%d", &m);
}
}
if(m == 0)
{
printf("Not found!\n");
printf("1. Continue to search\n");
printf("2. Back\n");
printf("Input command:\n");
scanf("%d", &m);
}
}while(m == 1);
return 0;
}
/*函数功能:统计五个分数类别的人数及所占百分比*/
void StaAnalysis(int score[], int n)
{
int Sta[5] = {0};
int i;
for(i = 0; i < n; i++)
{
if(score[i] >= 90&&score[i] <= 100)
Sta[0]++;
if(score[i] >= 80&&score[i] <= 89)
Sta[1]++;
if(score[i] >= 70&&score[i] <= 79)
Sta[2]++;
if(score[i] >= 60&&score[i] <= 69)
Sta[3]++;
if(score[i] >= 0&&score[i] <= 59)
Sta[4]++;
}
printf("Excellent:%4d %%%d\n", Sta[0], Sta[0]*100/n);
printf("Good: %4d %%%d\n", Sta[1], Sta[1]*100/n);
printf("Medium: %4d %%%d\n", Sta[2], Sta[2]*100/n);
printf("Pass: %4d %%%d\n", Sta[3], Sta[3]*100/n);
printf("Failling: %4d %%%d\n", Sta[4], Sta[4]*100/n);
}