番外篇之矩阵运算

矩阵的运算代码(加减乘除)(内有注释)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define ROW 10  //定义行
#define COL 10	//定义列
//设置全局变量A矩阵的m代表实际矩阵的行数,n代表实际矩阵的列数
//设置全局变量B矩阵的p代表实际矩阵的行数,q代表实际矩阵的列数
int m, n;
int p, q;
void menu()
{
	printf("**********************请选择你要进行的运算\n");
	printf("**********************0:退出矩阵运算     \n");
	printf("**********************1:加法运算		  \n");
	printf("**********************2:减法运算	      \n");
	printf("**********************3:转置运算	      \n");
	printf("**********************4:乘法运算		  \n");
}
void Input_MAT(int A[][COL], int B[][COL])
{
	int i = 0;
	int j = 0;
	printf("输入A数组的行数,列数:");
	scanf("%d%d", &m, &n);
	printf("输入A数组:\n");
	for (; i < m; i++)
	{
		for (j = 0; j < n; j++)
		{
			scanf("%d", &A[i][j]);
		}
	}
	printf("输入B数组的行数,列数:");
	scanf("%d%d", &p, &q);
	printf("输入B数组:\n");
	//输入B数组
	for (i = 0; i < p; i++)
	{
		for (j = 0; j < q; j++)
		{
			scanf("%d", &B[i][j]);
		}
	}
}
void Output_MAT(int A[][COL], int B[][COL])
{
	int i = 0;
	int j = 0;
	//输出A数组
	printf("输出A数组:\n");
	for (; i < m; i++)
	{
		for (j = 0; j < n; j++)
		{
			printf("%2d ", A[i][j]);
		}
		printf("\n");
	}
	printf("输出B数组:\n");
	//输出B数组
	for (i = 0; i < p; i++)
	{
		for (j = 0; j < q; j++)
		{
			printf("%2d ", B[i][j]);
		}
		printf("\n");
	}
}
//矩阵相加
void Add(int A[][COL],int B[][COL],int sum[][COL])
{
	if (m == p && n == q)
	{
		int i = 0;
		int j = 0;
		for (; i < m; i++)
		{
			for (j = 0; j < n; j++)
				sum[i][j] = A[i][j] + B[i][j];//得到和矩阵
		}
		//打印和矩阵
		printf("开始打印和矩阵\n");
		for (i=0; i < m; i++)
		{
			for (j = 0; j < n; j++)
				printf("%2d ", sum[i][j]);
			printf("\n");
		}
	}
	else
		printf("你的矩阵相加形式不合法,请重新输入\n");
}
void Sub(int A[][COL], int B[][COL], int sum[][COL])
{
	if (m == p && n == q)
	{
		int i = 0;
		int j = 0;
		for (; i < m; i++)
		{
			for (j = 0; j < n; j++)
				sum[i][j] = A[i][j] - B[i][j];//得到差矩阵
		}
		//打印和矩阵
		printf("开始打印减矩阵\n");
		for (i = 0; i < m; i++)
		{
			for (j = 0; j < n; j++)
				printf("%2d ", sum[i][j]);
			printf("\n");
		}
	}
	else
		printf("你的矩阵相减形式不合法,请重新输入\n");
}
void Tra(int A[][COL],int B[][COL])
{
	printf("下面开始A矩阵的转置\n");
	int i = 0;
	int j = 0;
	//转置运算
	for (; i < m; i++)
	{
		for (j = i; j < n; j++)
		{
			int tmp = 0;
			tmp = A[i][j];
			A[i][j] = A[j][i];
			A[j][i] = tmp;
		}
	}
	printf("下面开始B矩阵的转置\n");
	for (i = 0; i < p; i++)
	{
		for (j = i; j < q; j++)
		{
			int tmp = 0;
			tmp = B[i][j];
			B[i][j] = B[j][i];
			B[j][i] = tmp;
		}
	}
	//输入转置后的A,B矩阵
	Output_MAT(A, B);
}
void Mul1(int A[][COL], int B[][COL], int sum[][COL])
{
	int i = 0;
	int j = 0;
	int k = 0;
	if (n == p)
	{
		for (; i < m; i++)
		{
			for (j = 0; j < q; j++)
			{
				for (k = 0; k < n; k++)
				sum[i][j] += A[i][k] * B[k][j];
			}
		}
		printf("开始打印积矩阵\n");
		for (i = 0; i < m; i++)
		{
			for (j = 0; j < q; j++)
			printf("%2d ", sum[i][j]);
			printf("\n");
		}
	}
	else
		printf("矩阵相乘形式不合法\n");
}
void Mul2(int A[][COL], int B[][COL], int sum[][COL])
{
	int i = 0;
	int j = 0;
	int k = 0;
	if (q == m)
	{
		for (; i < p; i++)
		{
			for (j = 0; j < n; j++)
			{
				for (k = 0; k < q; k++)
					sum[i][j] += B[i][k] * A[k][j];
			}
		}
		printf("开始打印积矩阵\n");
		for (i = 0; i < p; i++)
		{
			for (j = 0; j < n; j++)
				printf("%2d ", sum[i][j]);
			printf("\n");
		}
	}
	else
		printf("矩阵相乘形式不合法\n");
}

int main()
{
	int A[ROW][COL] = { 0 };//初始化A数组
	int B[ROW][COL] = { 0 };//初始化B数组
	//矩阵输入函数
	//Input_MAT(A,B);
	//矩阵输出函数
	//Output_MAT(A, B);
	int input = 0;//初始化要进行的运算密码
	do
	{
		menu();//菜单,你要进行的矩阵运算
		printf("请输入密码进行矩阵运算:");
		scanf("%d", &input);
		//矩阵输入函数
		Input_MAT(A, B);
		//矩阵输出函数
		Output_MAT(A, B);
		int flag = 0;//矩阵乘法,若flag = 0,进行A乘以B,若flag=1,进行B乘以A
		int sum[ROW][COL] = { 0 };
		switch (input)
		{
		case 0:
			printf("退出矩阵运算");
			break;
		case 1:
			//定义矩阵之和的和矩阵
			Add(A, B, sum);//加法运算
			break;
		case 2:
			//矩阵减法运算
			Sub(A, B, sum);
			break;
		case 3:
			//A,B矩阵的转置
			Tra(A,B);
			break;
		case 4:
			//A,B矩阵的乘法
			printf("请输入你要进行的矩阵乘法\n");
			printf("输入 0 进行A矩阵乘以B矩阵的运算\n");
			printf("输入 1 进行B矩阵乘以A矩阵的运算\n");
			printf("请输入数字:");
			scanf("%d", &flag);
			if(flag==0)
			Mul1(A, B, sum);
			if(flag==1)
			Mul2(A, B, sum);
			break;
		default:
			printf("输入数字不合法,请重新输入\n");
			break;
		}
	} while (input);
	return 0;
}
相关推荐
我不是代码教父38 分钟前
[原创](Modern C++)现代C++的关键性概念: 流格式化
c++·字符串格式化·流格式化·cout格式化
利刃大大1 小时前
【回溯+剪枝】找出所有子集的异或总和再求和 && 全排列Ⅱ
c++·算法·深度优先·剪枝
子燕若水1 小时前
mac 手工安装OpenSSL 3.4.0
c++
*TQK*1 小时前
ZZNUOJ(C/C++)基础练习1041——1050(详解版)
c语言·c++·编程知识点
Rachela_z2 小时前
代码随想录算法训练营第十四天| 二叉树2
数据结构·算法
细嗅蔷薇@2 小时前
迪杰斯特拉(Dijkstra)算法
数据结构·算法
追求源于热爱!2 小时前
记5(一元逻辑回归+线性分类器+多元逻辑回归
算法·机器学习·逻辑回归
ElseWhereR2 小时前
C++ 写一个简单的加减法计算器
开发语言·c++·算法
Smark.2 小时前
Gurobi基础语法之 addConstr, addConstrs, addQConstr, addMQConstr
算法
*TQK*2 小时前
ZZNUOJ(C/C++)基础练习1031——1040(详解版)
c语言·c++·编程知识点