-cfyjbjonn 2019-04-21 16:36 采纳率: 57.1%
浏览 5138
已结题

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 )
            {
                strcpy(temp , ptr[i]);
                strcpy(ptr[j] , ptr[i]);
                strcpy(ptr[j] , temp);
            }
        }
    }
}

我改过的答案哪里有错?

  • 写回答

3条回答

  • 酸菜谭丶 2019-04-22 20:21
    关注

    if (ptr[j] < ptr[i]);
    {
        temp = ptr[i];
        ptr[j] = ptr[i];
        ptr[j] = temp;
    }
    

    改成

    if (strcmp(ptr[j], ptr[i]) < 0)
    {
            //swap(ptr[j], ptr[i]);
            temp = ptr[j];
            ptr[j] = ptr[i];
            ptr[i] = temp;
    }
    

    以及char temp改成char *temp。比较是比较字符串而不是比较地址,还有分号标志这句结束,然后直接交换地址就可以了,所以temp要改成*temp.

    评论

报告相同问题?

悬赏问题

  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样