番外篇之矩阵运算

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

#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;
}
相关推荐
passer__jw767几秒前
【LeetCode】【算法】283. 移动零
数据结构·算法·leetcode
Ocean☾7 分钟前
前端基础-html-注册界面
前端·算法·html
顶呱呱程序15 分钟前
2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能
算法·matlab·音视频·matlab-gui·音频滤波·脉冲响应不变法
爱吃生蚝的于勒36 分钟前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~40 分钟前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
王哈哈^_^1 小时前
【数据集】【YOLO】【VOC】目标检测数据集,查找数据集,yolo目标检测算法详细实战训练步骤!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
星沁城1 小时前
240. 搜索二维矩阵 II
java·线性代数·算法·leetcode·矩阵
脉牛杂德1 小时前
多项式加法——C语言
数据结构·c++·算法
legend_jz1 小时前
STL--哈希
c++·算法·哈希算法
CSUC1 小时前
【C++】父类参数有默认值时子类构造函数列表中可以省略该参数
c++