2 qq 32650831 qq_32650831 于 2016.02.16 13:05 提问

一道C语言用结构体排序的题目 大神快来帮我理解下人家的代码~~~

描述
小王是公司的仓库管理员,一天,他接到了这样一个任务:从仓库中找出一根钢管。这听起来不算什么,但是这根钢管的要求可真是让他犯难了,要求如下:
1、 这根钢管一定要是仓库中最长的;
2、 这根钢管一定要是最长的钢管中最细的;
3、 这根钢管一定要是符合前两条的钢管中编码最大的(每根钢管都有一个互不相同的编码,越大表示生产日期越近)。
相关的资料到是有,可是,手工从几百份钢管材料中选出符合要求的那根……
要不,还是请你编写个程序来帮他解决这个问题吧。
输入
第一行是一个整数N(N<=10)表示测试数据的组数)
每组测试数据的第一行 有一个整数m(m<=1000),表示仓库中所有钢管的数量,
之后m行,每行三个整数,分别表示一根钢管的长度(以毫米为单位)、直径(以毫米为单位)和编码(一个9位整数)。
输出
对应每组测试数据的输出只有一个9位整数,表示选出的那根钢管的编码,
每个输出占一行
样例输入
2
2
2000 30 123456789
2000 20 987654321
4
3000 50 872198442
3000 45 752498124
2000 60 765128742
3000 45 652278122
样例输出
987654321
752498124

看到一个代码是这样子的:
#include
#include
#include
#include
using namespace std;
struct m
{
int a;//长度
int b;//直径
int c;//编号
} s[1001];
bool cmp1(m x,m y)
{
//长度大到小排序
return x.a>y.a;
}
bool cmp2(m x,m y)
{
//半径小到大排序
return x.b }
bool cmp3(m x,m y)
{
//编码从大到小排序
return x.c>y.c;
}
int main()
{
int N;
scanf("%d",&N);
while(N--)
{
int n;//钢管数量
scanf("%d",&n);
int i,j=0,k=0;
for(i=0; i<n; i++)
scanf("%d%d%d",&s[i].a,&s[i].b,&s[i].c);
sort(s,s+n,cmp1);
for(i=0; i<n; i++)
if(s[i].a==s[0].a)
j++;
sort(s,s+j,cmp2);
for(i=0; i<j; i++)
if(s[i].b==s[0].b)
k++;
sort(s,s+k,cmp3);
printf("%d\n",s[0].c);
memset(s,0,sizeof(s));
}
return 0;
}

然后就是不太理解那个cmp函数那块 bool类型的函数在括号里的m是什么意思呢
不定义bool类型的话,定义成int那结构体还能实现排序吗?

3个回答

qq_20975143
qq_20975143   2016.02.16 13:36
已采纳

m就是定义的结构体类型。不定义bool也可以实现排序,不要求很严谨的话这个返回值类型可以定义成int等。

q3733353520
q3733353520   2016.02.16 13:54

int的话可以用1代表true 0代表false

q3733353520
q3733353520 #define TRUE 1,对于某些编译器的默认选项是没有bool类型的
接近 2 年之前 回复
u011067688
u011067688   2016.02.16 13:22

那个m就是结构体啊,结构体就相当于数据类型和int、bool、char之类的类似
它到底是什么数据类型,在之前定义结构体的时候定义的呀。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!