写一个c语言程序利用指针将10个学生的姓名排序
时间: 2023-06-18 17:03:18 浏览: 101
下面是一个简单的C语言程序,利用指针将10个学生的姓名按字母顺序排序。这里假设每个学生的姓名是一个字符串。
```c
#include <stdio.h>
#include <string.h>
#define MAX_NAME_LEN 50
#define NUM_STUDENTS 10
int main() {
char names[NUM_STUDENTS][MAX_NAME_LEN];
char *pointers[NUM_STUDENTS];
char *temp;
// 获取学生姓名
for (int i = 0; i < NUM_STUDENTS; i++) {
printf("请输入第%d个学生的姓名:", i+1);
scanf("%s", names[i]);
pointers[i] = names[i];
}
// 使用指针进行排序
for (int i = 0; i < NUM_STUDENTS - 1; i++) {
for (int j = i + 1; j < NUM_STUDENTS; j++) {
if (strcmp(pointers[i], pointers[j]) > 0) {
temp = pointers[i];
pointers[i] = pointers[j];
pointers[j] = temp;
}
}
}
// 输出排序结果
printf("排序后的结果为:\n");
for (int i = 0; i < NUM_STUDENTS; i++) {
printf("%d. %s\n", i+1, pointers[i]);
}
return 0;
}
```
解释一下程序:
首先定义了两个常量,一个是每个学生姓名字符串的最大长度,另一个是学生的总数。
然后定义了一个二维字符数组 `names`,用于存储每个学生的姓名。另外定义了一个指针数组 `pointers`,用于存储每个学生姓名字符串的地址。还定义了一个临时指针变量 `temp`,用于交换指针变量的值。
接着使用循环获取每个学生的姓名,并将每个学生姓名字符串的地址存储到 `pointers` 数组中。
然后使用两层循环,从第一个学生开始依次比较每个学生的姓名字符串的大小,如果前面的字符串大于后面的字符串,则交换对应的指针变量。
最后输出排序结果,依次输出每个学生的姓名。