编写矩阵运算程序(C语言)

article/2025/9/23 4:19:26

在这里插入图片描述

编写矩阵运算程序之C语言

  • 1. 要求
  • 2 代码

1. 要求

  • a) 功能包括:矩阵加、矩阵减、矩阵乘、矩阵三角化

  • b) 实现方式1:函数的参数为:二维数组名、行数、列数

2 代码

#include<stdio.h>
#define M 20
#define N 20
float A[M][N];
float B[M][N];
float C[M][N];
int i,j,m,n,p,q;
float y=1.0;
//菜单函数
void memu()
{printf("\t\t======================================================\n");printf("\t\t||          欢迎您使用矩阵函数包系统                ||\n");printf("\t\t||          *********************************       ||\n");printf("\t\t||          *           功能菜单          *         ||\n");printf("\t\t||          *********************************       ||\n");printf("\t\t||                  1.矩阵相加                      ||\n");printf("\t\t||                  2.矩阵相减                      ||\n");printf("\t\t||                  3.数乘矩阵                      ||\n");printf("\t\t||                  4.矩阵转置                      ||\n");printf("\t\t||                  5.逆矩阵                        ||\n");printf("\t\t||                  6.矩阵的上三角化                ||\n");printf("\t\t||                  7.退出                          ||\n");printf("\t\t||        *********************************         ||\n");printf("\t\t||         请选择您需要的运算,按回车键结束         ||\n");printf("\t\t======================================================\n");
}
//两个矩阵相加
void jianjian()
{printf("请输入矩阵A的行数和列数(用空格隔开):");scanf("%d %d",&i,&j);printf("请输入矩阵B的行数和列数(用空格隔开):") ;scanf("%d %d",&m,&n);if(i!=m||j!=n)printf("您输入的两个矩阵不能相加,j!=m,请重试.....\n");elseprintf("请输入矩阵A:\n");for(p=0;p<i;p++)for(q=0;q<j;q++)scanf("%f",&A[p][q]);printf("输出矩阵A:\n");for(p=0;p<i;p++)for(q=0;q<j;q++){printf("%10.2f",A[p][q]);if((q+1)%j==0)printf("\n");}printf("请输入矩阵B:\n");for(p=0;p<i;p++)for(q=0;q<j;q++)scanf("%f",&B[p][q]);printf("输出矩阵B:\n");for(p=0;p<i;p++)for(q=0;q<j;q++){printf("%10.2f",B[p][q]);if((q+1)%j==0)printf("\n");}printf("矩阵A+矩阵B为:\n"); //计算两个矩阵相加for(p=0;p<i;p++)for(q=0;q<j;q++)C[p][q]=A[p][q]+B[p][q];for(p=0;p<i;p++)for(q=0;q<j;q++){printf("%10.2f",C[p][q]);if((q+1)%j==0)printf("\n");}
}//两个矩阵相减
void jiajia()
{printf("请输入矩阵A的行数和列数(用空格隔开):");scanf("%d %d",&i,&j);printf("请输入矩阵B的行数和列数(用空格隔开):") ;scanf("%d %d",&m,&n);if(i!=m||j!=n)printf("您输入的两个矩阵不能相加,j!=m,请重试.....\n");else printf("请输入矩阵A:\n");for(p=0;p<i;p++)for(q=0;q<j;q++)scanf("%f",&A[p][q]);printf("输出矩阵A:\n");for(p=0;p<i;p++)for(q=0;q<j;q++){printf("%10.2f",A[p][q]);if((q+1)%j==0)printf("\n");}printf("请输入矩阵B:\n");for(p=0;p<i;p++)for(q=0;q<j;q++)scanf("%f",&B[p][q]);printf("输出第矩阵B:\n");for(p=0;p<i;p++)for(q=0;q<j;q++){printf("%10.2f",B[p][q]);if((q+1)%j==0)printf("\n");}printf("矩阵A-矩阵B为:\n"); //计算两个矩阵相减for(p=0;p<i;p++)for(q=0;q<j;q++)C[p][q]=A[p][q]-B[p][q];for(p=0;p<i;p++)for(q=0;q<j;q++){printf("%10.2f",C[p][q]);if((q+1)%j==0)printf("\n");}}//数乘矩阵
void xiance()
{float k;printf("请输入矩阵A的行数和列数(用空格隔开):");scanf("%d %d",&i,&j);printf("请输入矩阵A\n");for(p=0;p<i;p++)for(q=0;q<j;q++)scanf("%f",&A[p][q]);printf("输出矩阵A\n");for(p=0;p<i;p++)for(q=0;q<j;q++){printf("%10.2f",A[p][q]);if((q+1)%j==0)printf("\n");}printf("请输入一个实数:\n");scanf("%f",&k);for(p=0;p<i;p++) //数乘矩阵for(q=0;q<j;q++)B[p][q]=k*A[p][q];printf("输出k乘矩阵A的结果\n");for(p=0;p<i;p++)for(q=0;q<j;q++){printf("%10.2f",B[p][q]);if((q+1)%j==0)printf("\n");}}//转置矩阵
void cj()
{printf("请输入矩阵A的行数和列数(用空格隔开):");scanf("%d %d",&i,&j);printf("请输入矩阵A:\n");for(p=0;p<i;p++)for(q=0;q<j;q++)scanf("%f",&A[p][q]);printf("输出矩阵A\n");for(p=0;p<i;p++)for(q=0;q<j;q++){printf("%10.2f",A[p][q]);if((q+1)%j==0)printf("\n");}for(p=0;p<i;p++) //转置for(q=0;q<j;q++)B[q][p]=A[p][q];printf("输出矩阵A的转置矩阵:\n");for(p=0;p<j;p++)for(q=0;q<i;q++){printf("%10.2f",B[p][q]);if((q+1)%i==0)printf("\n");}
}//逆矩阵
void njc()
{float a[M][2*M];float b[N][2*N];float t,x;int k,T;printf("输入方阵的维数:\n"); //请输入方阵,即行和列相等的矩阵。scanf("%d",&T);printf("请输入矩阵:\n");for(i=0;i<T;i++)for (j=0;j<T;j++)scanf("%f",&b[i][j]);printf("原矩阵为:\n");for (i=0;i<T;i++){for (j=0;j<T;j++)printf("%10.3f",b[i][j]);printf("\n");}for(i=0;i<T;i++)for(j=0;j<(2*T);j++){if (j<T)a[i][j]=b[i][j];else if (j==T+i)a[i][j]=1.0;elsea[i][j]=0.0;}for(i=0;i<T;i++){for(k=0;k<T;k++){if(k!=i){t=a[k][i]/a[i][i];for(j=0;j<(2*T);j++){x=a[i][j]*t;a[k][j]=a[k][j]-x;}}}}for(i=0;i<T;i++){t=a[i][i];for(j=0;j<(2*T);j++)a[i][j]=a[i][j]/t;}for(i=0;i<T;i++)y=y*a[i][i];if(y==0)printf("对不起,您输入的矩阵没有逆矩阵,请重新输入。\n");else{for(i=0;i<T;i++)for(j=0;j<T;j++)b[i][j]=a[i][j+T];printf("逆矩阵为:\n");for (i=0;i<T;i++){for (j=0;j<T;j++)printf("%10.3f",b[i][j]);printf("\n");}}}//矩阵的上三角化
void sjcy()
{int i, j, k, v, hang, lie;double a[50][50], m;double b[50][50];  //定义可中途放置的地址double c[50][50] = { 0 }; //定义检查层的中途存放地址int num1, num2, num3, num4  ;//输入部分printf("请输入你想计算的行的个数:");scanf("%d", &hang);printf("请输入你想计算的列的个数:");scanf("%d", &lie);for (i = 0; i < hang; ++i){printf("请输入第%d行元素:", i + 1);for (j = 0; j < lie; ++j)scanf("%lf", &a[i][j]);}//对角化部分for (k = 0; k < hang - 1; ++k){for (i = k; i < hang - 1; ++i){for (j = 0; j < lie; ++j){//数组行交换if (a[k][k] == 0){for (num1 = k; num1 == k; ++num1){for (num2 = 0; num2 < lie; ++num2){c[num1][num2] = a[num1][num2];a[num1][num2] = a[num1 + 1][num2];a[num1 + 1][num2] = c[num1][num2];for (v = 0; v < lie; ++v)b[k][v] = a[k][v];}}}//矩阵换行结束m = a[i + 1][k] / (1.0*a[k][k]);b[i + 1][j] = a[i + 1][j] - (m)*a[k][j];}}//将寄存在b中的数据转到a中for (num3 = 1; num3 <= hang; ++num3)for (num4 = 0; num4 < lie; ++num4){a[num3][num4] = b[num3][num4];}}//矩阵输出for (i = 0; i < hang; ++i){{for (j = 0; j < lie; ++j)printf("%.2lf    ", a[i][j]);}printf("\n");}}//主函数
void main()
{int x;while(1){memu();printf("\t\t>>>请选择1--6:");scanf("%d",&x);switch (x){case 1:jianjian();//两个矩阵相加break;case 2:jiajia();  //两个矩阵相减break;case 3:xiance() ; //数乘矩阵break;case 4:cj();    //转置矩阵break;case 5:njc();  //逆矩阵break;case 6:sjcy();  //矩阵的上三角化break;case 7:;break;default:printf("\n-----选择错误,请重试-------\n");break;}}printf("-------次感谢您使用本系统------------");printf("\n");printf("******************************************************************\n");
}

执行的图片:

在这里插入图片描述

在这里插入图片描述


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

相关文章

C语言——矩阵转置

矩阵转置的原理&#xff1a;行元素变成列元素&#xff0c;列元素变成行元素 例如&#xff1a; 矩阵转置代码 #include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<math.h>//矩阵转置 double** Matrix_T(double** arr) {if(arrNULL)e…

C语言实现矩阵的乘法

矩阵乘法作为算法题我觉得对我来说是比较难想的&#xff0c;而且作为没学线性代数的我来说&#xff0c;这简直就是场灾难&#xff0c;在我研究了书上及网上的有关资料后&#xff0c;我觉得自己应该差不多可以理解矩阵乘法的要领了&#xff0c;希望可以帮助大家&#xff1a;其实…

C语言矩阵运算

矩阵的乘法&#xff1a; 矩阵的列数&#xff08;column&#xff09;和第二个矩阵的行数&#xff08;row&#xff09;相同时 #include<stdio.h>int main() { int a[2][4], b[4][3], c[2][3];int i, j, k, sum; printf("输入一个24的矩阵&#xff1a;\n"); fo…

c语言矩阵的乘法

矩阵的乘法&#xff1a; 两个矩阵只有在第一个矩阵的列数&#xff08;column&#xff09;和第二个矩阵的行数&#xff08;row&#xff09;相同时才有意义。一般单指矩阵乘积时&#xff0c;指的便是一般矩阵乘积。一个mn的矩阵就是mn个数排成m行n列的一个数阵。 运算规则&#x…

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

电影黑客帝国有很多这样的场景 用矩阵表示我们看到的一切&#xff01; 而在编程中矩阵是用数组来表示的 目前小作者还只是学习编程的初学者&#xff0c;很多知识内容都还没有学习。但相信每一个学习编程的小伙伴在做C语言方面的练习时都会遇到有关矩阵相关的题目&#xff0c;…

《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: 这样一切就正常了&#…