另外定义一个struct book stu1[]来储存排序后的数据,并不改变原数据,基于此重新写这个代码
时间: 2024-03-15 15:46:24 浏览: 50
好的,以下是根据您的要求重新编写的代码:
```c
#include <stdio.h>
#include <string.h>
struct book {
char name[50];
float price;
};
int main() {
int i, j, n;
struct book temp;
printf("Enter the number of books you want to sort: ");
scanf("%d", &n);
struct book books[n], sorted_books[n];
printf("Enter book names and prices:\n");
for (i = 0; i < n; i++) {
printf("Book %d:\n", i+1);
scanf("%s %f", books[i].name, &books[i].price);
}
// copy original array to sorted array
memcpy(sorted_books, books, sizeof(struct book) * n);
// bubble sort
for (i = 0; i < n-1; i++) {
for (j = 0; j < n-i-1; j++) {
if (sorted_books[j].price > sorted_books[j+1].price) {
temp = sorted_books[j];
sorted_books[j] = sorted_books[j+1];
sorted_books[j+1] = temp;
}
}
}
printf("\nOriginal array:\n");
for (i = 0; i < n; i++) {
printf("%s %.2f\n", books[i].name, books[i].price);
}
printf("\nSorted array:\n");
for (i = 0; i < n; i++) {
printf("%s %.2f\n", sorted_books[i].name, sorted_books[i].price);
}
return 0;
}
```
在这个代码中,我们定义了一个新的 `struct book sorted_books[]` 数组来储存排序后的数据,使用了 `memcpy` 函数将原始数据复制到新数组中,然后在新数组上进行排序,最后输出原数组和排序后的数组。
阅读全文