矩阵相乘的程序:
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 }