看看我编的程错在哪儿

来源:百度知道 编辑:UC知道 时间:2024/05/30 01:25:16
输入 5 个单词,将它们按从大到小的顺序排列后输出。
输入:5个单词
输出:排序后的顺序
#include <stdio.h>
#include <string.h>
main()
{char s[5][100];
int i,j,k,m,a[5];
for(i=0;i<5;i++) {gets(s[i]);a[i]=i;}
for(i=0;i<4;i++)
{k=i;
for(j=i+1;j<5;j++)
if(strcmp(s[a[i]],s[a[j]])>0) k=j;
if(k!=i)
{m=a[k],a[k]=a[i];a[i]=m;}}
for(i=4;i>=0;i--) printf("%s\n",s[a[i]]);}
为何我输入
BASIC
C++
Pascal
C
Fortran
答案是:
Pascal
C++
Fortran
C
BASIC
而不是:
Pascal
Fortran
C++
C
BASIC

首先,你的程序写的不规范。如果是复合语句,就尽量全放进大括号中。
不然别人在读你算法时也不容易。
还有你算法有点问题,给你个程序试试。
#include <stdio.h>
#include <string.h>
main()
{
char s[5][100];
int i,j,k,m,a[5];
for(i=0;i<5;i++) {gets(s[i]);a[i]=i;}
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++) {//括号尽量别省
k=i; //挪进来
if(strcmp(s[a[i]],s[a[j]])>0) k=j;
if(k!=i)
{m=a[k],a[k]=a[i];a[i]=m;}
}
}
for(i=4;i>=0;i--) printf("%s\n",s[a[i]]);
return 0;
}
你可以用单步调试来找到你程序的问题,认真查一次会很有收获。

看起来好像没错误
试了一下确实有问题
但换个顺序有正常了
真奇妙 真奇妙!

我试的结果也是对的。