编写一个函数,把double类型数组中的数据倒序排列。

#函数中使用了指针,编写完后,输出还是没有排序,请懂得人帮我看看,谢谢!
#include <stdio.h>
#define size 5
void rank(double a,int n);
int main()
{
double a[]={2,3,4,0,8} ;
int i;
rank(a,size);
for(i=0;i<size;i++)
printf("%f ",a[i]);
return 0;
}
void rank(double *a,int n)
{
int i,j;
double t;
for(i=0;*(a+i)<*(a+n);i++){
for(j=0;*(a+j)<*(a+n-i-1);j++){
if(*(a+i)>
(a+j)){
t=*(a+i);
(a+j)=(a+i);
*(a+i)=t;
}
}
}
}

img

改成这样就可以了

#include <stdio.h>
#define size 5
void rank(double* a, int n);
int main()
{
    double a[] = { 2,3,4,0,8 };
    int i;
    rank(a, size);
    for (i = 0; i < size; i++)
        printf("%f ", a[i]);
    return 0;
}
void rank(double* a, int n)
{
    int i, j;
    double t;
    for (i = 0; i<n; i++) {
        for (j = 0; j<n; j++) {
            if (*(a + i) > *(a + j)) {
                t = *(a + j);
                *(a + j) = *(a + i);
                *(a + i) = t;
            }
        }
    }
}

img

主要是for循环书写时和交换时的一些处理错误(改正的地方已在代码中标出)
改正如下:

#include <stdio.h>
#define size 5
void rank(double *a,int n);
int main()
{
    double a[]={2,3,4,0,8} ;
    int i;
    rank(a,size);
    for(i=0;i<size;i++)
        printf("%f ",a[i]);
    return 0;
}
void rank(double *a,int n)
{
    int i,j;
    double t;
    for(i = 0;i < n;i++){//改正 1
    for(j = 0;j < n;j++){//改正 2
    if(*(a+i)>*(a+j)){
        t=*(a+j);//改正 2
        *(a+j)=*(a+i);
        *(a+i)=t;
        }
     }    
    }
}

运行结果如图:

img


希望对题主有所帮助,可以的话,帮忙点个采纳!

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632