Cn1973 发表于 2021-5-11 21:17:47

题目:输入n个数,将其中最小的数与第一个数对换把最大的数与最后一个数对换

题目并且要求写三个函数
本人写的代码如下,但就是输出结果中总会有一个数和排在第一个最小的那个数相同,请问是为什么呢,求大神指点指点,最好可以把完整代码发一下,真的非常感谢啊!!!!
#include <stdio.h>
void input(int *a,int n)
{
        int i;
        printf("enter %d integers:\n",n);
        for(i=0;i<n;i++)
                scanf("%d",a++);
}
void deal(int *a,int n)
{
        int min=*a,max=*a,temp,i;
        for(i=0;i<n;i++)
        {
                if(min>*(a+i))       
                        min=*(a+i);
                if(max<*(a+i))
                        max=*(a+i);
        }
        if(min!=*a)
        {
                temp=min;
                min=*a;
                *a=temp;
        }
        if(max!=*(a+n-1))
        {
                temp=max;
                max=*(a+n-1);
                *(a+n-1)=temp;
        }
}
void output(int *a,int n)
{
        int i;
        printf("after deal:\n");
        for(i=0;i<n;i++)
                printf("%d ",*(a+i));
}
int main()
{
        int a,*p;
p=a;
        input(p,10);
        deal(p,10);
        output(p,10);
p=a;
        return 0;
}

Cn1973 发表于 2021-5-11 21:23:46

帖子中的图片出现的是另一种情况{:10_266:}{:10_266:}{:10_266:}
就是出现了不是第一个数但是却有两个重复的数字,真的很蒙蔽啊{:10_247:}

yuxijian2020 发表于 2021-5-11 22:21:53

本帖最后由 yuxijian2020 于 2021-5-11 22:23 编辑

我没自己运行,就一眼看过去的话
int min=*a,max=*a,temp,i;
这里 要找最小的数和 最大的数
那一般 min 的初值最好设一个极大数(比如 INT_MAX )   max最好设一个极小数(比如 0 )

另外,一个函数最好只干一件事

yuxijian2020 发表于 2021-5-11 22:31:34

我看了半天,你这功能不就是找到最小的数放在数组第一个位置,找到最大的数放在数组的最后一个位置么
没啥问题啊,你本身输入的值就有相同的啊
你想实现啥功能

Cn1973 发表于 2021-5-11 22:42:53

yuxijian2020 发表于 2021-5-11 22:31
我看了半天,你这功能不就是找到最小的数放在数组第一个位置,找到最大的数放在数组的最后一个位置么
没啥 ...

哦哦,是我误解了哈哈哈哈{:10_291:}
页: [1]
查看完整版本: 题目:输入n个数,将其中最小的数与第一个数对换把最大的数与最后一个数对换