用户可以自定义结构体,是C语言的可以更方便的解决各种类型的问题。我们知道结构体变量可以作为函数参数,那结构体内部的成员变量可以作为函数参数么?
#include<stdio.h>
#include<string.h>
struct Worker{
char name[10];
char num[8];
};
void Sort(struct Worker wk[]){ //排序函数
struct Worker temp;
for(int i=0;i<5;i++){
int k = i;
for(int j=i+1;j<5;j++){
if(wk[j].num>wk[k].num){
k = j;
}//end if
temp = wk[k];
wk[k] = wk[i];
wk[i] = temp;
}//end for
}//end for
for(int t=0;t<5;t++){
printf("%s %s\n",wk[t].name,wk[t].num);
}
}
void Select(struct Worker wk[],char n[8]){
int low = 0,high = 7;
int mid;
while(low<high){
mid = (low+high)/2;
if(wk[mid].num == n) printf("%s\n",wk[mid].name);
else if(wk[mid].num>n) low = mid + 1;
else if(wk[mid].num<n) high = mid - 1;
}//end while
}
void main(){
struct Worker wk[5];
printf("Please enter name and number\n");
for(int i=0;i<5;i++){
gets(wk[i].name);
gets(wk[i].num);
}//end for
printf("----------------------------------------\n");
for(int j=0;j<5;j++){
puts(wk[j].name);
puts(wk[j].num);
}//end for
printf("----------------------------------------\n");
printf("The order is\n");
Sort(wk);
printf("----------------------------------------\n");
printf("Please enter the number\n");
struct Worker temp;
gets(temp.num);
puts(temp.num);
Select(wk,temp.num);
}
上述代码定义了结构体Worker里面有两个字符串,为了实现按num[]将结构体变量排序,就需要对wk[].num进行排序。这里采用折半查找函数的方法来实现。
通过结构体定义我们知道 wk[].num 是一个字符数组,因此在函数形参列表中 用char n[]来表示形参,这样就可以实现,用结构体成员变量来作为函数的形参。