图书信息包括:书名、出版社、价格,从book.txt文件中读取5条图书信息,将其按照价格从低到高排序后,输出全部图书信息至bookpaixu.txt中,并在屏幕显示,用C语言结构体进行编写
时间: 2023-08-31 19:37:57 浏览: 135
### 回答1:
以下是C语言结构体实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_BOOKS 5
typedef struct {
char name[50];
char publisher[50];
float price;
} Book;
int main() {
FILE *fp;
int i, j;
Book books[MAX_BOOKS], tmp;
// 从文件中读取图书信息
fp = fopen("book.txt", "r");
if (fp == NULL) {
printf("Failed to open file\n");
return 1;
}
for (i = 0; i < MAX_BOOKS; i++) {
fscanf(fp, "%s %s %f", books[i].name, books[i].publisher, &books[i].price);
}
fclose(fp);
// 按照价格从低到高排序
for (i = 0; i < MAX_BOOKS - 1; i++) {
for (j = i + 1; j < MAX_BOOKS; j++) {
if (books[i].price > books[j].price) {
tmp = books[i];
books[i] = books[j];
books[j] = tmp;
}
}
}
// 输出排序后的图书信息到文件和屏幕
fp = fopen("bookpaixu.txt", "w");
if (fp == NULL) {
printf("Failed to open file\n");
return 1;
}
for (i = 0; i < MAX_BOOKS; i++) {
printf("%s %s %.2f\n", books[i].name, books[i].publisher, books[i].price);
fprintf(fp, "%s %s %.2f\n", books[i].name, books[i].publisher, books[i].price);
}
fclose(fp);
return 0;
}
```
假设book.txt文件中的内容如下:
```
C语言程序设计 印刷工业出版社 32.50
计算机组成原理 高等教育出版社 49.00
数据结构与算法 清华大学出版社 56.80
操作系统概念 机械工业出版社 68.00
计算机网络 哈尔滨工业大学出版社 73.00
```
运行以上代码后,bookpaixu.txt文件中的内容为:
```
C语言程序设计 印刷工业出版社 32.50
计算机组成原理 高等教育出版社 49.00
数据结构与算法 清华大学出版社 56.80
操作系统概念 机械工业出版社 68.00
计算机网络 哈尔滨工业大学出版社 73.00
```
屏幕输出的内容为:
```
C语言程序设计 印刷工业出版社 32.50
计算机组成原理 高等教育出版社 49.00
数据结构与算法 清华大学出版社 56.80
操作系统概念 机械工业出版社 68.00
计算机网络 哈尔滨工业大学出版社 73.00
```
### 回答2:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义图书信息结构体
typedef struct {
char bookName[100];
char publisher[100];
float price;
} Book;
int compare(const void *a, const void *b) {
Book *bookA = (Book *)a;
Book *bookB = (Book *)b;
return (bookA->price - bookB->price);
}
int main() {
// 打开文件
FILE *file = fopen("book.txt", "r");
if (file == NULL) {
printf("无法打开文件。\n");
return 1;
}
// 读取5条图书信息
Book books[5];
for (int i = 0; i < 5; i++) {
fscanf(file, "%s %s %f", books[i].bookName, books[i].publisher, &books[i].price);
}
// 关闭文件
fclose(file);
// 按价格从低到高排序
qsort(books, 5, sizeof(Book), compare);
// 输出结果至文件和屏幕
FILE *outputFile = fopen("bookpaixu.txt", "w");
if (outputFile == NULL) {
printf("无法打开输出文件。\n");
return 1;
}
for (int i = 0; i < 5; i++) {
printf("书名:%s 出版社:%s 价格:%.2f\n", books[i].bookName, books[i].publisher, books[i].price);
fprintf(outputFile, "书名:%s 出版社:%s 价格:%.2f\n", books[i].bookName, books[i].publisher, books[i].price);
}
fclose(outputFile);
return 0;
}
### 回答3:
下面是使用C语言结构体编写的程序来实现将图书信息按照价格从低到高排序,并输出到bookpaixu.txt文件中。同时,程序会在屏幕上显示所有图书信息。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_BOOKS 5
#define MAX_TITLE_LENGTH 100
#define MAX_PUBLISHER_LENGTH 100
typedef struct {
char title[MAX_TITLE_LENGTH];
char publisher[MAX_PUBLISHER_LENGTH];
float price;
} Book;
void swap(Book* book1, Book* book2) {
Book temp = *book1;
*book1 = *book2;
*book2 = temp;
}
int main() {
FILE* inputFile, *outputFile;
Book books[MAX_BOOKS];
int i, j;
// 读取图书数据
inputFile = fopen("book.txt", "r");
if (inputFile == NULL) {
printf("无法打开文件!\n");
return 1;
}
for (i = 0; i < MAX_BOOKS; i++) {
fscanf(inputFile, "%s %s %f", books[i].title, books[i].publisher, &books[i].price);
}
fclose(inputFile);
// 按价格从低到高进行排序
for (i = 0; i < MAX_BOOKS-1; i++) {
for (j = 0; j < MAX_BOOKS-i-1; j++) {
if (books[j].price > books[j+1].price) {
swap(&books[j], &books[j+1]);
}
}
}
// 输出排序后的图书信息
outputFile = fopen("bookpaixu.txt", "w");
if (outputFile == NULL) {
printf("无法创建文件!\n");
return 1;
}
for (i = 0; i < MAX_BOOKS; i++) {
printf("书名:%s,出版社:%s,价格:%f\n", books[i].title, books[i].publisher, books[i].price);
fprintf(outputFile, "%s %s %f\n", books[i].title, books[i].publisher, books[i].price);
}
fclose(outputFile);
return 0;
}
```
请将上述代码复制到一个新的C源代码文件中,并命名为`book_sort.c`。然后创建一个名为`book.txt`的文本文件,将5条图书信息按照以下格式写入该文件中:
```
图书1 出版社1 20.5
图书2 出版社2 18.9
图书3 出版社3 25.0
图书4 出版社4 15.6
图书5 出版社5 22.3
```
运行程序后,它将读取`book.txt`文件中的图书信息,并按照价格从低到高的顺序进行排序。同时,它会在屏幕上显示并输出到一个名为`bookpaixu.txt`的新文件中。
阅读全文