c程序设计 8.15写几个函数:①输个职工的姓名和职工号;②按职工号由小到大顺序排序,姓名顺序也随之调整;③要求输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工

8.15写几个函数:①输个职工的姓名和职工号;②按职工号由小到大顺序排序,姓名顺序也随之调整;③要求输入一个职工号,用折半法找出该职工的姓名,

从主函数输入要查找的职工号,输出该职工。

写的时候为方便输入,我设的是输入3名职工的信息。 #define N 3

#include <stdio.h>
#define N 3
#define LEN 20

//定义一个结构体类型
struct student{
    char name[LEN];
    int num;
};

int main(){
    int no;
    void output(struct student stu[]);
    void input(struct student stu[]);
    void sortByNum(struct student stu[]);
    void binSearch(int no,struct student stu[]);
    struct student stu[N];
    input(stu);
    output(stu);
    sortByNum(stu);
    output(stu);
    printf("请输入要查找的职工号no.:\n");
    scanf("%d",&no);
    binSearch(no,stu);

    return 0;
}

//输入N 名职工的姓名和编号
void input(struct student stu[]){
    printf("请输入%d职工的姓名和编号:\n",N);
    for(int i=0; i<N; i++){
        scanf("%s %d",stu[i].name,&stu[i].num);
    }
}

//输出职工的姓名编号
void output(struct student stu[]){
    for(int i=0; i<N; i++){
    printf("name:%20s,  no.:%5d\n",stu[i].name,stu[i].num);
    }
}

//按职工号从小到大排序,姓名也随之排序
//选择排序
void sortByNum(struct student stu[]){
    int min,i,j;
    struct student t;
    for(i=0; i<N; i++){
        min=i;
        for(j=i+1; j<N; j++){
            if(stu[j].num < stu[min].num){min=j;}
        }
        if(min!=i){
        t=stu[min];
        stu[min]=stu[i];
        stu[i]=t;
        }
    }
    printf("按职工号从小到大排序完毕.\n");
}

//二分查找职工编号
void binSearch(int no,struct student stu[]){
    //赋初始值
    int low=0,high=N-1,mid;
        while(low<=high)
        {
        mid=(low+high)/2;
        if(no>stu[mid].num){low=mid+1;}
        else if(no<stu[mid].num){high=mid-1;}
            else if(no==stu[mid].num)
            {printf("name:%s\n",stu[mid].name);
             break;
            }
        }
        //循环结束有两个原因:1.break。2. low>high. 需要再次判断无解的原因。
    if(low>high) printf("can‘t find the no.%d worker.",no);
}

运行结果:

时间: 2024-10-05 06:17:37

c程序设计 8.15写几个函数:①输个职工的姓名和职工号;②按职工号由小到大顺序排序,姓名顺序也随之调整;③要求输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工的相关文章

输入6个学生成绩,找出最高分和最低分,用函数实现

/* ============================================================================ Name : max_min.c Author : duanqibo Version : Copyright : Your copyright notice Description : 输入6个学生成绩,找出最高分和最低分,用函数实现 ====================================================

一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵

题目描述: 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积) 输入: 每个案例第一行三个正整数N,M<=100,表示矩阵大小,和一个整数K 接下来N行,每行M个数,表示矩阵每个元素的值 输出: 输出最小面积的值.如果出现任意矩阵的和都小于K,直接输出-1. 样例输入: 4 4 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 样例输出: 1 首先这个题应该是有一个动态规划的解法,不过好像复杂度也要到O(n^3lo

需要排序的最短子数组的长度——是一个排序好的数组,中间某一部分被打乱了,让你找出打乱的那个子数组

需要排序的最短子数组的长度 貌似在leetcode上遇到过,就是一个排序好的数组,中间某一部分被打乱了,让你找出打乱的那个子数组. from:https://blog.csdn.net/behboyhiex/article/details/80758686 [题目] 给定一个无序数组arr,求出需要排序的最短子数组长度. 例如: arr = [1, 5, 3, 4, 2, 6, 7]返回4,因为只有[5, 3, 4, 2]需要排序. [思路] 双指针 第一次从左向右遍历,找左边比当前位置大的 第

有15个数按从大到小的顺序存放在一个数组中, 用折半查找法找出该数是数组的第几个元素的值, 如果该数不在数组中,则输出“无此数”

//2017年7月22日 #include <stdio.h> #define LEN 15 int main(){ int n; void binSearch(int * p,int n); int arr[LEN]={98,97,88,87,76,70,65,54,43,42,39,36,35,31,29}; printf("请输入要查找的数:\n"); scanf("%d",&n); binSearch(arr,n); return 0;

使用冒泡法进行排序然后用二分查找法找出33的位置 JS

var data = [33, 86, 12, 9, 66, 5, 10, 45, 11, 3]; function sort(data){ var i=0; while(i<data.length-1){ for(var j=0;j<data.length-i-1;j++){ if(data[j]>data[j+1]){ var x=data[j]; data[j]=data[j+1]; data[j+1]=x; } } i++; } } sort(data) BinarySearch

重装系统分区时,发现一个叫LVM的东西,找出来和大家分享

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版.Linux用户安装Linux操作系统时 遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间.普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当 一个逻辑分区存放不下某个文件时,这个

8个球7个一样重的,有一个偏重,一个天平,如何两次找出偏重的小球

第一次称的时候,天平两边各放3个球,剩余2个球. 如果天平平衡,说明较轻的球在剩余的两个球中,第二次称的时候只需称剩余的这2个球即可. 如果天平不平衡,从第一次称时相对较轻的那3个球中选2个做第二次称重.第二次称重时,如果天平平衡,则剩下的那个球就是较轻的:如果天平不平衡,较轻的球也就找到了. 原文地址:https://www.cnblogs.com/R4mble/p/8371307.html

浙大版《C语言程序设计(第3版)》题目集 练习4-10 找出最小值 (20 分)

练习4-10 找出最小值 (20 分) 本题要求编写程序,找出给定一系列整数中的最小值. 输入格式: 输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔. 输出格式: 在一行中按照“min = 最小值”的格式输出n个整数中的最小值. 输入样例: 4 -2 -123 100 0 输出样例: min = -123 思路:假设输入的第一个是最小值,如果后面输入的小于最小值,更新最小值. 代码如下: #include <stdio.h> int main() { int n, i, mi

30 - 找出最小的k个数

题目描述:http://ac.jobdu.com/problem.php?pid=1371 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 第一种思路: 如上一题中,用快速排序中的划分函数,划分元素最终下标index小于K,划分[index+1, n]:划分元素最终下标index大于K,划分[0, index-1]; 找到划分元素下标是K时,停止,此时0 ~ K-1 为最小的K个数 时间复杂度O(n),缺点是会修改原数组