dev c++ 5.10运行三重循环就跑死,降为二重循环就OK,请问是我的程序问题还是版本问题?

环境:Windows7,dev c++ 5.10
在编辑《明解c语言.入门篇》练习题6-13 “改写代码清单6-16 ,将两次考试的分数存储在三位数组中”,为了将两个二维数组存储到三维数组中,我自定义函数中使用了三重循环,编译能过,但一运行就程序就跑死。降为二重循环后,就没问题。以下是我的两个程序清单:

程序一(采用了三重循环,跑死):

//practice 6-13改写代码清单6-16 ,将两次考试的分数存储在三位数组中。
#include<stdio.h>

void thr_dim(int a[4][3],int b[4][3],int c[2][4][3])
{
    int i,j,k;
    
    for (i=0;i<2;i++)            //三重循环会跑死,只好取消第三重循环 for (i=0;i<2;i++),将a[i][j][k]与a[i][j][k]分开写,就没问题 
    {
        for (j=0;j<4;j++)
        {
            for (k=0;k<3;k++)                    
            c[i][j][k]=(i=0)?a[j][k]:b[j][k];
        }
    }

    printf("三维数组中存储的元素显示如下:\n") ;
    for (i=0;i<2;i++)
    {
        for (j=0;j<4;j++)
        {
            for (k=0;k<3;k++)                    
            printf("c[%d][%d][%d]=%-4d",i,j,k,c[i][j][k]);
            printf("\n");
        }
    }
}


int main(void)
{
    int tensu1[4][3]={{91,63,78},{67,72,46},{89,34,53},{32,54,34}};
    int tensu2[4][3]={{97,67,82},{73,43,46},{97,56,21},{85,46,35}};
    int c[2][4][3];
    
    thr_dim(tensu1,tensu2,c);
    return 0;    
}


程序二(采用二重循环,OK):

//practice 6-13改写代码清单6-16 ,将两次考试的分数存储在三位数组中。
#include<stdio.h>

void thr_dim(int a[4][3],int b[4][3],int c[2][4][3])
{
    int i,j,k;
    for (j=0;j<4;j++)
    {
        for (k=0;k<3;k++)
        c[0][j][k]=a[j][k];
    }

    for (j=0;j<4;j++)
    {
        for (k=0;k<3;k++)
        c[1][j][k]=b[j][k];
    }

    printf("三维数组中存储的元素显示如下:\n") ;
    for (j=0;j<4;j++)
    {
        for (k=0;k<3;k++)
        printf("c[0][%d][%d]=%-4d",j,k,c[0][j][k]);
        printf("\n");
    }
        printf("\n");

    for (j=0;j<4;j++)
    {
        for (k=0;k<3;k++)
        printf("c[1][%d][%d]=%-4d",j,k,c[1][j][k]);
        printf("\n");
    }

}

int main(void)
{
    int tensu1[4][3]={{91,63,78},{67,72,46},{89,34,53},{32,54,34}};
    int tensu2[4][3]={{97,67,82},{73,43,46},{97,56,21},{85,46,35}};
    int c[2][4][3];
    
    thr_dim(tensu1,tensu2,c);
    return 0;    
}


img


i=0,对就怪了

img


好了

程序一:第13行 c[i][j][k]=(i=0)?a[j][k]:b[j][k]; 中的 i=0 改成 i==0
i=0是赋值,i==0是逻辑判断。

//practice 6-13改写代码清单6-16 ,将两次考试的分数存储在三位数组中。
#include<stdio.h>
void thr_dim(int a[4][3],int b[4][3],int c[2][4][3])
{
    int i,j,k;
    for (i=0;i<2;i++)            //三重循环会跑死,只好取消第三重循环 for (i=0;i<2;i++),将a[i][j][k]与a[i][j][k]分开写,就没问题 
    {
        for (j=0;j<4;j++)
        {
            for (k=0;k<3;k++)                    
            c[i][j][k]=(i==0)?a[j][k]:b[j][k];
        }
    }
    printf("三维数组中存储的元素显示如下:\n") ;
    for (i=0;i<2;i++)
    {
        for (j=0;j<4;j++)
        {
            for (k=0;k<3;k++)                    
            printf("c[%d][%d][%d]=%-4d",i,j,k,c[i][j][k]);
            printf("\n");
        }
    }
}
 
int main(void)
{
    int tensu1[4][3]={{91,63,78},{67,72,46},{89,34,53},{32,54,34}};
    int tensu2[4][3]={{97,67,82},{73,43,46},{97,56,21},{85,46,35}};
    int c[2][4][3];
    thr_dim(tensu1,tensu2,c);
    return 0;    
}

附上代码

img


循环i,j很奇怪