用c语言二维数组由键盘任意输入5个学生的姓名以及每一个学生的4门功课的成绩,分别计算他们的总分和均分,并将此表按总分的高低排序。
时间: 2024-04-29 08:26:19 浏览: 110
好的,我会根据您的要求回答问题。针对您的问题,您可以考虑以下的C语言代码实现:
```
#include <stdio.h>
#include <string.h>
#define NUM_STUDENTS 5
#define NUM_COURSES 4
int main() {
char names[NUM_STUDENTS][20];
int scores[NUM_STUDENTS][NUM_COURSES];
float totals[NUM_STUDENTS], averages[NUM_STUDENTS];
int i, j, k;
// 读入每一个学生的姓名和4门功课的成绩
for (i = 0; i < NUM_STUDENTS; i++) {
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", names[i]);
for (j = 0; j < NUM_COURSES; j++) {
printf("请输入第%d门功课的成绩:", j + 1);
scanf("%d", &scores[i][j]);
}
}
// 计算每个学生的总分和均分
for (i = 0; i < NUM_STUDENTS; i++) {
totals[i] = 0;
for (j = 0; j < NUM_COURSES; j++) {
totals[i] += scores[i][j];
}
averages[i] = totals[i] / NUM_COURSES;
}
// 按照总分的高低排序(使用冒泡排序)
for (i = 0; i < NUM_STUDENTS - 1; i++) {
for (j = 0; j < NUM_STUDENTS - i - 1; j++) {
if (totals[j] < totals[j+1]) {
// 交换学生姓名
char temp_name[20];
strcpy(temp_name, names[j]);
strcpy(names[j], names[j+1]);
strcpy(names[j+1], temp_name);
// 交换总分和均分
float temp_total = totals[j];
totals[j] = totals[j+1];
totals[j+1] = temp_total;
float temp_average = averages[j];
averages[j] = averages[j+1];
averages[j+1] = temp_average;
// 交换各门功课的成绩
for (k = 0; k < NUM_COURSES; k++) {
int temp_score = scores[j][k];
scores[j][k] = scores[j+1][k];
scores[j+1][k] = temp_score;
}
}
}
}
// 输出每个学生的姓名、各门功课成绩、总分、均分
printf("排名\t姓名\t科目1\t科目2\t科目3\t科目4\t总分\t平均分\n");
for (i = 0; i < NUM_STUDENTS; i++) {
printf("%d\t%s\t", i+1, names[i]);
for (j = 0; j < NUM_COURSES; j++) {
printf("%d\t", scores[i][j]);
}
printf("%.1f\t%.1f\n", totals[i], averages[i]);
}
return 0;
}
```
这段代码的具体实现如下:
1. 定义了一个二维数组names来存储每个学生的姓名,数组scores来存储每个学生4门功课的成绩;
2. 使用for循环读入每个学生的姓名和4门功课的成绩;
3. 使用两个for循环计算每个学生的总分和均分;
4. 使用一个冒泡排序算法将学生按照总分的高低进行排序;
5. 使用for循环输出每个学生的姓名、各门功课成绩、总分、均分。
希望这个实现能够满足您的要求。
阅读全文
相关推荐









