C语言刷题小结---矩阵篇

article/2025/9/23 4:46:14

电影黑客帝国有很多这样的场景

用矩阵表示我们看到的一切!

而在编程中矩阵是用数组来表示的

目前小作者还只是学习编程初学者,很多知识内容都还没有学习。但相信每一个学习编程的小伙伴在做C语言方面的练习时都会遇到有关矩阵相关的题目,以下是小作者总结的有关矩阵的题目,以供大家学习总结。

1.矩阵的创建

2.矩阵元素定位

3. 图像相似度

4.矩阵相等判断

5.上矩阵三角形判断

6.矩阵转置

7.矩阵交换

1.矩阵的创建

输入描述:第一行输入两个整数 n 和 m ,第二行包含 n*m 个整数(1<=n<=10,1<=m<=10)

输出描述:输出规划后 n 行 m 列的矩阵,每个数的后面有一个空格。

#include<stdio.h>
int main()
{int n = 0;int m = 0;printf("请输入你要创建的矩阵大小 n 和 m :\n");scanf("%d %d", &n, &m);int arr[20] = { 0 };int i = 0;printf("请依次输入矩阵元素:\n");for (i = 0;i < n * m;i++){scanf("%d", &arr[i]);}for (i = 0;i < n * m;i++){printf("%d ", arr[i]);if (((i + 1) % m == 0)){printf("\n");}}return 0;
}

运行结果:

 

题目分析:该题整体比较简单。需要注意到的点就是矩阵下表是从0开始的,所以换行时需要 i +1 才可以对 m 进行取模运算,以达到换行的目的。

2.矩阵元素定位

输入描述:

第一行包含两个数 n 和 m ,表示这个矩阵包含 n 行 m 列。从2到 n+1 行,每行输入 m 个整数,用空格分隔,共输入 n*m 个数,表示矩阵的元素。接下来一行输入 x 和 y ,用空格分隔,表示想要得到的元素的位置。(1 <= x <= n <=10 , 1 <= y <=m <= 10)

输出描述:

一行,输出一个整数,即想要得到元素的位置的值。

#include<stdio.h>
int main()
{int n = 0;int m = 0;int arr[10][10] = { 0 };printf("请输入矩阵的大小 n 和 m :\n");scanf("%d %d", &n, &m);int i = 0;int j = 0;printf("请依次输入矩阵元素:\n");for (i = 0;i < n;i++){for (j = 0;j < m;j++){scanf("%d", &arr[i][j]);}}int x = 0;int y = 0;printf("请输入你要查找元素的坐标:\n");scanf("%d %d", &x, &y);printf("%d\n", arr[x - 1][y - 1]);return 0;
}

运行结果:

 题目分析:该题相对来说也是比较简单。需要注意的是输入坐标查找矩阵元素时用户并不一定知道数组坐标是从0开始的,所以打印坐标时应该用 arr[ i -1 ][ j - 1] ,而不是 arr[ i ][ j ]。

3.图形相似度

题目描述:

第一行包含两个整数 m 和 n , 表示图像的行数和列数,用单个空格分开。1 <= m <=100 ,1 <= n <=  100 。之后 m 行,每行 n 个整数 0 或 1,表示第一幅黑白图像上各像素点的颜色,相邻两个数用单个空格分开。之后 m 行每行 n 个整数 0 或 1 ,表示第二幅黑白图像上各像素点的颜色,相邻两个数用空格隔开。

输出描述:

一个实数,表示相似度(以百分比的形式给出),精确到小数点后两位。

#include<stdio.h>
int main()
{int m = 0;int n = 0;int arr1[100][100] = { 0 };int arr2[100][100] = { 0 };printf("请确定两个矩阵的大小 m 和 n :\n");scanf("%d %d", &m, &n);int i = 0;//读取第一个矩阵的数据printf("请输入第一个矩阵的元素:\n");for (i = 0;i < m;i++){int j = 0;for (j = 0;j < n;j++){scanf("%d", &arr1[i][j]);}}//读取第二个矩阵的数据printf("请输入第二个矩阵的元素:\n");for (i = 0;i < m;i++){int j = 0;for (j = 0;j < n;j++){scanf("%d", &arr2[i][j]);}}//求相似度int count = 0;for (i = 0;i < m;i++){int j = 0;for (j = 0;j < n;j++){if (arr1[i][j] == arr2[i][j]){count++;}}}printf("两图像的相似度位:\n");printf("%.2lf\n", count * 100.0 / (m * n));return 0;
}

运行结果:

题目分析:该题的主要难点在于理解用 0 和1 组成的矩阵来表示图像的像素点,以及如何计算两个图像的相似度(注意相似度是保留两位小数) 。

4.矩阵相等判断

输入描述:

第一行包含两个数 n 和 m ,表示两矩阵包含 n 行 m 列。从2到 n+1 行,每行输入 m 个整数,用空格分隔,共输入 n*m 个数,表示矩阵的元素。

输出描述:

判断两矩阵是否相等。

#include<stdio.h>
int main()
{int arr1[10][10] = { 0 };int arr2[10][10] = { 0 };int n = 0;int m = 0;printf("请输入两矩阵的行数和列数 n 和 m :\n");scanf("%d %d", &n, &m);int i = 0;int j = 0;printf("请输入第一个矩阵的元素:\n");for (i = 0;i < n;i++){for (j = 0;j < m;j++){scanf("%d", &arr1[i][j]);}}printf("请输入第二个矩阵的元素:\n");for (i = 0;i < n;i++){for (j = 0;j < m;j++){scanf("%d", &arr2[i][j]);}}//比较for (i = 0;i < n;i++){for (j = 0;j < m;j++){if (arr1[i][j] != arr2[i][j]){printf("两矩阵不相等\n");return 0;}}}printf("两矩阵相等\n");return 0;
}

运行结果:

 题目分析:该题中需要注意的是如何更简便的得到结果,相对于判断相等,判断不相等要容易的多。

5.上矩阵三角形判断

题目描述:

请编写一个程序,判断一个 n 阶方阵是否为上三角矩阵。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角值右下角的连线。

输入描述:

第一行包含一个整数 n ,表示一个方阵包含 n 行 n 列,用空格分隔。(1 <= n <= 10)从2到 n + 1 行,每行输入 n 个 整数,用空格分隔,共输入 n * n 个数。

输出描述:

判读是否为上三角形矩阵,若是则打印该矩阵,否则只需判断即可。

#include<stdio.h>
int main()
{int n = 0;int arr[10][10] = { 0 };printf("请输入方阵的阶数 n :\n");scanf("%d", &n);int i = 0;int j = 0;printf("请输入方阵的元素:\n");for (i = 0;i < n;i++){for (j = 0;j < n;j++){scanf("%d", &arr[i][j]);}}for (i = 0;i < n;i++){for (j = 0;j < n;j++){//找左下角的坐标if (i>j){if (arr[i][j] != 0){printf("不是上三角形矩阵\n");return 0;}}}}for (i = 0;i < n;i++){for (j = 0;j < n;j++){printf("%d ", arr[i][j]);if (j + 1 == n){printf("\n");}}}printf("是上三角形矩阵\n");return 0;
}

运行结果:

题目分析:

该题的重点是如何判断上三角形矩阵,突破点在以主对角线为分界线的上下坐标的区别。在主对角线上横坐标与纵坐标是相等的,即 i == j;而主对角线以上横坐标小于纵坐标,即 i < j ;而在主对角线以下横坐标大于纵坐标,即 i > j。

仅仅是语言描述还是太抽象,上图解:

ju

 6.矩阵转置

输入描述:

第一行包含两个数 n 和 m ,表示两矩阵包含 n 行 m 列。从2到 n+1 行,每行输入 m 个整数,用空格分隔,共输入 n*m 个数,表示矩阵的元素( n 和 m 都是小于等于10)。

输出描述:

打印原矩阵,对矩阵进行转置,即将 n 行 m 列的矩阵转置为 m 行 n 列的矩阵,并打印转置后的矩阵。

 

#include<stdio.h>
int main()
{int n = 0;int m = 0;int arr[10][10] = { 0 };int i = 0;int j = 0;printf("请输入矩阵行数 n 和列数 m :\n");scanf("%d %d", &n, &m);printf("请依次输入矩阵元素:\n");for (i = 0;i < n;i++){for (j = 0;j < m;j++){scanf("%d", &arr[i][j]);}}//打印原矩阵printf("原矩阵为:\n");for (i = 0;i < n;i++){for (j = 0;j < m;j++){printf("%d ", arr[i][j]);}printf("\n");}//转置// n行m列转换为m行n列printf("转置后的矩阵为:\n");for (i = 0;i < m;i++){for (j = 0;j < n;j++){printf("%d ", arr[j][i]);}printf("\n");}return 0;
}

运行结果:

 

 题目分析:

该题的重点在于转置的过程。矩阵的转置不仅仅是单纯的将行数和列数交换以下,还应该注意到坐标的变化,即 arr[ i ][ j ] 转变为 arr[ j][ i ]。

7.矩阵的交换

输入描述:

第一行包含两个数 n 和 m ,表示两矩阵包含 n 行 m 列。从2到 n+1 行,每行输入 m 个整数,用空格分隔,共输入 n*m 个数,表示第一个矩阵的元素( n 和 m 都是小于等于10)。

接下来一行输入 K ,表示要执行 K 次操作( K 的范围是大于等于1小于等于5)。接下来有 K 行,每行包括一个字符 t 和两个数 a 和 b ,中间用空格分隔,t 代表需要执行的操作,当 t 为字符 ' r ' 时代表进行行行变换,当 t 为字符 ' c ' 时代表进行列列变换,a 和 b 为需要互换的行或列(1 <= a<= b <= n <= 10,1 <= a <= b <=m <= 10)。

输出描述:

输出 n 行 m 列,为矩阵交换后的结果。每个数后面有一个空格。

#include<stdio.h>
int main()
{int n = 0;int m = 0;int arr[10][10] = { 0 };printf("请输入矩阵的大小行数 n 和列数 m :\n");scanf("%d %d", &n, &m);//输入矩阵数据int i = 0;int j = 0;printf("请输入矩阵元素:\n");for (i = 0;i < n;i++){for (j = 0;j < m;j++){scanf("%d", &arr[i][j]);}}int K = 0;//操作的次数printf("请输入交换的次数:\n");scanf("%d", &K);//1\nint r = 0;printf("请输入具体操作:(r代表行交换,c代表列交换)被交换的位置a和b\n");for (r = 0;r < K;r++){//一次的交换char t = 0;int a = 0;int b = 0;//getchar()消除上次输入留下的\nscanf(" %c %d %d", &t, &a, &b);//scanf()前加一个空格,消除\nif (t == 'r'){//行的交换i = 0;for (i = 0;i < m;i++){//arr[a-1][i]//arr[b-a][i]int tmp = arr[a - 1][i];arr[a - 1][i] = arr[b - 1][i];arr[b - 1][i] = tmp;}}else if (t == 'c'){//列的交换for (i = 0;i < n;i++){//arr[i][a-1]//arr[i][b-a]int tmp = arr[i][a - 1];arr[i][a - 1] = arr[i][b - 1];arr[i][b - 1] = tmp;}}}//打印交换后的矩阵for (i = 0;i < n;i++){for (j = 0;j < m;j++){printf("%d ", arr[i][j]);}printf("\n");}return 0;
}

运行结果:

 

题目分析:

这道题相对来说较为复杂,除了需要注意消除输入 K 时附带的 \n 等细节以外,还需要注意到矩阵的交换形式,即坐标之间的转变交换的坐标都是对应的 a-1 和 b-1。

 上图解:

 在文章的最后,每一个读者都应该收到一个大大的赞

 


http://chatgpt.dhexx.cn/article/cBUGseAv.shtml

相关文章

《C语言》矩阵问题

一.矩阵乘法 1.定理&#xff1a; 两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。如A是mn矩阵和B是np矩阵&#xff0c;它们的乘积C是一个mp矩阵。 例如&#xff1a; 2.思路 1. i&#xff0c;j分别代表行和列&#xff0c;所以应该定义一个二维矩阵&…

C语言矩阵乘法

本篇内容 1&#xff09;首先介绍了矩阵乘法的基本原理&#xff1b; 2&#xff09;然后介绍了相对初阶的C语言乘法代码设计&#xff1b; 3&#xff09;最后根据C语言动态内存规划&#xff0c;提出了更加便捷、优化的代码设计&#xff0c;希望能给大家带来帮助。 更新&#xff1a…

c语言之矩阵

矩阵作为线性代数核心内容之一也是刷题人时常会遇到的一种类型。本篇博客简单介绍一下矩阵转置、上三角矩阵以及杨氏矩阵。 1.转置矩阵&#xff1a;输入m行n列的矩阵以n行m列的方式打印出来。只要将数组的行列进行交换即可&#xff0c;并不难想也不难写.&#xff08;相应练习&a…

vue-quill-editor 使用-图片上传

vue 项目开发中&#xff0c;文本编辑器的选择很多&#xff0c;一些熟悉的文本编辑器都可以使用&#xff0c;如UEditor、wangEditor&#xff0c;这里介绍基于 vue 的一个文本编辑器插件 vue-quill-editor 此插件基于 quill&#xff0c;所以使用 cdn 节点方式引用时&#xff0c;…

Error: Cannot find module ‘./XXX.jpg‘ 问题解决 Vue动态显示图片

刚开始学习Vue 在循环输出图片时&#xff0c;浏览器报错Error: Cannot find module ‘./tqwl.jpg’ 这张图片是放在本地文件夹内的 这是图片的展示代码 <el-table-column label"展示" width"180"><template slot-scope"scope"><…

解决js中获取不到图片路径的情况

在写一个todoList作品时&#xff0c;需要点击事件更改图片路径时&#xff0c;遇到了获取不到图片路径的情况 在html中用src“”来获取的图片&#xff0c;凭主观臆想觉得在js中判断它的路径时&#xff0c;没有作用&#xff0c;控制台中显示的不是我们熟悉的路径格式 查阅得知&a…

vue-quill-editor删除服务器多余图片

这几天在做富文本编辑业务&#xff0c;在删除服务器资源方面遇到了问题&#xff0c;网上搜索了很久都没找到办法&#xff0c;现在把自己解决的过程记录如下&#xff1a;思路&#xff1a; 点击工具栏的图标&#xff0c;选取图片&#xff08;不是base64格式&#xff09;上传到服…

将JS代码隐藏在图片中的方法

之前写过利用图片重写的方法清除图片中恶意代码的文章&#xff0c;java清除恶意代码 &#xff0c;但这些图片中的恶意代码是怎么植入进去的呢&#xff0c;有简便方法&#xff0c;也有复杂方法。先来看如下这张图片&#xff0c;是Google的LOGO&#xff0c;是一张完全正常的png图…

VUE-QUILL-EDITOR安装与调节图片大小记录

一、quill-editor安装 安装quill-editor npm install vue-quill-editor --save安装调节图片大小插件(不是必须的&#xff0c;看需求) npm install quill-image-resize-module -S二、 引用&#xff08;两种方式&#xff09; 全局引用 在main.js中填入以下代码 import Vue f…

将js/css脚本放到png图片中的实践。

起因 高级浏览器支持data协议,如: 参考:http://en.wikipedia.org/wiki/Data:_URL <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6…

[JS插件] PhotoSwipe 图片浏览插件使用方法

一、介绍 PhotoSwipe 是专为移动触摸设备设计的相册/画廊.兼容所有iPhone、iPad、黑莓6,以及桌面浏览器.底层实现基于HTML/CSS/JavaScript,是一款免费开源的相册产品。 官方网站&#xff1a;http://photoswipe.com/ 源码下载&#xff1a;https://github.com/dimsemenov/photo…

原生js 图片查看器

将以前用angular 写的 自定义指令 封装成 插件&#xff0c;无需引用jquery、angular。 下载下来即可查看效果。 github网址: GitHub - wzhGitH/imgView: js 图片查看器,H5图片预览(imgView) 百度云下载链接: 百度网盘 请输入提取码 密码: gidq 可实现放大、缩小、拖拽、旋转…

vue-quill-editor拖拽或粘贴的图片上传到服务器回显插入图片后删除生成的Base64图片

问题描述&#xff1a;拖拽或粘贴图片上传到服务器后返回url插入富文本编辑器后&#xff0c;quill默认生成的base64图片链接也同时出现在富文本编辑器中&#xff0c;等于是有两张相同的图片&#xff0c;一张是我们服务器图片&#xff0c;一张是base64格式图片&#xff01;&#…

Unity3D在UI中加入Image图片

在将图片拖入到Assets后发现根本不能将图片拖入到UI中&#xff1a; 新建Image后在Source Image中也不能找到图片&#xff1a; 那是因为你没把图片设置为Sprite&#xff0c;图片只是Texture而已&#xff0c;只能作为贴图使用。 可以将图片设置为Sprite: 这样一切就正常了&#…

纯JS图片查看器

目前支持&#xff1a;放大、缩小&#xff08;含滚轮&#xff09;、旋转、还原 /*** 说明信息* date 2022/10/13 19:46:44* 初始化图片查看器* date 2022/09/21 14:40:06* id 唯一标识&#xff0c;指定id区域内的图片* params 扩展参数&#xff0c;设置图片大小&#xff0c;目前…

vue-quill-editor上传图片

问题&#xff1a; vue-quill-editor富文本编辑器上传图片默认为base64&#xff0c;存入数据库过于过于庞大&#xff0c;使用quill-image-extend-modulevue-quill-editor实现图片地址上传。 解决完之后效果图&#xff1a; 解决思路&#xff1a; 哈哈&#xff0c;第一步当然去…

unity UI 加入image图片

1.新建画布&#xff0c;新建image. 2.我们发现这个时候把Assets里的图片直接拖到Image上是行不通的。原因就是此时的图片没有设为sprite. 处理方法&#xff1a;点击图片&#xff0c;修改Texture Type为Sprite. 下图左边图片为调整后&#xff0c;右边图片为没有调整. 3.调整后就…

js预览本地图片

本地图片在上传服务器前&#xff0c;如何预览效果&#xff1f; 一个方法就可以了&#xff0c;主要是如何从事件中读取文件数据&#xff0c;放到<img>展示 幸运的是&#xff0c;事件中的图片数据已经被转换成<img>可直接识别的内容&#xff0c;直接赋值给<img&g…

python QT 图片缩放,移动

python QT graphicsView控件实现图片的缩放与移动 1、效果图2、界面搭建3、实现方法3.1、构建处理图元的类3.1、绘制图像3.2、拖拽方法实现3.3、缩放方法实现 4、调用方法 1、效果图 选择图片后可在graphicsView窗口中显示选择的图片&#xff0c;可以用鼠标拖拽图片。当鼠标停…