定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据完成图书信息表的创建,然后将图书按照价格降序排序,逐行输出排序后每本图书的信息。
时间: 2023-05-31 08:18:06 浏览: 425
### 回答1:
可以使用以下代码实现:
```python
class Book:
def __init__(self, book_id, book_name, price):
self.book_id = book_id
self.book_name = book_name
self.price = price
def __str__(self):
return f"{self.book_id}\t{self.book_name}\t{self.price}"
def sort_books_by_price_desc(books):
return sorted(books, key=lambda x: x.price, reverse=True)
if __name__ == '__main__':
books = []
while True:
book_id = input("请输入书号:")
if not book_id:
break
book_name = input("请输入书名:")
price = float(input("请输入价格:"))
book = Book(book_id, book_name, price)
books.append(book)
sorted_books = sort_books_by_price_desc(books)
for book in sorted_books:
print(book)
```
首先定义了一个 `Book` 类来表示图书信息,包含书号、书名、价格三个属性。然后定义了一个 `sort_books_by_price_desc` 函数来按照价格降序排序图书列表。最后在 `main` 函数中读入图书信息,创建图书列表,然后调用 `sort_books_by_price_desc` 函数进行排序,最后逐行输出排序后的图书信息。
### 回答2:
顺序表是一种经典的数据结构,其特点是空间大小固定,而且操作效率很高。定义一个包含图书信息(书号、书名、价格)的顺序表,可以使用数组来实现。
下面是实现此功能的代码:
```python
class Book:
def __init__(self, num, name, price):
self.num = num
self.name = name
self.price = price
def create_book_list():
n = int(input("请输入图书数量:"))
book_list = [0] * n
for i in range(n):
num = input("请输入第%d本书的编号:" % (i+1))
name = input("请输入第%d本书的名称:" % (i+1))
price = float(input("请输入第%d本书的价格:" % (i+1)))
book_list[i] = Book(num, name, price)
return book_list
def sort_book_list(book_list):
n = len(book_list)
for i in range(n-1):
for j in range(n-i-1):
if book_list[j].price < book_list[j+1].price:
book_list[j], book_list[j+1] = book_list[j+1], book_list[j]
def print_book_list(book_list):
for book in book_list:
print("%s, %s, %.2f" % (book.num, book.name, book.price))
if __name__ == '__main__':
book_list = create_book_list()
sort_book_list(book_list)
print_book_list(book_list)
```
首先,我们定义一个`Book`类来表示单本图书,其中包含三个属性:书号、书名和价格。然后,我们定义一个`create_book_list`函数来读入图书数据,创建图书信息表,并返回该表。在该函数中,我们首先读入图书数量`n`,然后定义长度为`n`的数组`book_list`来存储图书信息。接着,我们使用`for`循环逐个读入每本图书的编号、名称和价格,并创建`Book`对象,并将其存储在`book_list`数组中。最后,我们返回`book_list`数组作为函数返回值。
接下来,我们定义一个`sort_book_list`函数来对图书信息表按照价格进行降序排序。在该函数中,我们使用两层循环来实现冒泡排序算法。由于我们要进行降序排序,因此如果前一本书的价格小于后一本书的价格,则交换它们的位置。最终,`book_list`数组中的元素将按照价格降序排列。
最后,我们定义一个`print_book_list`函数来逐行输出排序后每本图书的信息。在该函数中,我们使用`for`循环逐个访问`book_list`数组中的元素,并使用`print`函数将其书号、名称和价格按照规定的格式输出。
在主程序中,我们先调用`create_book_list`函数来读入图书数据,创建图书信息表,并将其存储在`book_list`数组中。然后,我们调用`sort_book_list`函数来对`book_list`数组按照价格进行降序排序。最后,我们调用`print_book_list`函数逐行输出排序后每本图书的信息。
使用以上代码实现图书信息表的创建和按照价格进行降序排序,可以轻易地实现相应的功能,有利于提高书籍整理和管理的效率。
### 回答3:
首先需要定义一个包含图书信息的结构体,包含书号、书名和价格三个属性:
```
typedef struct Book {
int bookNo;
char bookName[50];
double price;
} Book;
```
然后定义一个顺序表结构体,用来存储所有的图书信息:
```
#define MAX_SIZE 100
typedef struct SeqList {
Book data[MAX_SIZE];
int length;
} SeqList;
```
接下来就可以读取输入的图书信息,创建顺序表并存储所有的图书数据:
```
SeqList createSeqList() {
SeqList list;
printf("请输入图书数量:");
scanf("%d", &list.length);
for (int i = 0; i < list.length; i++) {
Book book;
printf("请输入第%d本图书信息:\n书号:", i + 1);
scanf("%d", &book.bookNo);
printf("书名:");
scanf("%s", book.bookName);
printf("价格:");
scanf("%lf", &book.price);
list.data[i] = book;
}
return list;
}
```
最后根据图书的价格进行降序排序,然后逐行输出每本图书的信息:
```
void sortSeqList(SeqList* list) {
for (int i = 0; i < list->length - 1; i++) {
for (int j = 0; j < list->length - 1 - i; j++) {
if (list->data[j].price < list->data[j+1].price) {
Book temp = list->data[j];
list->data[j] = list->data[j+1];
list->data[j+1] = temp;
}
}
}
}
void printSeqList(SeqList list) {
printf("书号\t书名\t价格\n");
for (int i = 0; i < list.length; i++) {
printf("%d\t%s\t%.2lf\n", list.data[i].bookNo, list.data[i].bookName, list.data[i].price);
}
}
int main() {
SeqList list = createSeqList();
sortSeqList(&list);
printSeqList(list);
return 0;
}
```
这样就可以按照价格降序排列并逐行输出每本图书的信息了。
阅读全文