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

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

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

相关文章
|
运维 监控 安全
云计算MSP行业调研报告
# 1. 概述 ## 1.1 背景和概念 企业上云是当前的大势所趋,但企业上云并非坦途。随着业务、数据等向云端迁移,企业在上云过程中会各种复杂的问题,比如平台选择、系统迁移、多云管理、应用优化以及成本核算和安全管理等问题。要解决这些问题,就需要专业的团队来指导,因此诞生了云MSP。 云MSP即云管理服务提供商(Cloud Management Service Provider),通常是指对接
4661 0
云计算MSP行业调研报告
|
搜索推荐 机器学习/深度学习 算法
如何增加用户的参与感?交互式推荐来了!
一方面,互动能让用户感受到更多的参与感,并能一定程度上干预推荐结果,而不只是被动接受推荐结果;另一方面,系统通过与用户的互动能更加了解用户的偏好,从而提升推荐效果。那么,我们是如何让用户和推荐系统互动起来的呢?且看下文。
4670 0
|
11月前
|
运维 监控 负载均衡
探索微服务架构下的服务治理:动态服务管理平台深度解析
探索微服务架构下的服务治理:动态服务管理平台深度解析
|
9月前
|
数据采集 供应链 安全
中小企业数改方案
本方案旨在推动中小企业数字化转型,落实国家四部门发布的《中小企业数字化赋能专项行动方案(2025—2027年)》。通过政策引导、技术支持和应用实践,帮助中小企业降低转型成本,提升核心竞争力,实现从营销管理、生产管控、质量管理到设备管理等多场景的全面数字化升级。
359 2
中小企业数改方案
|
移动开发 API 开发工具
uniapp如何与原生应用进行混合开发?
uniapp如何与原生应用进行混合开发?
915 0
Axure原型设计:制作验证码倒计时,并重新获取交互效果
本文详细介绍了在Axure中实现验证码倒计时交互效果的步骤,包括元件准备、布局美化、全局变量设置及交互效果配置。通过分解交互流程,利用全局变量控制倒计时逻辑,最终实现按钮从“获取验证码”到倒计时状态的自动切换,并可重复使用。
360 1
|
应用服务中间件 nginx 开发者
从 Docker Hub 拉取镜像受阻?这些解决方案帮你轻松应对
最近一段时间 Docker 镜像一直是 Pull 不下来的状态,感觉除了挂🪜,想直连 Docker Hub 是几乎不可能的。更糟糕的是,很多原本可靠的国内镜像站,例如一些大厂和高校运营的,也陆续关停了,这对我们这些个人开发者和中小企业来说是挺难受的。之前,通过这些镜像站,我们可以快速、方便地获取所需的 Docker 镜像,现在这条路也不行了。感觉这次动作不小,以后想直接访问 Docker Hub 是不可能了。所以我们得想办法搭建自己的私有镜像仓库。
从 Docker Hub 拉取镜像受阻?这些解决方案帮你轻松应对
|
算法 Python
打造高效生产排程:Python在APS解决方案中的应用
打造高效生产排程:Python在APS解决方案中的应用
685 2
|
关系型数据库 MySQL 数据处理
Mysql关于同时使用Group by和Order by问题
总的来说,`GROUP BY`和 `ORDER BY`的合理使用和优化,可以在满足数据处理需求的同时,保证查询的性能。在实际应用中,应根据数据的特性和查询需求,合理设计索引和查询结构,以实现高效的数据处理。
1274 1
|
存储 缓存 Java
从浏览器发送请求给SpringBoot后端时,是如何准确找到哪个接口的?(下篇)
从浏览器发送请求给SpringBoot后端时,是如何准确找到哪个接口的?(下篇)
392 1