| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1112 人关注过本帖
标题:知道的别拍砖哈,学过C的都过来看看,是哪儿出了问题
只看楼主 加入收藏
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
结帖率:84.38%
收藏
已结贴  问题点数:20 回复次数:12 
知道的别拍砖哈,学过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 编辑 ]
搜索更多相关主题的帖子: 都差不多 
2012-02-28 23:47
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
为什么多了几个临时的变量,程序就是对的?

认为事物非黑即白是缺智慧的表现……
2012-02-28 23:49
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:10 
不是多变量的问题,你仔细看一下头一个程序的排序,是错的.
2012-02-29 00:18
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用广陵绝唱在2012-2-29 00:18:21的发言:

不是多变量的问题,你仔细看一下头一个程序的排序,是错的.
高手,哪儿错了,能不能复制错误的代码然后标注一下,谢你了。第一个程序排序,是两个循环,第一层是0-3,第二层是1-4,有空你再看哈

[ 本帖最后由 a271885843 于 2012-2-29 00:36 编辑 ]

认为事物非黑即白是缺智慧的表现……
2012-02-29 00:30
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
临睡之前顶一下。谢帮我解决问题的朋友哈。

认为事物非黑即白是缺智慧的表现……
2012-02-29 00:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
回复 楼主 a271885843
給你的第1個代碼加上跟蹤語句,自己檢查一下哪裡出問題?

程序代码:
#include <stdio.h>
#include <string.h>
#include <conio.h>

int main(void)
{
    char country[5][20] = {    "China", "U.S.A.", "U.K.", "Japan", "France" };
    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 = 1; j < 5; j++)
        {
            int retval = strcmp(country[i], country[j]);
            printf_s("%s, %s, %d", country[i], country[j], retval);
            if (retval < 0)
            {
                strcpy(tem, country[i]);
                strcpy(country[i], country[j]);
                strcpy(country[j], tem);
                printf_s("   %s, %s, %d", country[i], country[j], retval);
            }
            printf_s("\n");
        }
    }

    printf_s("\n");
    for (i = 0; i < 5; i++)
    {
        puts(country[i]);
    }

    _getch();
}

授人以渔,不授人以鱼。
2012-02-29 01:54
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用TonyDeng在2012-2-29 01:54:01的发言:

給你的第1個代碼加上跟蹤語句,自己檢查一下哪裡出問題?

 
#include  
#include  
#include  
 
int main(void)
{
    char country[5][20] = {    "China", "U.S.A.", "U.K.", "Japan", "France" };
    char tem[20];
    int i, j;
   
    /*
    for (i = 0; i < 5; i++)
    {
        printf("请输入第%d个国家\n", i+1);
        gets(country);
    }
    */
 
    for (i = 0; i < 4; i++)
    {
        for (int j = 1; j < 5; j++)
        {
            int retval = strcmp(country, country[j]);
            printf_s("%s, %s, %d", country, country[j], retval);
            if (retval < 0)
            {
                strcpy(tem, country);
                strcpy(country, country[j]);
                strcpy(country[j], tem);
                printf_s("   %s, %s, %d", country, country[j], retval);
            }
            printf_s("\n");
        }
    }
 
    printf_s("\n");
    for (i = 0; i < 5; i++)
    {
        puts(country);
    }
 
    _getch();
}
谢你了。
是这么回事,我觉得还是有点问题,我的想法这个就是个冒泡,结果我的第一个确实有点问题,j的初值没付好,我现在的问题就是为什么谭浩强要整那么多的变量
。其实
程序代码:
#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]);
      }
}
这样就可以了,算法是可以理解的,就用这么简单的就行了,为什么谭浩强搞那么多的变量,一会儿赋值过去,一会儿赋值过来。至于你的,我晚上下班回来再研究研究,我去上班了,估计又得迟到了,呵呵,谢你了

[ 本帖最后由 a271885843 于 2012-2-29 22:40 编辑 ]

认为事物非黑即白是缺智慧的表现……
2012-02-29 08:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我沒有改過你原來的算法,只是給你原來的代碼加上一點調試語句而已。至於譚的代碼,各人的思路不一樣罷了,不必完全跟別人的。即使同一個思想,也沒有兩個人寫出的文字是完全一樣的,關鍵是自己思路清晰、別人看得明白。

授人以渔,不授人以鱼。
2012-02-29 13:13
dyh839911010
Rank: 2
来 自:武汉
等 级:论坛游民
帖 子:63
专家分:71
注 册:2011-9-14
收藏
得分:0 
不错,还差点真没看出来

把简单做到纯粹,自然有生活的成就。
游戏开发吧诚邀各位的驻足!
2012-02-29 13:43
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用TonyDeng在2012-2-29 13:13:21的发言:

我沒有改過你原來的算法,只是給你原來的代碼加上一點調試語句而已。至於譚的代碼,各人的思路不一樣罷了,不必完全跟別人的。即使同一個思想,也沒有兩個人寫出的文字是完全一樣的,關鍵是自己思路清晰、別人看得明白。
恩。我是上班的时候,偷偷过来浏览一下,回去再研究。

认为事物非黑即白是缺智慧的表现……
2012-02-29 14:34
快速回复:知道的别拍砖哈,学过C的都过来看看,是哪儿出了问题
数据加载中...
 
   



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

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