6.6 矩阵的运算

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 }

 

转载于:https://www.cnblogs.com/wozixiaoyao/p/5683200.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值