tyf1218405122 发表于 2022-6-6 20:26:58

数组求最大值最小值及其下标

#include <stdio.h>
#include <string.h>
#define N 8
int main()
{
        int a={122,12,15,88,65,78,99,43};
        int i,j,min,max,x,y;
        min=a;
        max=a;
        for(i=0,j=0;i<N&&j<N;i++,j++)
        {
                if(min>a)
                {
                        min=a;
                        x=i;       
                }       
                if(max<a)
                {
                        max=a;
                        y=j;
                }
        }       
       
        printf("%d%d\n",min,x);
        printf("%d%d\n",max,y);
}

我想求最大值和最小值及其他们的下标;
为什么是错的呢??



还有这样的问题,在获取 最小或者最大数的下标的时候:
比如最小值的下标,我给最小值放在自定义数组的最开始的位置(也就是a【0】);

然后我用这样的代码:

int min,i,x;
min=a;
for(i=0;i<N;i++)
{
        if(min>a)
        {
                min=a;
                x=i;
        }
}


这个时候这个打印出来的x的值是什么呢?
(x未赋初值);

傻眼貓咪 发表于 2022-6-6 20:39:14

#include <stdio.h>
#define N 8

int main(void) {
        int arr = { 122, 12, 15, 88, 65, 78, 99, 43 };
        int m, n = m = 0;
        for (int i = 0; i < N; ++i) {
                if (arr > arr) {
                        m = i;
                }
                if (arr < arr) {
                        n = i;
                }
        }
        printf("max: %d\n", arr);
        printf("min: %d\n", arr);
}

tyf1218405122 发表于 2022-6-6 20:46:54

傻眼貓咪 发表于 2022-6-6 20:39


这个我知道,我只是想知道为啥我的那个y会等于1

tyf1218405122 发表于 2022-6-6 20:48:05

tyf1218405122 发表于 2022-6-6 20:46
这个我知道,我只是想知道为啥我的那个y会等于1

只是因为我没有给初值的话,我看网上很多人的代码都没有给,
然后他们是没有考虑这个情况还是什么

风车呼呼呼 发表于 2022-6-6 21:14:48

就像你先预设最大值和最小值是 a 一样,为什么不把下标也初始化为 0 呢
你这数组最大值就在 a,if(max<a) 永远为假,到循环结束 y 都不曾赋值,最后却要打印 y 的值,当然报错了

临时号 发表于 2022-6-6 21:56:22

我看网上有很多人也加上了初始值,如果你不加的话,因为最大值就在第一位,所以全程都没有对y进行赋值操作,所以,输出时,C语言就会输出一个乱七八糟的东西给你
#include <stdio.h>
#include <string.h>
#define N 8
int main()
{
      int a={122,12,15,88,65,78,99,43};
      int i,j,min,max,x,y;
      min=a;
      max=a;
      x=0;
      y=0;
      for(i=0,j=0;i<N&&j<N;i++,j++)
      {
                if(min>a)
                {
                        min=a;
                        x=i;      
                }      
                if(max<a)
                {
                        max=a;
                        y=j;
                }
      }      
      
      printf("%d%d\n",min,x);
      printf("%d%d\n",max,y);
}

1050293757 发表于 2022-6-6 22:08:48

{:5_109:}

amazed 发表于 2022-6-7 00:30:15

6666666666666666666

leletatann 发表于 2022-6-7 02:20:00

本帖最后由 leletatann 于 2022-6-7 02:56 编辑

#include <stdio.h>
#include <string.h>
#define N 8
int main()
{
      int a={122,12,15,88,65,78,99,43};
      int i,j,min,max,x,y;
      min=a;
      max=a;
      for(i=0,j=0;i<N&&j<N;i++,j++)
      {
                if(min>=a)
                {
                        min=a;
                        x=i;      
                }      
                if(max<=a)    //这里如果不加等于,y的值就没有不会被j给赋值,因为122已经是最大的了(122<122,是不会执行里面的语句的),那么y就会赋值为垃圾值(通常为垃圾值,要看用什么编译器)
                {
                        max=a;
                        y=j;
                }
      }      
      
      printf("%d%d\n",min,x);
      printf("%d%d\n",max,y);
}

leletatann 发表于 2022-6-7 02:53:44

本帖最后由 leletatann 于 2022-6-7 03:08 编辑

leletatann 发表于 2022-6-7 02:20


打个比方来说#include <stdio.h>

int main()
{
      int x;
      printf("%d",x);   //这里x的值通常会自动赋值为0或者报错(要看是什么编译器)

}

那再加多一个int y#include <stdio.h>

int main()
{
      int x,y;
      printf("%d %d",x,y);   //这里的x通常也是0或者报错,这里的y有可能是0也有可能是垃圾值或者报错(同样要看是什么编译器)

}

那再加多一个int z呢#include <stdio.h>

int main()
{
      int x,y,z;
      printf("%d %d %d",x,y,z);   //这里的x,y,z有可能是0也有可能是垃圾值或者报错(同样要看是什么是编译器)

}

如果换一个方式写#include <stdio.h>

int main()
{
      int x,y;
      x = y;
      printf("%d %d",x,y);    //这里x,y的值通常会自动赋值为0或者报错(同样要看是什么编译器)

}

那再加一个int z#include <stdio.h>

int main()
{
      int x,y,z;
      x = y;
      printf("%d %d %d",x,y,z);   //这里的x,y,z有可能是0也有可能是垃圾值或者报错(同样要看是什么编译器)

}

这样什么情况下不会报错呢#include <stdio.h>

int main()
{
      int x,y=1;               //这里的x虽然开始的时候没有给于赋值,但是y初始值为1,而下一行的y赋值给于x,所以x就有了一个值
      x = y;
      printf("%d %d",x,y);      

}

所以结论就是如果你没有给于初始值或者赋值,那有可能是垃圾值或者自动赋值为0又或者编译器报错

kerln888 发表于 2022-6-7 08:34:34

帮顶下{:10_256:}

画画的babi 发表于 2022-6-7 11:13:21

{:5_90:}

okamn 发表于 2022-6-7 11:34:30

{:10_269:}

xueCxueCxueJava 发表于 2022-6-7 18:47:48

{:10_256:}

1050293757 发表于 2022-6-7 19:24:04

{:5_109:}

xueCxueCxueJava 发表于 2022-6-8 13:37:41

{:10_256:}

番杰 发表于 2022-6-8 16:46:13

你这个代码错就错在了没有给X,y赋初值,同时最大值还就是a;

回答第二个问题:
这种情况下,打印出来的会是个随机数,
说是随机数,但说白了,就是你定义的x的地址中的数据;
因为你定义x的时候没有赋初值,
所以x的数值(或是说x的地址中的数据)对于你来说就是一个随机数,
它可以是任何一个值(不超过你定义的数据类型大小范围的)。

另外,写代码的时候,一定要注意给定义的数据赋初值,
不然可是会出问题的,代码多的情况下,出问题了,你甚至都不知道出在哪了。

myqf123 发表于 2022-6-9 09:04:27

正在学习中

豆嘉木 发表于 2022-6-9 09:14:22

{:10_256:}

豆嘉木 发表于 2022-6-9 09:15:25

{:10_266:}{:10_266:}
页: [1] 2
查看完整版本: 数组求最大值最小值及其下标