-cfyjbjonn 2019-04-24 14:10 采纳率: 57.1%
浏览 1550
已采纳

急求!!!请问我错在哪里?以及怎么改?谢谢!!!c语言 给国家的名称按字典顺序排序

请用指针数组编程实现按奥运会参赛国国名,在字典中的顺序对其入场次序进行排序。
假设参赛国不超过150个。
下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。
注意:请将修改正确后的完整源程序拷贝粘贴到答题区内。
对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。
当且仅当错误全部改正,且程序运行结果调试正确,才给加5分。
经教师手工核对后,如果未用指针数组做函数参数编程,那么即使做对也不给分。
改错时不能改变程序原有的意图,不能改变函数原型。
#include
#define MAX_LEN 10
#define N 150
void SortString(char *ptr[], int n);
main()
{
int i, n;
char *pStr[N];
printf("How many countries?\n");
scanf("%d",&n);
printf("Input their names:\n");
for (i=0; i<n; i++)
{
gets(pStr[i]);
}
SortString(pStr[i], n);
printf("Sorted results:\n");
for (i=0; i<n; i++)
{
puts(pStr[i]);
}
}

void SortString(char *ptr[], int n)
{
int i, j;
char temp;
for (i=0; i<n-1; i++)
{
for (j = i+1; j<n; j++)
{
if (ptr[j] < ptr[i]);
{
temp = ptr[i];
ptr[j] = ptr[i];
ptr[j] = temp;
}
}
}
}

#include  <stdio.h>
#include <string.h>
#define   MAX_LEN  10
#define   N         150
void SortString(char *ptr[], int n);
int main()
{
    int    i, n;
    char   *pStr[N];
    printf("How many countries?\n");
    scanf("%d", &n);
    getchar();
    printf("Input their names:\n");
    for (i = 0; i < n; i++)
    {
        gets(pStr[i]);
    }
    SortString(pStr, n);
    printf("Sorted results:\n");
    for (i = 0; i < n; i++)
    {
        puts(pStr[i]);
    }
    return 0;
}

void SortString(char *ptr[], int n)
{
    int    i, j;
    char  *temp;
    for (i = 0; i < n - 1; i++)
    {
        for (j = i + 1; j < n; j++)
        {
            if (strcmp(ptr[j] , ptr[i]) < 0 )
            {

                temp = ptr[j];
                ptr[j] = ptr[i];
                ptr[i] = temp;
            }
        }
    }
}

展开全部

  • 写回答

2条回答 默认 最新

  • 白色一大坨 2019-04-25 05:32
    关注

    错在哪里都给你注释了,看看吧:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX_LEN 10
    #define N 150
    void SortString(char *ptr[], int n);
    int main()
    {
        int i, n;
        char *pStr[N];
        printf("How many countries?\n");
        scanf("%d", &n);
        if (n> N)//输入n值判断
        {
            printf("n  greater than 150\n");
            return 0;
        }
    
        getchar();
        for (i = 0; i < n;i++)//动态分配
        {
            pStr[i] = (char *)malloc(32);
        }
        printf("Input their names:\n");
        for (i = 0; i < n; i++)
        {
            gets(pStr[i]);
        }
        SortString(pStr, n);
        printf("Sorted results:\n");
        for (i = 0; i < n; i++)
        {
            puts(pStr[i]);
        }
        for (i = 0; i < n; i++)//释放资源
        {
            free(pStr[i]);
        }
        return 0;
    }
    
    void SortString(char *ptr[], int n)
    {
        int i, j;
        char temp[32];
        for (i = 0; i < n - 1; i++)
        {
            for (j = i + 1; j < n; j++)
            {
                if (strcmp(ptr[j], ptr[i]) < 0)
                {
                    strcpy(temp, ptr[i]);
                    strcpy(ptr[i], ptr[j]);//序号反了
                    strcpy(ptr[j], temp);
                }
            }
        }
    }
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    rely_minjiang 2023-03-20 15:32

    第46行为什么是i<n-1,不是i<n?

    回复
查看更多回答(1条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 MC9S12XS128单片机实验
  • ¥15 help me!如何用51单片机去写一辆小车左转亮左边的LED灯,右边亮右边的LED灯?
  • ¥15 失败的github程序安装
  • ¥15 WSL上下载的joern在windows怎么用?
  • ¥15 jetson nano4GB
  • ¥15 电脑回复出厂设置,重装过程报错提示,求解决方案Windows 无法分析或处理无人参与应答文件 [C:\WINDOWS\Panther\unattend.xml,如何解决?
  • ¥15 进入lighttools中的UDOP编辑器的方法
  • ¥15 求Gen6d训练数据集
  • ¥20 liunx中winscp中可以登入ftp,但是不能登入sftp,如何解决
  • ¥15 lighttools的光学属性自定义的用法流程
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部