| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 471 人关注过本帖
标题:[求助]指针数组例题出错
只看楼主 加入收藏
zhk3293474
Rank: 1
等 级:新手上路
帖 子:16
专家分:4
注 册:2008-3-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
[求助]指针数组例题出错
例题题目:将若干字符串按字母顺序(由小到大)输出
代码如下:
#include"stdio.h"
#include"string.h"
int main()
{int sort(char *name[],int n);
 int print(char *name[],int n);
 char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer design"};
 int n=5;
 sort(name,n);
 print(name,n);
 return 0;
}
int sort(char *name[],int n)
{char *temp;
 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)
    temp=name[i];name[i]=name[k];name[k]=temp;}
   }
   return 0;
}
int print(char *name[],int n)
{int i;
 for(i=0;i<n;i++){
 printf("%s\n",name[i]);
 }
 return 0;
}
书上写的例题的运行结果为:
BASIC
Computer design
FORTRAN
Follow me
Great Wall

而我按照例题代码运行出现的结果为:
Computer design
BASIC
BASIC
FORTRAN
Great WALL


该例题中的核心代码是:
int sort(char *name[],int n)
{char *temp;
 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)
    temp=name[i];name[i]=name[k];name[k]=temp;}
   }
   return 0;
}
疑问如下:
1.每次循环,是不是按顺序将两个if语句都会运行,还是只运行符合某一个if条件的语句?
2.为什么运行会导致少掉了一个字符串,并且BASIC字符串会出现重复
3.我在纸上自己划的运行结果是:
Computer design
BASIC
FORTRAN
Follow me
Great Wall
希望能给我个正确的代码

我已经用turbo c和vc 6.0运行后都是同样的结果
搜索更多相关主题的帖子: 指针数组 
2009-08-11 12:17
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:20 
核心代码抄错了吧

int sort(char *name[],int n)
{char *temp;
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;     //这层的大括号不需要.应该是遍历完找最大的k再交换,你都快成冒泡了
    if(k!=i)
    temp=name[i];name[i]=name[k];name[k]=temp;}  
   }
   return 0;
}
2009-08-11 13:30
zhk3293474
Rank: 1
等 级:新手上路
帖 子:16
专家分:4
注 册:2008-3-24
收藏
得分:0 
非常感谢,是大括号的问题
int sort(char *name[],int n)  
{char *temp;  
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)  
    temp=name[i];name[i]=name[k];name[k]=temp;  
   }  
   return 0;  
}  
2009-08-11 13:36
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
不对吧,这样运行也是错误的,
应该把第一个IF下的IF也括起来。

int sort(char *name[],int n)   
{char *temp;   
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)   
         temp=name[i];name[i]=name[k];name[k]=temp;
        }                        //*********
   }   
   return 0;   
}

[ 本帖最后由 UserYuH 于 2009-8-11 14:11 编辑 ]

努力—前进—变老—退休—入土
2009-08-11 14:09
快速回复:[求助]指针数组例题出错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039622 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved