| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 522 人关注过本帖
标题:哎,看了很多遍了,仍不知道自己错误在哪儿,求助啊!谢谢各位大虾!!!
只看楼主 加入收藏
zhoujunpeiil
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-5-16
结帖率:0
收藏
已结贴  问题点数:10 回复次数:8 
哎,看了很多遍了,仍不知道自己错误在哪儿,求助啊!谢谢各位大虾!!!
谭浩强版作业  写出几个函数:①输入10个职工姓名和职工号②按职工号由小到大调整,姓名顺序也随之调整③要求输入一个职工号,用折半法找出该职工姓名从主函数输入职工号,输出职工姓名。
下面是我的做法:
#include <stdio.h>
void input(char name[10][10],int num[10])
{  int i;
   for(i=0;i<10;i++)
   {printf("Please input a name:");
    gets(name[i]);
    printf("\nPlease input number:");
    scanf("%d",&num[i]);}
}
void sort(char name[10][10],int num[10])
{  int i,j,temp1;
   char temp2[10];
   for(i=0;i<9;i++)
   {for(j=i;j<10;j++)
    if(num[i]>num[j])
      temp1=num[i];
      num[i]=num[j];
      num[j]=temp1;
      strcpy(temp2,name[i][10]);
      strcpy(name[i][10],name[j][10]);
      strcpy(name[j][10],temp2);}
    for(i=0;i<10;i++)
    printf("\n%4d%10s",num[i],name[i]);
}
void search(int n,num[10],char name[10][10])
{  int left,right,mid,flag;
   left=0;right=9;flag=0;
   while(left<right)
   { mid=(left+right)/2;
     if(num[mid])==n)
     { flag=1;
       break;}
     else {if(num[mid]>n)
            right=mid-1;
          else
            left=mid+1;
         }
   }
    if(flag==1)
     printf("%10s",name[mid+1]);
     else
     printf("\n无此员工");
}
void main()
{   int num[10],n;
    char name[10][10];
    input(name,num);
    sort(name,num);
    printf("\nPlesase input a number:");
    scanf("%d",&n);
    printf("\n");
    search(n,num,name);
}
搜索更多相关主题的帖子: 姓名 
2011-05-16 21:30
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:2 
先编译一下,看编译器提示什么! 多个函数的程序,要逐个编写调试通过,再写下一个函数,先别急着一气呵成

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-05-17 12:08
我本朽木
Rank: 1
等 级:新手上路
帖 子:3
专家分:9
注 册:2011-5-17
收藏
得分:2 
sort里面有问题,那个双层循环,内层循环体是一个复合语句,要用{},外层那个{}可以不用,暂时只看到这个问题,没调试,你先试下
2011-05-17 12:33
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:2 
sort里的循环好像丢了一个括号
2011-05-17 13:44
q1826050194
Rank: 2
等 级:论坛游民
帖 子:67
专家分:19
注 册:2011-3-7
收藏
得分:2 
回复 楼主 zhoujunpeiil
#include <stdio.h>
void input(char name[10][10],int num[10])
{  int i;
   for(i=0;i<10;i++)
   {printf("Please input a name:");
    gets(name[i]);
    printf("\nPlease input number:");
    scanf("%d",&num[i]);}
}
void sort(char name[10][10],int num[10])
{  int i,j,temp1;
   char temp2[10];
   for(i=0;i<9;i++)
   {for(j=i;j<10;j++)
    if(num[i]>num[j])
      temp1=num[i];
      num[i]=num[j];
      num[j]=temp1;
      strcpy(temp2,name[i]);//这里name[i]它是要用一个数组的首地址,所以你这样写就可以了
      strcpy(name[i],name[j]);
      strcpy(name[j],temp2);}
    for(i=0;i<10;i++)
    printf("\n%4d%10s",num[i],name[i]);
}
void search(int n,int num[10],char name[10][10])//形参应该分开写,int n,num[10]这样定义不行的
{  int left,right,mid,flag;
   left=0;right=9;flag=0;
   while(left<right)
   { mid=(left+right)/2;
     if(num[mid]==n)//多了一个括号
     { flag=1;
       break;}
     else {if(num[mid]>n)
            right=mid-1;
          else
            left=mid+1;
         }
   }
    if(flag==1)
     printf("%10s",name[mid+1]);
     else
     printf("\n无此员工");
}
main()
{   int num[10],n;
    char name[10][10];
    input(name,num);
    sort(name,num);
    printf("\nPlesase input a number:");
    scanf("%d",&n);
    printf("\n");
    search(n,num,name);
}
2011-05-17 14:50
mandown1991
Rank: 4
等 级:业余侠客
帖 子:262
专家分:252
注 册:2011-3-2
收藏
得分:2 

程序代码:
#include <stdio.h>
#include <string.h>
void input(char name[10][10],int num[10])
{  int i;
   for(i=0;i<10;i++)
   {printf("Please input a name:");
    gets(name[i]);
    printf("\nPlease input number:");
    scanf("%d",&num[i]);}
}
void sort(char name[10][10],int num[10])
{  int i,j,temp1;
   char temp2[10];
   for(i=0;i<9;i++)
   {for(j=i;j<10;j++)
    if(num[i]>num[j])
      temp1=num[i];
      num[i]=num[j];
      num[j]=temp1;
      strcpy(temp2,name[i]);
      strcpy(name[i],name[j]);
      strcpy(name[j],temp2);}
    for(i=0;i<10;i++)
    printf("\n%4d%10s",num[i],name[i]);
}
void search(int n,int num[10],char name[10][10])
{  int left,right,mid,flag;
   left=0;right=9;flag=0;
   while(left<right)
   { mid=(left+right)/2;
     if(num[mid]==n)
     { flag=1;
       break;}
     else {if(num[mid]>n)
            right=mid-1;
          else
            left=mid+1;
         }
   }
    if(flag==1)
     printf("%10s",name[mid+1]);
     else
     printf("\n无此员工");
}
void main()
{   int num[10],n;
    char name[10][10];
    input(name,num);
    sort(name,num);
    printf("\nPlesase input a number:");
    scanf("%d",&n);
    printf("\n");
    search(n,num,name);
} 


[ 本帖最后由 mandown1991 于 2011-5-17 17:18 编辑 ]
2011-05-17 17:07
其实、不想说
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:122
专家分:156
注 册:2011-3-3
收藏
得分:2 
好多,看起来晕了、、、、、
2011-05-17 17:09
mandown1991
Rank: 4
等 级:业余侠客
帖 子:262
专家分:252
注 册:2011-3-2
收藏
得分:0 
回复 5楼 q1826050194
少了个#include<string.h>的头文件!
2011-05-17 17:16
zhoujunpeiil
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-5-16
收藏
得分:0 
回复 2楼 ansic
这是个不错的习惯
2011-05-28 08:53
快速回复:哎,看了很多遍了,仍不知道自己错误在哪儿,求助啊!谢谢各位大虾!! ...
数据加载中...
 
   



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

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