首页 > 其他分享 >C语言解题 || 计算数字矩阵的2条对角线之和

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

时间:2024-02-07 17:31:47浏览次数:30  
标签:calc matrix int C语言 ++ 解题 对角线 include 输入

题目:

写一个函数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

标签:calc,matrix,int,C语言,++,解题,对角线,include,输入
From: https://blog.51cto.com/u_16509575/9639209

相关文章

  • 探索C语言结构体:编程中的利器与艺术
    ✨✨欢迎大家来到贝蒂大讲堂✨✨......
  • 探索C语言结构体:编程中的利器与艺术
    ✨✨欢迎大家来到贝蒂大讲堂✨✨......
  • (C语言)代码学习||2024.2.6||题目是codewars上的【 IP Validation】
    C语言#sscanf#代码学习#codewars题目链接:IPValidation|Codewars代码如下:#include<stdio.h>intis_valid_ip(constchar*addr){unsignedn[4],i,nc;//Mustbe4integersseparatedbydots:if(sscanf(addr,"%d.%d.%d.%d%n",&n[0],&n......
  • C语言解题 || 箭型图案
    题目:KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*"组成的箭形图案。输入描述:本题多组输入,每行个整数(2~20)。输出描述:针对每行输入,输出用“”组成的箭形。代码实现:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ intinput=......
  • C语言解题 || 公务员面试
    题目:公务员面试现场打分。有7位考官,从键盘输入若干组成绩,每组7个分数(百分制),去掉一个最分和一个最低分,输出每组的平均成绩。(注:本题有多组输入)输入描述:每一行,输入7个整数(0~100),代表7个成绩,用空格分隔。输出描述:每一行,输出去掉最高分和最低分的平均成绩,小数点后保留2位......
  • C语言学习12
    函数的递归例子此程序只能倒着打印,是不行的函数的递归,先递后归补充知识点:例子不创建临时变量输出字符串长度但是所以递归思想题目:正解疑问:......
  • C语言解题 || 小乐乐与欧几里得
    题目:小乐乐最近在课上学习了如何求两个正整数的最大公约数与最小公倍数,但是他竟然不会求两个正整数的最大公约数与最小公倍数之和,请你帮助他解决这个问题。输入描述:每组输入包含两个正整数n和m。(1≤n≤109,1≤m≤109)输出描述:对于每组输入,输出一个正整数,为n和m的最大公约数......
  • C语言解题 || 空心正方形图案
    题目:KiKi学习了循环,BoBo老师给他出了一列打咽案的练习,该任务是打印用“*”组成的空心正方形图案。输入描述:多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“*”的数量。输出描述:针对每行输入,输出用“*”组成的空心"正方形,每个"*”后面有1个空格。代码实现:#define......
  • c语言实现内存池
    概要所谓内存池,顾名思义和线程池的设计原理是一样的,为了减少频繁申请释放内存而带来的资源消耗,减少释放内存后产生的内存碎片。设计理念为了方便管理内存池的设计通常是划分出一定数量的内存块,这些内存块的长度是一样的;用户申请内存块时返回空闲的内存块地址,如果内存块使用完......
  • C语言-calloc
    #include<stdio.h>#include<stdlib.h>intmain(){int*p=(int*)calloc(10,sizeof(int));if(p==NULL){perror("calloc");exit;}printf("%d\n",&p);//6487576printf("%......