C语言题目:编写程序,输入 10 个国名,按字母字典序排序后输出。 要求:采用函数编程。

①编写函数 void input(char str[][N],int m)输入 m 个国名;
②编写函数 void print(char str[][N],int m)输出 m 个国名;
③编写函数 CountrySort(char str[][N],int m)对 m 个国名按字母字典序排序;
④在主函数中调用 input()函数输入 10 个国名,然后调用 CountrySort()函数进行排序,
最后调用 print()函数输出排序后的结果。

附上我写的程序代码,请问为什么输入单个字母运行以后没有排序?还是像原来的顺序输出。每行输入多个字母以后,排序就混乱了。

我的代码:
#include<stdio.h>
#include<string.h>
#define M 3
#define N 100
void input(char str[][N],int m)
{
int i;
for(i=0;i<m;i++)
gets(str[i]);
}
void CountrySort(char str[][N],int m)
{
char t[M][N];int a,k,i,j=0;
for(k=m-1;k>0;k--)
for(i=0;i<k;i++)
{
a=str[i][j]-str[i+1][j];
if(a>0)
{
strcpy(t[i],str[i]);
strcpy(str[i],str[i+1]);
strcpy(str[i+1],t[i]);
j=0;
}
if(a==0)
{
i--;j++;
}
}
}
void print(char str[][N],int m)
{
int i;
for(i=0;i<m;i++)
puts(str[i]);
}
int main()
{
char str[M][N];
input(str,M);
CountrySort(str,M);
printf("\n");
print(str,M);
return 0;
}

#include<stdio.h>
#include<string.h>
#define M 3
#define N 100
void input(char str[][N],int m)
{
    int i;
    for(i=0;i<m;i++)
        gets(str[i]);
}
void CountrySort(char str[][N],int m)
 {
     char t[M][N];int a,k,i,j=0;
     for(k=m-1;k>0;k--)
     for(i=0;i<k;i++)
     {
         a=str[i][j]-str[i+1][j];
         if(a>0)
         {
             strcpy(t[i],str[i]);
             strcpy(str[i],str[i+1]);
             strcpy(str[i+1],t[i]);
             j=0;
         }
         if(a==0)
         {
            i--;j++;
         }
    }
 }
void print(char str[][N],int m)
{
    int i;
    for(i=0;i<m;i++)
        puts(str[i]);
}
int main()
{
int i;
    char str[M][N];
    for(i = 0;i<M;i++) scanf("%s",str[i]);
    CountrySort(str,M);
    printf("\n");
    print(str,M);
    return 0;
}

温馨提示:答案为网友推荐,仅供参考