用C语言写出这个代码并且可以运行
时间: 2024-10-18 15:18:02 浏览: 33
以下是一个基于给定需求的 C 语言实现,用于创建并输出图书信息表:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10000
// 定义图书信息结构体
typedef struct {
char no[20]; // 图书ISBN
char name[50]; // 图书名字
float price; // 图书价格
} Book;
// 定义顺序表结构体
typedef struct {
Book *elem; // 存储图书的基地址
int length; // 当前图书个数
} SqList;
// 初始化顺序表
void InitList(SqList *L) {
L->elem = (Book *)malloc(MAXSIZE * sizeof(Book));
if (!L->elem) exit(-1); // 内存分配失败
L->length = 0;
}
// 创建图书信息表
void CreateList(SqList *L) {
char isbn[20], title[50];
float cost;
while (scanf("%s %s %f", isbn, title, &cost) != EOF) {
if (strcmp(isbn, "0") == 0 && strcmp(title, "0") == 0 && cost == 0.0) break;
strcpy(L->elem[L->length].no, isbn);
strcpy(L->elem[L->length].name, title);
L->elem[L->length].price = cost;
L->length++;
}
}
// 输出图书信息表
void PrintList(const SqList *L) {
printf("%d\n", L->length);
for (int i = 0; i < L->length; i++) {
printf("%s %s %.2f\n", L->elem[i].no, L->elem[i].name, L->elem[i].price);
}
}
// 销毁顺序表
void DestroyList(SqList *L) {
free(L->elem);
L->elem = NULL;
L->length = 0;
}
int main() {
SqList L;
InitList(&L);
CreateList(&L);
PrintList(&L);
DestroyList(&L);
return 0;
}
```
### 代码说明
1. **初始化顺序表** (`InitList`):
- 分配内存用于存储图书信息,并将图书数量初始化为0。
2. **创建图书信息表** (`CreateList`):
- 使用 `scanf` 从标准输入读取图书信息,直到遇到输入结束标志 `0 0 0`。
- 将读取到的图书信息存储到顺序表中。
3. **输出图书信息表** (`PrintList`):
- 首先输出图书总数。
- 然后逐行输出每本书的详细信息,格式化价格为两位小数。
4. **销毁顺序表** (`DestroyList`):
- 释放分配的内存,防止内存泄漏。
### 运行示例
假设输入如下:
```
9787302257646 程序设计基础 25.00
9787302164340 程序设计基础(第 2 版) 20.00
9787302219972 单片机技术及应用 32.00
9787302203513 单片机原理与应用技术 26.00
9787810827430 工业计算机控制技术——原理与应用 29.00
9787811234923 汇编语言程序设计教程 21.00
0 0 0
```
输出将会是:
```
6
9787302257646 程序设计基础 25.00
9787302164340 程序设计基础(第 2 版) 20.00
9787302219972 单片机技术及应用 32.00
9787302203513 单片机原理与应用技术 26.00
9787810827430 工业计算机控制技术——原理与应用 29.00
9787811234923 汇编语言程序设计教程 21.00
```
希望这段代码能满足你的需求!如果有任何问题或需要进一步的帮助,请随时告诉我。
阅读全文