矩阵的运算

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

(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;
}

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

相关推荐
开开心心就好2 天前
吾爱大佬原创的文件时间修改工具
安全·智能手机·pdf·电脑·智能音箱·智能手表·1024程序员节
开开心心就好7 天前
近200个工具的电脑故障修复合集
安全·智能手机·pdf·电脑·consul·memcache·1024程序员节
数据皮皮侠AI9 天前
中国城市可再生能源数据集(2005-2021)|顶刊 Sci Data 11 种能源面板
大数据·人工智能·笔记·能源·1024程序员节
计算机毕业论文辅导12 天前
物联网实战:基于MQTT协议的智能家居数据传输系统设计与实现
1024程序员节
开开心心就好12 天前
支持批量处理的视频分割工具推荐
安全·智能手机·rust·pdf·电脑·1024程序员节·lavarel
liuyao_xianhui14 天前
Linux开发工具结尾 _make
linux·运维·服务器·数据结构·哈希算法·宽度优先·1024程序员节
学传打活16 天前
【边打字.边学昆仑正义文化】_21_爱的结晶(1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
数据皮皮侠AI23 天前
顶刊同款!中国地级市风灾风险与损失数据集(2000-2022)|灾害 / 环境 / 经济研究必备
大数据·人工智能·笔记·能源·1024程序员节
Fab1an24 天前
Busqueda——Hack The Box 靶机
linux·服务器·学习·1024程序员节
技术专家25 天前
Stable Diffusion系列的详细讨论 / Detailed Discussion of the Stable Diffusion Series
人工智能·python·算法·推荐算法·1024程序员节