用C语言写定义一个包含图书信息(包括,但不限于书号、书名、价格等图书信息)的动态顺序表,读入相应的图书数据,完成图书信息表的创建。然后,统计图书表中的图书个数,同时逐行输出每本书的信息。
时间: 2024-10-22 19:12:58 浏览: 55
在C语言中,我们可以使用结构体定义图书的信息,并结合数组或链表(动态顺序表)来实现这个功能。首先,我们需要创建一个结构体`Book`,存储书号、书名和价格:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义图书信息结构体
typedef struct {
int book_id; // 书号
char title[50]; // 书名
float price; // 价格
} Book;
// 动态顺序列表的头结点
typedef struct ListNode {
Book book;
struct ListNode* next;
} ListNode;
// 动态顺序表函数
ListNode* createList() {
ListNode* head = (ListNode*)malloc(sizeof(ListNode));
head->book.book_id = -1; // 初始化为空
head->next = NULL;
return head;
}
void inputBooks(ListNode** head) {
int n;
printf("请输入图书的数量:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
printf("请输入第%d本图书的书号、书名和价格:\n", i+1);
scanf("%d", &newNode->book.book_id);
fgets(newNode->book.title, sizeof(newNode->book.title), stdin); // 防止输入换行符
newNode->book.price = (float)atof(strtok(newNode->book.title, "\n")); // 读取价格
newNode->next = *head;
*head = newNode;
}
}
void printBooks(ListNode* head) {
ListNode* temp = head;
while (temp != NULL) {
printf("书号:%d, 书名:%s, 价格:%f\n", temp->book.book_id, temp->book.title, temp->book.price);
temp = temp->next;
}
}
int main() {
ListNode* head = createList();
inputBooks(&head);
int num_books = countBooks(head);
printf("图书总数:%d\n", num_books);
printBooks(head);
// 清理内存
while (head != NULL) {
ListNode* temp = head;
head = head->next;
free(temp);
}
return 0;
}
// 统计图书个数的辅助函数
int countBooks(ListNode* head) {
int count = 0;
ListNode* temp = head;
while (temp != NULL) {
count++;
temp = temp->next;
}
return count;
}
```
这个程序首先创建了一个动态顺序表,然后通过用户输入获取图书信息并添加到表中。最后,它打印出所有图书信息以及总书籍数量。在`main`函数结束时,记得释放动态分配的内存。
阅读全文