运用动态存储完成下列问题:问题描述定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据来完成图书信息表的创建。然后,统计图书表中的图书个数,同时逐行输出每本书的信息。输入要求输入n+1行,其中前n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后,第n+1行是输入结束标志:0 0 0(空格分隔的三个0)。其中,书号和书名为字符串类型,价格为浮点数类型。输出要求总计n+1行,第1行是所创建的图书信息表中的图书个数,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔。其中,价格输出保留两位小数。
时间: 2023-05-19 21:03:02 浏览: 938
ChatGPT: 你可以使用动态存储来完成这个问题。首先,你需要定义一个结构体来存储图书信息,包括书号、书名和价格。然后,你可以使用动态数组来存储这些结构体,每次读入一本书的信息,就将其添加到动态数组中。当读入结束标志时,统计动态数组中的元素个数,并逐行输出每本书的信息,包括书号、书名和价格(保留两位小数)。
以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_BOOKS 100
struct Book {
char id[20];
char name[50];
float price;
};
int main() {
struct Book *books = malloc(sizeof(struct Book) * MAX_BOOKS);
int count = 0;
while (1) {
char id[20], name[50];
float price;
scanf("%s %s %f", id, name, &price);
if (strcmp(id, "0") == 0 && strcmp(name, "0") == 0 && price == 0) {
break;
}
strcpy(books[count].id, id);
strcpy(books[count].name, name);
books[count].price = price;
count++;
}
printf("%d\n", count);
for (int i = 0; i < count; i++) {
printf("%s %s %.2f\n", books[i].id, books[i].name, books[i].price);
}
free(books);
return 0;
}
```
阅读全文