二维数组 :
- 存储类型 数据类型 数组名[行数][列数]
- 列数不能够省略 , 行数可以省略
- 数组元素的引用 : 数组名[行标][列标]
练习 :
1.找出二维数组中的最大值, 如果有多个最大值, 找出其位置以及数值.(不要排序).
#include <stdio.h>
int main(int argc, const char *argv[])
{
int a[3][4] = {{1,23,4,23}, {234,123,342,45}, {342,45,234,67}};
int i, j;
int max = a[0][0];
for(i = 0; i < 3; i++)
{
for(j = 0; j < 4; j++)
{
if(max < a[i][j])
{
max = a[i][j];
}
}
}
for(i = 0; i < 3; i++)
{
for(j = 0; j < 4; j++)
{
if(max == a[i][j])
{
printf("最大值为: a[%d][%d] = %d \n", i, j, a[i][j]);
}
}
}
return 0;
}
2.行列互换. (不允许另外增加存储空间).
#include <stdio.h>
int main(int argc, const char *argv[])
{
int a[4][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16}};
int i, j;
int temp;
for(i = 0; i < 4; i++)
{
for(j = 0; j < i; j++)
{
temp = a[i][j];
a[i][j] = a[j][i];
a[j][i] = temp;
}
}
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{
printf("%2d ",a[i][j]);
}
printf("\n");
}
return 0;
}
3.找出数组中的特殊值,为一行中的最大值, 同时为一列中的最小值.
#include <stdio.h>
int main(int argc, const char *argv[])
{
int a[3][4] = {{1,2,3,7}, {3,4,5,8}, {1,2,3,9}};
int i, j, k;
int x, y;
int temp, max, min;
for(i = 0; i < 3; i++)
{
max = a[i][0];
y = 0;
for(j = 0; j < 4; j++)
{
if(max < a[i][j])
{
max = a[i][j];
y = j;
}
}
min = a[i][y];
x = i;
for(k = 0; k < 3; k++)
{
if(min > a[k][y])
{
min = a[k][y];
x = k;
}
}
if(x == i)
{
printf("特殊值为:a[%d][%d] = %d\n", x, y, a[x][y]);
}
}
return 0;
}