C语言函数

输入10个职工姓名和职工号
按职工号由小到大输出
输入职工号,按照折半法查找姓名;

#include <stdio.h>

char name[10][8];  //10个职工名称
unsigned short na[10], t; //10个职工序号

void s_r()  //输入职工名称和序号
{
	short i;
	for (i = 0; i < 10; i++)
	{
		printf("请输入第%d个:\t", i + 1);
		scanf("%s %d", name[i], &na[i]);
	}
}

void s_c()  //输出职工名称和序号
{
	short i;
	for (i = 0; i < 10; i++)
	{
		printf("%s\t%d\n", name[i], na[i]);
	}
}

void P_X()  //职工按照序号排序
{
	short i, j;
	for (i = 0; i < 10; i++)
		for (j = i + 1; j < 10; j++)
			if (na[i] > na[j])
				t = na[i], na[i] = na[j], na[j] = t;
}

short C_Z(short na_CZ)  //折中法找寻职工
{
	short L = 0, H = 9, f;  //L为最左边的,H为最右边的,f是中间;
	while (L <= H)   //当H>L时候结束
	{
		f = (L + H) / 2;//取中间值
		if (na[f] > na_CZ)  //当中间值大于找寻值
			H = f - 1;      //右边的等于中间值左边的值,中间值对比过了
		else if (na[f] < na_CZ)
			L = f + 1;
		else
			return f;  //当中间值等于找寻值结束
	}
	return -1;
}

int main()
{
	short i;  //输入需要寻找的职工序号  输入0结束
	s_r();
	P_X();
	s_c();
	while (1)
	{
		printf("输入0结束,输入职工号返回名字:");
		scanf("%d", &i);
		if (i)
		{
			i = C_Z(i);
			if (i >= 0)   //判断是否找到
				printf("%s\n", name[i]);  //输出职工名称
			else
				printf("无该职工\n");
		}
			
		else
			break;  //结束
	}
	printf("结束");
	return 0;
}

输入:
请输入第1个: a 15
请输入第2个: b 56
请输入第3个: c 97
请输入第4个: d 85
请输入第5个: e 54
请输入第6个: f 14
请输入第7个: s 64
请输入第8个: q 47
请输入第9个: r 66
请输入第10个: h 41
输出:
a 14
b 15
c 41
d 47
e 54
f 56
s 64
q 66
r 85
h 97
输入0结束,输入职工号返回名字:
继续输入:54
输出: e
或输入: 13
输出:
或输入: 0
输出: 结束

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值