$求两个对称矩阵之和与乘积

简介: $求两个对称矩阵之和与乘积
#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的乘积。

要求:描述其逻辑结构+算法;存储结构+算法;介绍每个函数的设计思想,函数调用将的关系及其接口参数的意义。算法代码、算法运行结果。

相关文章
|
7月前
|
人工智能
游游的选数乘积
游游的选数乘积
66 3
|
6月前
|
机器学习/深度学习 存储 人工智能
每日练习之矩阵乘法——斐波那契公约数
每日练习之矩阵乘法——斐波那契公约数
44 0
|
7月前
|
人工智能 小程序 BI
矩阵的转置、加和乘法写入C++
矩阵的转置、加和乘法写入C++
70 0
|
7月前
|
Java C++ Python
计算n阶行列式
计算n阶行列式
110 0
Acwing 平方矩阵 C++
Acwing 平方矩阵 C++
130 0
Acwing 平方矩阵 C++
AcWing 753. 平方矩阵 I
AcWing 753. 平方矩阵 I
75 0
AcWing 753. 平方矩阵 I
AcWing 755. 平方矩阵 III
AcWing 755. 平方矩阵 III
90 0
AcWing 755. 平方矩阵 III
AcWing 754. 平方矩阵 II
AcWing 754. 平方矩阵 II
101 0
AcWing 754. 平方矩阵 II