做一个小程序用结构体数组去存储一些结构体结构体内容是人名枚举类型金额浮点数序号整形序号即为数组索引。写几个函数利用指针去查找对应的内容增加内容删除内容根据金额进行排序内容。增删需要维护好序号比如增加一个序号4需要插入到3号后面原来的4号变成5号。要求使用c语言编写可以添加人名、金额、序号。
以下是一个示例程序,实现了题目要求的功能:
#include <stdio.h>
#include <stdlib.h>
// 人名枚举类型
typedef enum {
Alice,
Bob,
Charlie,
David,
Emily,
Frank
} Name;
// 结构体
typedef struct {
Name name;
float amount;
int index;
} Person;
// 结构体数组
Person people[100];
int count = 0;
// 根据人名查找结构体指针
Person* findPersonByName(Name name) {
for (int i = 0; i < count; i++) {
if (people[i].name == name) {
return &people[i];
}
}
return NULL;
}
// 根据序号查找结构体指针
Person* findPersonByIndex(int index) {
if (index < 0 || index >= count) {
return NULL;
}
return &people[index];
}
// 增加内容
void addPerson(Name name, float amount, int index) {
// 如果index大于当前count,则直接将新元素加到数组末尾
if (index >= count) {
people[count].name = name;
people[count].amount = amount;
people[count].index = count;
count++;
return;
}
// 将index后面的元素向后移动,腾出位置给新元素
for (int i = count - 1; i >= index; i--) {
people[i + 1] = people[i];
people[i + 1].index = i + 1;
}
// 插入新元素
people[index].name = name;
people[index].amount = amount;
people[index].index = index;
count++;
}
// 删除内容
void deletePerson(int index) {
// 将index后面的元素向前移动,覆盖被删除的元素
for (int i = index + 1; i < count; i++) {
people[i - 1] = people[i];
people[i - 1].index = i - 1;
}
count--;
}
// 根据金额进行排序
void sortPeopleByAmount() {
// 使用冒泡排序法
for (int i = 0; i < count - 1; i++) {
for (int j = 0; j < count - i - 1; j++) {
if (people[j].amount > people[j + 1].amount) {
// 交换位置
Person temp = people[j];
people[j] = people[j + 1];
people[j + 1] = temp;
// 更新序号
people[j].index = j;
people[j + 1].index = j + 1;
}
}
}
}
int main() {
// 添加几个示例人员
addPerson(Alice, 100.0, 0);
addPerson(Bob, 200.0, 1);
addPerson(Charlie, 150.0, 2);
// 查找并打印某个人的信息
Person* person = findPersonByName(Bob);
if (person != NULL) {
printf("Name: %d, Amount: %.2f, Index: %d\n", person->name, person->amount, person->index);
}
// 删除一个人的信息
deletePerson(1);
// 根据金额排序并打印所有人的信息
sortPeopleByAmount();
for (int i = 0; i < count; i++) {
printf("Name: %d, Amount: %.2f, Index: %d\n", people[i].name, people[i].amount, people[i].index);
}
return 0;
}
这个程序中,结构体数组 people 存储了人员信息,使用全局变量 count 维护当前数组中的元素个数。通过 addPerson 函数可以向数组中添加新的人员信息,通过 deletePerson 函数可以删除指定索引的人员信息。通过 findPersonByName 和 findPersonByIndex 函数可以根据人名或序号查找对应的人员信息。通过 sortPeopleByAmount 函数可以根据金额对人员信息进行排序。在 main 函数中,我们进行了一些示例操作,包括添加人员、查找人员、删除人员、排序人员,并最终打印所有人员的信息。
请注意,这只是一个简单的示例程序,可能还有一些边界情况没有处理。如果需要更复杂的功能或更健壮的代码,请根据实际需求进行修改和优化
原文地址: https://www.cveoy.top/t/topic/ilWc 著作权归作者所有。请勿转载和采集!