C语言:找出一个已经赋值的二维数组里面的最大值和最小值

分析:        

        这个题目相对来说比较好理解,首先我们需要了解二位数组的下标是什么意思,a[3][2]这个数组代表的意思是这是一个具有3行2列的数组,数组名叫做a。数组名后面的第一个数字代表这个二维数组的行数第二个数字代表二维数组的列数

        其次我们需要了解,既然要找出这个数组的里面的最大值和最小值,那么我需要用到for循环遍历整个二维数组里面的所以元素进行对比。这里我们有多种方法进行对比,有的朋友会说用到经典算法冒泡算法对其进行升序排序之后输出第一个数据就是最小值,这种方法的逻辑是对的,但是代码量比较多,而且有的小伙伴如果对冒泡算法不太熟悉会出错。

        所以这里我们可以直接用假设方法,先定义一个变量max和min用来存放最大值和最小值,然后假定他们两的值都为数组里面第一个元素,赋值为a[0][0],然后利用for循环对所以数据进行循环遍历,在循环内设置判断条件,对数据进行依次对比,如果前一个值比后一个值大,那就把这个值赋值给最大值,反之给最小值,当所有的数据进行比对完之后,直接输出最大值和最小值就可以了。

代码:

#include "stdio.h"
#include "windows.h"
int main(){
	char a[3][2] = {12,15,17,30,1};
	//利用for循环遍历打印数组内所有数据 
	printf("原数组的数据为:\n");
	//外层循环为行数 
	for(int i=0;i<3;++i){
		//内层循环为列数 
		for(int j=0;j<2;++j){
			printf("%3d",a[i][j]);
		}
	}
	//定义两个变量用来存放最大值和最小值,并假设其值都为数组第一个元素的值 
	int max = a[0][0];
	int min = a[0][0];
	//外层循环为行数 
	for(int i=0;i<3;++i){
		//内层循环为列数 
		for(int j=0;j<2;++j){
			//在for循环内设置判断条件对所有数据进行依次对比 
			if(a[i][j]>a[0][0]){
				max = a[i][j];
			}if(a[i][j]<a[0][0]){
				min = a[i][j];
			}
		}
	}
	printf("\n最大值是:%d\n",max);
	printf("最小值是:%d\n",min);
	system("pause");
}

运行结果:

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是C语言的代码实现: ```c #include <stdio.h> #define ROW 2 // 定义行数 #define COL 3 // 定义列数 // 函数声明 void input(int a[][COL]); int max_of_min(int a[][COL]); void output(int a[][COL], int max, int row, int col); int main() { int a[ROW][COL]; input(a); int max = max_of_min(a); output(a, max, ROW, COL); return 0; } // 输入函数 void input(int a[][COL]) { printf("请输入%d行%d列的二维数组:\n", ROW, COL); for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { scanf("%d", &a[i][j]); } } } // 求最大值函数 int max_of_min(int a[][COL]) { int min, max = -1; for (int i = 0; i < ROW; i++) { min = a[i][0]; for (int j = 1; j < COL; j++) { if (a[i][j] < min) { min = a[i][j]; } } if (min > max) { max = min; } } return max; } // 输出函数 void output(int a[][COL], int max, int row, int col) { int row_cnt = 0, col_cnt = 0; printf("二维数组:\n"); for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { printf("%d ", a[i][j]); if (a[i][j] == max) { row_cnt++; } } printf("\n"); } printf("最大值为:%d\n", max); printf("行数为:%d\n", row_cnt); printf("列数为:"); for (int j = 0; j < col; j++) { col_cnt = 0; for (int i = 0; i < row; i++) { if (a[i][j] == max) { col_cnt++; } } printf("%d ", col_cnt); } } ``` 在该程序中,`input`函数用于输入二维数组,`max_of_min`函数用于求出二维数组中各行中最小值最大值,`output`函数用于输出二维数组最大值、行数和列数。在`main`函数中调用这些函数,实现了对二维数组的处理。 ### 回答2: 首先,在main函数中通过键盘输入获取二维数组的行数和列数,并动态创建一个二维数组。然后编写一个函数,遍历每一行,找出各行最大值中的最小值及其下标。 具体的步骤如下: 1. 在main函数中,通过键盘输入获取二维数组的行数和列数,并进行合法性判断。然后动态创建一个二维数组,大小为行数和列数。 2. 在主函数中定义一个变量minValue,用于存储最小的数值。初始化为一个较大的值,在比较过程中逐步更新。 3. 定义两个变量minRow和minCol,分别用于存储最小值所在的行和列的下标。 4. 编写一个名为findMinValueIndex的函数来找出各行最大值中的最小值及其下标。函数的参数为二维数组和行数。 5. 在findMinValueIndex函数中,通过循环遍历每一行,依次找出每行的最大值并与minValue进行比较。如果某一行的最大值小于minValue,则更新minValue的值为该最大值,并分别将当前行和列的下标赋值给minRow和minCol。 6. 循环结束后,findMinValueIndex函数返回最小值的数值。 7. 在main函数中,调用findMinValueIndex函数,并将返回的最小值打印出来,同时也打印出最小值的下标信息。 这样,就能通过编写函数来求出二维数组中各行最大值最小的数及其下标,并在main函数中进行验证。 ### 回答3: 为了实现该功能,我们需要分别编写两个函数,一个是用于求得各行最大值最小的数及其下标的函数,另一个是用于验证结果的函数。下面是具体的代码实现: ```c #include <stdio.h> #include <math.h> #define MAX_ROW 100 #define MAX_COL 100 void findMinValue(int arr[MAX_ROW][MAX_COL], int rows, int cols, int* minValue, int* rowIndex) { // 初始化最小值为第一行的最大值,行下标为0 *minValue = arr[0][0]; *rowIndex = 0; // 遍历每一行,找到最大值最小的数及其行下标 int i, j; for (i = 0; i < rows; i++) { int max = arr[i][0]; for (j = 1; j < cols; j++) { if (arr[i][j] > max) { max = arr[i][j]; } } if (max < *minValue) { *minValue = max; *rowIndex = i; } } } void verifyResults(int arr[MAX_ROW][MAX_COL], int rows, int cols, int minValue, int rowIndex) { printf("最小最大值是:%d\n", minValue); printf("该最大值在第%d行\n", rowIndex); printf("第%d行的最大值是:", rowIndex); int i; for (i = 0; i < cols; i++) { printf("%d ", arr[rowIndex][i]); } printf("\n"); } int main() { int arr[MAX_ROW][MAX_COL]; int rows, cols; printf("请输入二维数组的行数和列数:"); scanf("%d %d", &rows, &cols); int i, j; for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++) { printf("请输入第%d行第%d列的元素:", i + 1, j + 1); scanf("%d", &arr[i][j]); } } int minValue, rowIndex; findMinValue(arr, rows, cols, &minValue, &rowIndex); verifyResults(arr, rows, cols, minValue, rowIndex); return 0; } ``` 上述程序中,`findMinValue`函数用于求得二维数组中各行最大值最小的数及其下标,`verifyResults`函数用于验证结果。在`main`函数中,首先通过键盘输入获取二维数组的行数和列数,然后使用嵌套循环获取每个元素的值。接着调用`findMinValue`函数求得结果,并最后使用`verifyResults`函数验证结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值