以下是一个示例程序,实现了根据金额进行排序的功能。你可以根据需要进行修改和扩展。

#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 100

typedef enum {
    TOM,
    JERRY,
    SPIKE,
    TYKE
} Name;

typedef struct {
    Name name;
    float amount;
    int index;
} Money;

typedef struct {
    Money arr[MAX_SIZE];
    int size;
} MoneyList;

void Find_num(MoneyList *ml, int _num);
void delet_num(MoneyList *ml, int _num);
void sort_by_amount(MoneyList *ml);

int main() {
    MoneyList ml = {.size = 0};
    char choice;

    while (1) {
        printf("\n*** MENU ***\n");
        printf("1. Add a person\n");
        printf("2. Find a person by index\n");
        printf("3. Delete a person by index\n");
        printf("4. Sort by amount\n");
        printf("5. Exit\n");
        printf("Enter your choice: ");
        scanf(" %c", &choice);

        switch (choice) {
            case '1':
                if (ml.size == MAX_SIZE) {
                    printf("Money list is full!\n");
                } else {
                    Money m;
                    printf("Enter name (0: TOM, 1: JERRY, 2: SPIKE, 3: TYKE): ");
                    scanf("%d", &(m.name));
                    printf("Enter amount: ");
                    scanf("%f", &(m.amount));
                    m.index = ml.size;
                    ml.arr[ml.size++] = m;
                    printf("Person added successfully!\n");
                }
                break;
            case '2':
                if (ml.size == 0) {
                    printf("Money list is empty!\n");
                } else {
                    int index;
                    printf("Enter index: ");
                    scanf("%d", &index);
                    Find_num(&ml, index);
                }
                break;
            case '3':
                if (ml.size == 0) {
                    printf("Money list is empty!\n");
                } else {
                    int index;
                    printf("Enter index: ");
                    scanf("%d", &index);
                    delet_num(&ml, index);
                    printf("Person deleted successfully!\n");
                }
                break;
            case '4':
                if (ml.size == 0) {
                    printf("Money list is empty!\n");
                } else {
                    sort_by_amount(&ml);
                    printf("Sorted by amount!\n");
                }
                break;
            case '5':
                exit(0);
            default:
                printf("Invalid choice!\n");
        }
    }

    return 0;
}

void Find_num(MoneyList *ml, int _num) {
    if (_num >= 0 && _num < ml->size) {
        Money m = ml->arr[_num];
        printf("Name: %d, Amount: %.2f, Index: %d\n", m.name, m.amount, m.index);
    } else {
        printf("Invalid index!\n");
    }
}

void delet_num(MoneyList *ml, int _num) {
    if (_num >= 0 && _num < ml->size) {
        for (int i = _num + 1; i < ml->size; i++) {
            ml->arr[i].index--;
            ml->arr[i - 1] = ml->arr[i];
        }
        ml->size--;
    } else {
        printf("Invalid index!\n");
    }
}

void sort_by_amount(MoneyList *ml) {
    for (int i = 0; i < ml->size - 1; i++) {
        for (int j = 0; j < ml->size - i - 1; j++) {
            if (ml->arr[j].amount > ml->arr[j + 1].amount) {
                Money temp = ml->arr[j];
                ml->arr[j] = ml->arr[j + 1];
                ml->arr[j + 1] = temp;
            }
        }
    }
}

这个程序使用了一个结构体数组arr来存储人名、金额和序号,使用size变量来记录数组中已存储的元素个数。Find_num函数根据给定的序号查找对应的内容,并打印出来;delet_num函数根据给定的序号删除对应的内容,并维护好序号;sort_by_amount函数根据金额对内容进行排序

# C语言作业做一个小程序用结构体数组去存储一些结构体结构体内容是人名枚举类型金额浮点数序号整形序号即为数组索引。写几个函数利用指针去查找对应的内容增加内容删除内容根据金额进行排序内容。存储就用一个大数组就可以不需要动态内存分配增删需要维护好序号比如增加一个序号4需要插入到3号后面原来的4号变成5号。函数示例:void Find_nummoney_list mlint _num;void dele

原文地址: https://www.cveoy.top/t/topic/ilVS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录