分析:
这个题目相对来说比较好理解,首先我们需要了解二位数组的下标是什么意思,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");
}