天天看點

c語言 二維數組(上課)

源程式:

#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");
  }
}      

運作結果 :