用c语言对若干个学生的姓名(汉字)进行从小到大排序(即字典顺序,适合用字符串处理库函数处理),键盘接收输入的学生个数,假设学生姓名最长不超过20个汉字(一个汉字2个字节),依次输入所有姓名后,输出排序后的学生姓名。请编写程序实现上述功能,使Dev能够运行
时间: 2024-02-21 11:01:59 浏览: 70
好的,我会为您提供一个能够在 Dev-C++ 环境下运行的实现,代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
#define MAX_NAME_LENGTH 21 // 包括字符串结束符
void sort_names(char *names[], int n);
int main() {
char *names[MAX_STUDENTS];
int n;
printf("请输入学生个数:");
scanf("%d", &n);
printf("请输入所有学生的姓名:\n");
for (int i = 0; i < n; i++) {
char *name = (char *) malloc(MAX_NAME_LENGTH * sizeof(char));
scanf("%s", name);
names[i] = name;
}
sort_names(names, n);
printf("排序后的学生姓名:\n");
for (int i = 0; i < n; i++) {
printf("%s\n", names[i]);
free(names[i]);
}
return 0;
}
void sort_names(char *names[], int n) {
for (int i = 0; i < n - 1; i++) {
int min_index = i;
for (int j = i + 1; j < n; j++) {
if (strcmp(names[j], names[min_index]) < 0) {
min_index = j;
}
}
if (min_index != i) {
char *temp = names[i];
names[i] = names[min_index];
names[min_index] = temp;
}
}
}
```
这个程序和之前的实现基本相同,只是在头文件的引入和动态内存分配时稍作修改,以适应 Dev-C++ 环境的编译器和运行时系统。特别地,我们需要在开头引入 `<stdlib.h>` 头文件以使用 `malloc` 和 `free` 函数,同时在动态内存分配时需要使用 `sizeof(char)` 来明确指定元素大小。
阅读全文