当前位置: 首页 > news >正文

矩阵的运算

目标:实现一个能进行稀疏矩阵基本运算(包括加、减、乘)的运算器。

(1)以三元组顺序表表示稀疏矩阵,实现两个矩阵相加、相减、相乘的运算

(2)稀疏矩阵的输入形式为三元组表示,运算结果则以通常的阵列形式列出。

(3)首先提示用户输入矩阵的行数和列数,并判别给出的两个矩阵行、列数对于所要求作的运算是否相匹配。可设矩阵的行数和列数均不超过20。

(4)程序需给出菜单项,用户按照菜单提示进行相应的操作。

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
void menu()
{printf("****************************************************************\n");printf("****************************************************************\n");printf("**********************欢迎使用矩阵计算器************************\n");printf("*******1、转置                               2、加法      ******\n");printf("*******3、减法                               4、数乘      ******\n");printf("*******5、乘法                               0、退出     *******\n");printf("****************************************************************\n");printf("****************************************************************\n");
}void  Matrix_output(int(*s)[100], int m, int n)//输出
{int i, j;for (i = 0; i < m; i++){for (j = 0; j < n; j++){printf("%2d ", s[i][j]);}printf("\n");}
}void  Matrix_transpose(int(*s)[100], int(*t)[100], int m, int n)//转置
{int i, j;for (i = 0; i < m; i++){for (j = 0; j < n; j++){t[j][i] = s[i][j];}}
}
void Matrix_addition(int(*s)[100], int(*t)[100], int(*p)[100], int m, int n)//相加
{int i, j;for (i = 0; i < m; i++){for (j = 0; j < n; j++){p[i][j] = s[i][j] + t[i][j];}}
}void Matrix_subtraction(int(*s)[100], int(*t)[100], int(*p)[100], int m, int n)//相减
{int i, j;for (i = 0; i < m; i++){for (j = 0; j < n; j++){p[i][j] = s[i][j] - t[i][j];}}
}void Matrix_shucheng(int(*s)[100], int(*t)[100], int m, int n, int k)//数乘
{int i, j;for (i = 0; i < m; i++){for (j = 0; j < n; j++){t[i][j] = k * s[i][j];}}
}void Matrix_multiplication(int(*s)[100], int(*t)[100], int(*p)[100], int m, int n, int x, int y)//相乘
{int i, j, k, sum;for (i = 0; i < m; i++){for (j = 0; j < y; j++){sum = 0;for (k = 0; k < n; k++){sum += s[i][k] * t[k][j];}p[i][j] = sum;}}
}int main()
{int m, n, i, j, k, input;int x, y;int A[100][100], B[100][100], C[100][100];do{menu();printf("请选择:>");scanf("%d", &input);switch (input){case 1://转置printf("请输入矩阵的行数:> ");scanf("%d", &m);printf("\n");printf("请输入矩阵的列数:> ");scanf("%d", &n);printf("\n");printf("请输入矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &A[i][j]);}}printf("原矩阵:\n");Matrix_output(A, m, n);Matrix_transpose(A, B, m, n);printf("转置后的矩阵:\n");Matrix_output(B, n, m);break;case 2://相加printf("请输入第一个矩阵的行数:> ");scanf("%d", &m);printf("\n");printf("请输入第一个矩阵的列数:> ");scanf("%d", &n);printf("\n");printf("请输入矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &A[i][j]);}}printf("请输入第二个矩阵的行数:> ");scanf("%d", &x);printf("\n");printf("请输入第二个矩阵的列数:> ");scanf("%d", &y);printf("\n");if (m == x && n == y){printf("请输入矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &B[i][j]);}}printf("第一个矩阵:\n");Matrix_output(A, m, n);printf("第二个矩阵:\n");Matrix_output(B, m, n);Matrix_addition(A, B, C, m, n);printf("和矩阵:\n");Matrix_output(C, m, n);}else{printf("这两个矩阵不是同型矩阵,不能相加\n");}break;case 3:printf("请输入第一个矩阵的行数:> ");scanf("%d", &m);printf("\n");printf("请输入第一个矩阵的列数:> ");scanf("%d", &n);printf("\n");printf("请输入第一个矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &A[i][j]);}}printf("请输入第二个矩阵的行数:> ");scanf("%d", &x);printf("\n");printf("请输入第二个矩阵的列数:> ");scanf("%d", &y);printf("\n");if (m == x && n == y){printf("请输入第二个矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &B[i][j]);}}printf("第一个矩阵:\n");Matrix_output(A, m, n);printf("第二个矩阵:\n");Matrix_output(B, m, n);Matrix_subtraction(A, B, C, m, n);printf("差矩阵:\n");Matrix_output(C, m, n);}else{printf("这两个矩阵不是同型矩阵,不能相减\n");}break;case 4:printf("请输入矩阵的行数:> ");scanf("%d", &m);printf("\n");printf("请输入矩阵的列数:> ");scanf("%d", &n);printf("\n");printf("请输入这个数:>");scanf("%d", &k);printf("\n");printf("请输入矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &A[i][j]);}}printf("原矩阵:\n");Matrix_output(A, m, n);Matrix_shucheng(A, B, m, n, k);printf("数乘矩阵:\n");Matrix_output(B, m, n);break;case 5:printf("请输入第一个矩阵的行数:> ");scanf("%d", &m);printf("\n");printf("请输入第一个矩阵的列数:> ");scanf("%d", &n);printf("\n");printf("请输入第一个矩阵:\n");for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &A[i][j]);}}printf("请输入第二个矩阵的行数:> ");scanf("%d", &x);printf("\n");printf("请输入第二个矩阵的列数:> ");scanf("%d", &y);printf("\n");if (n == x){printf("请输入第二个矩阵:\n");for (i = 0; i < x; i++){for (j = 0; j < y; j++){scanf("%d", &B[i][j]);}}printf("第一个矩阵:\n");Matrix_output(A, m, n);printf("第二个矩阵:\n");Matrix_output(B, x, y);Matrix_multiplication(A, B, C, m, n, x, y);printf("相乘矩阵:\n");Matrix_output(C, m, y);}else{printf("这两个矩阵不能相乘\n");}break;case 0:printf("退出计算,欢迎再次使用\n");break;default:printf("输入错误,请从新输入\n");break;}} while (input);return 0;
}

出菜单项,用户按照菜单提示进行相应的操作。

http://www.lryc.cn/news/206444.html

相关文章:

  • Android 获取SIM卡号码权限申请
  • Linux CentOS 本地yum配置
  • 【c++速通】入门级攻略:什么是内联函数?函数重载又是什么?
  • ubuntu 安装串口工具和添加虚拟串口
  • 【数据结构】数组和字符串(四):特殊矩阵的压缩存储:稀疏矩阵——三元组表
  • 为什么POST请求经常发送两次?
  • 打破总分行数据协作壁垒,DataOps在头部股份制银行的实践|案例研究
  • 测试用例的设计方法(全):边界值分析方法
  • 酷开科技 | 酷开系统沉浸式大屏游戏更解压!
  • 读高性能MySQL(第4版)笔记20_Performance Schema和其他
  • spring cloud Eureka集群模式搭建(IDEA中运行)《二》
  • 大模型(LLM)在电商推荐系统的探索与实践
  • C语言之指针详解
  • 【Java笔记+踩坑】设计模式——原型模式
  • Flutter GetX使用详解
  • 【ARM Coresight 系列文章 3.3 - ARM Coresight SWD 协议详细介绍】
  • 作为开发者,可视化开发工具了解一下
  • Python:实现日历功能
  • 2.9.C++项目:网络版五子棋对战之业务处理模块的设计
  • springboot actuator 常用接口
  • 知识点滴 - Email地址不区分大小写
  • 同一个页面同一区域两个el-table在v-if下样式重叠问题
  • ExoPlayer架构详解与源码分析(6)——MediaPeriod
  • 【开题报告】基于Spring Boot的课程在线预约系统的设计与实现
  • React Hooks还有哪些常用的用法?
  • 基于Java的学生学籍管理系统设计与实现(源码+lw+部署文档+讲解等)
  • Java内部类、匿名内部类、嵌套类详解
  • 【兔子王赠书第3期】《案例学Python(进阶篇)》
  • 【C刷题】day6
  • MySQL精髓:如何使用ALL一次找到最大值