代码如下
想用结构体实现输入学号及成绩 并按成绩排序
参考GPT和自己的思路:
你好,关于 "left operand must be l-value" 错误提示,这通常是因为代码中对一个右值表达式(即不能被赋值的表达式)进行了赋值或取地址操作,因此建议你检查代码中的赋值操作和指针操作是否符合语法要求。
至于你的具体问题,建议你使用结构体数组来存储学生的学号及成绩信息,并使用快速排序算法按照成绩进行从高到低排序。具体实现可以参考以下代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id; // 学号
int score; // 成绩
} Student;
// 比较函数,按成绩从高到低排序
int compare(const void *a, const void *b) {
return (*(Student *)b).score - (*(Student *)a).score;
}
int main() {
int n;
printf("请输入学生人数:");
scanf("%d", &n);
Student *students = (Student *)malloc(n * sizeof(Student));
if (students == NULL) {
printf("内存分配失败。\n");
return 1;
}
// 输入学号及成绩
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的学号及成绩:", i+1);
scanf("%d%d", &students[i].id, &students[i].score);
}
// 按成绩排序
qsort(students, n, sizeof(Student), compare);
// 输出排序结果
printf("按成绩从高到低排序的结果如下:\n");
for (int i = 0; i < n; i++) {
printf("%d\t%d\n", students[i].id, students[i].score);
}
free(students); // 释放内存
return 0;
}
以上代码中,使用了 Student
结构体存储学生的学号及成绩,使用 qsort
函数进行快速排序,并使用循环输出排序结果。建议你仔细学习和理解以上代码,并根据实际情况进行修改和补充。