/*
* Main1009.cpp
*
* Created on: 2012-3-11
* Author: hxy
*/
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
struct s{
double r;
int a;
int b;
}st[1005];
int cmp(const void *a, const void *b){
if((*(s*)a).r > (*(s*)b).r)
return -1;
else if((*(s*)a).r < (*(s*)b).r)
return 1;
else
return 0;
}
int main() {
int m, n, i;
double max;
while (scanf("%d%d",&m,&n)) {
max=0;
for (i = 0; i < n; i++) {
cin>>st[i].a>>st[i].b;
st[i].r=(double)st[i].a/st[i].b;
}
qsort(st, n, sizeof(s[0]), cmp);
for(i=0; i<n; i++){
printf("%.4lf\t%d\t%d\n", st[i].r,st[i].a,st[i].b);
}
printf("---------\n");
}
return 0;
}
你com函数的问题,你应该返回一个BOOL类型的值,我不知道-1 怎么解释,你该成这样,如果程序没有其它问题,应该可以。
bool cmp(const void *a, const void *b){
return (*(s*)a).r >(*(s*)b).r;
}
小朋友,两个树比较大小,有三种结果,小于,大于,等于。所以不要那么写代码,也可以去看看
std::qsort的实现。
int cmp(const void *a, const void *b){
if( (*(s*)a).r< (*(s*)b.r).r ) return -1;
else if( (*(s*)a).r == (*(s*)b).r ) return 0;
else return 1;
}
qsort(st, n, sizeof(s[0]), cmp); ——> qsort(st, n, sizeof(st[0]), cmp);
如果不是这个问题,难道是double精度的问题? double值,比较大小,一般不能直接比较的。
abs(double1-double2)<0.000001 means equal
好像还是不行,不过还是谢谢你了。。
浮点类型不是不能直接比较,而是不能判定是否相等,判定大小是没有问题的。