用c语言编写上述程序
时间: 2024-10-28 16:08:36 浏览: 16
c语言电子时钟程序完整版.zip
在C语言中,由于没有内置的列表数据结构,我们可以使用数组和指针来模拟这种场景。这里是一个简单的C语言版本的程序:
```c
#include <stdio.h>
#include <string.h>
#define MAX_PASSENGERS 5
// 客户端结构体
typedef struct {
int index; // 序列号
int position; // 经度坐标
} Passenger;
// 比较函数,用于排序
int compare(const void *a, const void *b) {
const Passenger *passengerA = a;
const Passenger *passengerB = b;
if (passengerA->position == passengerB->position) {
return passengerA->index - passengerB->index;
} else {
return passengerA->position - passengerB->position;
}
}
void print_route(int* route, int num_passengers) {
printf("Route: ");
for (int i = 0; i < num_passengers; ++i) {
printf("%d ", route[i]);
}
printf("\n");
}
int main() {
Passenger passengers[MAX_PASSENGERS] = {0};
int num_passengers, start_position;
// 获取输入
printf("Enter the number of passengers and their positions (separated by space): ");
scanf("%d", &num_passengers);
for (int i = 0; i < num_passengers; ++i) {
scanf("%d", &passengers[i].position);
passengers[i].index = i + 1; // 添加序列号
}
// 确保无重复
if (num_passengers > MAX_PASSENGERS || num_passengers != unique_elements(passengers, num_passengers)) {
printf("Error: Duplicate destinations are not allowed.\n");
return 1;
}
// 对乘客进行排序
qsort(passengers, num_passengers, sizeof(Passenger), compare);
// 记录路线
int route[MAX_PASSENGERS];
route[0] = passengers[0].position;
for (int i = 1; i < num_passengers; ++i) {
route[i] = passengers[i].position;
}
// 输出路线
print_route(route, num_passengers);
return 0;
}
// 辅助函数:检查数组是否有重复元素
int unique_elements(Passenger* array, int n) {
int count[1000] = {0}; // 假设最大范围为1000,可以根据实际需求调整
for (int i = 0; i < n; i++) {
count[array[i].position]++;
}
int unique_count = 0;
for (int i = 0; i < 1000; i++) {
if (count[i] == 1) {
unique_count++;
}
}
return unique_count;
}
```
这个程序实现了输入乘客、排序并打印路线的功能。注意,`unique_elements`函数是一个辅助函数,用于检查输入的乘客位置是否唯一。
阅读全文