美文网首页
矩阵计算器

矩阵计算器

作者: mark_x | 来源:发表于2019-08-16 18:39 被阅读0次

这是小甲鱼第25课的作业,要求输入两个矩阵,计算矩阵相乘的运算结果,并以合适的格式打印出来


矩阵相乘计算器

难点

  • 矩阵相乘的循环嵌套
  • 如何输出横向的打印结果→借鉴之前的logo打印方式,横向组合,按行打印

小技巧
这里我将每个矩阵的打印代码写成了函数,与答案相比更加简洁。

// 输入维数  输入矩阵  矩阵计算函数  打印函数
// 矩阵1:M×P
// 矩阵2:P×N
#include <stdio.h>

void printMat(int *p, int mat_rows, int mat_cols, int n)
{
    int ii = 0;
    if (n < mat_rows)
    {
        printf("|"); //one space        
        for (ii = 0; ii < mat_cols; ii++)
        {
            printf(" %2d ", *(p+ii));
        }
        printf("|");
    }
    else
    {
        printf(" "); //one space        
        for (ii = 0; ii < mat_cols; ii++)
        {
            printf("    ");
        }
        printf(" ");        
    }
       
}

int main(void)
{
    // 确定矩阵维数
    int M, P, N;
    printf("请输入矩阵1的尺寸(M*P): ");
    scanf("%d*%d", &M, &P);
    printf("请输入矩阵2的尺寸(P*N): ");
    scanf("%d*%d", &P, &N);
    
    
    // 定义空矩阵
    int mat_a[M][P];
    int mat_b[P][N];
    
    int mat_c[M][N];  // 初始化 可变数组需要手动初始化
    int i = 0, j = 0;
    for (i = 0; i < M; i++)
    {
        for (j = 0; j < N; j++)
        {
            mat_c[i][j] = 0;
        }
    }
    
    
    // 录入矩阵数据  使用i,j分层循环

    printf("请输入矩阵1: \n");
    for (i = 0; i < M; i++)
    {
        for (j = 0; j < P; j++)
        {
            scanf("%d", &mat_a[i][j]);
        }
    }
    
    
    
    printf("请输入矩阵2: \n");
    for (i = 0; i < P; i++)
    {
        for (j = 0; j < N; j++)
        {
            scanf("%d", &mat_b[i][j]);
        }
    }
    
    // 分析矩阵计算的循环嵌套
    // 矩阵C有M*N个元素,最两分别为M和N
    for (i = 0; i < M; i++)
    {
        for (j = 0; j < N; j++)
        {
            int sum = 0;
            // 每个元素需要求和得到结果,又是一层循环
            for (int k = 0; k < P; k++)
            {
                sum += mat_a[i][k] * mat_b[k][j];
            }
            mat_c[i][j] = sum;
        }
    }

    
    // 按行打印结果 按行组装
    // M和P指定行数,取两者的较大值
    int row = M > P ? M : P;
    
    for (int n = 0; n < row; n++)
    {
        
        // mat_a
        printMat(&mat_a[n][0], M, P, n);
       
        // print *
        if (n == row / 2)
            printf(" * ");
        else
            printf("   ");
        
        // mat_b
        printMat(&mat_b[n][0], P, N, n);
        
        // print =
        if (n == row / 2)
            printf(" = ");
        else
            printf("   ");
        
        // mat_c
        printMat(&mat_c[n][0], M, N, n);       
        
        printf("\n");
        
        
    }
    return 0;
}

相关文章

  • 矩阵计算器

    这是小甲鱼第25课的作业,要求输入两个矩阵,计算矩阵相乘的运算结果,并以合适的格式打印出来 难点: 矩阵相乘的循环...

  • SciPy

    NumPy替我们搞定了向量和矩阵的相关操作,基本上算是一个高级的科学计算器。SciPy基于NumPy提供了更为丰富...

  • 数据结构:稀疏矩阵运算器

    题目:设计一个程序,实现一个能进行稀疏矩阵基本运算的计算器。按照教科书《数据结构(C语言版)》(严蔚敏等)5.3....

  • 用C语言实现矩阵计算器

    代码: 核心: 两个矩阵计算的算法:

  • iOS简单项目 — 计算器

    计算器所需求功能 计算器所用模式:MVC计算器所用语言:Swift计算器所参考课程:斯坦福 第一步:构造计算器界面...

  • 【敲黑板】考试计算器技巧

    方案一 普通计算器+科学计算器(让带计算器) 方案二 搜狗输入法V+计算大法(不让带计算器) 快捷操作 加:+ ...

  • 2018-11-11

    html部分 计算器 计算器 × □ - CE ...

  • 逆矩阵

    逆矩阵对任意矩阵,如果存在一个矩阵,使,则称矩阵可逆,矩阵为矩阵的逆矩阵。 奇异矩阵并不是所有的矩阵都有逆矩阵,没...

  • 房贷计算器

    最近房产版升级,需要重新制作房贷计算器的功能,主要参考了 房天下房贷计算器和安居客房贷计算器,两大平台的计算器。 ...

  • 2018-11-01for/while/计算器

    计算器 计算器 window.onload = function(){va...

网友评论

      本文标题:矩阵计算器

      本文链接:https://www.haomeiwen.com/subject/ytwyjctx.html