找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。数组元素的值用赋初值方法在程序中指定

思路:以第一行为例,找出该行最大的元素,根据元素可以得出它所在的列数,然后再找出该列最小的元素所在的行数;如果所在行数是第一行,那么此元素为鞍点之一;如果所在行数不是第一行,那么第一行没有鞍点;以此类推,即可找出所有的鞍点。

#include
int main()
{
	int i, j, m,k=0,b=0;
	int a[3][4] = {4,3,2,1,5,6,7,8,2,7,8,9};
	for (i = 0; i < 3; i++)
	{
	
		for (j = 1,m=0; j < 4; j++)
		{
			if (a[i][j] > a[i][m])
				m = j;
		}
		//用选择法求出在第i+1行的最大值所在的列数m+1
		for (j = 1,k=0; j < 3; j++)
		{
			if (a[j][m] 

找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。数组元素的值用赋初值方法在程序中指定_第1张图片

 

找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。数组元素的值用赋初值方法在程序中指定_第2张图片

 

在进行实验的过程中遇到了两个值得注意的问题:

1.选择排序法的滥用(只需要进行第一轮的比较出最大值即可,不需要再进行排序)

找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。数组元素的值用赋初值方法在程序中指定_第3张图片

按照预期的输出应当鞍点为4

2.循环中初值的赋予(只是在定义时赋予了初值,而随着循环的进行,m,k的初值是会改变的)

找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。数组元素的值用赋初值方法在程序中指定_第4张图片 

找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。数组元素的值用赋初值方法在程序中指定_第5张图片 

 大抵也是有阴差阳错的偶然

1.感悟i:测试用例需要全面而具有代表性,避免偶然性

2.程序的不足:在程序的测试当中发现,如果数组中的元素都相等还是会有鞍点,并且是位于第一个元素,这个和选择法的使用有关

3.留有的疑问:如果数组中的元素都相等是否会有鞍点?

你可能感兴趣的:(C语言练习,c语言)