题目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等的内涵?
浙公网安备 33010602011771号