2301_82307990 2023-12-29 14:38 采纳率: 50%
浏览 4
已结题

求解C语言(结构和链表)

查找书籍:用链表输入4本书的名称、作者、定价,并存入结构数组中,从中查找定价最高和最低的书的名称、作者、定价并输出。试编写程序。

  • 写回答

2条回答 默认 最新

  • kinghero123456 2023-12-29 14:45
    关注
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    // 定义书籍结构体
    struct Book {
        char title[100];
        char author[100];
        float price;
        struct Book* next;
    };
    
    // 函数声明
    void addBook(struct Book** head, const char* title, const char* author, float price);
    void findMinMaxPrice(struct Book* head, struct Book** maxBook, struct Book** minBook);
    void printBookInfo(const char* label, struct Book* book);
    
    int main() {
        struct Book* head = NULL;
    
        // 输入4本书的信息
        for (int i = 0; i < 4; ++i) {
            char title[100], author[100];
            float price;
    
            printf("请输入第%d本书的信息:\n", i + 1);
            printf("书名: ");
            scanf("%s", title);
            printf("作者: ");
            scanf("%s", author);
            printf("定价: ");
            scanf("%f", &price);
    
            addBook(&head, title, author, price);
        }
    
        // 查找定价最高和最低的书
        struct Book* maxBook = NULL;
        struct Book* minBook = NULL;
        findMinMaxPrice(head, &maxBook, &minBook);
    
        // 输出结果
        printf("\n定价最高的书:\n");
        printBookInfo("书名", maxBook);
        printBookInfo("作者", maxBook);
        printBookInfo("定价", maxBook);
    
        printf("\n定价最低的书:\n");
        printBookInfo("书名", minBook);
        printBookInfo("作者", minBook);
        printBookInfo("定价", minBook);
    
        // 释放链表内存
        struct Book* current = head;
        while (current != NULL) {
            struct Book* next = current->next;
            free(current);
            current = next;
        }
    
        return 0;
    }
    
    // 添加书籍到链表
    void addBook(struct Book** head, const char* title, const char* author, float price) {
        struct Book* newBook = (struct Book*)malloc(sizeof(struct Book));
        strcpy(newBook->title, title);
        strcpy(newBook->author, author);
        newBook->price = price;
        newBook->next = *head;
        *head = newBook;
    }
    
    // 查找定价最高和最低的书
    void findMinMaxPrice(struct Book* head, struct Book** maxBook, struct Book** minBook) {
        struct Book* current = head;
    
        if (current == NULL) {
            return; // 空链表
        }
    
        *maxBook = current;
        *minBook = current;
    
        while (current != NULL) {
            if (current->price > (*maxBook)->price) {
                *maxBook = current;
            }
            if (current->price < (*minBook)->price) {
                *minBook = current;
            }
            current = current->next;
        }
    }
    
    // 输出书籍信息
    void printBookInfo(const char* label, struct Book* book) {
        printf("%s: %s\n", label, (label == "书名") ? book->title : ((label == "作者") ? book->author : ""));
        if (label == "定价") {
            printf("%.2f\n", book->price);
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月6日
  • 已采纳回答 12月29日
  • 创建了问题 12月29日

悬赏问题

  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 Ubuntu开机显示器只显示kernel,是没操作系统(相关搜索:显卡驱动)
  • ¥15 VB.NET如何绘制倾斜的椭圆
  • ¥15 在rhel8中安装qemu-kvm时遇到“cannot initialize crypto:unable to initialize gcrypt“报错”
  • ¥15 arbotix没有/cmd_vel话题
  • ¥20 找能定制Python脚本的
  • ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据
  • ¥15 用C语言怎么判断字符串的输入是否符合设定?
  • ¥15 通信专业本科生论文选这两个哪个方向好研究呀