不厭徐何 2023-04-04 19:24 采纳率: 56.5%
浏览 11
已结题

函数,数组,排序-c语言

输入3个职工的姓名和职工号,按职工号从小到大排列,姓名顺序也随之调整。并输入一个职工号,用折半查找法查找该职工姓名。不知道哪里错了,输入完毕就退出程序,不知道怎么调试


#include <stdio.h>
#include <stdlib.h>
#define N 3
int main(){
    void input(int num[],char name[][8]);
    void sort(int num[],char name[][8]);
    void find(int num[],char name[][8],int num1);
    int num[N];//存放职工号
    char name[N][8];//存放姓名
    input(num,name);
    sort(num,name);
    int n;
    printf("要查找的职工号:\n");
    scanf("%d",&n);
    find(num,name,n);
} 
void input(int num[],char name[][8]){
    int i;
    for(i=0;i<N;i++){
        printf("NO.:");
        scanf("%d",&num[i]);
        printf("name:");
        getchar();//回车要清除掉 
        gets(name[i]);        
    } 
}

void sort(int num[],char name[][8]){     //排序 
    int i,j,t,min;
    char temp[8];
    for(i=0;i<N-1;i++){
        min=i;
        for(j=i+1;j<=N-1;j++)
            if(num[j]<num[min])min=j;
        t=num[min];
        strcpy(temp[8],name[min]);
        num[min]=num[i];
        strcpy(name[min],name[i]);
        num[i]=t;
        strcpy(name[i],temp[8]);
    }
    for(i=0;i<N;i++)
    printf("%d  %s\n",num[i],name[i]);
} 

void find(int num[],char name[][8],int num1){ //查找 
    int head=0;
    int end=N-1;
    int mid=(head+end)/2;
    int flag=0;
    while(head<=end){
        if(num1<num[mid])end=mid-1;
        else if(num1>num[mid])head=mid+1;
        else{
            flag=1;
            printf("找到了,该职工姓名为:%s\n",name[mid]);
        } 
    }
    if(flag=0)printf("没找到该职工号!\n"); 
}
  • 写回答

2条回答 默认 最新

  • threenewbee 2023-04-04 19:27
    关注

    目测
    strcpy(temp[8],name[min]);
    ->
    strcpy(temp,name[min]);
    下面
    strcpy(name[i],temp[8]);
    也同理。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月12日
  • 已采纳回答 4月4日
  • 创建了问题 4月4日