5. 有一组学生信息,每个学生包含学号、姓名、班级三项信息,其中班级代号为1-3三种情况。用数组存储这些学生信息,要求: (1) 将这组学生信息按学号升序排序(用冒泡法)。 (2) 将这组学生信息按姓名升序排序(用选择法)。 (3) 求每班人数,并在函数内部输出。
时间: 2024-01-01 21:03:18 浏览: 51
好的,我已经理解了你的问题。以下是我的回答:
首先,我们可以定义一个结构体来存储每个学生的信息:
```c
typedef struct {
int id; // 学号
char name[20]; // 姓名
int class; // 班级代号,1-3
} Student;
```
然后,我们可以定义一个包含多个学生信息的数组:
```c
Student students[] = {
{1, "张三", 1},
{2, "李四", 2},
{3, "王五", 1},
{4, "赵六", 3},
{5, "钱七", 2},
{6, "孙八", 3},
};
```
接下来,我们可以写一个函数来按学号升序排序(用冒泡法):
```c
void sortByID(Student arr[], int len) {
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (arr[j].id > arr[j + 1].id) {
Student temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
```
然后,我们可以写一个函数来按姓名升序排序(用选择法):
```c
void sortByName(Student arr[], int len) {
for (int i = 0; i < len - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < len; j++) {
if (strcmp(arr[j].name, arr[minIndex].name) < 0) {
minIndex = j;
}
}
if (minIndex != i) {
Student temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
```
最后,我们可以写一个函数来求每班人数:
```c
void countByClass(Student arr[], int len) {
int count[3] = {0};
for (int i = 0; i < len; i++) {
count[arr[i].class - 1]++;
}
printf("班级1有%d人\n班级2有%d人\n班级3有%d人\n", count[0], count[1], count[2]);
}
```
完整代码如下:
```c
#include <stdio.h>
#include <string.h>
typedef struct {
int id; // 学号
char name[20]; // 姓名
int class; // 班级代号,1-3
} Student;
void sortByID(Student arr[], int len) {
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (arr[j].id > arr[j + 1].id) {
Student temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void sortByName(Student arr[], int len) {
for (int i = 0; i < len - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < len; j++) {
if (strcmp(arr[j].name, arr[minIndex].name) < 0) {
minIndex = j;
}
}
if (minIndex != i) {
Student temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
void countByClass(Student arr[], int len) {
int count[3] = {0};
for (int i = 0; i < len; i++) {
count[arr[i].class - 1]++;
}
printf("班级1有%d人\n班级2有%d人\n班级3有%d人\n", count[0], count[1], count[2]);
}
int main() {
Student students[] = {
{1, "张三", 1},
{2, "李四", 2},
{3, "王五", 1},
{4, "赵六", 3},
{5, "钱七", 2},
{6, "孙八", 3},
};
int len = sizeof(students) / sizeof(students[0]);
sortByID(students, len);
for (int i = 0; i < len; i++) {
printf("%d %s %d\n", students[i].id, students[i].name, students[i].class);
}
printf("\n");
sortByName(students, len);
for (int i = 0; i < len; i++) {
printf("%d %s %d\n", students[i].id, students[i].name, students[i].class);
}
printf("\n");
countByClass(students, len);
return 0;
}
```
阅读全文