C语言代码定义一个包含图书信息(书号、书名、价格)的顺序表,包括以下10项常用的基本操作:图书信息表的创建和输出、排序、修改、逆序存储、最贵图书的查找、最爱图书的查找、最佳位置图书的查找、新图书的入库、旧图书的出库、图书去重。
时间: 2024-09-13 15:10:39 浏览: 334
在C语言中,可以通过结构体来定义图书信息,然后使用数组来创建顺序表。顺序表是一种线性表,其元素在内存中是连续存放的。以下是如何定义图书信息结构体和实现所需的基本操作的概要说明:
1. 定义图书信息结构体:
```c
typedef struct Book {
int book_id; // 书号
char book_name[50]; // 书名
float price; // 价格
} Book;
```
2. 创建图书信息表:
```c
#define MAX_BOOKS 100 // 最大图书数量
Book library[MAX_BOOKS]; // 图书信息顺序表
int book_count = 0; // 当前图书数量
```
3. 输出图书信息表:
```c
void printLibrary() {
for(int i = 0; i < book_count; i++) {
printf("书号:%d, 书名:%s, 价格:%.2f\n", library[i].book_id, library[i].book_name, library[i].price);
}
}
```
4. 排序图书信息表:
```c
// 使用冒泡排序按价格升序排序
void sortBooksByPrice() {
for(int i = 0; i < book_count - 1; i++) {
for(int j = 0; j < book_count - 1 - i; j++) {
if(library[j].price > library[j + 1].price) {
Book temp = library[j];
library[j] = library[j + 1];
library[j + 1] = temp;
}
}
}
}
```
5. 修改图书信息:
```c
void updateBookInfo(int book_id, const char* new_name, float new_price) {
for(int i = 0; i < book_count; i++) {
if(library[i].book_id == book_id) {
strncpy(library[i].book_name, new_name, sizeof(library[i].book_name));
library[i].price = new_price;
return;
}
}
}
```
6. 逆序存储图书信息表:
```c
void reverseLibrary() {
for(int i = 0; i < book_count / 2; i++) {
Book temp = library[i];
library[i] = library[book_count - 1 - i];
library[book_count - 1 - i] = temp;
}
}
```
7. 查找最贵的图书:
```c
Book findMostExpensiveBook() {
Book most_expensive = library[0];
for(int i = 1; i < book_count; i++) {
if(library[i].price > most_expensive.price) {
most_expensive = library[i];
}
}
return most_expensive;
}
```
8. 查找最爱图书(这里假设最爱图书是被借阅次数最多的图书,需要添加借阅次数字段):
```c
Book findMostFavoriteBook() {
// 此处省略具体实现,需要添加借阅次数字段和逻辑
}
```
9. 查找最佳位置的图书(这里假设最佳位置是指价格与平均价格最接近的图书):
```c
Book findBestPositionBook() {
// 此处省略具体实现,需要计算平均价格并找出差异最小的图书
}
```
10. 新图书入库:
```c
void addNewBook(Book new_book) {
if(book_count < MAX_BOOKS) {
library[book_count++] = new_book;
} else {
printf("图书馆已满,无法添加新图书。\n");
}
}
```
11. 旧图书出库:
```c
void removeBook(int book_id) {
int index = -1;
for(int i = 0; i < book_count; i++) {
if(library[i].book_id == book_id) {
index = i;
break;
}
}
if(index != -1) {
for(int i = index; i < book_count - 1; i++) {
library[i] = library[i + 1];
}
book_count--;
} else {
printf("未找到指定书号的图书。\n");
}
}
```
12. 图书去重:
```c
void removeDuplicateBooks() {
// 此处省略具体实现,需要比较每本书的信息,去除重复项
}
```
以上代码只是一个简单的框架和概要说明,实际使用时需要完善每个函数的具体实现细节,并进行测试以确保其正确性。
阅读全文