C语言实现两个矩阵相乘

本文实例为大家分享了C语言实现两个矩阵相乘的具体代码,供大家参考,具体内容如下

程序功能:实现两个矩阵相乘的C语言程序,并将其输出

代码如下:

#include "stdafx.h"
#include "windows.h"
void Multi(int * left, int * right, int * result, int f1, int f2, int s1, int s2);

int main()
{
 int i, j;
 int a[4][3] =
 { {1,2,3},
  {4,5,6},
  {7,8,9},
  {1,2,3}};
 int b[3][3] =
 { { 1,2,3 },
 { 4,5,6 },
 {7,8,9} };
 //c矩阵为a矩阵与b矩阵的乘积
 int c[4][3];
 //计算两个矩阵相乘
 Multi(a[0], b[0],c[0], 4, 3, 3, 3);
 //输出c矩阵
 for (i = 0; i < 4; i++)
 {
  for(j=0;j<3;j++)
   printf("%4d ", c[i][j]);
  printf("\n");
 }
 system("pause");
 return 0;
}

//矩阵相乘算法,最后四个参数是两个相乘的矩阵的行数和列数
void Multi(int * left, int * right, int * result,int f1, int f2, int s1, int s2)
{
 //int a[f1][f2], b[s1][s2], c[f1][s2];
 //a[i][j]==a[i*f2+j]
 //由矩阵相乘,要求f2=s1,以下用f2
 for (int i = 0; i < f1; i++) //i表示第i行
 {
  for (int j = 0; j < s2; j++) //j表示第j列
  {
   result[i*f2 + j] = 0;  //在这里 result[i][j] = result[i*f2+j];
   for(int p=0;p<f2;p++)
   {
    result[i*f2 + j] +=left[i*f2+p]*right[p*f2+j];
   }
  }
 }
}

运行结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现矩阵翻转(上下翻转、左右翻转)

    C语言实现矩阵翻转 上下翻转与左右翻转 实例代码: #include <stdio.h> void matrix (int m, int n, int t) { int arr[m][n]; int i, j, k; for (i = 0; i < m; i++){ for (j = 0; j < n; j++){ scanf("%d", &arr[i][j]); } } if (t == 0){//左右翻转 for (i = 0; i < m;

  • C语言实现图的邻接矩阵存储操作

    利用邻接矩阵容易判定任意两个顶点之间是否有边(或弧)相连,并容易求得各个顶点的度. c语言代码实现如下: #include<stdio.h> #include<stdlib.h> #define MAX_VER_NUM 50 typedef char VertexType; typedef enum { DG,UDG }GraphType; typedef struct { VertexType vexs[MAX_VER_NUM]; //顶点向量 int arcs[MAX_VER_

  • C语言矩阵连乘 (动态规划)详解

    动态规划法 题目描述:给定n个矩阵{A1,A2....An},其中Ai与Ai+1是可以相乘的,判断这n个矩阵通过加括号的方式相乘,使得相乘的次数最少! 以矩阵链ABCD为例 按照矩阵链长度递增计算最优值 矩阵链长度为1时,分别计算出矩阵链A.B.C.D的最优值 矩阵链长度为2时,分别计算出矩阵链AB.BC.CD的最优值 矩阵链长度为3时,分别计算出矩阵链ABC.BCD的最优值 矩阵链长度为4时,计算出矩阵链ABCD的最优值 动归方程: 分析: k为矩阵链断开的位置 d数组存放矩阵链计算的最优值,

  • C语言实现稀疏矩阵

    本文实例为大家分享了C语言实现稀疏矩阵的具体代码,供大家参考,具体内容如下 #include "stdio.h" #define maxsize 10 typedef struct { int i,j; //非零元素的行.列 int v; //非零元素的值 }Triple; typedef struct { Triple data[maxsize]; int m,n; //矩阵的行.列 }TSMarix; InitTriple(TSMarix *M) { int i,j,k,v,t;

  • C语言 经典题目螺旋矩阵 实例详解

    C语言 经典题目螺旋矩阵 //N阶螺旋矩阵 #include <stdio.h> #include <stdlib.h> int main() { int N,i,j,n,num=1; int a[10][10]={0}; printf("输入你要输出的几阶中断:"); scanf("%d",&N); for(n=0;n<=N/2;n++) { for(j=n;j<=N-n-1;j++) a[n][j]=num++; fo

  • C语言求矩阵的各列元素之和的代码示例

    问题描述: 统计一个矩阵的各列元素之和.矩阵各元素为整数且绝对值不超过100. 要求输入: 有多个测试用例,每个测试用例的第一行是空格分隔的两个正整数n和m( 1 < n, m < 80 ),接下来的n行每行有m个空格分隔的整数,组成一个n*m的矩阵.最后一个测试用例n=0 m=0不用处理. 要求输出: 对每个测试用例,输出一行整数(空格分隔),顺序表示从第1列至第m列的各列元素之和. 输入示例: 3 5 1 1 1 2 -1 0 1 0 7 4 0 2 0 -8 -4 2 2 1 1 0 1

  • C语言解决螺旋矩阵算法问题的代码示例

    赶集网校招就采用了螺旋输出矩阵作为程序题,要求将矩阵螺旋输出如: 图中6*6矩阵线条所示为输出顺序,如果输出正确的话应该输出1~36有序数字.  我想的是这么做的: #include <stdio.h> //#define LEN 1 //#define LEN 2 //#define LEN 3 #define LEN 4 void printClock(int a[][LEN]){//输出函数 int t; int i = 0, m = 0; int j = LEN, n = LEN; w

  • C语言科学计算入门之矩阵乘法的相关计算

    1.矩阵相乘 矩阵相乘应满足的条件: (1) 矩阵A的列数必须等于矩阵B的行数,矩阵A与矩阵B才能相乘: (2) 矩阵C的行数等于矩阵A的行数,矩阵C的列数等于矩阵B的列数: (3) 矩阵C中第i行第j列的元素等于矩阵A的第i行元素与矩阵B的第j列元素对应乘积之和,即 如: 则: 2. 常用矩阵相乘算法     用A的第i行分别和B的第j列的各个元素相乘求和,求得C的第i行j列的元素,这种算法中,B的访问是按列进行访问的,代码如下: void arymul(int a[4][5], int b[

  • C语言实现两个矩阵相乘

    本文实例为大家分享了C语言实现两个矩阵相乘的具体代码,供大家参考,具体内容如下 程序功能:实现两个矩阵相乘的C语言程序,并将其输出 代码如下: #include "stdafx.h" #include "windows.h" void Multi(int * left, int * right, int * result, int f1, int f2, int s1, int s2); int main() { int i, j; int a[4][3] = {

  • R语言 实现矩阵相乘100次

    [D1 D2]2*1 [T1 T2]1*2 要求D1和D2随机的变动, 矩阵相乘100次 rm(list=ls()) gc() options(scipen = 2000) ##################写成函数###########3 #################定义TT矩阵(1*2) TT <- matrix(c(1,3),1,2) DD<- matrix(c(1,2),2,1) result1 <- DD %*% TT m1=result1 ##############

  • C/C++如何实现两矩阵相乘之模拟法

    目录 数学中两矩阵怎么相乘? C/C++语言实现 总结 数学中两矩阵怎么相乘? 矩阵相乘需要前面矩阵的列数与后面矩阵的行数相同方可相乘. 将前面矩阵的第i行各元素分别与后面矩阵的第j列相应位置元素相乘相加作为结果矩阵的第i行第j列. eg: 上图前面矩阵的列数是3,后面矩阵的行数是3,所以他俩的某一行和某一列才能一一对应,进而才能进行矩阵相乘运算; C/C++语言实现 假设和上图一样的矩阵a*矩阵b 在草稿纸上模拟矩阵相乘的过程中,我们会发现,第一个矩阵a 分别用自己的第i行与 第二个矩阵b的第

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

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

  • Python实现矩阵相乘的三种方法小结

    问题描述 分别实现矩阵相乘的3种算法,比较三种算法在矩阵大小分别为22∗2222∗22, 23∗2323∗23, 24∗2424∗24, 25∗2525∗25, 26∗2626∗26, 27∗2727∗27, 28∗2828∗28, 29∗2929∗29时的运行时间与MATLAB自带的矩阵相乘的运行时间,绘制时间对比图. 解题方法 本文采用了以下方法进行求值:矩阵计算法.定义法.分治法和Strassen方法.这里我们使用Matlab以及Python对这个问题进行处理,比较两种语言在一样的条件下,

  • Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)

    Tensorflow二维.三维.四维矩阵运算(矩阵相乘,点乘,行/列累加) 1. 矩阵相乘 根据矩阵相乘的匹配原则,左乘矩阵的列数要等于右乘矩阵的行数. 在多维(三维.四维)矩阵的相乘中,需要最后两维满足匹配原则. 可以将多维矩阵理解成:(矩阵排列,矩阵),即后两维为矩阵,前面的维度为矩阵的排列. 比如对于(2,2,4)来说,视为2个(2,4)矩阵. 对于(2,2,2,4)来说,视为2*2个(2,4)矩阵. import tensorflow as tf a_2d = tf.constant([

  • C++实现对象化的矩阵相乘小程序

    复习数学1的线性代数,矩阵相乘这块有点晕,想编个C++对象化的矩阵相乘小程序. 相乘部分 void sum(juzhen a, juzhen b, juzhen &c) { int s=0; for (int i = 1; i <= a.m1(); i++)//A矩阵的M for (int j = 1; j <= b.n1(); j++)//B矩阵的S { for (k0 = 1; k0 <= a.n1(); k0++)//a.n1也就是b.m1(a的n,b的n)[行向量*列向量

  • C语言超详细讲解字符串相乘

    目录 前言 一. 分析思路 二.使用步骤 1.代码如下 2.memset函数 三.总结 前言 我们已经知道,正常的两位整形数据通过*相乘,C语言中int为4字节,32bit(字节),其机器码第一位为符号位,余下31位表示数字,表示范围:-2^31(-2147483648)~2^31-1(2147483647),但超过了这个范围我们该如何做呢? 提示:将数字以字符串的形式进行操作 一. 分析思路 示例: 我们把每一个数都看成是一个字符串,每一个元素为十进制数字所对应的字 符,由于是后面的元素先进行

  • go语言计算两个时间的时间差方法

    本文实例讲述了go语言计算两个时间的时间差方法.分享给大家供大家参考.具体分析如下: go语言计算两个时间的时间差,代码很简单,返回1天前.1周前还是1月前的时间 package main import ( "fmt" "time" ) func main() { //Add方法和Sub方法是相反的,获取t0和t1的时间距离d是使用Sub //将t0加d获取t1就是使用Add方法 k := time.Now() //一天之前 d, _ := time.ParseDu

  • Go语言计算两个经度和纬度之间距离的方法

    本文实例讲述了Go语言计算两个经度和纬度之间距离的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main        import (     "fmt"     "math" )        func main() {     lat1 := 29.490295     lng1 := 106.486654            lat2 := 29.615467     lng2 := 106.581515     f

随机推荐