如何使用C语言定义并实现一个有序图书信息结构体,包括书号、书名和价格字段?接着,请指导如何从用户输入中读取相关数据来填充这个结构体数组,以及如何对该数组按书号进行排序并逐行打印出排序后的每本书详细信息?
时间: 2024-10-15 10:15:35 浏览: 29
首先,在C语言中,你可以使用下面这种方式定义一个有序图书信息的结构体:
```c
typedef struct {
int book_id; // 书号
char title[100]; // 书名
float price; // 价格
} BookInfo;
```
接下来,为了从用户输入中读取数据并填充结构体数组,可以这样做:
```c
BookInfo books[100]; // 假设最多有100本书
// 读取用户输入并填充结构体
for (int i = 0; i < sizeof(books) / sizeof(BookInfo); i++) {
printf("请输入第%d本书的信息:\n", i + 1);
scanf("%d", &books[i].book_id);
fgets(books[i].title, sizeof(books[i].title), stdin); // 注意fgets处理换行符
books[i].price = (float)scanf("%f", &books[i].price);
}
```
对于排序,我们可以选择冒泡排序或者快速排序等算法,这里我们简化一下,假设数组较小,可以使用标准库提供的qsort函数:
```c
#include <stdlib.h>
#include <string.h>
// 比较函数,用于排序
int compare(const void *a, const void *b) {
return ((const BookInfo *)a)->book_id - ((const BookInfo *)b)->book_id;
}
// 排序数组
void sortBooks(BookInfo *books, int n) {
qsort(books, n, sizeof(BookInfo), compare);
}
// 打印排序后的书信息
void printBooks(BookInfo *books, int n) {
for (int i = 0; i < n; i++) {
printf("书号:%d, 书名:%s, 价格:%f\n",
books[i].book_id, books[i].title, books[i].price);
}
}
```
最后,调用排序和打印函数:
```c
sortBooks(books, sizeof(books) / sizeof(BookInfo));
printBooks(books, sizeof(books) / sizeof(BookInfo));
```
阅读全文