C语言只使用一维数组二维数组按降序输出学生姓名学号成绩
时间: 2023-09-18 18:12:10 浏览: 129
假设有一个结构体类型为`Student`,包含学生的姓名、学号和成绩三个字段,可以按照以下方式定义:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100
typedef struct {
char name[20];
int id;
int score;
} Student;
```
接下来,我们可以定义一个包含多个`Student`类型元素的一维数组或二维数组,然后按照成绩的降序输出学生的姓名、学号和成绩。
一维数组示例代码如下:
```c
int main() {
Student students[MAX_STUDENTS];
int n, i, j;
printf("请输入学生个数:");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的姓名、学号、成绩:", i + 1);
scanf("%s%d%d", students[i].name, &students[i].id, &students[i].score);
}
// 冒泡排序按成绩降序排列
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (students[j].score < students[j + 1].score) {
Student tmp = students[j];
students[j] = students[j + 1];
students[j + 1] = tmp;
}
}
}
// 输出结果
printf("按成绩降序输出学生信息:\n");
for (i = 0; i < n; i++) {
printf("%s %d %d\n", students[i].name, students[i].id, students[i].score);
}
return 0;
}
```
二维数组示例代码如下:
```c
int main() {
Student students[MAX_STUDENTS][3];
int n, i, j;
printf("请输入学生个数:");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的姓名、学号、成绩:", i + 1);
scanf("%s%d%d", students[i][0].name, &students[i][1].id, &students[i][2].score);
}
// 冒泡排序按成绩降序排列
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (students[j][2].score < students[j + 1][2].score) {
Student tmp[3];
memcpy(tmp, students[j], sizeof(Student) * 3);
memcpy(students[j], students[j + 1], sizeof(Student) * 3);
memcpy(students[j + 1], tmp, sizeof(Student) * 3);
}
}
}
// 输出结果
printf("按成绩降序输出学生信息:\n");
for (i = 0; i < n; i++) {
printf("%s %d %d\n", students[i][0].name, students[i][1].id, students[i][2].score);
}
return 0;
}
```
阅读全文