編程小白C語言題目練習3

題目要求

寫一函數,使給定的一個二維數組(3×3)轉置,即行列互換。

思路分析 

得知道行類互換,不清楚沒關係,自己畫個圖就明白了,假設a[3][3]={{1,2,3},{4,5,6},{7,8,9}}

  0 1 2
0 1 2 3
1 4 5 6
2 7 8 9

a[0][0]=1,a[0][1]=2,a[0][2]=3,a[1][0]=4...

進行行列互換之後,a[0][0],a[1][1],a[2][2]對應的元素是不會改變的,

a[0][1] 就應該轉換爲 a[1][0], 此時 a[1][0]=2, a[0][1]=4...

  0 1 2
0 1 4 7
1 2 5 8
2 3 6 9

 

用函數的代碼不好寫,那就先寫不用函數的

#include <stdio.h>
#define N 3 

int main()
{
  int a[N][N] = {{1,2,3},{4,5,6},{7,8,9},};
  int i, j, temp;

  //顯示原數組
  printf("The array is:\n");
  for(i=0;i<N;i++)
    {
      for(j=0;j<N;j++)
		printf(" %d", a[i][j]);
      printf("\n");
    }
    
  //以下代碼是對行列進行互換的核心代碼。
  //主要思想是對從左上至右下以下的半個數組進行分析,找出全部可以進行對調的數
  //找出i、j和N之間的規律。
  for(i=1;i<N;i++)
    for(j=0;j<i;j++)
	{
	  temp=a[i][j];
	  a[i][j]=a[j][i];
	  a[j][i]=temp;
	}

  //顯示轉制後數組
  printf("After twist the array is:\n");
  for(i=0;i<N;i++)
    {
      for(j=0;j<N;j++)
		printf(" %d", a[i][j]);
      printf("\n");
    }

  return 0;
  
}

查看結果

代碼是沒毛病的,然後咱們把代碼改成調用函數形式的

#include <stdio.h>
#define N 3 
int f(int a[][N])
{
	int b[N][N],i,j;
	printf("交換前:\n");
	for(i=0;i<N;i++)
	{
		for(j=0;j<N;j++)
		{
			printf("%d\t",a[i][j]);
		}
		printf("\n");
	}
	for(i=0;i<N;i++)	//行列轉換
	{
		for(j=0;j<N;j++)
		{
			b[i][j]=a[j][i];
		}
	}
	printf("交換後:\n");
	for(i=0;i<N;i++)
	{
		for(j=0;j<N;j++)
		{
			printf("%d\t",b[i][j]);
		}
		printf("\n");
	}
}

int main()
{
	int a[][N]={{1,2,3},{4,5,6},{7,8,9}}; 
	f(a); 
	return 0;
}

查看結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章