数组求最大值最小值及其下标
#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未赋初值); #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);
} 傻眼貓咪 发表于 2022-6-6 20:39
这个我知道,我只是想知道为啥我的那个y会等于1 tyf1218405122 发表于 2022-6-6 20:46
这个我知道,我只是想知道为啥我的那个y会等于1
只是因为我没有给初值的话,我看网上很多人的代码都没有给,
然后他们是没有考虑这个情况还是什么 就像你先预设最大值和最小值是 a 一样,为什么不把下标也初始化为 0 呢
你这数组最大值就在 a,if(max<a) 永远为假,到循环结束 y 都不曾赋值,最后却要打印 y 的值,当然报错了
我看网上有很多人也加上了初始值,如果你不加的话,因为最大值就在第一位,所以全程都没有对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);
} {:5_109:} 6666666666666666666 本帖最后由 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 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又或者编译器报错 帮顶下{:10_256:} {:5_90:} {:10_269:} {:10_256:} {:5_109:} {:10_256:} 你这个代码错就错在了没有给X,y赋初值,同时最大值还就是a;
回答第二个问题:
这种情况下,打印出来的会是个随机数,
说是随机数,但说白了,就是你定义的x的地址中的数据;
因为你定义x的时候没有赋初值,
所以x的数值(或是说x的地址中的数据)对于你来说就是一个随机数,
它可以是任何一个值(不超过你定义的数据类型大小范围的)。
另外,写代码的时候,一定要注意给定义的数据赋初值,
不然可是会出问题的,代码多的情况下,出问题了,你甚至都不知道出在哪了。 正在学习中 {:10_256:} {:10_266:}{:10_266:}
页:
[1]
2