源程序:
#include <stdio.h>
//求最大值的函数
int highest(int m[3][4]) //形式参数是二维数组
{
int a = m[0][0]; //认为第一个数是最大值
int i, j;
for (i = 0; i < 3; i++) //外层循环控制行
{
for (j = 0; j < 4; j++) //内层循环控制列
{
if (a < m[i][j])
a = m[i][j];
}
}
return a;
}
//求最小值的函数
int lowest(int m[3][4]) //形式参数是二维数组
{
int b = m[0][0]; //认为第一个数是最大值
int i, j;
for (i = 0; i < 3; i++) //外层循环控制行
{
for (j = 0; j < 4; j++) //内层循环控制列
{
if (b > m[i][j])
b = m[i][j];
}
}
return b;
}
void main()
{
int array[3][4] = { {11,25,3,48},{25,16,77,28},{39,10,19,32} };//二维数组
int(*point)[4]; //指向二维数组的指针
point = array; //指针指向二维数组
int i, j;
//输出二维数组
printf("二维数组:\n");
for (i = 0; i < 3; i++) //外层循环控制行
{
for (j = 0; j < 4; j++) //内层循环控制列
{
printf("%3d", array[i][j]); //输出二维数组
}
printf("\n");
}
printf("\n");
//转置二维数组
printf("转置后的二维数组:\n");
for (i = 0; i < 4; i++)
{
for (j = 0; j < 3; j++)
{
printf("%3d", array[j][i]);
}
printf("\n");
}
printf("\n");
//求第一个元素开始的对角线之和
int duijiaox = 0;
for (i = 0; i < 3; i++)
{
duijiaox += array[i][i];
}
printf("对角线之和为:%d\n", duijiaox);
printf("\n");
//二维数组中的最大值和最小值
int max, min;
max = highest(point); //highest求最大值的函数
min = lowest(point); //求最小值的函数
printf("最大值:%d, 最小值:%d\n", max, min);
printf("\n");
//第一列与第四列交换
printf("第一列与最后一列交换:\n");
int t[3] = { 0,0,0 };
for (i = 0; i < 3; i++)
{
t[i] = array[i][0];
}
for (i = 0; i < 3; i++)
{
array[i][0] = array[i][3];
}
for (i = 0; i < 3; i++)
{
array[i][3] = t[i];
}
for (i = 0; i < 3; i++) //外层循环控制行
{
for (j = 0; j < 4; j++) //内层循环控制列
{
printf("%3d", array[i][j]);
}
printf("\n");
}
printf("\n");
printf("按列逆序输出:\n");
int tt;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 2; j++)
{
tt = *(*(point + i) + j);
*(*(point + i) + j) = *(*(point + i) + 3 - j);
*(*(point + i) + 3 - j) = tt;
}
}
for (i = 0; i < 3; i++) //外层循环控制行
{
for (j = 0; j < 4; j++) //内层循环控制列
{
printf("%3d", *(*(point + i) + j));
}
printf("\n");
}
}
运行结果 :