题目:写几个函数
(1)输入十个员工的姓名和职工号;
(2)按员工号由小到大顺序排序,姓名顺序也随之调整;
(3)要求输入一个员工号,用折半查找找出该职工的姓名,从主函数输入要查找的职工号,输出职工的姓名;
其中的算法有:选择排序法和折半查找法。
代码如下:
/**
写几个函数
(1)输入十个员工的姓名和职工号
(2)按员工号由小到大顺序排序,姓名顺序也随之调整
(3)要求输入一个员工号,用折半查找找出该职工的姓名,从主函数输入要查找的职工号,输出职工的姓名;
*/
#include<stdio.h>
#include<string.h>
#define N 10
int main()
{
void input(int num[],char name[][8]);//声明函数
void sort(int num[],char name[][8]);//声明函数
void search(int n,int num[],char name[][8]);//声明函数
int num[N];//用于输入序号
char name[N][8];//用于输入名字
int n;//用于输入要查询的序号
int flag=1;//用于判断循环
char c;
input(num,name);
sort(num,name);
while(flag)
{
printf("Please input the number of searching:");
scanf("%d",&n);
search(n,num,name);
printf("Continue or not(Y/N)?");
getchar();//吸收回车符
scanf("%c",&c);
if(c == 'n' ||c == 'N')
{
flag=0;
}
}
return 0;
} /*main()*/
void input(int num[],char name[][8])
{
for(int i=0;i<N;i++)//i是循环变量
{
printf("Please input a number:");
scanf("%d",&num[i]);//输入序号
printf("Please input the name:");
getchar();//吸收回车符
gets(name[i]);//输入名字
}
}/*input()*/
void sort(int num[],char name[][8])//选择法排序函数
{
int temp_n; //中间变量
char temp_c[8];//中间变量
for(int i=0;i<N-1;i++)
{
for(int j=i+1;j<N;j++)
{
if(num[j]<num[i])
{
temp_n=num[j];
num[j]=num[i];
num[i]=temp_n;
strcpy(temp_c,name[j]);//字符串交换使用的是strcpy()函数
strcpy(name[j],name[i]);//temp_c=name[j];
strcpy(name[i],temp_c);//name[j]=num[i];
//num[i]=temp_c;
}
}
}
printf("\n");
printf("The result:\n\n");
for(int i=0;i<N;i++)
{
printf("%5d %10s",num[i],name[i]);
printf("\n");
}
}/*sort()*/
void search(int n,int num[],char name[][8])
{
int top=0;
int bott=N-1;
int mid=(top+bott)/2;
int sign=0;
while((sign == 0) && (top<=bott))
{
if(n == num[mid])
{
printf("The corresponding name of number=%d is: %s",n,name[mid]);
sign=1;
}
else if(n>num[mid])//如果n大于中间位置的数,向后查找
{
top=mid+1;//开始位置变,末位置不变
mid=(top+bott)/2;//中间位置变
}
else//如果n小于中间位置的数,向前查找
{
bott=mid-1;//开始位置不变,末位置变
mid=(top+bott)/2;
}
}
if(sign == 0)
{
printf("Can not find!");
}
printf("\n");
}/*search()*/
运行结果如下:
写程序遇到的主要问题:strcpy()函数的使用。
原型声明: char *strcpy(char* dest, const char *src);
头文件 :#include <string.h> 和 #include <stdio.h>
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。
新手小白,请大家多多指教。