以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:
根据您提供的需求,下面是一个C语言程序的示例代码,它定义了一个学生结构体,并实现了输入、计算总分、排序和输出的功能。
#include <stdio.h>
#include <string.h>
// 定义学生结构体
typedef struct {
char id[10];
char name[50];
float scores[3];
float totalScore;
} Student;
// 输入学生信息
void inputStudent(Student *s, int index) {
printf("请输入第%d名同学的信息:\n", index + 1);
printf("学号: ");
scanf("%s", s[index].id);
printf("姓名: ");
scanf("%s", s[index].name);
printf("三门课成绩(用空格分隔): ");
for (int i = 0; i < 3; i++) {
scanf("%f", &s[index].scores[i]);
}
}
// 计算总分
void calculateTotalScore(Student *s, int index) {
s[index].totalScore = 0;
for (int i = 0; i < 3; i++) {
s[index].totalScore += s[index].scores[i];
}
}
// 选择排序
void selectionSort(Student *students, int n) {
int i, j, maxIndex;
for (i = 0; i < n - 1; i++) {
maxIndex = i;
for (j = i + 1; j < n; j++) {
if (students[j].totalScore > students[maxIndex].totalScore) {
maxIndex = j;
}
}
if (maxIndex != i) {
Student temp = students[i];
students[i] = students[maxIndex];
students[maxIndex] = temp;
}
}
}
// 输出学生信息
void printStudent(Student *students, int n) {
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t总成绩\n");
for (int i = 0; i < n; i++) {
printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",
students[i].id, students[i].name,
students[i].scores[0], students[i].scores[1], students[i].scores[2],
students[i].totalScore);
}
}
int main() {
Student students[4]; // 假设有4名学生
int i;
// 输入学生信息
for (i = 0; i < 4; i++) {
inputStudent(students, i);
calculateTotalScore(students, i);
}
// 输出排序前的学生信息
printf("排序前的学生信息:\n");
printStudent(students, 4);
// 选择排序
selectionSort(students, 4);
// 输出排序后的学生信息
printf("\n排序后的学生信息:\n");
printStudent(students, 4);
return 0;
}
这段代码包括了您所要求的所有功能:
- 定义了一个学生结构体
Student
,包含学号、姓名、三门成绩和总成绩。 - 实现了
inputStudent
函数,用于输入学生的学号、姓名和三门课程的成绩。 - 实现了
calculateTotalScore
函数,用于计算每名学生的总成绩。 - 实现了
selectionSort
函数,使用选择排序算法对学生的总成绩进行排序。 - 实现了
printStudent
函数,用于打印学生的详细信息。
您可以将此代码复制到C语言的编译环境中,编译并运行以查看结果。
至于参考资料,您可以参考以下链接来了解更多关于C语言结构体、数组排序算法以及输入输出操作的信息:
请注意,以上链接仅供参考,实际内容可能需要根据您访问时的情况来确定。