You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言箭头矩阵复制与多次90度顺时针旋转故障排查

箭头矩阵顺时针90度旋转问题修复

我需要将一个箭头矩阵复制到另一个矩阵,并将箭头顺时针旋转90度。目前已实现从指向3点方向旋转到6点方向,但尝试再次旋转到9点方向时,箭头又回到了3点方向。我认为问题在于需要从末尾开始取整列,但不确定具体实现方法。

原代码如下:

#include <stdio.h>
#include <string.h>
void DisplayArray2D(char arr[][7]);
void RotateArray2D(char arrRotated[][7], char arrOriginal[][7]);

void main() {
    char arr[7][7] = {
        { '*',' ',' ',' ',' ',' ',' '},
        { '*','*',' ',' ',' ',' ',' '},     
        { '*','*','*',' ',' ',' ',' '},
        { '*','*','*','*','*','*','*'},
        { '*','*','*',' ',' ',' ',' '},
        { '*','*',' ',' ',' ',' ',' '},
        { '*',' ',' ',' ',' ',' ',' '},
    };
    char arr6[7][7];
    char arr9[7][7];

    DisplayArray2D(arr);
    RotateArray2D(arr6,arr);
    DisplayArray2D(arr6);
    RotateArray2D(arr9,arr6);
    DisplayArray2D(arr9);
}

void DisplayArray2D(char arr[][7]){
    for (int i = 0; i < 7; i++)
    {
        for (int j = 0; j < 7; j++)
        {
            printf("%c",arr[i][j]);
        }
        printf("\n");
    }
}

void RotateArray2D(char arrRotated[][7], char arrOriginal[][7]){
    for (int i = 0; i < 7; i++)
    {
        for (int j = 0; j < 7; j++)
        {
            arrRotated[j][i] = arrOriginal[i][j];
        }
    }
}

问题分析

当前的RotateArray2D函数仅做了矩阵转置(行与列互换),并非真正的顺时针90度旋转。转置操作执行两次后会还原为原矩阵,这就是第二次旋转后箭头回到3点方向的原因。

顺时针90度旋转的正确逻辑是:将原矩阵的每一列从下到上取出,作为新矩阵的每一行从左到右排列。对于7×7的矩阵,原矩阵中位置(i,j)的元素,顺时针旋转90度后会对应新矩阵的(j, 6-i)位置(矩阵边长为7,下标从0开始,6=7-1)。

修改后的旋转函数

将RotateArray2D函数替换为以下实现:

void RotateArray2D(char arrRotated[][7], char arrOriginal[][7]){
    int n = 7;
    // 清空目标矩阵,避免残留未初始化的垃圾值
    memset(arrRotated, ' ', sizeof(char)*7*7);
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            // 顺时针90度旋转的坐标映射
            arrRotated[j][n-1 - i] = arrOriginal[i][j];
        }
    }
}

修改后,第一次旋转可将3点方向箭头转为6点方向,第二次旋转会进一步转为9点方向,完全符合预期。加入memset是为了清空目标矩阵,避免未初始化的垃圾字符干扰显示效果。

内容的提问来源于stack exchange,提问作者Rimidelo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 21:20:27