运用动态存储完成下列问题:问题描述定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据完成图书信息表的创建。然后,将图书按照价格降序排序,逐行输出排序后每本图书的信息。输入要求输入n+1行,前n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后,第n+1行是输入结束标志:0 0 0(空格分隔的三个0)。其中,书号和书名为字符串类型,价格为浮点数类型。输出要求总计n行,每行是一本图书的信息(书号、书名、价格),书号、书名、价格用空格分隔。其中,价格输出保留两位小数。
时间: 2023-05-22 21:04:35 浏览: 168
以下是运用动态存储完成上述问题的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char id[20];
char name[100];
float price;
} Book;
int main() {
int n = 0, i;
Book *book_list = NULL;
char id[20], name[100];
float price;
while (1) {
scanf("%s %s %f", id, name, &price);
if (id[0] == '0')
break;
n++;
book_list = (Book *)realloc(book_list, n * sizeof(Book));
strcpy(book_list[n - 1].id, id);
strcpy(book_list[n - 1].name, name);
book_list[n - 1].price = price;
}
for (i = 0; i < n - 1; i++) {
int j, max_index = i;
for (j = i + 1; j < n; j++) {
if (book_list[j].price > book_list[max_index].price)
max_index = j;
}
Book temp = book_list[i];
book_list[i] = book_list[max_index];
book_list[max_index] = temp;
}
for (i = 0; i < n; i++) {
printf("%s %s %.2f\n", book_list[i].id, book_list[i].name, book_list[i].price);
}
free(book_list);
return 0;
}
```
其中,我们使用了结构体Book来保存每本书的信息,使用realloc函数进行动态内存分配和释放,使用冒泡排序算法按照价格进行降序排序,最后按照要求输出每本书的信息。
阅读全文