C语言求数组最小值,并返回下标

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

你可能感兴趣的:(c语言)