C语言问题:输入五个国家的名称按字母顺序排列输出。

2024-12-02 23:49:29
推荐回答(2个)
回答1:

main()
{
char st[20],cs[5][20]; //cs存放五个名字
int i,j,p; //定义p就是浪费,没用,可以删掉
printf("input country's name:\n"); //提示输入
for(i=0;i<5;i++) //循环读5个字符串(国家名字)放到cs数组里
gets(cs[i]);
printf("\n"); //输出个换行符,为了输出格式好看一点?

//以下就是一个冒泡排序
for(i=0;i<5;i++)
{ p=i;strcpy(st,cs[i]); //这里两句全都可以删除,一点用没有
for(j=i+1;j<5;j++)

//下面这一段可以只用一个if(strcmp(cs[j],cs[i])<0)
//{}内的代码用第二个if中的三个strcpy
//作用就是判断i和j处的字符串是不是按字母顺序排的
//如果不是就将它们两个交换一下位置
if(strcmp(cs[j],st)<0) {p=j;strcpy(st,cs[j]);}
if(p!=i)
{
strcpy(st,cs[i]);
strcpy(cs[i],cs[p]);
strcpy(cs[p],st);
}

//输出排序后的字符串?那就不应该加在这里
//可以在下面这个括号之后另起一个循环,输出
puts(cs[i]);}printf("\n");
}

总而言之,这个程序的问题还是有的,还要好好修改一下

回答2:

main()
{
char st[20],cs[5][20]; //定义变量
int i,j,p;
printf("input country's name:\n"); //输入国家
for(i=0;i<5;i++)
gets(cs[i]);
printf("\n");//
for(i=0;i<5;i++)
{ p=i;strcpy(st,cs[i]);//复制国家名
for(j=i+1;j<5;j++)
if(strcmp(cs[j],st)<0) {p=j;strcpy(st,cs[j]);} //比较
if(p!=i)
{
strcpy(st,cs[i]);
strcpy(cs[i],cs[p]);
strcpy(cs[p],st);
}
puts(cs[i]);}printf("\n"); //输出
}