源程式:
#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");
}
}
運作結果 :