知道的别拍砖哈,学过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 编辑 ]