使用c语言实现,用结构体类型编写一个程序,输入n个客户的姓名和电话,然后按姓名的字典顺序排列后顺序输出,不使用qsort函数
时间: 2024-10-09 14:02:10 浏览: 27
2023年四川计算机C语言考试笔试真题含答案.doc
在 C 语言中,我们可以使用自定义的排序函数(如冒泡排序、选择排序或插入排序)结合结构体数组来实现这个需求。这里我将演示如何使用冒泡排序来完成:
首先,我们定义一个包含姓名和电话号码的客户结构体:
```c
#include <stdio.h>
#include <string.h>
typedef struct {
char name[50];
char phone[20];
} Customer;
void bubbleSort(Customer customers[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (strcmp(customers[j].name, customers[j + 1].name) > 0) {
// 交换客户信息
char temp_name[50], temp_phone[20];
strcpy(temp_name, customers[j].name);
strcpy(temp_phone, customers[j].phone);
strcpy(customers[j].name, customers[j + 1].name);
strcpy(customers[j].phone, temp_phone);
printf("%s -> %s, %s -> %s\n", customers[j].name, customers[j].phone,
customers[j + 1].name, customers[j + 1].phone);
}
}
}
}
int main() {
int n;
printf("请输入客户数量:");
scanf("%d", &n);
Customer* customer_list = malloc(n * sizeof(Customer));
if (!customer_list) {
perror("Memory allocation failed");
return 1;
}
for (int i = 0; i < n; i++) {
printf("请输入第%d位客户的姓名:", i + 1);
fgets(customer_list[i].name, sizeof(customer_list[i].name), stdin); // 去除换行符
顾客_list[i].name[strlen(顾客_list[i].name) - 1] = '\0'; // 结束字符串
printf("请输入第%d位客户的电话:", i + 1);
fgets(customer_list[i].phone, sizeof(customer_list[i].phone), stdin);
顾客_list[i].phone[strlen(顾客_list[i].phone) - 1] = '\0';
}
bubbleSort(customer_list, n);
printf("按姓名字母序排列后的客户信息:\n");
for (int i = 0; i < n; i++) {
printf("姓名:%s, 电话:%s\n", customer_list[i].name, customer_list[i].phone);
}
free(customer_list);
return 0;
}
```
在这个示例中,我们首先定义了一个`Customer`结构体,然后创建一个动态数组存储客户数据。通过嵌套循环实现冒泡排序,并在过程中比较和交换姓名。最后,遍历已排序的客户列表并输出。
阅读全文