C语言每日练习之求两个矩阵的乘积详解

目录
  • 分析
  • 代码实现
  • 总结

分析

在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中。

矩阵的乘法有以下注意事项:

  • 1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。
  • 2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
  • 3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。

代码实现:只需要用矩阵乘积的公式求出新的矩阵,即为两个矩阵的乘积,程序中还需要判断输入的两个矩阵是否可以相乘。

代码实现

#include <stdio.h>

int main()
{
    int line_a = 0; //A矩阵行数
    int col_a = 0; //A矩阵列数
    int line_b = 0; //B矩阵行数
    int col_b = 0; //B矩阵列数
    int i = 0;
    int j = 0;
    int k = 0;

    /* 获取A矩阵行数和列数 */
    printf("请输入A矩阵的行数和列数\n");
    scanf("%d%d", &line_a, &col_a);
    int matrix_A[line_a][col_a];

    /* 获取B矩阵行数和列数 */
    printf("请输入B矩阵的行数和列数\n");
    scanf("%d%d", &line_b, &col_b);
    int matrix_B[line_b][col_b];

    if(col_a != line_b)
    {
        printf("error,A矩阵的列数和B矩阵的行数必须相等!\n");
        return 0;
    }
    int matrix_C[line_a][col_b]; //C矩阵:A矩阵和B矩阵的乘积

    /* 获取A矩阵元素 */
    for(i = 0; i< line_a; i++)
    {
        printf("请输入A矩阵第%d行元素\n", i);
        for(j = 0; j < col_a; j++)
        {
            scanf("%d", &matrix_A[i][j]);
        }
    }

    /* 获取B矩阵元素 */
    for(i = 0; i< line_b; i++)
    {
        printf("请输入B矩阵第%d行元素\n", i);
        for(j = 0; j < col_b; j++)
        {
            scanf("%d", &matrix_B[i][j]);
        }
    }

    /* 打印矩阵 */
    printf("输入的A矩阵为:\n");
    for(i = 0; i < line_a; i++)
    {
        for(j = 0; j < col_a; j++)
        {
            printf("%d\t", matrix_A[i][j]);
        }
        printf("\n");
    }
    printf("输入的B矩阵为:\n");
    for(i = 0; i < line_b; i++)
    {
        for(j = 0; j < col_b; j++)
        {
            printf("%d\t", matrix_B[i][j]);
        }
        printf("\n");
    }

    /* 求AB的乘积,即矩阵C */
    for(i = 0; i < line_a; i++)
    {
        for(j = 0; j < col_b; j++)
        {
            matrix_C[i][j] = 0; //初始化
            for(k = 0; k < col_a; k++)
              matrix_C[i][j] += matrix_A[i][k] * matrix_B[k][j];
        }
    }

    /* 打印C矩阵 */
    printf("A矩阵乘B矩阵:\n");
    for(i = 0; i < line_a; i++)
    {
        for(j = 0; j < col_b; j++)
        {
            printf("%d\t", matrix_C[i][j]);
        }
        printf("\n");
    }

    return 0;
}

运行结果

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • C语言使用DP动态规划思想解最大K乘积与乘积最大问题

    最大K乘积问题 设I是一个n位十进制整数.如果将I划分为k段,则可得到k个整数.这k个整数的乘积称为I的一个k乘积.试设计一个算法,对于给定的I和k,求出I的最大k乘积. 编程任务: 对于给定的I 和k,编程计算I 的最大k 乘积. 需求输入: 输入的第1 行中有2个正整数n和k.正整数n是序列的长度:正整数k是分割的段数.接下来的一行中是一个n位十进制整数.(n<=10) 需求输出: 计算出的最大k乘积. 解题思路:DP 设w(h,k) 表示: 从第1位到第K位所组成的十进制数,设m(i,j)

  • C语言规律循环累加求和案例

    我就废话不多说了,大家还是直接看代码吧~ #include <stdio.h> void main(){ int i; float a,b,c,d,t; a = 1.0; b = 2.0; i = 1; t = 0; for (i = 1; i <= 20; i++) { if (i < 2){ c = b / a; t = c+t; a = a + 1; b = b + 1; //第一项不符合规律 } else { c = b / a; t = t + c; d = a; a =

  • 利用C语言来求最大连续子序列乘积的方法

    题目描述:给一个浮点数序列,取最大乘积连续子串的值,例如 -2.5,4,0,3,0.5,8,-1,则取出的最大乘积连续子串为3,0.5,8.也就是说,上述数组中,3 0.5 8这3个数的乘积3*0.5*8=12是最大的,而且是连续的. 提醒:此最大乘积连续子串与最大乘积子序列不同,请勿混淆,前者子串要求连续,后者子序列不要求连续.也就是说:最长公共子串(Longest CommonSubstring)和最长公共子序列(LongestCommon Subsequence,LCS)的区别: 子串(S

  • C语言实现的统计素数并求和代码分享

    题目来源于PAT平台,此题又是费了一番脑子.题目要求输出给定区间内的素数个数并对他们求和.具体思路是利用循环判断素数,将结果传递给控制变量,由控制变量再来判断是否执行自增以及求和.当然这里必须要注意1既不是素数也不是合数. 下面是代码: 复制代码 代码如下: #include <stdio.h> int main () {  int a=0,b=0;  int n=0,sum=0;  int x=0,i=0;  scanf("%d %d",&a,&b);  

  • C语言中求和、计算平均值、方差和标准差的实例

    计算C语言中的求和.标准差.方差和标准差等,需要加上头文件:#include <math.h> #include<stdio.h> #include "math.h" double sum = 0;//求和 double array[4] = {1.2,2.1,3.1,4.1}; int length = 0;//数组长度 double average = 0;//求平均数 double var = 0; //求方差 double standard = 0; /

  • C语言 用while循环求和的平均值操作

    Ⅰ.用while循环求和的平均值: ①.//代码摘下直接可以运行 #include<stdio.h> int main() { int count=0,total,number; total=0; //total:存放累加和 printf("Please input six number!\n"); while(count<=5) //循环控制条件 { count++; //循环体 scanf("%d",&number); printf(&

  • C语言每日练习之求两个矩阵的乘积详解

    目录 分析 代码实现 总结 分析 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中. 矩阵的乘法有以下注意事项: 1.当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘. 2.矩阵C的行数等于矩阵A的行数,C的列数等于B的列数. 3.乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和. 代码实现:只需要用矩阵乘积的公式求出新的矩阵,即为两个矩阵的乘积,程序中

  • C语言如何利用异或进行两个值的交换详解

    C语言异或运算 位运算符家族中,最常用的,某过于异或运算符. 异或运算符是指: 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1.即:0^0=0, 1^0=1, 0^1=1, 1^1=0 例如:10100001^00010001=10110000 0^0=0,0^1=1 可理解为:0异或任何数,其结果=任何数 1^0=1,1^1=0 可理解为: 1异或任何数,其结果=任何数取反 任何数异或自己,等于把自己置0 1)按位异或可以用来使某些特定的位翻转,如对数10100001的第1位和第2

  • C语言自定义数据类型的结构体、枚举和联合详解

    结构体基础知识 首先结构体的出现是因为我们使用C语言的基本类型无法满足我们的需求,比如我们要描述一本书,就需要书名,作者,价格,出版社等等一系列的属性,无疑C语言的基本数据类型无法解决,所以就出现了最重要的自定义数据类型,结构体. 首先我们创建一个书的结构体类型来认识一下 struct Book { char name[20]; char author[20]; int price; }; 首先是struct是结构体关键字,用来告诉编译器你这里声明的是一个结构体类型而不是其他的东西,然后是Boo

  • C语言函数基础教程分类自定义参数及调用示例详解

    目录 1.  函数是什么? 2.  C语言中函数的分类 2.1 库函数 2.1.1 为什么要有库函数 2.1.2 什么是库函数 2.1.3 主函数只能是main()吗 2.1.4常见的库函数 2.2 自定义函数 2.2.1自定义函数是什么 2.2.2为什么要有自定义函数 2.2.3函数的组成 2.2.4 举例展示 3. 函数的参数 3.1 实际参数(实参) 3.2  形式参数(形参) 4. 函数的调用 4.1 传值调用 4.2  传址调用 4.3 练习 4.3.1. 写一个函数判断一年是不是闰年

  • Python/R语言分别实现斐波那契数列的示例详解

    目录 前言 1.年龄计算 1.1 图解问题 1.2 代码解决 1.3 实验小结 2.斐波那契数列 2.1 图解问题 2.2 代码实现 2.3 实验小结 总结 前言 此专栏为python与R语言对比学习的文章:以通俗易懂的小实验,带领大家深入浅出的理解两种语言的基本语法,并用以实际场景!感谢大家的关注,希望对大家有所帮助. “博观而约取,厚积而薄发!”谨以此言,望诸君共勉 本文将前两个小实验整理拼凑再了一起 :分别是“年龄计算”.“斐波那契数列”.具体的项目介绍见下文. 1.年龄计算 有 5 个人

  • C语言进阶二叉树的基础与销毁及层序遍历详解

    单值二叉树 难度简单 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树. 只有给定的树是单值二叉树时,才返回true:否则返回false. 示例 1: 输入:[1,1,1,1,1,null,1]输出:true 示例 2: 输入:[2,2,2,5,2]输出:false 提示: 给定树的节点数范围是[1, 100]. 每个节点的值都是整数,范围为[0, 99]. 解1: 最简单易懂的解法,先序遍历一遍,把每个节点都和那个根节点的val值相比.最后判断flag是否为真,若为假,则表明树中有

  • C语言实现opencv提取直线、轮廓及ROI实例详解

    一.Canny检测轮廓 在上一篇文章中有提到sobel边缘检测,并重写了soble的C++代码让其与matlab中算法效果一致,而soble边缘检测是基于单一阈值的,我们不能兼顾到低阈值的丰富边缘和高阈值时的边缘缺失这两个问题.而canny算子则很好的弥补了这一不足,从目前看来,canny边缘检测在做图像轮廓提取方面是最优秀的边缘检测算法. canny边缘检测采用双阈值值法,高阈值用来检测图像中重要的.显著的线条.轮廓等,而低阈值用来保证不丢失细节部分,低阈值检测出来的边缘更丰富,但是很多边缘并

  • C语言字符串函数操作(strlen,strcpy,strcat,strcmp)详解

    目录 一.strlen函数模拟 二. strcpy函数模拟  三.strcat函数模拟 四.strcmp函数模拟 总结 一.strlen函数模拟 字符串以'\0'作为结束标志,strlen函数返回的是在字符串中'\0'前面出现的字符个数(不包括'\0'); 有三种方法可以实现该操作: ①计数器方式 ②不能创建临时变量计数器 ③指针-指针  方法一:计数器方式 int my_strlen(const char* str) { int count = 0;//定义count用来记录字符串数组中字符数

  • C语言sizeof和strlen的指针和数组面试题详解

    目录 一.概念 sizeof: strlen: 二.例题及解析 2.1 一维数组 2.2 字符数组 2.3 二维数组 三.总结 一.概念 sizeof: sizeof操作符的结果类型为size_t,(它在头文件用typedfe定义为unsigned int类型),计算的是分配空间的实际字节数.sizeof是运算符,可以以类型.函数.做参数 . strlen: strlen结果类型也为size_t(size_t strlen( const char *string )),但strlen是计算的空间

  • R语言利用ggplot2绘制QQ图和箱线图详解

    目录 绘制qq图 函数介绍 例子 绘制boxplot 函数介绍 例子 利用分位点绘制箱线图 将QQ图和箱线图进行融合 函数介绍 参数介绍 注意事项 例子 绘制qq图 在ggplot2中绘制qq图需要两步,geom_qq()将绘制样本分位点,geom_qq_line()将绘制标准正态线 函数介绍 geom_qq() geom_qq( mapping = NULL, data = NULL, geom = "point", position = "identity",

随机推荐