标题:高手求解,一直不懂哪里出问题了
只看楼主
kr0
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2020-6-9
结帖率:75%
已结贴  问题点数:5 回复次数:5 
高手求解,一直不懂哪里出问题了
//这个程序用来输入一维数组的10个元素,并将最小值与第一个数交换,最大值与最后一个数交换.
运行结果  :98 24 56 78 1 32 36 44 29 6
            24 6 56 78 1 32 36 44 29 98
一直找不出问题在哪,各位大神帮忙看一下,谢谢。

#include<stdio.h>
int Min(int *, int n);
int Max(int *, int n);
int main(void)
{
    int i,mi,ma,temp;
    int a[10];
    for (i = 0; i < 10; i++)
        scanf_s("%d", &a[i]);
   
    if (mi=Min(a, 10)!=0)
    {
        temp = a[0];
        a[0] = a[mi];
        a[mi] = temp;
    }
   
    if (ma = Max(a, 10)!=9)
    {
        temp = a[9];
        a[9] =a[ma];
        a[ma] = temp;
    }
    for (i = 0; i < 10; i++)
        printf("%d ", a[i]);
    printf("\n");
    return 0;
}
int Min(int *t, int n)
{
    int i, j, k;
    int z=0;
    for (i = 0; i < n - 1; i++)
    {
        k = i;
        for (j = 1; j < n; j++)
        {
            z=(t[k]>t[j]) ?  j : k;
            
        }
               
    }
    return z ;
}
int Max(int *t,int n)
{
    int i, j, k;
    int z=0;
    for (i = 0; i < n - 1; i++)
    {
        k = i;
        for (j = 1; j < n; j++)
        {
            z=(t[k] < t[j]) ?  j : k;
            
        }
    }

    return z;
}
搜索更多相关主题的帖子: for int temp return i++ 
2020-07-13 19:09
吕孟伟
Rank: 8Rank: 8
等 级:贵宾
威 望:27
帖 子:200
专家分:870
注 册:2018-10-4
得分:1 
程序代码:
#include<stdio.h>
int Min(int *, int n);
int Max(int *, int n);
int main(void)
{
    int i, temp1, temp2;
    int a[10];
    int index_min;
    int index_max;
    for (i = 0; i < 10; i++)
        scanf("%d", &a[i]);
    
    if ((index_min = Min(a, 10))!=0)
    {
       temp1 = a[0];
       a[0] = a[index_min];
       a[index_min] = temp1;
    }
    
    if ((index_max = Max(a, 10))!=9)
    {
        temp2 = a[9];
        a[9] =a[index_max];
        a[index_max] = temp2;
    }
    for (i = 0; i < 10; i++)
         printf("%d ", a[i]);
    printf("\n");
    return 0;
}
int Min(int *t, int n)
{
    
    int index;
    int min = 10000;
    for(int i = 0; i < n; ++i){
        if(t[i] < min){
            min = t[i];
            index = i;
        }
    }
    return index;
}
int Max(int *t,int n)
{
    
    int index;
    int max = -1;
    for(int i = 0; i < n; ++i){
        if(t[i] > max){
            max = t[i];
            index = i;
        }
    }
    return index;
}

借用一下侯捷的话:勿在浮沙筑高台。
2020-07-13 20:45
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:1 
#include<stdio.h>
int main(void)
{
    int i,mi=0,ma=0,temp;
    int a[10];
    for (i = 0; i < 10; i++)
    {
        scanf_s("%d", &a[i]);
        if (a[i] < a[mi])
            mi = i;
        else if (a[i] > a[ma])
            ma = i;
    }
    if (mi != 0)
    {
        temp = a[0];
        a[0] = a[mi];
        a[mi] = temp;
    }
    if (ma == 0)
        ma = mi;
    if (ma != 9)
    {
        temp = a[9];
        a[9] =a[ma];
        a[ma] = temp;
    }
    for (i = 0; i < 10; i++)
        printf("%d ", a[i]);
    printf("\n");
    return 0;
}
2020-07-13 21:02
流氓小哥
Rank: 1
等 级:新手上路
威 望:1
帖 子:5
专家分:2
注 册:2020-7-15
得分:0 
两个函数体写的有问题,按你给的数字看一下z=(t[k]>t[j]) ?  j : k;,98 24 56 78 1 32 36 44 29 6
拿最小值来说,当最后一次循环时i = 9时k = 9
j = 1, 6与24比返回k,z = 9
j = 2, 6与56比返回k,z = 9
j = 3, 6与78比返回k,z = 9
j = 4, 6与 1比返回j,z = 4
...
j = 9, 6与 6比返回k,z = 9
发现问题了吗?前面一大堆的循环都没有用,6比6才是最后的结果
2020-07-17 08:17
流氓小哥
Rank: 1
等 级:新手上路
威 望:1
帖 子:5
专家分:2
注 册:2020-7-15
得分:2 
还有一个问题就是if语句, if (mi=Min(a, 10)!=0),经测试mi的结果并不是9,而是先计算Min(a, 10)!=0,Min(a, 10)=6,6!=0为真,值为1,所以该if语句中mi的值为1,所以第一个if执行后的结果是24 98 56 78 1 32 36 44 29 6
第二个if中返回的z = 8,同样8 != 9, ma = 1, a[1]和a[9]换后结果为24 6 56 78 1 32 36 44 29 98
2020-07-17 09:19
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
得分:1 
考虑到 最大值在第一位 或者 最小值在最后一位的情况下,或者最大在第一位同时最小在最后一位的情况下, 而且兼容“将最小值与第一个数交换,最大值与最后一个数交换”两个操作任意顺序的情况下
应该先标记最后进行交换,这样才能保证不管先换小的,还是先换大的,结果 都是一样的
2020-07-17 11:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-502508-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.221251 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved