运用动态存储完成下列问题:问题描述定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据完成图书信息表的创建。然后,根据指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置上。最后,输出新图书入库后所有图书的信息。输入要求总计n+3行。首先,输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。其中,书号和书名为字符串类型,价格为浮点数类型。之后输入第n+2行,内容仅为一个整数,代表待入库的新图书的位置序号。最后,输入第n+3行,内容为新图书的信息,书号、书名、价格用空格分隔。输出要求若插入成功:输出新图书入库后所有图书的信息(书号、书名、价格),总计n+1行,每行是一本图书的信息,书号、书名、价格用空格分隔。其中,价格输出保留两位小数。若插入失败:只输出以下提示:抱歉,入库位置非法!
时间: 2023-05-19 07:02:36 浏览: 118
可以使用动态存储来实现该问题。首先,定义一个结构体Book,包含书号、书名和价格三个成员变量。然后,使用动态存储创建一个包含n个Book结构体的数组books,读入n本图书的信息,将其存储到books数组中。接着,读入待入库的新图书的位置序号和信息,将其插入到books数组中指定的位置上。最后,输出新图书入库后所有图书的信息。
以下是示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char id[20];
char name[50];
float price;
} Book;
int main() {
int n, pos;
scanf("%d", &n);
// 创建动态数组
Book *books = (Book *)malloc(n * sizeof(Book));
// 读入图书信息
for (int i = 0; i < n; i++) {
scanf("%s %s %f", books[i].id, books[i].name, &books[i].price);
}
// 读入待入库的新图书的位置和信息
scanf("%d", &pos);
Book new_book;
scanf("%s %s %f", new_book.id, new_book.name, &new_book.price);
// 插入新图书
if (pos >= 1 && pos <= n + 1) {
// 扩展数组
books = (Book *)realloc(books, (n + 1) * sizeof(Book));
// 后移元素
for (int i = n; i >= pos; i--) {
books[i] = books[i - 1];
}
// 插入新元素
books[pos - 1] = new_book;
n++;
// 输出所有图书信息
for (int i = 0; i < n; i++) {
printf("%s %s %.2f\n", books[i].id, books[i].name, books[i].price);
}
} else {
printf("抱歉,入库位置非法!\n");
}
free(books);
return 0;
}
阅读全文