编程,在主函数中输入10个最长不超过20个字符的字符串,用另一个函数完成对这10个字符串降序排序,然后在主函数中再输出排序后的字符串。

//用指针数组处理,程序有问题,求改错。

#include<stdio.h>
#include<string.h>
void px(char *p[10],int n)
{
    int i,j,k;
    char *t;
    for(i=0;i<n;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
            if(strcmp(p[i],p[j])>0) k=j;
        if(k!=i)
        {
            t=p[i];
            p[i]=p[k];
            p[k]=t;
        }
    }
}
int main()
{
    char *p[10];
    int i;
    printf("请获得十串字符串:\n");
    for(i=0;i<10;)
        scanf("%s",p[i]);
    printf("字符串降序排序后为:\n");
    px(p,10);
    for(i=0;i<10;i++)
        printf("\n%s\n",*p[i]);
    return 0;
}


修改处见注释,供参考:

#include<stdio.h>
#include<string.h>
void px(char* p[10], int n)
{
    int i, j, k;
    char* t;
    for (i = 0; i < n - 1; i++) // 修改
    {
        k = i;
        for (j = i + 1; j < n; j++)
            if (strcmp(p[k], p[j]) > 0) k = j; //修改  if(strcmp(p[i],p[j])>0) k=j;
        if (k != i)
        {
            t = p[i];
            p[i] = p[k];
            p[k] = t;
        }
    }
}
int main()
{
    char a[10][20], * p[10];   //修改
    int i;
    printf("请获得十串字符串:\n");
    for (i = 0; i < 10; i++){ //修改  for(i=0;i<10;)
        scanf("%s", a[i]);   //修改
        p[i] = a[i];         //修改
    }
    printf("字符串降序排序后为:\n");
    px(p, 10);
    for (i = 0; i < 10; i++)
        printf("\n%s\n", p[i]); //修改 printf("\n%s\n",*p[i]);
    return 0;
}