求改错,c语言

2024-11-16 17:29:20
推荐回答(2个)
回答(1):

#include
#include
int num[10];
char name[10][8];
char s[8];
main()
{

int a;
void find(int a);
void input();
void sort();
input();
sort();
printf("输入员工序号:\n");
scanf("%d",&a);
find (a);
printf("%s",s[8]);
}

void find(int a)
{
int l=0 ,r=9;
int m=5;
while(1)
{
if(a>num[m]) l=m+1;
else if(a else break;
m=(l+r)/2;
}
printf("%s",name[m]);
strcpy(s,name[m]);

}

void input()
{
int i;
for(i=0;i<10;i++)
{
printf("输入学号,姓名\n");
scanf("%d%s",&num[i],name[i]);

}
}

void sort()
{
char temp[8];
int i,j,high;
for(j=0;j<10;j++)
{
for(i=0;i<9-j;i++)
if(num[i]>num[i+1])
{
high=num[i];
num[i]=num[i+1];
num[i+1]=high;
strcpy(temp,name[i]);
strcpy(name[i],name[i+1]);
strcpy(name[i+1],temp);
}
}
for(i=0;i<=9;i++)
printf("\n%d,%s",num[i],name[i]);
}
你那个void find(int a)是二分查找吧,我看不懂,就自己重新写了一个不懂的在说吧,就这样了

回答(2):

先说错误:
1:主函数里面:
int find(int a); 这个函数里面有输出,不需要返回值,可以是void find(int a);
printf("%s",s[8]); 多余,因为在find函数里面已经输出了,而且也语法错误,printf("%s",s);
2: find函数错误比较多
find(int a)
{
int i=4;
int mid=num[i]; /*这里可以不用赋值,因为在后面的for循环的最开始就赋值了*/
for(mid=num[i];mid{
if(a>num[mid]) /*mid的值是学号,不是坐标,所以这里应该是 num[i]*/
{
i=(i+9)/2;
mid=num[i];
}
if(a{
i=(0+mid)/2; /*这里mid是学号,应该是 i=(0+i)/2;*/
mid=num[i];
}
if(a=num[mid]) /*同理这里应该是 num[i]*/
break;
}
printf("%s",name[mid]); /*找到了才能输出名字和学号,假如没有找到呢?*/
strcpy(s,name[mid]); /*上面已经输出了,这里就没有必要返回了,后面两句可以删除*/
return (s[8]);
}

修改代码,并且测试通过,如下:
#include
#include
int num[10];
char name[10][8];
char s[8];
void main()
{
int a;
void input();
void sort();
void find(int a);
input();
sort();
printf("输入员工序号:\n");
scanf("%d",&a);
find (a);
}
void find(int a)
{
int i=4;
int isfound=0; /*判断是否找到*/
int mid;
for(mid=num[i];mid {
if(a>num[i])
{
i=(i+9)/2;
mid=num[i];
}
if(a {
i=(0+i)/2;
mid=num[i];
}
if(a=num[i])
{
isfound=1;/*找到*/
break;
}
}
if(isfound==1) /*找到输出学号和名字*/
{
printf("%d,%s",num[i],name[i]);
}
else /*没有找到,输出信息*/
{
printf("Not found!");
}
}
void input()
{
int i;
for(i=0;i<10;i++)
{
printf("输入学号,姓名\n");
scanf("%d,%s",&num[i],name[i]);
}
}
void sort()
{
char temp[8];
int i,j,high;
for(j=0;j<10;j++)
{
for(i=0;i<9-j;i++)
if(num[i]>num[i+1])
{
high=num[i];
num[i]=num[i+1];
num[i+1]=high;
strcpy(temp,name[i]);
strcpy(name[i],name[i+1]);
strcpy(name[i+1],temp);
}
}
for(i=0;i<=9;i++)
printf("\n%d,%s",num[i],name[i]);
}