C程问题?????

来源:百度知道 编辑:UC知道 时间:2024/06/16 04:18:59
要求:
输入6个数,然后从小到大排列,输出来;
再插入1个数,再从小到大排列,输出来.
我编写的程序是:
#include <stdio.h>
void indata(int *a, int m);
void sort(int *a,int m);
void outdata(int *a,int m);
void insertdata(int *a,int m,int x);
void outdata1(int *a,int m,int x);
void main()
{
int a[6],x=0;
indata(a,6);
sort(a,6);
outdata(a,6);
insertdata(a,6,x);
outdata1(a,6,x);
}
void indata(int *a, int m)
{
int i;
for (i=0;i<m;i++)
scanf("%d",a+i);
}
void sort(int *a,int m)
{
int i,j,t,min;
for (j=0;j<m-1;j++)
{
min=j;
for (i=j+1;i<m;i++)
if (a[min]>a[i])
min=i;
t=a[min];
a[min]=a[j];
a[j]=t;
}
}
void outdata(int *a,int m)
{
int i;
for (i=0;i<m;i++)
printf("%d ",a[i]);
}
void insertdata(int *a,int m,int x)
{
int i,j;

没细看程序,但你的程序最后有7个数,那么a长度也至少也为7啊.

insertdata也有问题,应该先用一个循环从尾部开始移动数据,遇到比要插入的数小的元素时停止循环,将数插到当前位置的后一位.

outdata1调用时,第二个参数应该是7了

正确代码如下,你参考下

#include <stdio.h>
void indata(int *a, int m);
void sort(int *a,int m);
void outdata(int *a,int m);
void insertdata(int *a,int m,int x);
void outdata1(int *a,int m,int x);
void main()
{
int a[7],x=0;
indata(a,6);
sort(a,6);
outdata(a,6);
insertdata(a,6,x);
outdata1(a,7,x);
}
void indata(int *a, int m)
{
int i;
for (i=0;i<m;i++)
scanf("%d",a+i);
}
void sort(int *a,int m)
{
int i,j,t,min;
for (j=0;j<m-1;j++)
{
min=j;
for (i=j+1;i<m;i++)
if (a[min]>a[i])
min=i;
t=a[min];
a[min]=a[j];
a[j]=t;
}
}
void outdata(int *a,int m)
{
int i;
for (i=0;i<m;i++)