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

来源:百度知道 编辑:UC知道 时间:2024/07/04 23:51:54
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");
}

请帮我分析一下这个程序,越详细越好,谢谢!
输入国家的名字时,应该以何种格式输入?如果连续输入,以空格间隔,那么gets()函数就会将其作为一个字符串赋值给c[i],如果输入一个名字后,按回车的话,那是不是就回到程序中,开始执行循环语句了呢?后面的四个名字怎么办呢?循环是否应该在printf语句之前就开始执行呢?
不知道我说明白了没有。

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");
}

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

main()
{
char st[20],cs[5][20]; //定义变量
int i,j,p;
printf("input country's name:\n"); //输入国家