c语言 使用 List<T>类代替数组,做门票系统。 1>、当 age<20,“儿童票”。 当 20<=age<65,“成人票”。 当 65<=age,“老年票”。 2>、打印出姓名和对应的票
时间: 2023-09-10 21:05:33 浏览: 75
### 回答1:
以下是使用 List<T> 类代替数组,实现门票系统的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char name[20];
int age;
char ticket[10];
} Person;
int main()
{
int n;
printf("请输入游客人数:");
scanf("%d", &n);
// 使用动态分配内存的方式创建 Person 数组
Person *persons = (Person *)malloc(n * sizeof(Person));
// 输入每个游客的姓名和年龄,并计算门票类型
for (int i = 0; i < n; i++) {
printf("请输入第%d个游客的姓名和年龄(以空格分隔):", i + 1);
scanf("%s %d", persons[i].name, &persons[i].age);
if (persons[i].age < 20)
strcpy(persons[i].ticket, "儿童票");
else if (persons[i].age < 65)
strcpy(persons[i].ticket, "成人票");
else
strcpy(persons[i].ticket, "老年票");
}
// 打印每个游客的姓名和门票类型
printf("姓名\t门票类型\n");
for (int i = 0; i < n; i++)
printf("%s\t%s\n", persons[i].name, persons[i].ticket);
// 释放动态分配的内存
free(persons);
return 0;
}
```
这个程序使用了 `Person` 结构体来存储每个游客的姓名、年龄和门票类型。使用动态分配内存的方法,可以在运行时根据输入的游客人数来动态创建 `Person` 数组。遍历数组,根据年龄计算门票类型,并将门票类型存储到 `ticket` 字符数组中。最后,打印每个游客的姓名和门票类型,并释放动态分配的内存。
### 回答2:
在C语言中,我们不能直接使用List<T>类代替数组,但可以使用结构体数组来实现类似功能的数据结构。下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char name[20];
int age;
char ticketType[10];
} Customer;
int main() {
int numCustomers = 5;
Customer* customers = (Customer*)malloc(numCustomers * sizeof(Customer));
// 为每个顾客输入姓名和年龄
for (int i = 0; i < numCustomers; i++) {
printf("请输入第%d个顾客的姓名:", i + 1);
scanf("%s", customers[i].name);
printf("请输入第%d个顾客的年龄:", i + 1);
scanf("%d", &(customers[i].age));
// 根据年龄设置对应的票类型
if (customers[i].age < 20) {
strcpy(customers[i].ticketType, "儿童票");
} else if (customers[i].age < 65) {
strcpy(customers[i].ticketType, "成人票");
} else {
strcpy(customers[i].ticketType, "老年票");
}
}
// 打印每个顾客的姓名和对应的票类型
printf("顾客姓名\t票类型\n");
for (int i = 0; i < numCustomers; i++) {
printf("%s\t\t%s\n", customers[i].name, customers[i].ticketType);
}
free(customers);
return 0;
}
```
在这个示例代码中,我们先定义了一个Customer结构体,包含了姓名、年龄和票类型。然后使用`malloc()`动态分配了一个包含5个Customer结构体的数组。通过循环为每个顾客输入姓名和年龄,并根据年龄设置对应的票类型。最后,再次循环打印每个顾客的姓名和对应的票类型。需要注意的是,在使用动态分配的数组之后,我们需要使用`free()`函数释放内存。
### 回答3:
可以使用C语言中的结构体和链表来实现使用List<T>类代替数组的门票系统。
首先,定义一个包含姓名和年龄的结构体Ticket,代码如下:
```
typedef struct Ticket {
char name[20];
int age;
char type[10];
struct Ticket *next;
} Ticket;
```
接下来,定义一个链表的头指针head,用来指向链表的第一个节点,代码如下:
```
Ticket *head = NULL;
```
然后,实现一个函数来添加门票信息到链表中,代码如下:
```
void addTicket(char name[], int age) {
Ticket *newTicket = (Ticket *)malloc(sizeof(Ticket));
strcpy(newTicket->name, name);
newTicket->age = age;
if(age < 20) {
strcpy(newTicket->type, "儿童票");
} else if(age >= 20 && age < 65) {
strcpy(newTicket->type, "成人票");
} else {
strcpy(newTicket->type, "老年票");
}
newTicket->next = head;
head = newTicket;
}
```
最后,实现一个函数来打印出所有门票的姓名和对应的票类型,代码如下:
```
void printTickets() {
Ticket *temp = head;
while(temp != NULL) {
printf("姓名:%s,票类型:%s\n", temp->name, temp->type);
temp = temp->next;
}
}
```
通过调用addTicket函数来添加门票信息,再调用printTickets函数来打印出所有门票的姓名和对应的票类型,即可完成门票系统的实现。
阅读全文