- #include
- #include
- 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
- #include
- 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保存。