一个c语言程序,想要实现名字随着序号重新排列

来源:百度知道 编辑:UC知道 时间:2024/05/21 12:38:46
main()
{void sort(int (*p)[10],int *q);
char a[10][10];
int b[10];
int i,m;
printf("\ninter 10 names and codes:\n");
for(i=0;i<10;i++)
scanf("%s %d",a[i],&b[i]);
for(i=0;i<10;i++)
printf("%s %d\n",a[i],b[i]);
sort(a,b);
}
void sort(int (*p)[10],int *q)
{int i,m;
char t[10];
for(i=0;i<10;i++)
{if(*(q+i)>*(q+i+1))
{m=*(q+1);*(q+1)=*(q+i+1);*(q+i+1)=m;
strcpy(t,*(p+i));
strcpy(*(p+i),*(p+i+1));
strcpy(*(p+i+1),t);
}
}
printf("%s %d",*(p+i),*(q+i));
}
自己编的,通过了编译,却无法运行,
高手指点啊!
哪位高手指点一下正确的源程序啊!

主函数没问题。主要是sort()中排序出错了。
看你两两比较数据,似乎是想用冒泡排序法。
将sort()稍作修改即可:
void sort(char (*p)[10],int *q)
{
int i,j,m;
char t[10];
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
if(*(q+j)>*(q+j+1))
{
m=*(q+j);*(q+j)=*(q+j+1);*(q+j+1)=m;
strcpy(t,*(p+j));
strcpy(*(p+j),*(p+j+1));
strcpy(*(p+j+1),t);
}
}
for(i=0;i<10;i++)
printf("%s %d\n",*(p+i),*(q+i));
}
我把形参的类型改了,不然会有警告的。
当然,你也可以用顺序排序或插入排序等等方法。C语言书上都有例子的。

单步跟踪调试,不然没有提高的

如果没有单步跟踪功能,可以使用printf()输出每一次变量改变的值,根据输出分析问题