admin管理员组文章数量:1794759
$求两个对称矩阵之和与乘积
代码语言:javascript代码运行次数:0运行复制#include <stdio.h>
#define X 3
#define Y 6
static int value(int a[], int i, int j)
{
if(i >= j)
return a[(i * (i + 1)) / 2 + j]; //下三角
else
return a[(j * (j + 1)) / 2 + i]; //上三角
}
static void add(int a[], int b[], int c[][X])
{
int i, j;
for(i = 0; i < X; i++)
{
for(j = 0; j < X; j++)
{
c[i][j] = value(a, i, j) + value(b, i, j);
}
}
}
static void mul(int a[], int b[], int c[][X])
{
int i, j, k, sum;
for(i = 0; i < X; i++)
{
for(j = 0; j < X; j++)
{
sum = 0;
for(k = 0; k < X; k++)
{
sum = sum + value(a, i, k) * value(b, k, j);
}
c[i][j] = sum;
}
}
}
static void dis1(int a[])
{
int i, j;
for(i = 0; i < X; i++)
{
for(j = 0; j < X; j++)
{
printf("%4d", value(a, i, j));
}
printf("\n");
}
}
static void dis2(int c[][X])
{
int i, j;
for(i = 0; i < X; i++)
{
for(j = 0; j < X; j++)
{
printf("%4d", c[i][j]);
}
printf("\n");
}
}
int main(int argc, char *argv[])
{
int a[Y] = {1, 2, 3, 4, 5, 6};
int b[Y] = {1, 1, 1, 1, 1, 1};
int c1[X][X], c2[X][X];
printf("A矩阵:\n");
dis1(a);
printf("B矩阵:\n");
dis1(b);
add(a, b, c1);
printf("A+B:\n");
dis2(c1);
mul(a, b, c2);
printf("A*B:\n");
dis2(c2);
int c[Y],d[Y],ad[X][X],s[X][X];
printf("请输入C矩阵(例如A矩阵输入时应为1 2 3 4 5 6):\n");
for(int i=0; i<Y; i++)
scanf("%d",c+i);
printf("C矩阵:\n");
dis1(c);
for(int i=0; i<Y; i++)
scanf("%d",d+i);
printf("D矩阵:\n");
dis1(d);
add(c, d, ad);
printf("C+D:\n");
dis2(ad);
mul(c, d, s);
printf("C*D:\n");
dis2(s);
return 0;
}
实验要求
1.1实验目的 掌握对称矩阵的压缩储存方法及相关算法设计 1.2实验内容 已知A和B为两个n*n阶的对称矩阵,在输入时,对称矩阵只输入下三角形元素,存入一维数组,如图6.15所示(对称矩阵M存储在一维数组A中),设计一个程序exp6-5.cpp实现以下功能。 (1) 求对称矩阵A和B的和。 (2) 求对称矩阵A和B的乘积。 要求:描述其逻辑结构+算法;存储结构+算法;介绍每个函数的设计思想,函数调用将的关系及其接口参数的意义。算法代码、算法运行结果。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2023-02-20,如有侵权请联系 cloudcommunity@tencent 删除存储int设计数组算法本文标签: 求两个对称矩阵之和与乘积
版权声明:本文标题:$求两个对称矩阵之和与乘积 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754887677a1707789.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论