C语言—子函数的练习

题目:写几个函数
(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的指针

 

新手小白,请大家多多指教。

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值