新手,找错,关于指针和调用函数,谢谢。

新手求助,找错,关于指针和调用函数,多谢。。

输出10个整数,将最小的与第一个交换,最大的与第十个交换。
要求写三个函数:输出10个数。
                进行处理。
                输出10个数。

编译时没错误,但运行是程序停止,请看看,感激不尽


代码如下:
#include <stdio.h>
void main()
{
void input(int array[10]);
void sort(int array[10]);
void print(int array[10]);
int a[10],*p;
input(a);
p=a;
sort(p);
print(p);
}

void input(int array[10])
{
int i;
printf("please enter array[10]:");
for(i=0;i<10;i++)
scanf("%d",array[i]);
}

void sort(int array[10])
{
int i,j,min,max,k,m,temp,*b;
b=array;m=0;k=0;
for(i=1;i<10;i++)
{
min=*b;
        if(min>*(b+i))
min=*(b+i);
m=i;  最小数的下标赋给m
}
    for(j=1;j<10;j++)
{
max=*b;
if(max<*(b+j))
max=*(b+j);
k=j;    最大数的下标赋给j
}
if(m==9 && k==0)     第一个数最大,第十个数最小
{temp=*b;*b=*(b+9);*(b+9)=temp;}
else if(m==9 && k!=0)    第一个数最大,第十个数不是最小
{temp=*b;*b=*(b+m);*(b+m)=temp;
    temp=*(b+9);*(b+9)=*(b+m);*(b+m)=temp;}
else      第一个数不是最大,第十个数不是最小
{temp=*b;*b=*(b+m);*(b+m)=temp;
temp=*(b+9);*(b+9)=*(b+k);*(b+k)=temp;}
}

void print(int array[10])
{
int *q,i;
q=array;
for(i=0;i<10;i++)
printf("%d  ",q++);
printf("\n");
}


------解决方案--------------------
给你改了改。

#include "stdio.h"

#define MAXNUM 10
void input(int *arr);
void sort(int *arr);
void print(int *arr);

int main()
{
    int a[10];

    input(a);
    sort(a);
    print(a);

    return 0;
}

void input(int *arr)
{
    int i;
    printf("please enter %d numbers", MAXNUM);
    for(i = 0; i < MAXNUM; i++)
        scanf("%d ",arr + i);
    printf("\nfinish\n the input nummbers are:\n");
    for(i = 0; i < MAXNUM; i++)
    int i;
    printf("please enter %d numbers\n", MAXNUM);
    for(i = 0; i < MAXNUM; i++)
        scanf(" %d",arr + i);
    printf("\nfinish\n the input nummbers are:\n");
    for(i = 0; i < MAXNUM; i++)
        printf("%d  ", *(arr + i));
    return;
}

void sort(int *arr)
{