6-22 MatrixMul.c
1 #include <stdio.h> 2 void MatrixMul(int **a,int **b, int **c, int x, int y, int z) 3 { 4 int i,j,k; 5 for (j=0;j<y;j++) //清空目标矩阵C的内容 6 for(i=0;i<x;i++) 7 c[j][i]=0; 8 for(j=0;j<y;j++) //进行矩阵乘法运算 9 for(i=0;i<x;i++) 10 for(k=0;k<z;k++) 11 c[j][i]+= a[j][k]*b[k][i]; 12 } 13 int main() 14 { 15 int i,j,k,tmp; 16 int ARow,ACol; //矩阵A的行、列 17 int BRow,BCol; //矩阵B的行、列 18 int CRow,CCol; //矩阵C的行列 19 int **a,**b,**c; //分别指向3个矩阵的内存 20 printf("输入矩阵A的行数和列数:");//输入矩阵A的行数、列数 21 scanf("%d %d",&ARow,&ACol); 22 BRow=ACol; //矩阵B的行数等于矩阵A的列数 23 printf("输入矩阵B的列数:");//输入矩阵B的列数 24 scanf("%d",&BCol); 25 CRow=ARow; //目标矩阵C的行数 26 CCol=BCol; //目标矩阵C的列数 27 c=(int **)malloc(sizeof(int *)*CRow); //分配保存矩阵C的二级指针存储空间 28 for(j=0;j<CRow;j++) //分配一级指针内存空间 29 c[j]=(int *)malloc(sizeof(int)*CCol); 30 a=(int **)malloc(sizeof(int *)*ARow);//分配保存矩阵A的二级指针 31 for(j=0;j<ARow;j++) 32 a[j]=(int *)malloc(sizeof(int)*ACol); 33 b=(int **)malloc(sizeof(int *)*BRow); //分配保存矩阵B的二级指针 34 for(j=0;j<BRow;j++) 35 b[j]=(int *)malloc(sizeof(int)*BCol); 36 if(!b[BRow-1]) //判断内存是否分配成功 37 { 38 printf("分配内存失败!\n"); 39 exit(0); 40 } 41 printf("输入矩阵A的数据(%d行%d列):\n",ARow,ACol);//输入A阵元素 42 for(j=0;j<ARow;j++) 43 for (i=0;i<ACol;i++) 44 { 45 scanf("%d",&tmp); 46 a[j][i]=tmp; 47 } 48 printf("输入矩阵A的数据(%d行%d列):\n",BRow,BCol);//输入B阵元素 49 for(j=0;j<BRow;j++) 50 for (i=0;i<BCol;i++) 51 { 52 scanf("%d",&tmp); 53 b[j][i]=tmp; 54 } 55 MatrixMul(a,b,c,CCol,CRow,ACol);//调用矩阵乘法函数 56 printf("矩阵相乘的结果:\n"); 57 for(j=0;j<CRow;j++) //输出矩阵乘法结果 58 { 59 for(i=0;i<CCol;i++) 60 printf("%d ",c[j][i]); 61 printf("\n"); 62 } 63 getch(); 64 return 0; 65 }
6-23 Matrix2to1.c
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main() 5 { 6 int row, column,i,ARow,ACol,loc,tmp; 7 8 int **arr1,*arr2; //分别指向2个矩阵的内存 9 printf("输入矩阵的行数和列数:");//输入矩阵A的行数、列数 10 scanf("%d %d",&ARow,&ACol); 11 arr1=(int **)malloc(sizeof(int *)*ARow); //分配保存矩阵的二级指针存储空间 12 for(i=0;i<ARow;i++) //分配一级指针内存空间 13 arr1[i]=(int *)malloc(sizeof(int)*ACol); 14 arr2=(int *)malloc(sizeof(int)*ARow*ACol);//分配保存一维矩阵的存储空间 15 if(arr1==NULL) //判断内存是否分配成功 16 { 17 printf("分配内存失败!\n"); 18 exit(0); 19 } 20 printf("输入二维矩阵的数据(%d行%d列):\n",ARow,ACol);//输入A阵元素 21 for(row=0;row<ARow;row++) 22 for(column=0;column<ACol;column++) 23 { 24 scanf("%d",&tmp); 25 arr1[row][column]=tmp; 26 } 27 printf("\n以行为主转换为一维矩阵:\n"); 28 for(row=0;row<ARow;row++)//按行循环 29 { 30 for(column=0;column<ACol;column++) //按列循环 31 { 32 loc=column+row*ACol; //转换为一维矩阵的序号 33 arr2[loc]=arr1[row][column]; //保存元素 34 } 35 } 36 for(i=0;i<ARow*ACol;i++) //输出一维矩阵 37 printf("%d ", arr2[i]); 38 printf("\n以列为主转换为一维矩阵:\n"); 39 for(column=0;column<ACol;column++) 40 { 41 for(row=0;row<ARow;row++) 42 { 43 loc=row+column*ARow; //转换为一维矩阵的序号 44 arr2[loc]=arr1[row][column]; //保存元素 45 } 46 } 47 for(i=0;i<ARow*ACol;i++) //输出一维矩阵 48 printf("%d ", arr2[i]); 49 printf("\n"); 50 getch(); 51 return 0; 52 }