用c语言编写,给定程序中,函数fun的功能是:有N×N矩阵,根据给定的m(m<=N)值,将每行元素中的值均右移m个位置,左边置为0。

用c语言编写,给定程序中,函数fun的功能是:有N×N矩阵,根据给定的m(m<=N)值,将每行元素中的值均右移m个位置,左边置为0。例如,N=3,m=2,有下列矩阵 1 2 3 4 5 6 7 8 9 程序执行结果为 0 0 1 0 0 4 0 0 7
这个程序怎么编写啊

img

【以下回答由 GPT 生成】

#include <stdio.h>

void shiftMatrix(int matrix[], int N, int m) {
    int shift[N];  // 用于保存每一行元素右移后的结果
    int i, j;

    for (i = 0; i < N; i++) {
        // 将右移后的元素存入shift数组中
        for (j = 0; j < N; j++) {
            if (j >= m) {
                shift[j] = matrix[i * N + j - m];
            } else {
                shift[j] = 0;
            }
        }

        // 将shift数组中的元素存回原矩阵
        for (j = 0; j < N; j++) {
            matrix[i * N + j] = shift[j];
        }
    }
}

int main() {
    int matrix[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int N = 3;  // 矩阵的行列数
    int m = 2;  // 向右移动的位置

    printf("初始矩阵:\n");
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            printf("%d ", matrix[i * N + j]);
        }
        printf("\n");
    }

    shiftMatrix(matrix, N, m);

    printf("\n移动后的矩阵:\n");
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            printf("%d ", matrix[i * N + j]);
        }
        printf("\n");
    }

    return 0;
}

该问题可以通过编写一个shiftMatrix函数来实现。该函数将接受一个一维数组matrix、矩阵的行列数N以及向右移动的位置m作为参数。函数中使用两个循环遍历矩阵的每一行,第一个循环将右移后的元素存入shift数组中,第二个循环将shift数组中的元素存回原矩阵。在存入元素时,若当前位置j大于等于m,则将矩阵中位置i*N + j - m的元素存入shift[j];否则,将shift[j]置为0。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^