环境: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;
}