实验内容: 编写几个函数:
1.输入10个职工的姓名和职工号;
2.按照职工号由小到大的顺序排序,姓名顺序也随之调整;
3. 要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。
本实验运行环境:Microsoft Visual c++ 2010学习版。
代码:
#include <stdio.h>
#include <string.h>
int main() //定义主函数
{
void input_num_name(double num[], char name[][16], int n);
void sort_num_name(double num[], char name[][16], int n);
void seek_num_name(double num[], char name[][16], int n, int seek_num);
double num[100],seek_num;
int i,j,n; //定义变量i,j,k
char name[100][16];
printf("您公司有多少位员工:");
scanf("%d", &n);
input_num_name(num, name, n);
sort_num_name(num, name, n);
printf("请输入您要查找的员工工号:");
scanf("%lf", &seek_num);
seek_num_name(num, name, n, seek_num);
return 0; //返回函数值为0
}
void input_num_name(double num[], char name[][16], int n)
{
int i,j;
for(i=0;i<n;i++)
{
printf("请您输入第%d位员工的工号和姓名,空格隔开:\n",i+1);
scanf("%lf", &num[i]);
gets(name[i]);
}
printf("您的所有员工信息如下:\n");
for(i=0;i<n;i++)
{
printf("工号:%lf 姓名:%s\n", num[i], name[i]);
}
}
void sort_num_name(double num[], char name[][16], int n)
{
printf("按工号由小到大排序如下:\n");
int i,j; //定义变量
double temp_num;
char temp_name[16];
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(num[j]>num[j+1])
{
temp_num = num[j];
num[j] = num[j+1];
num[j+1] = temp_num;
strcpy(temp_name,name[j]);
strcpy(name[j],name[j+1]);
strcpy(name[j+1],temp_name);
}
}
}
for(i=0;i<n;i++){
printf("工号:%lf 姓名:%s\n", num[i], name[i]);
}
}
void seek_num_name(double num[], char name[][16], int n, int seek_num)
{
int low = 0;
int high = n-1;
int mid;
int i=1;
while(low<high)
{
mid = (high+low)/2;
if(num[mid]==seek_num)
{
printf("您要查找的员工信息如下:\n工号:%lf 姓名:%s", num[mid], name[mid]);
i = 0;
break;
}
else if(num[mid]>seek_num)
{
high = mid-1;
}
else
{
low = mid+1;
}
}
if(i)
{
printf("本公司暂无此员工!");
}
}