知道的别拍砖哈,学过C的都过来看看,是哪儿出了问题
就是在谭浩强的书里,有个输入5个国家进行排序,问下,下面两个程序一个结果是对的,一个结果是错的,错的为什么会错?百思不得其解(知道不要拍砖,谢了,诚心求解),错的和对的算法都差不多,对的其实就是多了几个临时变量,为什么多了这几个临时变量结果就是对的-------------------------------------------第一个程序对了,为什么谭浩强弄那么多的变量,多复杂,多费内存,不就弄个冒泡就行了,就算是为了验证之类的,也不用弄这么复杂和那么多变量嘛。--------------------------------知道了,第一个是冒泡排序,第二个是选择排序第一个程序结果是错的---------------------------是对的,用冒泡的。
程序代码:#include"stdio.h"
#include"string.h"
int main(void)
{
char country[5][20];
char tem[20];
int i,j;
for( i=0;i<5;i++)
{
printf("请输入第%d个国家\n",i+1);
gets(country[i]);
}
for(i=0;i<4;i++)
{
for(int j=i+1;j<5;j++)
{
if(strcmp(country[i],country[j])<0)
{
strcpy(tem,country[i]);
strcpy(country[i],country[j]);
strcpy(country[j],tem);
}
}
}
for(i=0;i<5;i++)
{
puts(country[i]);
}
}下面这个是对的。
程序代码:#include"stdio.h"
#include"string.h"
int main(void)
{
char st[20],cs[5][20];
int i,j,p;
for( i=0;i<5;i++)
{
printf("请输入第%d个国家\n",i+1);
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");
}
[ 本帖最后由 a271885843 于 2012-2-29 22:39 编辑 ]









不错,还差点真没看出来