二维数组---矩阵相关问题

Posted buling_buling_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二维数组---矩阵相关问题相关的知识,希望对你有一定的参考价值。

矩阵问题

做到一些相关矩阵的题目,在这里总结一下呢

矩阵乘法

给定一个 m 行、n列的矩阵 A 和一个 n 行、m 列的矩阵 B。你需要用矩阵 A 与矩阵 B 相乘,并且将 m行 m 列的乘积结果输出

#include <stdio.h>
#include<string.h>

int main() 
int matrix_a[10][10];
int matrix_b[10][10];
int m,n;
int i,j,k;scanf("%d %d", &m, &n);//输入行和列
for (i = 0; i < m; i++)    //输入a矩阵
    for (j = 0; j < n; j++) 
        scanf("%d", &matrix_a[i][j]);
    


for (i = 0; i < n; i++) 
    for (j = 0; j < m; j++) //输入b矩阵
        scanf("%d", &matrix_b[i][j]);
    
  

for (i = 0; i < m; i++) //输出矩阵的行循环
    for (j = 0; j < m; j++) //输出矩阵的列循环
        for (k = 0; k < n; k++) //每个元素的循环加
            value[i][j] += matrix_a[i][k] * matrix_b[k][j]; 
        
        j == 0 || printf(" ");//控制空格输出
        printf("%d",value[i][j]);
    
    printf("\\n");//记得换行

return 0;

翻转矩阵

给定一个 m行、n 列的矩阵,你需要根据要求将它水平翻转或竖直翻转。
`

#include<stdio.h>
int main() 
int m, n;
int matrix[105][105];
int i, j, k, t;
scanf("%d%d", &m, &n);
for (i = 0; i < m; i++) 
    for (j = 0; j < n; j++) 
        scanf("%d", &matrix[i][j]);
    

scanf("%d", &k);
if (k == 1)     //**k==1时表示水平翻转**
    for (i = 0; i < m; i++) 
        for (j = 0; j < n / 2; j++)  //列数只循环一半即可
            t = matrix[i][j];         //矩阵值的交换
            matrix[i][j] = matrix[i][n - 1 - j];
            matrix[i][n - 1- j] = t;
        
    
    for (i = 0; i < m; i++) 
        for (j = 0; j < n; j++) 
            j == 0 || printf(" ");   //为了输出空格
            printf("%d", matrix[i][j]);
        
        printf("\\n");
    
if (k == 0)       //**k== 0时表示垂直翻转**
    for (i = 0; i < m / 2; i++)   //行数只循环一半即可
        for (j = 0; j < n; j++) 
            t = matrix[i][j];           //矩阵值的交换
            matrix[i][j] = matrix[m - 1 - i][j];
            matrix[m - 1 - i][j] = t;
        
    
    
    for (i = 0; i < m; i++)      //矩阵输出
        for (j = 0; j < n; j++ )
            j == 0 || printf(" ");
            printf("%d", matrix[i][j]);
        
        printf("\\n");   //记得换行
    

return 0;

`

旋转矩阵

对于一个给定的 3×3 矩阵,请将其顺时针旋转 90度后输出

#include <stdio.h>int main() 
int matrix[3][3];
int i;
int j;
int result[3][3];
for (i = 0; i < 3; i++)
    for (j = 0; j < 3; j++)
        scanf("%d ", &matrix[i][j]);
    


for (i = 0; i < 3; i++)
    for (j = 0; j < 3; j++)
        result[j][3 - i - 1] = matrix[i][j];  //注意这里的转换公式即可
    
for (i = 0; i < 3; i++)
    for (j = 0; j < 3; j++)
        j == 0 || printf(" ");
        printf("%d", result[i][j]);
        //if (j != 2) printf(" ");
    printf("\\n");


return 0;

`

螺旋矩阵

给定一个 m 行、n 列的矩阵,请按照顺时针螺旋的顺序输出矩阵中所有的元素(从[0][0]位置开始,具体请参见下图)。

#include <stdio.h>
void space(int, int);
int main() 
    int matrix[101][101];
    int m;
    int n;
    int i, j;
    // 输入m*n的矩阵
    scanf("%d%d", &m, &n);
    for (i = 0; i < m; i++) 
        for (j = 0; j < n; j++) 
            scanf("%d", &matrix[i][j]);
        
    
    //定义上下左右边界,每次边上的数后,更新周围的值
    int up = 0, left = 0, down = m-1, right = n-1;
    int k, num = 0;
    while (up <= down && left <= right) 
        // 向右输出
        for (k = left; k <= right; k++) 
            printf("%d", matrix[up][k]);
            num++;
            space(num, m*n);
        
        up++;
        if (num == m*n)  //如果全部数值已经输出完毕,退出while循环
            break;
        // 向下输出
        for (k = up; k <= down; k++) 
            printf("%d", matrix[k][right]);
            num++;
            space(num, m*n);
        
        right--;
        if (num == m*n)  //如果全部数值已经输出完毕,退出while循环
            break;
        // 向左输出
        for (k = right ; k >= left; k--) 
            printf("%d", matrix[down][k]);
            num++;
            space(num, m*n);
        
        down--;
        if (num == m*n)  //如果全部数值已经输出完毕,退出while循环
            break;
        // 向上输出
        for (k = down; k >= up; k--) 
            printf("%d", matrix[k][left]);
            num++;
            space(num, m*n);
        
        left++;
        if (num == m*n)  //如果全部数值已经输出完毕,退出while循环
            break;
    
    return 0;

//判断每次输出数字后是否要输出空格
void space(num, all) 
    if (num < all)
        printf(" ");


以上问题仅供参考,有更好的方法欢迎交流

以上是关于二维数组---矩阵相关问题的主要内容,如果未能解决你的问题,请参考以下文章

二维数组---矩阵相关问题

计算矩阵的乘积

二维数组相关问题

C#如何对二维数组矩阵进行算术运算

构建乘积数组

numpy矩阵和数组的区别