1. 程式人生 > >C語言之兩矩陣乘法的實現

C語言之兩矩陣乘法的實現

首先我們要清楚矩陣乘法實現需要滿足的條件, 矩陣相乘最重要的方法是一般矩陣乘積。它只有在第一個矩陣的列數(column)和第二個矩陣的行數(row)相同時才有意義[1] 。一般單指矩陣乘積時,指的便是一般矩陣乘積。一個m×n的矩陣就是m×n個數排成m行n列的一個數陣。

//關於任意兩個矩陣的乘法運算
//關於任意兩個矩陣的乘法運算
#include<stdio.h>
#include<stdlib.h>
#define MAX 10
matrix_multiplication(int line1, int column1, int column2, int arr1[MAX][MAX], int
arr2[MAX][MAX], int arr3[MAX][MAX]) { int i, j, k; int ret; for (i = 0; i < line1; i++) { for (j = 0; j < column1; j++) { ret = 0; for (k = 0; k < column2+1; k++) { ret += arr1[i][k] * arr2[k][j]; //按照矩陣的乘法規則進行運算
} arr3[i][j] = ret; } } } int main() { int line1, column1, column2; int i, j; int temp; int arr1[MAX][MAX], arr2[MAX][MAX], arr3[MAX][MAX]; printf("輸入第一個矩陣的行數:\n"); scanf("%d", &line1); printf("輸入第一個矩陣的列數:\n"); scanf("%d", &column1); printf
("輸入第一個矩陣的列數:\n"); scanf("%d", &column2); printf("輸入第一個矩陣的元素(%d*%d):\n",line1,column1); for (i = 0; i < line1; i++) { for (j = 0; j < column1; j++) { scanf("%d", &temp); arr1[i][j] = temp; } } printf("輸入第二個矩陣的元素(%d*%d):\n", column1, column2); //因為在這裡矩陣的乘法會要求第一個的列與第二個行相等 for (i = 0; i < column1; i++) { for (j = 0; j < column2; j++) { scanf("%d", &temp); arr2[i][j] = temp; } } matrix_multiplication(line1, column1, column2, arr1, arr2, arr3); printf("輸出的兩個矩陣的乘法運算的結果是:\n"); for (i = 0; i<line1; i++) { for (j = 0; j<column2; j++) printf("%ld ", arr3[i][j]); printf("\n"); } system("pause"); return 0; }

執行結果如圖:這裡寫圖片描述

程式碼如果有問題,希望大家指出。

相關推薦

C語言矩陣乘法實現

首先我們要清楚矩陣乘法實現需要滿足的條件, 矩陣相乘最重要的方法是一般矩陣乘積。它只有在第一個矩陣的列數(column)和第二個矩陣的行數(row)相同時才有意義[1] 。一般單指矩陣乘積時,指的便是一般矩陣乘積。一個m×n的矩陣就是m×n個數排成m行n列的一

C語言俄羅斯方塊遊戲實現

  來自《C語言課程設計案例精編》,蠻好的,可以參照。 /*  *俄羅斯方塊源程式  */ #include <stdio.h> #include <stdlib.h> #include <dos.h> #include <grap

C語言三字棋的實現及擴充套件

C語言之三字棋的實現及擴充套件   在我們學習完陣列之後,我們完全可以利用陣列相關知識來寫一個微小型的遊戲,比如說今天所說的——三子棋。   大綱:    檔案組成    實現    完整程式碼展示    擴充套件 即:       &n

C語言最好理解的通過函式指標作為引數實現回撥函式

1、函式指標回撥解釋 回撥函式就是一個通過函式指標呼叫的函式。如果你把函式的指標(地址)作為引數傳遞給另一個函式,當這個指標被用來呼叫其所指向的函式時,我們就說這是回撥函式 2、程式碼實現 #i

C語言利用函式交換個數的值

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> void Swap(int *px,int *py) { int tmp = *p

C語言linux核心實現平方根計算演算法

關於平方根的計算,在linux核心中也有實現,就像math.h數學庫裡的sqrt這個函式一樣。       平方根的公式定義: 如果一個非負數x的平方等於a,即    ,    ,那麼這個非負

C語言指標專題一:指標變數和指標所指向的記憶體空間是個不同的概念

指標變數和指標所指向的記憶體空間是兩個不同的概念 char*p = "123456";//p是一個指標變數存放在臨時棧區,"123456"是一個字串常量存放在常量區,變數p儲存的是字串的地址 char*str = (char*)malloc(100);//將分配的100位

C語言矩陣相乘

  矩陣相乘肯定都不陌生,那麼如何用C語言實現矩陣相乘呢?先看下面兩個矩陣相乘:矩陣A和B都是兩行兩列,矩陣相乘時,A的行元素乘以B的列元素,然後相加。即20*2+5*1=45作為C11(矩陣C的第一行第一列)20*1+5*4=40作為C12(矩陣C的第一行第二列)15*2+

C語言基本演算法33—矩陣的基本運算

//矩陣基礎 /* ================================================================== 題目:輸入矩陣a,b,輸出a,b,a的轉置矩陣d,a*b,b+d=e; ========================

C語言實現隨機數產生演算法

隨機數,也就是在不同的時刻產生不同的數值。在UNIX作業系統和window的作業系統上,我們知道有一個函式rand,它就是用來產生隨機數的函式API介面,那麼它的原理如何實現? 如果約定a1=f(se

c語言合併排序實現

#include <stdio.h> #include <stdlib.h> #include <string.h> //將兩個有序序列合併為一個有序序列 void merge(int a[],int left_pos,int right

C語言定義一個函式,實現對字串做如下操作:當字元為字母時,大小寫互換,當字元為數字時,原樣輸出,當有其它字元出現時,結束操作,返回已處理的字串

Action(){       char str[]={"tEst234%^road"};int len = sizeof(str)/sizeof(char);//strTest2呼叫函式lr_output_message("%s",strTest2(str,len)); r

資料結構學習路(一)C語言對陣列的簡單實現

以下的程式只是在觀看郝斌老師講解的(C語言資料結構)之後自己做得簡單練習。# include <stdio.h> # include <stdlib.h> typedef struct MyArray{ int * pBase; //存放陣列第一個

C語言靜態,動態順序表的實現

      在學習了C語言之後,我們先來了解一下簡單的資料結構,順序表和連結串列。      順序表和連結串列都屬於線性資料結構。順序表的底層相當於一個數組,因為它的空間是一段地址連續的儲存單元;連結串列的底層不需要所有的空間都連續,只要通過指標就可以找到下一個儲存空間。下面

C語言單位下三角矩陣求逆

#include<stdio.h> int main(){ //矩陣儲存在二位陣列也可以隨機生成    double l[4][4]={1,0,0,0,2,1,0,0,3,2,1,0,5,4,2,1};    long bs=4,i,j,n; //矩陣第一列求逆

C語言linux核心可變參實現printf,sprintf

      昨天,我發表了一篇用可變參實現的fprintf函式,其實說實話還不完全是可變參實現的,因為用到了FILE * 這樣的指標,需要包含stdio.h這個標頭檔案才能實現這個函式,今天我們就來看看,如何拋棄stdio.h,全0開始實現printf , sprintf ,

OpenCL矩陣乘法實現

kernel 在opencl中,一般最優價值的就是kernel,前面寫的配置檔案基本沒有很大的差別,主要是kernel寫法上。其中矩陣運算又是最能體現opencl價值的地方。先上寫的kernel: __kernel void matrix_mult

C語言動態二維陣列實現矩陣的相乘

c語言動態二維陣列實現矩陣相乘 如何申請動態二維陣列,程式碼如下 該方法是最靈活的,可以任意指定行數和列數 /* *申請a陣列的記憶體* */ /*先申請每一行指標的記憶體*/ a =

c語言判斷矩陣是否相等(行列相同的矩陣

矩陣 out amp 判斷 一個 void 列數 。。 NPU #include<stdio.h>void input(int n, int m, int a[20][20])//輸入矩陣元素{int i, j;for (i = 0; i < n; i++

C語言三字棋的簡單實現及擴充套件

C語言之三字棋的實現及擴充套件   在我們學習完陣列之後,我們完全可以利用陣列相關知識來寫一個微小型的遊戲,比如說今天所說的——三子棋。   大綱:    檔案組成    實現    完整程式碼展示    擴充套件 即:       &n