首页 > 解决方案 > 矩阵中的最后一个数字是错误的

问题描述

我是编程新手,我正在尝试用 C 做一些练习。当我在所有矩阵插槽中放入 2 时,最后一个返回 5 而不是 4。

最后一个应该是 4 但显示为 5

#include <stdlib.h>
#include <stdio.h>

int main()
{
    int al,ac,bl,bc,cl,cc;
    int matrizA[5][3], matrizB[5][3], matrizC[5][3];

    for ( al=1; al<6; al++ )
        for ( ac=1; ac<4; ac++ )
        {
            printf("MatrizA [%d] [%d] = ", al, ac);
            scanf("%d", &matrizA[al][ac]);
        }
    for ( bl=1; bl<6; bl++ )
        for ( bc=1; bc<4; bc++ )
        {
            printf("MatrizB [%d] [%d] = ", bl, bc);
            scanf("%d", &matrizB[bl][bc]);
        }
    for ( cl=1; cl<6; cl++ )
        for ( cc=1; cc<4; cc++ )
        {
            matrizC[cl][cc]=matrizA[cl][cc]+matrizB[cl][cc];
        }
    printf("MatrizC= \n [%d] [%d] [%d]\n [%d] [%d] [%d]\n [%d] [%d] [%d]\n [%d] [%d] [%d]\n [%d] [%d] [%d]", matrizC[1][1], matrizC[1][2], matrizC[1][3], matrizC[2][1], matrizC[2][2], matrizC[2][3], matrizC[3][1], matrizC[3][2], matrizC[3][3], matrizC[4][1], matrizC[4][2], matrizC[4][3], matrizC[5][1], matrizC[5][2], matrizC[5][3]);
    return(0);
}

有什么想法吗?谢谢 :)

标签: cmatrix

解决方案


C中的数组索引是0基于的。您的所有数组分配都以 开头1,以 结尾。n您应该以 . 开头0和结尾n-1

例如,在此代码部分中,您的数组被定义为包含 [5][3] 元素,应使用索引 [0-4][0-2] 访问这些元素。但是您正在使用 [1-5][1-3] 访问。
通过写入数组拥有的内存之外,您正在调用未定义的行为

int matrizA[5][3], matrizB[5][3], matrizC[5][3];
for ( al=1; al<6; al++ )
    for ( ac=1; ac<4; ac++ )
...

更改此(和其他类似部分)以使用正确的数组索引:

int matrizA[5][3], matrizB[5][3], matrizC[5][3];
for ( al=0; al<5; al++ )
    for ( ac=0; ac<3; ac++ )
...

推荐阅读