【C】【两维静态数组】2个例子

题目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等的内涵?

原文地址:https://www.cnblogs.com/caixu/p/2826447.html