2501_90304307 2025-10-27 14:38 采纳率: 0%
浏览 15

基于顺序(链式)存储结构的图书信息表的创建和输出

  1. 基于顺序(链式)存储结构的图书信息表的创建和输出
    问题描述
    定义一个包含图书信息(书号、书名、价格)的顺序表(链表),读入相应的
    图书数据来完成图书信息表的创建。然后,统计图书表中的图书个数,同时逐行
    输出每本图书的信息。
    输入要求
    输入 n+1 行,其中前 n 行是 n 本图书的信息(书号、书名、价格),每本图书
    信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第 n+1
    行是输入结束标志:0 0 0(空格分隔的三个 0)。其中,书号和书名为字符串类型,
    价格为浮点数类型。
    输出要求
    总计 n+1 行,第 1 行是所创建的图书信息表中的图书个数,后 n 行是 n 本图
    书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格
    分隔。其中,价格输出保留两位小数。
    输入样例
    9787302257646 程序设计基础 25.00
    9787302164340 程序设计基础(第 2 版) 20.00
    2
    9787302219972 单片机技术及应用 32.00
    9787302203513 单片机原理与应用技术 26.00
    9787810827430 工业计算机控制技术--原理与应用 29.00
    9787811234923 汇编语言程序设计教程 21.00
    0 0 0
    输出样例
    6
    9787302257646 程序设计基础 25.00
    9787302164340 程序设计基础(第 2 版) 20.00
    9787302219972 单片机技术及应用 32.00
    9787302203513 单片机原理与应用技术 26.00
    9787810827430 工业计算机控制技术--原理与应用 29.00
    9787811234923 汇编语言程序设计教程 21.00
  2. 基于顺序(链式)存储结构的图书信息表的修改
    问题描述
    首先,定义一个包含图书信息(书号、书名、价格)的顺序表(链表),读入
    相应的图书数据完成图信息表的创建。然后,计算所有图书的平均价格,将所有
    低于平均价格的图书价格提高 20%,所有高于或等于平均价格的图书价格提高
    10%。最后,逐行输出价格修改后的图书信息。
    输入要求
    输入 n+1 行,其中前 n 行是 n 本图书的信息(书号、书名、价格),每本图书
    信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第 n+1
    行是输入结束标志:0 0 0(空格分隔的三个 0)。其中,书号和书名为字符串类型,
    价格为浮点数类型。
    输出要求
    3
    总计 n+2 行,第 1 行是修改前所有图书的平均价格,第 2 行是所创建的图书信
    息表中的图书个数,后 n 行是价格修改后 n 本图书的信息(书号、书名、价格)、
    每本图书信息占一行,书号、书名、价格用空格分隔。其中,价格输出保留两位
    小数。
    输入样例
    9787302257646 程序设计基础 25.00
    9787302164340 程序设计基础(第 2 版) 20.00
    9787302219972 单片机技术及应用 32.00
    9787302203513 单片机原理与应用技术 26.00
    9787810827430 工业计算机控制技术--原理与应用 29.00
    9787811234923 汇编语言程序设计教程 21.00
    0 0 0
    输出样例
  3. 50
    6
    9787302257646 程序设计基础 30.00
    9787302164340 程序设计基础(第 2 版) 24.00
    9787302219972 单片机技术及应用 35.20
    9787302203513 单片机原理与应用技术 28.60
    9787810827430 工业计算机控制技术--原理与应用 31.90
    9787811234923 汇编语言程序设计教程 25.20
  • 写回答

4条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-10-27 14:45
    关注

    让【宝码香车】来帮您解答,本回答参考DeepSeek编写,并整理提供。

    如果答案让您满意,请采纳、点赞、关注,非常感谢!
    .
    每日一句正能量,让它带给您好心情:每天给自己一个希望,试着不为明天烦恼,不为昨天叹息。
    .

    我将为您提供基于顺序存储结构和链式存储结构的两种实现方案。

    基于顺序存储结构的实现

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    #define MAX_SIZE 100
    
    
    typedef struct {
        char isbn[20];
        char name[100];
        double price;
    } Book;
    
    
    typedef struct {
        Book books[MAX_SIZE];
        int length;
    } SqList;
    
    
    void createSqList(SqList *L) {
        L->length = 0;
        char isbn[20], name[100];
        double price;
        
        while (1) {
            scanf("%s", isbn);
            scanf("%s", name);
            scanf("%lf", &price);
            
            if (strcmp(isbn, "0") == 0 && strcmp(name, "0") == 0 && price == 0) {
                break;
            }
            
            strcpy(L->books[L->length].isbn, isbn);
            strcpy(L->books[L->length].name, name);
            L->books[L->length].price = price;
            L->length++;
        }
    }
    
    
    void printSqList(SqList L) {
        printf("%d\n", L.length);
        for (int i = 0; i < L.length; i++) {
            printf("%s %s %.2f\n", L.books[i].isbn, L.books[i].name, L.books[i].price);
        }
    }
    
    
    void modifyPrices(SqList *L) {
        double sum = 0;
        for (int i = 0; i < L->length; i++) {
            sum += L->books[i].price;
        }
        double avg = sum / L->length;
        printf("%.2f\n", avg);
        
        for (int i = 0; i < L->length; i++) {
            if (L->books[i].price < avg) {
                L->books[i].price *= 1.2;
            } else {
                L->books[i].price *= 1.1;
            }
        }
    }
    
    
    int main() {
        SqList L;
        createSqList(&L);
        printSqList(L);
        
        // 修改价格版本
        // modifyPrices(&L);
        // printf("%d\n", L.length);
        // for (int i = 0; i < L.length; i++) {
        //     printf("%s %s %.2f\n", L.books[i].isbn, L.books[i].name, L.books[i].price);
        // }
        
        return 0;
    }
    

    基于链式存储结构的实现

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    typedef struct BookNode {
        char isbn[20];
        char name[100];
        double price;
        struct BookNode *next;
    } BookNode, *LinkList;
    
    
    void createLinkList(LinkList *L) {
        *L = (LinkList)malloc(sizeof(BookNode));
        (*L)->next = NULL;
        BookNode *p, *r = *L;
        
        char isbn[20], name[100];
        double price;
        int count = 0;
        
        while (1) {
            scanf("%s", isbn);
            scanf("%s", name);
            scanf("%lf", &price);
            
            if (strcmp(isbn, "0") == 0 && strcmp(name, "0") == 0 && price == 0) {
                break;
            }
            
            p = (BookNode*)malloc(sizeof(BookNode));
            strcpy(p->isbn, isbn);
            strcpy(p->name, name);
            p->price = price;
            p->next = NULL;
            
            r->next = p;
            r = p;
            count++;
        }
    }
    
    
    void printLinkList(LinkList L) {
        BookNode *p = L->next;
        int count = 0;
        
        // 先统计个数
        while (p != NULL) {
            count++;
            p = p->next;
        }
        printf("%d\n", count);
        
        // 再输出信息
        p = L->next;
        while (p != NULL) {
            printf("%s %s %.2f\n", p->isbn, p->name, p->price);
            p = p->next;
        }
    }
    
    
    void modifyPricesLinkList(LinkList L) {
        BookNode *p = L->next;
        double sum = 0;
        int count = 0;
        
        // 计算平均价格
        while (p != NULL) {
            sum += p->price;
            count++;
            p = p->next;
        }
        double avg = sum / count;
        printf("%.2f\n", avg);
        
        // 修改价格
        p = L->next;
        while (p != NULL) {
            if (p->price < avg) {
                p->price *= 1.2;
            } else {
                p->price *= 1.1;
            }
            p = p->next;
        }
        
        printf("%d\n", count);
        p = L->next;
        while (p != NULL) {
            printf("%s %s %.2f\n", p->isbn, p->name, p->price);
            p = p->next;
        }
    }
    
    
    int main() {
        LinkList L;
        createLinkList(&L);
        printLinkList(L);
        
        // 修改价格版本
        // modifyPricesLinkList(L);
        
        return 0;
    }
    

    使用说明

    1. 顺序存储结构版本
    • 使用数组存储图书信息
    • 适合数据量较小的情况
    • 访问速度快,但插入删除效率低
    1. 链式存储结构版本
    • 使用链表存储图书信息
    • 适合数据量较大或频繁插入删除的情况
    • 插入删除效率高,但访问速度相对较慢
    1. 编译运行
    gcc -o book_management book_management.c
    ./book_management
    
    1. 输入格式
    • 每行包含:书号 书名 价格
    • 以"0 0 0"结束输入
    • 价格保留两位小数输出

    两个版本都实现了题目要求的功能,您可以根据具体需求选择合适的存储结构。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月27日