日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C语言实现文件读取矩阵乘法

發布時間:2025/3/12 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言实现文件读取矩阵乘法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用C語言計算矩陣乘積

一、設計需求:

  • 用命令行參數的形式編寫C語言程序
  • 從A.txt和B.txt中讀取連個矩陣
  • 需要判斷兩個矩陣能否相乘
  • 把計算后的結果寫入到C.txt中

二、實現思路

  • 1.用命令行參數把文件名傳給文件指針fp1、fp2、fp3
  • 2.檢測一行文本中空格的個數和換行符的個數,確定行和列并創建二維數組。
  • 3.利用fscanf函數和兩層for循環把數據傳給二維數組
  • 4.利用for循環對兩個二維數組進行計算,把結果傳給新的二維數組。
  • 5.將新的二維數組一個個寫入到C.txt中

三、矩陣乘法的定義

設A為m×p矩陣,B為的p×n的矩陣,那么稱m×n的矩陣C為A與B的乘積,記作C=AB,其中矩陣C中第i行第j列元素可以表示為:設A為m \times p 矩陣,B為的p \times n的矩陣,那么稱m\times n的矩陣C為A與B的乘積,記作C=AB,其中矩陣C中第i行第j列元素可以表示為:Am×p,Bp×nm×nCAB,C=AB,Cij:
(AB)ij=∑k=1paikbkj=ai1b1j+ai2b2j+?+aipbpj(AB)_{ij}=\sum_{k=1}^{p}a_{ik}b_{kj}=a_{i1}b_{1j}+a_{i2}b_{2j}+\cdots+a_{ip}b_{pj} (AB)ij?=k=1p?aik?bkj?=ai1?b1j?+ai2?b2j?+?+aip?bpj?

四、源代碼

#include<stdio.h> #include<stdlib.h> //讀取矩陣有幾行 int read_row(FILE* fp) {//fp = fopen("A.txt", "r");int c, m = 0;while ((c = fgetc(fp)) != EOF)if (c == '\n'){m++;}m++;rewind(fp);return m; }int read_rank(FILE* fp) //讀取有幾列 {int n = 0, c;while ((c = fgetc(fp)) != '\n')if (c == ' ')n++;n++;rewind(fp);return n; } //行數row,列數column int main(int argc ,char* argv[]) {//檢查用戶的參數是否正確if (argc != 4){printf("用法:命令 矩陣1 矩陣2 輸出矩陣\n");return -1;}FILE* fp1, * fp2, * fp3;fp1 = fopen(argv[1], "r");fp2 = fopen(argv[2], "r");fp3 = fopen(argv[3], "w");if (fp1 && fp2 == NULL){printf("file is error.");return -1;}int row1 = 0, column1 = 0, row2 = 0, column2 = 0;row1 = read_row(fp1);column1 = read_rank(fp1);row2 = read_row(fp2);column2 = read_rank(fp2);printf("矩陣A有%d行%d列\n", row1, column1);printf("矩陣B有%d行%d列\n", row2, column2);int a[row1][column1];int b[row2][column2];//判斷矩陣能否相乘if (row1 != column2){printf("矩陣無法相乘!");exit(0);}int c[column1][row2];if (fp1 && fp2 == NULL){printf("文件不存在!");exit(0);}//輸入矩陣Afor (int i = 0; i < row1; i++){for (int j = 0; j < column1; j++){fscanf(fp1, "%d", &a[i][j]);}}fclose(fp1);//控制臺輸出矩陣Afor (int i = 0; i < row1; i++){for (int j = 0; j < column1; j++){printf("%d ", a[i][j]);}printf("\n");}printf("\n");printf("矩陣A輸出完畢\n");//輸入矩陣Bfor (int i = 0; i < row1; i++){for (int j = 0; j < column2; j++){fscanf(fp2, "%d", &b[i][j]);}}fclose(fp2);//控制臺輸出矩陣Bfor (int i = 0; i < row1; i++){for (int j = 0; j < column2; j++){printf("%d ", b[i][j]);}printf("\n");}printf("\n");printf("矩陣B輸出完畢\n");//乘法for (int i = 0;i < column1;i++){for (int j = 0;j < row2;j++){int sum = 0;for (int k = 0;k < row2;k++){sum = sum + a[i][k] * b[k][j];}c[i][j] = sum;}}//顯示結果for (int i = 0;i < column1; i++){for (int j = 0;j < row2;j++){printf("%d ", c[i][j]);fprintf(fp3, "%d ", c[i][j]);}printf("\n");fprintf(fp3, "\n");}return 0; }

五、試驗現象

  • 在在A.txt和B.txt中輸入下列矩陣
    在cmd中編譯并生成b.exe可執行文件,輸入命令行運算,由于B矩陣不滿足矩陣乘法要求,故無法繼續相乘
    更改B矩陣的值為3*3矩陣

    再重新運行程序看看

    打開C.txt查看輸出數值

    我們去MATLAB中驗證一下矩陣相乘的結果正確與否,在控制臺輸入如下代碼:
A = [1 2 3;4 5 6;7 8 9] B = [1 2 3;4 1 6;7 8 1] C = A*B

查看輸出結果

計算是正確的

總結

以上是生活随笔為你收集整理的C语言实现文件读取矩阵乘法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。