对10个职工的姓名职工号按从小到大排序,程序有点长,但问题只在第二个函数,只看第二个就可以
#include <stdio.h>
#include <string.h>
int a;
static void scan_f(char str1[][5],int str2[]);//输入职工姓名和号码 ,原题第一问
static void rank(char str1[][5],int str2[]);//对职工进行排序,从小到大 ,号码和姓名都进行排序 ,原题第二问
static int seek(char str1[][5],int str2[]);//用折半查找法,输入号码,输出职工姓名 ,原题第三问
int main()
{
char str1[10][5];
int z;
int str2[10];
scan_f(str1,str2);
rank(str1,str2);
printf("\nplease enter the number of the employee:");
scanf("%d",&a);
z=seek(str1,str2);
printf("\nthe name is :%s",str1[z]);
}
static void scan_f(char str1[][5],int str2[])
{
int i,j;
printf("please input the two strings:\n");
for(i=0;i<=9;i++)
{
printf("input the number:");
scanf("%d",&str2[i]);
printf("input the name:");
getchar();//吸收enter
gets(str1[i]);
}
}
static void rank(char str1[][5],int str2[])
{
int i,j,temp,k;
char str3[5],str4[5];//一个用来存储空白字符,一个用来暂时存储数组
for(k=8;k>=0;k--)
for(i=0;i<=k;i++)
{
if(str2[i]>str2[i+1])
{
temp=str2[i+1];//利用沉底法对职工号码进行排序
strcpy(str3,str1[i]);//利用strcopy函数进行字符串之间的赋值,使职工姓名和号码同步变化
str2[i+1]=str2[i];
strcpy(str1[i],str1[i+1]);
str2[i]=temp;
strcpy(str1[i+1],str3);
}
}
for(i=0;i<=9;i++)//输出职工号码和对应姓名
{
printf("number:%d\n",str2[i]);
printf("name:");
for(j=0;j<=4;j++)
{
printf("%c",str1[i][j]);
}
printf("\n");
}
}
static int seek(char str1[][5],int str2[])
{
int z,i,min,max;
if(a>str2[5])//利用折半查找法检索员工
{
min=6;
max=9;
}
else if(a==str2[5])
z=5;
else {
min=0;
max=4;
}
for(i=min;i<=max;i++)
if(str2[i]==a)
{
z=i;
break;
}
return z;//返回str2对应的i
}
因位是第一次发图片,不知道图片大家是否看的到,这个程序一切正常,只有第二个函数运行时出了问题:3号职工运行结果本该是number:3,name:Li,但实际运行却是number:3,name:Li g,多出来一个空格和g。大家无论解答不解答,能否告诉我图片是否看的到??谢谢