c语言书籍排序 多数组协同排序 按价格排序【书名同步】 带有空格的字符串读取
题目:
编写程序,从键盘输入 n (n<10)本书的名称和定价并存入结构数组中,按单价从小到大排序并输出排序后的书籍信息。
输入输出示例:括号内为说明,无需输入输出
输入样例:
3 (n=3)
Programming in C
21.5
Programming in VB
18.5
Programming in Delphi
20
输出样例:
Programming in VB 18.5
Programming in Delphi 20.0
Programming in C 21.5
代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h> // 包含 string.h 头文件以使用 strcspn 函数
#define N 1000 // 图书数组可能达到的最大长度
typedef struct tagbook {
char name[50]; // 图书名字
double price; // 图书价格
} Book;
//选择排序函数
void Sort(Book *L, int n) {
int i, j;
Book temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (L[j].price > L[j + 1].price) { // 升序排序,如果需要降序则改为 >
temp = L[j];
L[j] = L[j + 1];
L[j + 1] = temp;
}
}
}
}
/* 打印图书数组 */
void PrintBooks(Book *books, int size) {
for (int i = 0; i < size; i++) {
printf("%s %.1f\n", books[i].name, books[i].price);
}
}
int main() {
int n;
scanf("%d", &n); // 读取图书数量
getchar(); // 消耗掉后面的换行符
Book books[N]; // 创建图书数组
for (int i = 0; i < n; i++) {
fgets(books[i].name, 50, stdin); // 使用fgets读取包含空格的书名,限制长度为49
books[i].name[strcspn(books[i].name, "\n")] = 0; // 去除fgets读取的换行符
scanf("%lf", &books[i].price); // 读取价格
getchar(); // 消耗掉价格后面的换行符
}
Sort(books, n); // 对图书数组进行排序
PrintBooks(books, n); // 打印排序后的图书数组
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了