用户从键盘依次输入6种农副产品的信息,编写程序按照销售额由小到大的顺序输出各个农副产品的信息。要求: (1)定义农副产品信息的结构体fruitinfo,包括产品编号(正整数),产品名称(由不含空格的26个英文字母的大小写构成,不超过20个字符)、销量及单价,其中销量和单价是浮点数; (2)定义void set( struct fruitinfo *t )函数,用来输入一种农副产品的数据; (3)定义void print( struct fruitinfo *t )函数,用来输出一种农副产品的数据(其中浮点数保留小数点后2位); (4)定义void sortfruit( struct fruitinfo *t )函数,用来对所有农副产品按照销售额(销售额等于单价乘以销量)从小到大排序(销售额相同时保持原来顺序); (5)在主函数中调用set、sortfruit和print函数。 示例输入 1001 Apple 300.5 2.0 1002 Banana 100.5 3.5 1003 Lemon 205.2 2.5 1004 cherry 70.65 16.2 1005 grape 500.62 6.6 1006 orange 10000.2 5.15 示例输出(各数据项用英文空格隔开,数值数据保留两位小数,每行最后一个数据项没有空格) 1002 Banana 100.50 3.50 1003 Lemon 205.20 2.50 1001 Apple 300.50 2.00 1004 cherry 70.65 16.20 1005 grape 500.62 6.60 1006 orange 10000.20 5.15 c语言
时间: 2023-06-27 08:03:38 浏览: 132
```c
#include <stdio.h>
#include <string.h>
struct fruitinfo {
int id;
char name[21];
double sales;
double price;
};
// 输入一种农副产品的数据
void set(struct fruitinfo *t) {
scanf("%d %s %lf %lf", &t->id, t->name, &t->sales, &t->price);
}
// 输出一种农副产品的数据
void print(struct fruitinfo *t) {
printf("%d %s %.2lf %.2lf\n", t->id, t->name, t->sales, t->price);
}
// 比较函数,用于排序
int cmp(const void *a, const void *b) {
struct fruitinfo *x = (struct fruitinfo *)a;
struct fruitinfo *y = (struct fruitinfo *)b;
double sale_x = x->sales * x->price;
double sale_y = y->sales * y->price;
if (sale_x == sale_y) {
return x->id - y->id; // 销售额相同时保持原来顺序
} else if (sale_x < sale_y) {
return -1;
} else {
return 1;
}
}
// 对所有农副产品按照销售额从小到大排序
void sortfruit(struct fruitinfo *t, int n) {
qsort(t, n, sizeof(struct fruitinfo), cmp);
}
int main() {
struct fruitinfo fruits[6];
for (int i = 0; i < 6; i++) {
set(&fruits[i]);
}
sortfruit(fruits, 6);
for (int i = 0; i < 6; i++) {
print(&fruits[i]);
}
return 0;
}
```
阅读全文