C语言中从键盘上输入五个字符串,按从小到大的顺序对它们进行排序!!(TC2.0)

来源:百度知道 编辑:UC知道 时间:2024/09/25 10:38:23
#include "stdio.h"
void main()
{char b[20],a[5][20];
int k,i,j;
printf("input:\n");
for(i=0;i<5;i++)
gets(a[i]);
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
for(k=0;k<20;k++)
if(a[i][k]>a[j][k])
{ strcpy(b,a[j]);
strcpy(a[j],a[i]);
strcpy(a[i],b);
break;}
else if(a[i][k]<a[j][k])
break;
}}
for(i=0;i<5;i++)
puts(a[i]);
}
程序如上,但如果去掉:else if(a[i][k]<a[j][k])
break;
变成:
#include "stdio.h"
void main()
{char b[20],a[5][20];
int k,i,j;
printf("input:\n");
for(i=0;i<5;i++)
gets(a[i]);
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
for(k=0;k<20;k++)
if(a[i][k]>a[j][k])
{ strcpy(b,a[j]);
strcpy(a[j],a[i]);
strcpy(a[i],b);
break;}

}}
for(i=0;i<5;i++)
puts(a[i]);
}
那么它输出的结果会

抱歉,是我疏忽了!呵呵!
下面还是举例来说明:去掉else后的问题在到底在哪里,为什么结果不对了。依旧a[0]="12345",a[1]="12452";
前两个相等故不做if。第三四个a[1]值大,此处就本应该结束循环不再比较了,但是由于去掉了else语句,故依旧执行循环。但因为条件不成立,而只是进行j++;当到第五个数字时,由于a[0]中为5,而a[1]中为2,故if的条件成了,所以a[0]和a[1]进行交换,但是这显然是错误的。因为a[1]的前4项中有比a[0]大的数,早就该结束循环不比较第五个数字了。

原来大意了,呵呵,差点误导了你!实在是抱歉,现在解释的还可以吧?我仔细分析过了,应该没有任何的问题。

附:
改进建议:既然你知道strcpy()函数,为什么还要用第三个for循环一个一个字符的比较呢?可以用strcmp()来进行直接比较,这样就去掉了第三个for语句。
改进代码如下,供参考:
#include "stdio.h"
#include "string.h"
void main(){
char b[20],a[5][20];
int i,j;
printf("input:\n");
for(i=0;i<5;i++)
gets(a[i]);
for(i=0;i<5;i++){
for(j=i+1;j<5;j++){
if(strcmp(a[i],a[j])>0){
strcpy(b,a[j]);
strcpy(a[j],a[i]);
strcpy(a[i],b);
}
}
}
printf("\n\n排序后的结果为:\n\n");
for(i=0;i<5;i++)
puts(a[i]);
}
这样是不是清楚点

C语言:编写程序从键盘上输入一个字符串和一个字符,实现从字符串中删除该字符。 C语言 中输入字符串的问题 C语言 ,从键盘上输入5个数,求出这5个数中最大与最小 用C语言,输入n个字符串,n由键盘输出,将n个字符串中由小到大输出 如何在键盘上输入C语言程序中数据? c语言 输入字符串问题 C++编程 从键盘上输入多行字符串,用Ctrl+Z结束输入,将所有输入的字符串存入d:\myfile.txt文件中 在c语言中如何输入长度不确定的字符串 C语言程序中怎么输入逻辑运算符或呢?还有没有其它的不能从键盘上输入的运算符吗,并给出解决的方案? c语言: 从键盘上输入正数顺序,从屏幕上以颠倒次序输出.如输入1234,输出4321