读书人

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

发布时间: 2013-01-05 15:20:40 作者: rapoo

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

输出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)
{


int i, max, min;
min = *arr;
max = *(arr + MAXNUM - 1);
for(i = 0; i < MAXNUM; i++)
{
if(*(arr + i) < min)
{
min = *(arr + i);
*(arr + i) = *arr;
*arr = min;
}
if(*(arr + i) > max)
{
max = *(arr + i);
*(arr + i) = *(arr + MAXNUM - 1);
*(arr + MAXNUM - 1) = max;
}
}
return;
}

void print(int *arr)
{
int i;

printf("\n the sort result are:\n");
for(i = 0; i < MAXNUM; i++)
printf("%d ", *(arr + i));
printf("\n");

return;
}


[解决办法]
新手,找错,关于指针和调用函数,谢谢。

#include <stdio.h>
#define LEN 10
void input(int *a)
{
int i = 0;

printf("Please input 10 numbers:");
for(i=0; i<LEN; i++)
{
scanf("%d", &a[i]);
}
}

void deal(int *a)
{
int i=0;
int iMin=0, iMax=0, MinNum=a[0], MaxNum=a[0];
int temp = 0;

for(i=0; i<LEN; i++)
{
if(a[i] < MinNum)
{MinNum = a[i];iMin = i;}
if(a[i] > MaxNum)
{MaxNum = a[i];iMax = i;}
}

temp = a[iMin]; a[iMin] = a[0]; a[0] = temp;
temp = a[iMax]; a[iMax] = a[LEN-1]; a[LEN-1] = temp;
}

void print(int *a)
{
int i = 0;

for(i=0; i<LEN; i++)
{
printf("%d ", a[i]);
}
}

int main(int argc, char *argv[])
{
int arr[LEN]={0};
int i=0;

input(arr);
deal(arr);
print(arr);

return 0;
}


[解决办法]
你scanf("", &a)忘了加&符合了

读书人网 >C语言

热点推荐