【C】【2次元静的配列】2例

2278 ワード

タイトル1:2次元配列を印刷
#include <stdio.h>

#define N 3

int A[N][N] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

int main()

{

	int i = 0;

	int j = 0;

	for (i = 0; i < N; i++)

	{

		for (j = 0; j < N; j++)

		{

			printf("%d ", A[i][j]);

		}

		printf("
"); } return 0; }

 
出力:
1 2 3
4 5 6
7 8 9
. . .

注意:
1.2次元静的配列の定義および初期化int A[N][N]={{1,2,3},{4,5,6},{7,8,9}}
2.2番目のforサイクルでは、j=0を忘れない
3.2次元配列はA[i][j]でアクセスできますが、条件はありますか?
考え:
ここのAは何次元配列ですか?
2次元ポインタはいったい何級ポインタですか.2 D配列名を渡すときにどのように要素を取りますか?
題目2:二つのN次行列の乗算結果を計算する
#include "oj.h"

#include "string.h"

#include <stdio.h>

/*

  :           , x , y 

  :	MatrixA :   A

		MatrixB :   B

		N		:     

		x		:     x 

		y		:     y 

  :	MatrixC	:        [x, y]  

*/

int calcItem(int **MatrixA, int **MatrixB, int N, int x, int y, int **MatrixC)

{

    int i = 0;

	int* MA = (int*)MatrixA;

	int* MB = (int*)MatrixB;

	int* MC = (int*)MatrixC;

	MC[x * N + y] = 0;

    for (i = 0; i < N; i++)

	{

		MC[x * N + y] = MC[x * N + y] + MA[x * N + i] * MB[i * N + y];

    }

    return 0;

}



/*

  :         

  : MatrixA,MatrixB    

  : MatrixC

  : 0       

	  -1	  

*/

int matrix(int **MatrixA, int **MatrixB, int **MatrixC, int N)

{

    int i = 0;

    int j = 0;

    if (N < 1)

    {

        return -1;

    }

    if ((NULL == MatrixA) || (*MatrixA == NULL))

    {

        return -1;

    }

    if ((NULL == MatrixB) || (*MatrixB == NULL))

    {

        return -1;

    }

    if ((NULL == MatrixC) || (*MatrixC == NULL))

    {

        return -1;

    }

    

    for (i = 0; i < N; i++)

    {

        for (j = 0; j < N; j++)

        {

            calcItem(MatrixA, MatrixB, N, i, j, MatrixC);

        }

    }



	return 0;

}


テスト例:
void CExampleTest::TestCase01()

{

	int A[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

	int C[3][3], ExpectC[3][3] = {{30, 36, 42}, {66, 81, 96}, {102, 126, 150}};



	matrix((int**)A, (int**)A, (int**)C, 3); 



	CPPUNIT_ASSERT(0 == memcmp(C, ExpectC, sizeof(C)));

}


考え:
2 Dポインタは1 Dポインタint*MA=(int*)MatrixAなどの内包を回転しますか?