矩阵的运算

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

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

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

相关推荐
开开心心就好1 天前
解决图片无页码添加功能的实用工具
javascript·python·安全·智能手机·pdf·音视频·1024程序员节
学传打活2 天前
【边打字.边学昆仑正义文化】_25_宇宙动植物的由来(1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
开开心心就好6 天前
用户推荐的文件解锁与强制操作工具
安全·智能手机·pdf·scala·音视频·symfony·1024程序员节
liguojun202511 天前
软硬一体智慧场馆系统推荐——助力场馆数字化高效升级
java·大数据·人工智能·物联网·1024程序员节
开开心心就好23 天前
吾爱大佬原创的文件时间修改工具
安全·智能手机·pdf·电脑·智能音箱·智能手表·1024程序员节
开开心心就好1 个月前
近200个工具的电脑故障修复合集
安全·智能手机·pdf·电脑·consul·memcache·1024程序员节
数据皮皮侠AI1 个月前
中国城市可再生能源数据集(2005-2021)|顶刊 Sci Data 11 种能源面板
大数据·人工智能·笔记·能源·1024程序员节
计算机毕业论文辅导1 个月前
物联网实战:基于MQTT协议的智能家居数据传输系统设计与实现
1024程序员节
开开心心就好1 个月前
支持批量处理的视频分割工具推荐
安全·智能手机·rust·pdf·电脑·1024程序员节·lavarel
liuyao_xianhui1 个月前
Linux开发工具结尾 _make
linux·运维·服务器·数据结构·哈希算法·宽度优先·1024程序员节