C语言练习——上三角矩阵

news2024/9/19 10:34:08

       前言

         今天我们来看看如何使用代码实现上三角矩阵吧。首先我们来了解一下上上三角矩阵是什么,上三角矩阵就是在矩阵从左上到右下的对角线之下的数组元素都为0的数组方矩阵,例如:

        

        以一个三阶矩阵为例,在对角线元素之下,就是红色圈圈圈起来的那里,元素都为0,那么这个三阶矩阵就是上三角矩阵。

        题目描述

        杰克有一天在学习线性代数的时候突然想到,可不可以使用C语言编程来实现一个上三角矩阵,请帮助杰克判断一个n阶方矩是否为上三角矩阵。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。

        输入描述:

        第一行包含一个整数n,表示一个方阵包含n行n列,用空格分隔。 (1≤n≤10)

        从2到n+1行,每行输入n个整数(范围-231~231-1),用空格分隔,共输入n*n个数。

        输出描述:

        一行,如果输入方阵是上三角矩阵输出"YES"并换行,否则输出"NO"并换行。

        代码实现

        

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int n = 0;
    //定义输入的是几阶的矩阵
    printf("请输入矩阵阶数\n");
    scanf("%d", &n);
    int arr[20][20];
    int i = 0;    
    //输入数组中元素
    for (i = 0;i < n;i++)
    {
        int j = 0;
        for (j = 0;j < n;j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    //默认上三角矩阵
    int flag = 1;
    for (i = 0;i < n;i++)
    {
        int j = 0;
        for (j = 0;j < i;j++)
        {
            if (arr[i][j] != 0)
            {
                //判断不是上三角矩阵
                flag = 0;
                //goto语句结束程序,跳转到end,不使用break的原因是break只能跳出当前循环,这里有使用循环的嵌套,不能完全跳出。
                goto end;
            }
        }

    }
//编辑end,判断flag状态并输出
end:
    if (flag == 1)
    {
        printf("YES\n");
    }
    if (flag == 0)
    {
        printf("NO\n");
    }
    return 0;
}

        代码解释

        矩阵阶数

        我们想要实现题目中的要求首先需要输入一个数组,这个数组要足够大,大到可以存放需要输入的元素,题目中要求n的范围是0~10,那么我们就将矩阵设置为最大行和列设置为20吧,定义二维数组arr用来存放我们想要存放的元素,完成矩阵的建立,我们在输入整个矩阵前需要先输入一个n来说明我们这次要判断的上三角矩阵是几阶的。

        输入矩阵

        之后我们确定好了几阶的矩阵就要向矩阵里面输入内容了,我们使用一个for循环的嵌套分别遍历整个矩阵,先行后列的方式,之后我们只需要使用输入函数scanf()来对矩阵内元素arr[i][j]进行输入就好。

        判断矩阵是否为上三角矩阵

        矩阵输入完成之后,我们就需要判断我们输入的矩阵是否为一个上三角矩阵了,我们如何判断呢,让我们仔细来看看这个矩阵,假设n=3,

        

        在图中我们发现,以主对角线划分(0,0)(1,1)(2,2),在主对角线往下的的元素i>j,在主对角线往上的元素中i<j,那么根据这个性质,我们来判断主对角线往下的元素是不是都为0,如果是,那么这个矩阵就是上三角矩阵。

        我们还是遍历一遍数组,但是这次遍历又和之前有所区别,我们先使用for循环遍历行,之后在列的时候注意了,我们需要重置一下j,使j=0,之后这里我们for循环内部的判断条件只需要写为j<i就可以,这样我们就可以找到主对角线往下的元素了,之后判断这些元素是否不为0;如果不为0,就证明这个矩阵不是上三角矩阵。        

        flag的使用

        在此之前,我们判断矩阵的第一个for循环之前设置flag = 1,它的作用是:假设现在我们遍历的矩阵是一个上三角矩阵。之后判断结束,矩阵不是上三角矩阵,我们将flag置为0表示为假。

        goto语句与break语句

        之后我们使用goto语句跳出循环,设置跳转语句为end,有些小伙伴疑惑了,为什么我们不使用break呢,因为这里使用了for循环的嵌套,当我们使用break跳出当前循环的时候,外面还有一个循环,我们就还需要对外层循环进行其他操作,所以我们直接使用goto语句跳转到end跳出循环即可。

        编辑end,假如flag=1的话,矩阵为上三角矩阵,那么我们就输出YES,如果flag=0的话,那么矩阵不是上三角矩阵,输出NO。

        今天就到这里喽,加油加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1613281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

江西智博环境| 邀您参加2024全国水科技大会暨技术装备成果展览会

展位号&#xff1a;A28 企业介绍 江西智博环境技术有限公司始创于2008年初&#xff0c;总部位于江西省域副中心城市-赣州。公司主要从事一体化净水设备、单村供站、泵船、无负压供水设备自动化控制系统、低配电系统、工艺设备及智慧水务的设计研发、生产、销售、安装、调试等业…

基于深度学习的脑部肿瘤检测系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 当大脑中形成异常细胞时&#xff0c;就会发生脑肿瘤。肿瘤主要有两种类型&#xff1a;癌性&#xff08;恶性&#xff09;肿瘤和良性肿瘤。恶性肿瘤可分为原发性肿瘤和继发性肿瘤&#xff0c;前者始…

Redis中的慢查询日志(一)

慢查询日志 概述 Redis的慢查询日志功能用于记录执行时间超过给定时长的命令请求&#xff0c;用户可以通过这个功能产生的日志来 监视和优化查询速度。服务器配置有两个和慢查询日志相关的选项: 1.slowlog-log-slower-than选项指定执行时间超过多少微妙(1秒1000 000微妙)的命…

The C programming language (second edition,KR) exercise(CHAPTER 4)

E x c e r c i s e 4 − 1 Excercise\quad 4-1 Excercise4−1&#xff1a; #include <stdlib.h> #include <stdio.h> #include <string.h> int strindex(char s[],char t[]); int strrindex(char s[],char t[]);int main(void) {char s[100]"qwoulddf…

【Linux驱动层】iTOP-RK3568学习之路(四):杂项设备驱动框架

一、杂项设备驱动简介 在 Linux 中&#xff0c;把无法归类的五花八门的设备定义成杂项设备。相较于字符设备&#xff0c;杂项设备有以下两个优点: (1)节省主设备号:杂项设备的主设备号固定为 10&#xff0c;而字符设备不管是动态分配还是静态分配设备号&#xff0c;都会消耗一…

AlDente Pro for mac最新激活版:电池长续航软件

AlDente Pro是一款专为Mac用户设计的电池管理工具&#xff0c;旨在提供电池安全和健康管理的一站式解决方案。它具备实时监控电池状态的功能&#xff0c;让用户随时了解电池的电量、充电次数、健康状态等信息。 AlDente Pro for mac最新激活版下载 同时&#xff0c;AlDente Pro…

【蓝桥杯2025备赛】集合求和

集合求和 题目描述 给定一个集合 s s s&#xff08;集合元素数量 ≤ 30 \le 30 ≤30&#xff09;&#xff0c;求出此集合所有子集元素之和。 输入格式 集合中的元素&#xff08;元素 ≤ 1000 \le 1000 ≤1000&#xff09; 输出格式 s s s 所有子集元素之和。 样例 #1 …

Docker搭建项目管理软件禅道

文章目录 一、简介二、部署三、使用 一、简介 禅道是以项目管理为核心的协作平台&#xff0c;旨在帮助团队高效地进行项目管理和协作。 禅道提供了项目管理、任务管理、团队协作、文档管理、报告统计等功能。 禅道官网 二、部署 操作系统&#xff1a;22.04.4 创建文件夹 …

ARM与单片机有啥区别?

初学者必知&#xff1a;ARM与单片机到底有啥区别&#xff1f;1、软件方面这应该是最大的区别了。引入了操作系统。为什么引入操作系统&#xff1f;有什么好处嘛&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「ARM的资料从专业入门到高级教…

【OpenHarmony-NDK技术】简单将cJson移植到OpenHarmony中,并在c层修改参数值再返回json

1、cJson的简单介绍 cJson - github网址 概述 一般使用cJson是&#xff0c;需要将json文本转化为json对象–编码&#xff0c;将json对象转化为json文本–解析。 git clone https://github.com/DaveGamble/cJSON.git 后留意cJSON.h和cJSON.h两个文件。 1、cJson的介绍 cJso…

使用FPGA实现比较器

介绍 比较器就是通过比较输入的大小&#xff0c;然后输出给出判断。 在这个比较器中&#xff0c;有两个输入&#xff0c;三个输出。根据输出就可以判断出哪个输入值大了。 设计文件 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; entity compa…

JAVA----Thread

Thread 这里写目录标题 Thread线程Thread 第 1 种写法此外, t.start()的作用 Thread 第 2 种写法Thread 第 3 种写法Thread 第 4 种写法Thread 第 5 种写法 线程 本身是操作系统提供的, 操作系统提供了 API 以让我们操作线程, JVM 就对操作系统 API 进行了封装. 线程这里, 则提…

verilog变量类型wire、reg和Memory的介绍和用法

目录 wire型 reg型 Memory型 wire型 wire 类型变量&#xff0c;也叫网络类型变量&#xff0c;用于结构实体之间的物理连接&#xff0c;如门与门之间&#xff0c;不能储存值&#xff0c;用连续赋值语句 assign 赋值&#xff0c;定义为 wire [n-1:0] a ; 其中 n 代表位宽&…

OCT2Former: A retinal OCT-angiography vessel segmentationtransformer论文总结

论文(COMPUT METH PROG BIO)&#xff1a;OCT2Former: A retinal OCT-angiography vessel segmentation transformer 源码&#xff1a;https://github.com/coreeey/OCT2Former 一、摘要 背景与目的&#xff1a;视网膜血管分割在视网膜疾病自动筛查与诊断中起着重要作用。如何分…

面试高频:HTTPS 通信流程

更多大厂面试内容可见 -> http://11come.cn 面试高频&#xff1a;HTTPS 通信流程 HTTPS 的加密流程 接下来说一下 HTTPS 协议是如何进行通信的&#xff1a; HTTPS 通信使用的 对称加密 非对称加密 两者结合的算法 HTTPS 通信时&#xff0c;会先使用 非对称加密 让通信双…

大sql mysql执行

先把sql 拆分 太大的执行失败 使用 SQLDumpSplitter3 拆分sql 执行拆分的sql 拆分的sql 打开发现很多 ; 开头的空行 替换掉 正则 ^; 修改数据库 my.cnf my,ini 执行可能会提示 [ERR] 2006 - Server has gone away 错误 在 [mysqld] 添加以下几行 wait_timeout2880000 inter…

Qt基础之四十六:Qt界面中嵌入第三方程序的一点心得

本文主要讲解QWidget和QWindow的区别,以及如何在QWidget中嵌入第三方程序,并完美解决在QWidget中嵌入某些程序(比如Qt程序)时出现的白边问题。 下面是嵌入QQ音乐的样子,这首歌还不错。 先用spy++查看QQ音乐的窗口信息,如果安装了Visual Studio,工具菜单里自带spy++ 然后…

【1471】java项目进度管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java 项目进度管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

【Linux】自定义协议——实现网络序列化和反序列化

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;承接上文内容【Linux】应用层协议序列化和反序列化 目录 &#x1f449;&#x1f3fb;代码实现如下Calculate.hp…

企业常用Linux三剑客awk及案例/awk底层剖析/淘宝网cdn缓存对象分级存储策略案例/磁盘知识/awk统计与计算-7055字

高薪思维&#xff1a; 不愿意做的事情:加班&#xff0c;先例自己在利他 生活中先利他人在利自己 感恩&#xff0c;假设别人帮助过你&#xff0c;先帮助别人&#xff0c;感恩境界 awk三剑客老大 find其实也算是一种新的第四剑客 find 查找文件 查找文件&#xff0c;与其他命令…