矩阵相乘

矩阵相乘的程序:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 bool check(int row1,int col1,int row2,int col2){//检测两个矩阵是否可以相乘 
 5     if(row1>0&&col1>0&&row1>0&&col2>0){
 6         if(col1==row2)
 7             return 1;
 8         else
 9             return 0;
10     }    
11     else{
12         return 0;    
13     }
14 } 
15 
16 int *multiplication(int *arr1,int *arr2,int row1,int col1,int row2,int col2){//矩阵相乘函数 
17     int *temp=(int *)malloc(row1*col2*sizeof(int));
18     for(int i=0;i<row1;i++){
19         for(int j=0;j<col2;j++){
20             int sum=0;
21             for(int a=0;a<col1;a++){
22                 sum=sum+ (*(arr1+i*col1+a)) * (*(arr2+a*col2+j));  // ia * aj -->ij 所以压着i,j把a走一遍   
23             }
24             *(temp+i*col2+j)=sum;   //表示第i行的第j列   
25         }
26     }
27     return temp;
28 } 
29 
30 int main(){
31     int row1=1,col1=1, row2=2,col2=1;
32     int i,j;
33 label:
34     printf("请输入要输入的两个矩阵的行数列数:
");
35     printf("第一个矩阵的行数列数:");
36     scanf("%d%d",&row1,&col1);
37     printf("第二个矩阵的行数列数:");
38     scanf("%d%d",&row2,&col2);
39     
40     if(check(row1,col1,row2,col2)){
41         
42         //第一个矩阵资料的录入
43         printf("请输入第一个矩阵的数据:
");
44         int *myarr1=(int *)malloc(row1*col1*sizeof(int)) ;//分配内存空间  有关malloc()看来需要写一篇博客 
45         //申请矩阵1 所需的空间
46         for(i=0;i<row1;i++){
47             for(j=0;j<col1;j++){
48                 scanf("%d",myarr1+col1*i+j);    //scanf的输入特性    
49             }
50         } 
51         
52         //第二个矩阵资料的录入
53         printf("请输入第二个矩阵的数据:
");
54         int *myarr2=(int *)malloc(row2*col2*sizeof(int)) ;
55         //申请矩阵1 所需的空间
56         for(i=0;i<row2;i++){
57             for(j=0;j<col2;j++){
58                 scanf("%d",myarr2+col2*i+j);
59             }
60         } 
61          
62         //两个矩阵的显示
63         printf("两个矩阵的资料分别为:
");
64         for(i=0;i<row1;i++){
65             for(j=0;j<col1;j++){
66                 printf("%3d",*(myarr1+i*col1+j));
67             }
68             printf("
");
69         }
70         printf("
");
71         for(i=0;i<row2;i++){
72             for(j=0;j<col2;j++){
73                 printf("%3d",*(myarr2+i*col2+j));
74             }
75             printf("
");
76         }
77         
78         int *result=multiplication(myarr1,myarr2,row1,col1,row2,col2);
79         printf("矩阵相乘的结果矩阵为:
");
80         
81         for(i=0;i<row1;i++){
82             for(j=0;j<col2;j++){
83                 printf("%3d",*(result+i*col2+j));
84             }
85             printf("
");
86         }
87     }
88     else{
89         printf("所输入的两个矩阵不可以相乘
请重新输入:
");
90         goto label;
91     }
92         
93 } 
原文地址:https://www.cnblogs.com/liugl7/p/4821451.html