首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-01-05 
新手求助,找错,关于指针和调用函数,多谢。。输出10个整数,将最小的与第一个交换,最大的与第十个交换。要求写

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

输出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)忘了加&符合了

热点排行