注册 登录
编程论坛 新人交流区

求教个关于c的问题~!(问题在红色部分)

叶柄 发布于 2007-10-20 20:35, 233 次点击

#include<stdio.h>


/*..............................main().............................................*/
int main()
{
void sort(char *name[],int n);
void print(char *name[],int n);
static char *name[]={ "CHINA","AMERICA","AUSTRALIA",
"FRANCE","GERMAN"};
int n=5;
sort(name,n);
print(name,n);
}
/*.......................void sort(char *name[],int n)....................................................*/
void sort(char *name[],int n)
{
char *pt;
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[k],name[j])>0) k=j;
if(k!=i)
{
pt=name[i];
name[i]=name[k];
name[k]=pt; /*在这的k为什么不能换成j??????*/
}
}
}
/*..................................................void print(char *name[],int n).........................................*/
void print(char *name[],int n)
{
int i;
for (i=0;i<n;i++) printf("%s\n",name[i]);
}

7 回复
#2
orange_fit2007-10-20 20:41
输出答案是点样子??贴出来看看.
#3
orange_fit2007-10-20 20:44
void sort(char *name[],int n){
char *pt;
int i,j;
for (i=0;i<=n;i++){
for (j=i;j<=n;j++)
if strcmp(name[i],name[j])>0){
*pt=name[i];
name[i]=name[j];
name[j]=*pt;
}
}
}
#4
叶柄2007-10-20 20:59

改前:
AMERICA
AUSTRALIA
CHINA
FRANCE
GERMAN
Press any key to continue

改后:
(null)
AMERICA
AUSTRALIA
FRANCE
GERMAN
Press any key to continue

#5
叶柄2007-10-20 21:02
你给的代码不行哈
#6
Wǒの小小菜鸟2007-10-20 21:36
#7
jzldf1802007-10-20 22:09
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[k],name[j])>0) k=j;
if(k!=i)
{
pt=name[i];
name[i]=name[k];
name[k]=pt; //k指示的是要正确和name[i]相交换的下标的位置,但j每次都会到循环的结束,两者肯定不能混用了
}
}

[此贴子已经被作者于2007-10-20 22:10:21编辑过]

#8
h200406062007-10-24 05:17

是啊

1