• 矩阵相乘


    矩阵相乘的程序:

     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 } 
  • 相关阅读:
    Vue练习三十六:05_01_模拟select控件
    Vue练习三十五:04_09_星级评分系统
    Vue练习三十四:04_07_各种数组方法练习
    Vue练习三十三:04_06_当前输入框高亮显示
    Vue练习三十二:04_05_设置读取属性
    【CC++笔记】指针输出字符串
    【CC++笔记】数组指针越界
    【算法】递归思想
    【学习方法】堕落大学生补救方法
    【数字逻辑】补码技巧
  • 原文地址:https://www.cnblogs.com/liugl7/p/4821451.html
Copyright © 2020-2023  润新知