| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 885 人关注过本帖, 1 人收藏
标题:学完老谭的书的前辈,帮我看看题目的意思
只看楼主 加入收藏
hywhll888
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2011-6-9
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:7 
学完老谭的书的前辈,帮我看看题目的意思
8.15 写几个函数
1  输入10个职工的姓名和职工号
2 按职工号由小到大顺序排序,姓名顺序也随之调整
3 要求输入一个职工号,用折半查找发找出该职工的姓名,从主函数输入要查找的职工号,输出该职工的姓名。

前2个功能已经做完了,但是第3个功能是否太容易实现了,因为前面已经对号码和姓名排完序了,只需要几句代码就可以完成第3个功能了。还是我对这道题的理解不够?
请各位前辈解释下这道题目!

付上代码;
#include <stdio.h>
#include <math.h>
#include <string.h>
void main()
{
    void shell(char a[10][20],int b[10]);
    void find(char a[10][20],int b[10]);
    char a[10][20]={{"no10"},{"no9"},{"gfhgno8"},{"no7"},{"nfgho6"},{"no5"},{"nfdsfo4"},{"nfgho3"},{"no2"},{"no1"}};
    int b[10]={10,9,8,7,6,5,4,3,2,1};
    shell(a,b);
}


void shell(char a[10][20],int b[10])
{
    int i,j,t,x;
    char k;
    for(j=0;j<10;j++)
   
        for(i=0;i<10;i++)
        
            if(b[i]>b[i+1])
            {
                t=b[i];
                b[i]=b[i+1];
                b[i+1]=t;
                for(x=0;x<20;x++)
                {
                    k=a[i][x];
                    a[i][x]=a[i+1][x];
                    a[i+1][x]=k;
                }
            }
        
   
    for(i=0;i<10;i++)
    {
        printf("%s",a[i]);
        printf("%5d\n",b[i]);
    }            
}


因为每次查错都要输入,觉得太麻烦了就直接赋值了。。。

[ 本帖最后由 hywhll888 于 2011-7-11 22:14 编辑 ]
搜索更多相关主题的帖子: 姓名 include 
2011-07-11 21:56
ppfly
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:297
专家分:1956
注 册:2009-5-17
收藏
得分:5 
3 要求输入一个职工号,用折半查找发找出该职工的姓名,从主函数输入要查找的职工号,输出该职工的姓名。

而不是顺序遍历数组

********多贴代码,少说空话*******
2011-07-11 23:09
kongbei312
Rank: 2
等 级:论坛游民
帖 子:44
专家分:26
注 册:2011-6-15
收藏
得分:5 
看着挺复杂的,呵呵,我也是新手偶,过来学习一下
2011-07-12 09:25
yunvnv
Rank: 2
等 级:论坛游民
帖 子:8
专家分:20
注 册:2011-6-30
收藏
得分:5 
你用的不是二分法  , 你还没有 弄懂二分法的 深奥之处  

2011-07-12 11:07
redunkind
Rank: 2
等 级:论坛游民
帖 子:36
专家分:14
注 册:2011-4-10
收藏
得分:5 
折半怎么做啊???
2011-07-12 13:22
hywhll888
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2011-6-9
收藏
得分:0 
回复 4楼 yunvnv
二分法已经弄懂了 也不是那么复杂

#include <stdio.h>
#include <math.h>
#include <string.h>
void main()
{
    void shell(char a[10][20],int b[10]);
    int find(char a[10][20],int b[10],int x);
    char a[10][20]={{"no10"},{"no9"},{"gfhgno8"},{"no7"},{"nfgho6"},{"no5"},{"nfdsfo4"},{"nfgho3"},{"no2"},{"no1"}};
    int b[10]={111,99,87,75,64,53,42,31,20,11};
    int t,i;
    shell(a,b);
    printf("输入要查找的职工号:\n");
    scanf("%d",&t);
    for(i=0;i<10;i++)
    {
        if(b[i]==find(a,b,t))
        {
            printf("职工姓名是%s.\n",a[i]);
            break;
        }
    }
    if(b[i]!=find(a,b,t))
    {printf("无此职工");}
}


void shell(char a[10][20],int b[10])
{
    int i,j,t,x;
    char k;
    for(j=0;j<10;j++)
   
        for(i=0;i<10;i++)
        
            if(b[i]>b[i+1])
            {
                t=b[i];
                b[i]=b[i+1];
                b[i+1]=t;
                for(x=0;x<20;x++)
                {
                    k=a[i][x];
                    a[i][x]=a[i+1][x];
                    a[i+1][x]=k;
                }
            }
        
   
    for(i=0;i<10;i++)
    {
        printf("%s",a[i]);
        printf("%5d\n",b[i]);
    }            
}


int find(char a[10][20],int b[10],int x)
{
    int i,h,l=b[0],r=b[9];
    h=(l+r)/2;
    while(x!=h)
    {
        if(x>h)
        {
            l=h+1;
            h=(l+r)/2;
            if(l>r)
            {
                return(0);
                break;
            }
        
        }
        else
            if(x<h)
            {
                r=h-1;
                h=(r+l)/2;
                if(r<l)
                {
                    return(0);
                    break;
                }
            }
    }

    return(h);
}

[ 本帖最后由 hywhll888 于 2011-7-12 15:26 编辑 ]
2011-07-12 15:24
麦海湘mhx
Rank: 2
等 级:论坛游民
帖 子:18
专家分:16
注 册:2011-6-9
收藏
得分:0 
这是算法问题,我个人建议去看看数据结构,那里有讲解算法的
2011-07-12 17:36
f34355281
Rank: 2
来 自:云南
等 级:论坛游民
帖 子:27
专家分:78
注 册:2011-7-11
收藏
得分:0 
回复 6楼 hywhll888
我觉得你的号复杂,看看我的行么?
程序代码:
#include <stdio.h>
#include <string.h>
void main()
{
    char a[10][20]={{"no10"},{"no9"},{"gfhgno8"},{"no7"},{"nfgho6"},{"no5"},{"nfdsfo4"},{"nfgho3"},{"no2"},{"no1"}},f[20];
    int b[10]={10,9,8,7,6,5,4,3,2,1},c,d,e;
    for(c=0;c<10;++c)
    {
        for(d=0;d<10-c;++d)
        {
            if(*(b+d)>*(b+d+1))
            {
                e=*(b+d);
                *(b+d)=*(b+d+1);
                *(b+d+1)=e;
                strcpy(f,a+d);
                strcpy(a+d,a+d+1);
                strcpy(a+d+1,f);
               
            }
        }
    }
    for(c=0;c<10;c++)
        printf("%d %s\n",*(b+c),a+c);
    printf("请输入要查找的职工号:");
    scanf("%d",&c);
    for(d=0;d<=10;++d)
    {
        if(c==*(b+d))
        {
            printf("%d号的姓名为%s。\n",c,a+d);
            break;
        }
        if(c>10)
        {
            printf("无%d号员工。\n",c);
            break;
        }
    }

}
2011-07-13 13:13
快速回复:学完老谭的书的前辈,帮我看看题目的意思
数据加载中...
 
   



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

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