本来想写个新手版~不过高手病又犯了
~~
除了不用结构体处理~感觉开挂的代码不少~
程序代码:
#include<stdio.h>
#include<string.h>
#define N 10
#define S(a) sizeof(a)/sizeof(a[0])
typedef void FUN(int a[],char b[][10]);
FUN input,sort,output;
FUN **P=NULL;
void (*COM[])()={input,sort,output};
void search(int n,int a[],char b[][10]);
void swap(int a[],char b[][10],int i,int j);
int main()
{
int a[N]={0};
char b[N][10]={0};
int num=0;
char ch=0;
for (P=COM;P-COM<S(COM);++P)
(**P)(a,b);
do
{
fflush(stdin);
printf("\ninput search num:");
scanf("%d%*c",&num);
search(num,a,b);
printf("continue?input Y||N:");
ch=getchar();
}while (ch=='y'||ch=='Y');
return 0;
}
void input(int a[],char b[][10])
{
int i=0;
for (i=0;i<N;i++)
{
printf("input num-%d--",i+1);
scanf("%d%*c",&a[i]);
printf("input name-%d--",i+1);
scanf("%[^\n]%*c",b[i]);
printf("\n");
}
}
void sort(int a[],char b[N][10])
{
int i=0;
int j=0;
int k=0;
for (i=0;i<N;i++)
{
k=i;
for (j=i;j<N;j++)
if (a[k]>a[j])
k=j;
if (k!=i)
swap(a,b,i,k);
}
}
void output(int a[],char b[N][10])
{
int i=0;
for (i=0;i<N;i++)
printf("%d\n%s\n\n",a[i],b[i]);
}
void swap(int a[],char b[][10],int i,int j)
{
char s[N];
a[i]^=a[j];
a[j]^=a[i];
a[i]^=a[j];
strcpy(s,b[i]);
strcpy(b[i],b[j]);
strcpy(b[j],s);
}
void search(int n,int a[],char b[][10])
{
int left=0;
int right=N-1;
int mid=0;
do
{
mid=(left+right)/2;
if (n==a[mid])
{
printf("%s\n",b[mid]);
return ;
}
if (n>a[mid])
left=mid+1;
else
right=mid-1;
}while (mid!=(left+right)/2);
printf("Not found\n");
}
[此贴子已经被作者于2017-1-24 14:51编辑过]