- 基于顺序(链式)存储结构的图书信息表的创建和输出
问题描述
定义一个包含图书信息(书号、书名、价格)的顺序表(链表),读入相应的
图书数据来完成图书信息表的创建。然后,统计图书表中的图书个数,同时逐行
输出每本图书的信息。
输入要求
输入 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 - 基于顺序(链式)存储结构的图书信息表的修改
问题描述
首先,定义一个包含图书信息(书号、书名、价格)的顺序表(链表),读入
相应的图书数据完成图信息表的创建。然后,计算所有图书的平均价格,将所有
低于平均价格的图书价格提高 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
输出样例 - 50
6
9787302257646 程序设计基础 30.00
9787302164340 程序设计基础(第 2 版) 24.00
9787302219972 单片机技术及应用 35.20
9787302203513 单片机原理与应用技术 28.60
9787810827430 工业计算机控制技术--原理与应用 31.90
9787811234923 汇编语言程序设计教程 25.20
基于顺序(链式)存储结构的图书信息表的创建和输出
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
关注让【宝码香车】来帮您解答,本回答参考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; }使用说明
- 顺序存储结构版本:
- 使用数组存储图书信息
- 适合数据量较小的情况
- 访问速度快,但插入删除效率低
- 链式存储结构版本:
- 使用链表存储图书信息
- 适合数据量较大或频繁插入删除的情况
- 插入删除效率高,但访问速度相对较慢
- 编译运行:
gcc -o book_management book_management.c ./book_management- 输入格式:
- 每行包含:书号 书名 价格
- 以"0 0 0"结束输入
- 价格保留两位小数输出
两个版本都实现了题目要求的功能,您可以根据具体需求选择合适的存储结构。
解决 无用评论 打赏 举报