题目:

写一个函数calc_matrix(int n)实现如下功能:先输入整数n,然后输入nn个整数,构成nn矩阵,计算对角线上的数之和,并输出该和。

例如:先输入3,然后输入1,2,3,4,5,6,7,8, 9

对角线上是数之和为: 1+5+9+3+7=25。

写出完整的程序代码,在main函数中调用上述函数calc_ matrix

题目分析:

通过研究数字矩形,我们可以看出来,2条对角线的特点分别为:

  1. 行号 == 列行
  2. 行号 + 列行 == 边长

如:

C语言解题 || 计算数字矩阵的2条对角线之和_C语言解题

所以我们的想法是:模拟一个二维数组,存放数据。然后把数组遍历一遍,找出符合这2个条件的数,使其相加,即可解题。

代码实现:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <assert.h>
#include <malloc.h>
#include <errno.h>

int calc_matrix(int n)
{
	int i = 0;
	int j = 0;
	
	//按照输入开辟空间
	int* p = (int*)calloc(n * n, sizeof(int));
	int sum = 0;

	//判断空间是否开辟成功
	if (p == NULL)
	{
		perror("calloc");
		return 1;
	}

	//输入
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			scanf("%d", p + i * n + j);
		}
	}

	//计算
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			if (i + j == n  - 1|| i == j)//遍历一遍,将符合要求的数相加
			{
				sum += *(p + i * n + j);
			}
		}
	}

	//输出
	printf("%d\n", sum);

	//释放申请的空间
	free(p);
	p = NULL;

	return 0;
}

int main()
{
	int n = 0;

	scanf("%d", &n);

	calc_matrix(n);
	
	return 0;
}

运行结果:

C语言解题 || 计算数字矩阵的2条对角线之和_C语言解题_02