某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,用二维数组作函数参数

录入每个学生的学号、姓名和考试成绩;
计算课程的总分和平均分;
按成绩由高到低排出名次表;
按成绩由低到高排出名次表;
按学号由小到大排出成绩表;
按名字的字典顺序排出成绩表;
按学号查询学生排名及其考试成绩;
按姓名查询学生排名及其考试成绩;
按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)5个类别,统计每个类别的人数以及所占的百分比;
输出每个学生的学号、姓名、考试成绩,以及课程总分和平均分。
要求纯c语言数组写,不要结构体,谢谢大家啦!

1、在上面的 3*5 的数组中,x[0],x[1],x[2] 分别指向第 0 行,第 1 行和第 2 行的第一个元素。如果 x 是一个整形数组,那么 x[0] x[1] x[2] 就是指向 int 类型的指针,而 x 则是指向指针的指针。

2、接下来,接收用户输入的行列值。

3、为了给这个 row 行、col 列的数组分配存储空间,我们首先为行指针分配空间。

4、接下来,我们为每行分配空间。

5、二维数组创建完成。现在就可以用这个二数组接收输入了。

6、我们将输入的值输出到屏幕上,以验证是否正确。

7、我们动态创建了一个 2*3 的数组,数组的元素值依次是 1,2,3,4,5,6。

温馨提示:答案为网友推荐,仅供参考
第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);
}
第2个回答  2017-02-09
这个我会,可以帮你写!本回答被网友采纳
相似回答