码迷,mamicode.com
首页 > 其他好文 > 详细

矩阵相乘

时间:2015-09-19 15:16:44      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

矩阵相乘的程序:

 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));
23             }
24             *(temp+i*col2+j)=sum;
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("请输入要输入的两个矩阵的行数列数:\n");
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("请输入第一个矩阵的数据:\n");
44         int *myarr1=(int *)malloc(row1*col1*sizeof(int)) ;
45         //申请矩阵1 所需的空间
46         for(i=0;i<row1;i++){
47             for(j=0;j<col1;j++){
48                 scanf("%d",myarr1+col1*i+j);
49             }
50         } 
51         
52         //第二个矩阵资料的录入
53         printf("请输入第二个矩阵的数据:\n");
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("两个矩阵的资料分别为:\n");
64         for(i=0;i<row1;i++){
65             for(j=0;j<col1;j++){
66                 printf("%3d",*(myarr1+i*col1+j));
67             }
68             printf("\n");
69         }
70         printf("\n");
71         for(i=0;i<row2;i++){
72             for(j=0;j<col2;j++){
73                 printf("%3d",*(myarr2+i*col2+j));
74             }
75             printf("\n");
76         }
77         
78         int *result=multiplication(myarr1,myarr2,row1,col1,row2,col2);
79         printf("矩阵相乘的结果矩阵为:\n");
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("\n");
86         }
87     }
88     else{
89         printf("所输入的两个矩阵不可以相乘\n请重新输入:\n");
90         goto label;
91     }
92         
93 } 

 

矩阵相乘

标签:

原文地址:http://www.cnblogs.com/liugl7/p/4821451.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!