题目1:打印一个两维数组
#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("\n"); } return 0; }
输出:
1 2 3
4 5 6
7 8 9
请按任意键继续. . .
注意:
1.两维静态数组的定义及初始化int A[N][N] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
2.第二个for循环中,j = 0不要忘了
3.两维数组可以用A[i][j]进行访问,有条件?
思考:
这里的A是几维数组?
两维指针到底是几级指针?传递二维数组名时该如何取元素?
题目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))); }
思考:
两维指针转一维指针int* MA = (int*)MatrixA等的内涵?