【C】【2次元静的配列】2例
2278 ワード
タイトル1:2次元配列を印刷
出力:
注意:
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次行列の乗算結果を計算する
テスト例:
考え:
2 Dポインタは1 Dポインタint*MA=(int*)MatrixAなどの内包を回転しますか?
#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などの内包を回転しますか?