#include <stdio.h>
#define MAXN 61
char *bixiu[] = { "操作系统", "汇编语言", "软件工程", "编译原理", "数字电路", "Java语言" };
char *xuanxiu[] = { "人工智能", "多媒体", "计算机制图", "信号处理" };
float score[MAXN][10];
float epsilon = 0.01;
float weight[10] = { 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.05, 0.05, 0.05, 0.05 };
int n;
void statbixiu()
{
for (int i = 0; i < 6; i++)
{
float ave = 0;
for (int j = 0; j < n; j++)
{
ave += score[j][i];
}
printf("\"%s\"的平均成绩是%.2f。\n", bixiu[i], ave / n);
}
}
void statxuanxiu()
{
for (int i = 0; i < 4; i++)
{
float ave = 0;
int m = 0;
for (int j = 0; j < n; j++)
{
if (score[j][i + 6] >= epsilon)
{
ave += score[j][i + 6];
m++;
}
}
if (m == 0)
printf("\"%s\"没有人选。\n", xuanxiu[i]);
else
printf("\"%s\"的平均成绩是%.2f。\n", xuanxiu[i], ave / m);
}
}
float calcscore(int id)
{
float sum = 0;
for (int i = 0; i < 10; i++)
sum += score[id][i] * weight[i];
return sum;
}
void award()
{
int order[MAXN];
int rank[MAXN];
for (int i = 0; i < n; i++)
{
order[i] = i;
}
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (calcscore(order[j]) < calcscore(order[j + 1]))
{
int t = order[j];
order[j] = order[j + 1];
order[j + 1] = t;
}
}
}
for (int i = 0; i < n; i++)
{
rank[order[i]] = i + 1;
}
for (int i = 0; i < n; i++)
{
printf("%d号学生是第%d名\n", i, rank[i]);
}
}
int main()
{
printf("请输入学生人数(<=60人):");
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < 6; j++)
{
printf("请输入第%d个学生的\"%s\"的成绩:", i + 1, bixiu[j]);
scanf("%f", &score[i][j]);
}
for (int j = 0; j < 4; j++)
{
printf("请输入第%d个学生的\"%s\"的成绩(如果没有选,请输入0):", i + 1, xuanxiu[j]);
scanf("%f", &score[i][j + 6]);
}
}
statbixiu();
statxuanxiu();
award();
return 0;
}
请输入学生人数(<=60人):4
请输入第1个学生的"操作系统"的成绩:44
请输入第1个学生的"汇编语言"的成绩:44
请输入第1个学生的"软件工程"的成绩:33
请输入第1个学生的"编译原理"的成绩:33
请输入第1个学生的"数字电路"的成绩:66
请输入第1个学生的"Java语言"的成绩:11
请输入第1个学生的"人工智能"的成绩(如果没有选,请输入0):0
请输入第1个学生的"多媒体"的成绩(如果没有选,请输入0):0
请输入第1个学生的"计算机制图"的成绩(如果没有选,请输入0):12
请输入第1个学生的"信号处理"的成绩(如果没有选,请输入0):11
请输入第2个学生的"操作系统"的成绩:23
请输入第2个学生的"汇编语言"的成绩:75
请输入第2个学生的"软件工程"的成绩:65
请输入第2个学生的"编译原理"的成绩:46
请输入第2个学生的"数字电路"的成绩:87
请输入第2个学生的"Java语言"的成绩:65
请输入第2个学生的"人工智能"的成绩(如果没有选,请输入0):77
请输入第2个学生的"多媒体"的成绩(如果没有选,请输入0):88
请输入第2个学生的"计算机制图"的成绩(如果没有选,请输入0):0
请输入第2个学生的"信号处理"的成绩(如果没有选,请输入0):0
请输入第3个学生的"操作系统"的成绩:1
请输入第3个学生的"汇编语言"的成绩:1
请输入第3个学生的"软件工程"的成绩:1
请输入第3个学生的"编译原理"的成绩:1
请输入第3个学生的"数字电路"的成绩:1
请输入第3个学生的"Java语言"的成绩:1
请输入第3个学生的"人工智能"的成绩(如果没有选,请输入0):0
请输入第3个学生的"多媒体"的成绩(如果没有选,请输入0):33
请输入第3个学生的"计算机制图"的成绩(如果没有选,请输入0):0
请输入第3个学生的"信号处理"的成绩(如果没有选,请输入0):66
请输入第4个学生的"操作系统"的成绩:100
请输入第4个学生的"汇编语言"的成绩:98
请输入第4个学生的"软件工程"的成绩:12
请输入第4个学生的"编译原理"的成绩:97
请输入第4个学生的"数字电路"的成绩:33
请输入第4个学生的"Java语言"的成绩:24
请输入第4个学生的"人工智能"的成绩(如果没有选,请输入0):100
请输入第4个学生的"多媒体"的成绩(如果没有选,请输入0):0
请输入第4个学生的"计算机制图"的成绩(如果没有选,请输入0):0
请输入第4个学生的"信号处理"的成绩(如果没有选,请输入0):12
"操作系统"的平均成绩是42.00。
"汇编语言"的平均成绩是54.50。
"软件工程"的平均成绩是27.75。
"编译原理"的平均成绩是44.25。
"数字电路"的平均成绩是46.75。
"Java语言"的平均成绩是25.25。
"人工智能"的平均成绩是88.50。
"多媒体"的平均成绩是60.50。
"计算机制图"的平均成绩是12.00。
"信号处理"的平均成绩是29.67。
0号学生是第3名
1号学生是第1名
2号学生是第4名
3号学生是第2名
Press any key to continue . . .