10个职工 折半法

本文介绍了如何使用C语言编写函数,包括输入10名职工的姓名和职工号,对数据进行按职工号升序排序,以及使用折半查找法搜索指定职工。详细步骤涉及结构体定义、输入函数、排序函数和折半查找搜索函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写几个函数:

1.输入10个职工的姓名和职工号

2.按职工号由小到大顺序排序,姓名顺序也随之调整

3.要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。

折半查找法 :现将数组排序,最小端记作low,最大端记作high,中间记作mid

                将mid与与待查找元素进行比较,等于则成功输出mid;大于则high=mid-1;小于则high=mid+1

#include<stdio.h>
struct student
   {
    char name[10];
    int num;
   } stu[10];//结构体

int main()
{
    void input(struct student stu[]);
    void sort(struct student stu[],int n);
    void search(struct student stu[],int n);
   int n;
   input(stu);
    sort(stu,10);
    printf("\nenter the number of the person:\n");
    scanf("%d",&n);
    search(stu,n);
    return 0;
}
void input(struct student stu[]) //输入函数

{
    int i;
    printf("please enter :\n");
   for(i=0;i<10;i++)
    scanf("%s%d",&stu[i].name ,&stu[i].num);
}
void sort(struct student stu[10],int n)//排序从小到大
{
    int i,k,j;
    struct student p;
    for(i=0;i<n;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
        if(stu[k].num>stu[j].num) k=j;
        p=stu[k];stu[k]=stu[i];stu[i]=p;
    }
    for(i=0;i<10;i++)
    printf("%s ",stu[i].name );
}
void search(struct student stu[],int n)//搜索函数,折半法
{
    int low=0,high=9,mid;
    while(low<=high)
    {
        mid=(high+low+1)/2;
        if(n==stu[mid].num)
        break;
        else if(n>stu[mid].num )
        low=mid+1;
        else high=mid-1;
    }
    if(low<=high) printf("%s %d",stu[mid].name ,stu[mid].num );
    else  
        printf("no one");  
}

1. 用选择法对10个整数排序10个整数用scanf函数输入。 (提示:所谓选择法就是先将10个数中最小的数与a[0]对换;再将a[1]到a[9]中最小的数与a[1]对换……每比较一轮,找出一个未经排序的数中最小的一个。) 2.10个数存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。以10个数用赋初值的方法在程序中给出。要找的数用scanf函数输入。 3. 找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。 应当至少准备两组测试数据: ①二维数组有鞍点 9 80 205 40 90 -60 96 1 210 -3 101 89 ②二维数组没有鞍点 9 80 205 40 90 -60 196 1 210 -3 101 89 45 54 156 7 用scanf函数从键盘输入数组各元素的值,检查结果是否正确。题目并未指定 4. 出一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息。本程序应准备以下测试数据:17,34,2,1,0,1.8,-6分别输入数据,运行程序并检查结果是否正确。 5.一个函数,由实参传过来一个字符串,统计此字符串中字母、数字、空格其它字符的个数,在主函数输入字符串以及输出上述的结果。 6. 用一个函数来实现将一行字符串中最长的单词输出。 7. 自定义函数实现将一个十六进制数转换成十进制数(用main函数调用自定义函数实现功能)。 8. 几个函数: (1) 输入10职工姓名职工; (2) 按职工由小到大顺序排序姓名顺序也随之调整; (3) 要求输入一个职工,用折半查找法找出该职工姓名,从主函数输入要查找的职工,输出该职工姓名。 9. 以下函数p的功能是用递归方法计算x的n阶勒让德多项式的值;请编p函数,在main函数中调用自定义函数实现功能。递归公式如下: 10. 用递归法将一个整数n转换成字符串。例如:输入数483.应输出字符串“4 8 3”, 输入数-483.应输出字符串“- 4 8 3”。n的位数不确定,可以是任意的整数。 11. 给出年、月、日,计算该日是该年的第几天。(提示:注意闰年的情况。) 12. 有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生姓名、3门课成绩),计算出平均成绩,将原有数据计算出的平均分数存放在磁盘文件stud中。 设5名学生的学姓名3门课成绩如下: 99101 Wang 89,98,67.5 99103 Li 60,80,90 99106 Fun 75.5,91.5,99 99110 Ling 100,50,62.5 99113 Yuan 58,68,7l 在向文件stud入数据后,应检查验证stud文件中的内容是否正确。 13. 将上题stud文件中的学生数据,按平均分进行排序处理,将已排序的学生数据存入一个新文件stu_sort中. 在向文件stu_sort入数据后,应检查验证stu_sort文件中的内容是否正确。 14. 对上题已排序的学生成绩文件进行插入处理,插入一个学生的3门课成绩。程序先计算新插入学生的平均成绩,然后将它按成绩高低顺序插入,插入后建立一个新文件。 要插入的学生数据为: 99108 Xin 90,95,60 在向新文件stu_new入数据后,应检查验证stu_new文件中的内容是否正确。 15. 对上题已排序的学生成绩文件进行删除处理,删除学为“99106”的学生数据,并将修改后的文件信息保存到原文件stu_new。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值