#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
typedef struct t_complexe{double real;double imag;}data;
typedef struct t{data c;double m;}complexe;
int partition(int tab[],int left,int right){
int pivot,i;
pivot=tab[right];
for(i=left;i<right;i++){if(tab[i]<=pivot){
int p;
p=tab[i];
tab[i]=tab[left];
tab[left]=p;
left++;}
}
int h;
h=tab[left];
tab[left]=tab[right];
tab[right]=h;
return left;
}
int quicksort(int t[],int l,int r){
int ic;
if (l<r)
{ic=partition(t,l,r);
quicksort(t,l,ic-1);
quicksort(t,ic+1,r);}
return 0;
}
double module (data z){
double c=(z.real*z.real)+(z.imag*z.imag);
double s=sqrt(c);
return s;
}
int main(void){
complexe tab[20];
int i;
srand(time(NULL));
for(i=0;i<20;i++)tab[i].c.real=rand()/(RAND_MAX+1.0);
for(i=0;i<20;i++)tab[i].c.imag=rand()/(RAND_MAX+1.0);
for(i=0;i<20;i++)tab[i].m=module(tab[i].c);
quicksort(tab,0,19);
for(i=0;i<20;i++)printf("%lf\t%lf\t%lf\n",tab[i].c.real,tab[i].c.imag,tab[i].m);
return 0;
}
我写的程序,c语言的,刚刚开始学,不过好像不太对,呜呜,估计大概问题在主函数的这一行quicksort(tab,0,19);我想做的是通过这个程序输入复数的实部和虚部,计算它们的模,然后对模排序并显示相应的实部和虚部,刚刚开始学,程序编的很乱,这才是第二节课的内容,c语言好难,请求帮忙啊,谢谢啦
是不是我没听太懂啊,我试了,照你说的该还是不行的啊,能详细点儿不,谢谢啦
追答顶一下 king121314 的答案,编译没问题,但是排序结果貌似不对,不过这应该是你自己处理的逻辑错误了。话说第二节课做这么复杂的程序不容易呀!