题目:
写一个函数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条对角线的特点分别为:
- 行号 == 列行
- 行号 + 列行 == 边长
如:
所以我们的想法是:模拟一个二维数组,存放数据。然后把数组遍历一遍,找出符合这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;
}