#include<stdio.h>
#include<string.h>
void main()
{
int a[] = {12,5,21,33,55,77,11,2};
int zf = sizeof(a) / sizeof(a[0]);
for (int i = 0; i < zf; i++)
{
if (a[i] < a[0])
{
a[0] = a[i];
}
}
printf("最小为%d,下标是0",a[0]);
}
如果是求最小值的情况,不保证元素丢失情况,可以采用这种方法。将所有数与第一个数比较,如果比第一个数小,就把这个数付给a[0],那么最小值的下标一定是0。可是这样的话a[0]一开始的值就被覆盖了。
最好还是定义一个变量min,初始化时将a[0]赋给min。然后进行比较。这样达到查找的效果,元素也不会丢失。
下面给一个例子:
#include<stdio.h>
#include<string.h>
void main()
{
int a[2][4] = { {12,5,21,33},{55,77,11,2} };
int zf = sizeof(a) / sizeof(a[0][0]);
int row_len = sizeof(a)/sizeof(a[0]);
int col_len = zf / row_len;
int min = a[0][0];
int i=0, j=0,row,col;
for ( i = 0; i < row_len; ++i)
{
for (j = 0; j < col_len; ++j)
{
if (a[i][j] < min)
{
min = a[i][j];
row = i;
col = j;
}
}
}
printf("最小为%d,下标是%d,%d\n", min, row, col);
}
这里要注意的是,输出下标时,当退出for循环时,如果输出i,j的话,会输出2,4。这是因为for循环是先判断条件满足之后,并将循环体执行完后,再执行自增(i++或者++i),所以我这里采用将值赋给变量row,col保存。