C语言程序疑惑(找高手帮忙解释程序)

void main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf("array a: \n");
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
{
printf("%5d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
printf("array b: \n");
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++)
printf("%5d",b[i][j]);
printf("\n");
}
}

高手帮忙解释下以下几个问题:
1.为什么要在定义数组后就直接输出printf("array a: \n");这个有什么意义;
2.程序中有两处for语句嵌套循环,为什么会有两次?还有就是第一处的for语句嵌套循环得出的值,输到哪儿?第二处的for语句嵌套是不是和第一次都作用一样,得出都值也一样?
3.程序中b[j][i]=a[i][j];语句是把a[i][j]赋给b[j][i]是把j和i对调吗?还是其他的意思?

详细解释有追加分!
一楼和二楼都回答都很详细,还有一个问题:
void main()
{
int k,j,s;
for(k=2;k<6;k++,k++)
{s=1;
for(j=k;j<6;j++)s+=j;
printf("%d\n",s);
}
}
还有这个问题各位也帮我解释下,为什么S的最终值只有两个15和10是怎么得来的?详细点!谢谢

第一个:
直接输出array a;这个没什么重要意义,只是为了显示的完整性,方便阅读者。这里的a指的不是上面定义的数组a.
第二个:2个for循环是嵌套的,运算顺序是先执行第一个for循环,然后符合第一个for中的条件之后就去执行第二个for循环,当第二个for循环执行到不满足J<=2的时候再回到第一个for循环。也就是说第一个for执行一次,第二个for要执行3次。第一处处for语句嵌套循环得出的值,输到显示屏,本质上讲,只是把a数组的元素输出而已,唯一区别就是最后将数组a和b中的元素对调了,printf("array b: \n");这个以下的for循环输出的虽然表面上是b数组的元素,实际上却是a数组中的元素,因为在上面的for语句中已经将a数组中的元素赋给b数组了。
第3个问题:程序中b[j][i]=a[i][j]; 是指把他们不同位置的元素进行对调,比如b[j][i]这个位置存储的是5,a[i][j]这个位置存储的是8,则这样对调之后a,b数组中的b[j][i]和a[i][j]位置存储的就都是同一个元素了。既b数组中的元素都被a数组中的元素给取代了,但是顺序不一样。

参考资料:看你的情绪,书本还没搞透彻。建议再看看书吧,把概念搞清楚。C语言不难的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-01-01
1.为什么要在定义数组后就直接输出printf("array a: \n");这个有什么意义;
答:意义就是提示下面输出的数据是数组 a 的数据
循环执行printf("%5d",a[i][j]); 将数组 a 的全部内容输出。

2.程序中有两处for语句嵌套循环,为什么会有两次?还有就是第一处的for语句嵌套循环得出的值,输到哪儿?第二处的for语句嵌套是不是和第一次都作用一样,得出都值也一样?
答:第一个for循环是用来输出数组 a 的数据;第二个for循环是用来输出
数组 b 的数据。数据输出到 DOS 界面(就是那个黑色的窗口),
的出的值是不一样的,b[0][0] == a[0][0],
b[1][0] == a[0][1]
b[2][0] == a[0][2]
b[0][1] == a[1][0]
b[1][1] == a[1][0]
b[2][1] == a[1][0]
仔细观察,就可以看出不一样。

3.程序中b[j][i]=a[i][j];语句是把a[i][j]赋给b[j][i]是把j和i对调吗?还是其他的意思?

答:程序中b[j][i]=a[i][j];语句是把a[i][j]赋给b[j][i],但不是把 i
和j 对调。

有不明白的地方,可以继续问,希望对你能有所帮助。c 语言是非常有用的一门语言。

问题补充:

for(k=2;k<6;k++,k++)
{
s=1;
for(j=k;j<6;j++)
s+=j;
printf("%d\n",s);
}
这是一个双重循环,当外部循环k==2时,k<6 成立,所以执行一次循环体后,输出 s = 15;然后执行 k++,k++;经过两次自加,这样k = 4,k < 6成立,所以在执行循环体,输出 k = 10;然后执行k++,k++;这样k =6,k <6 不成立,推出循环。结束本回答被提问者采纳
第2个回答  2010-01-01
1、c语言缺乏图形界面,所以文字提示很重要(这是你人性化设计的标志),这个仅仅只是提示下面要显示的是数组a: printf("array b: \n");的作用同理;

2、由于是二维数组,就像矩阵横竖都要考虑,就像找一个座位一样,先找在第几排再找第几列就找到那个位置了,至于是先找排还是先找列,那要看参数的设定;printf("%5d",a[i][j]);输出到dos界面啦?!b[j][i]=a[i][j];然后把值依个赋给b数组这样b是a的转置矩阵;大体上一样,第一次输出数组a的所有值,第二次输出矩阵b
其实这些你把程序运行一下就知道了,实践是最重要的;

3、是把a矩阵的第i行第j列的值放到b矩阵的第j行第i列;i与j只表示位置关系,他们之间并没有交换;
第3个回答  2010-01-01
1.这句话本身没什么含义,只是起提示作用,告诉你下面要输出的数组是a
最终输出结果是
array a:
1 2 3
4 5 6
array b:
1 4
2 5
3 6
如果没有printf("array a: \n");printf("%5d",b[i][j]);就是下面这样子,很不直观.
1 2 3
4 5 6
1 4
2 5
3 6

2.本文有4个for语句,前两个是通过嵌套一一赋值,把a的值转置赋给b。后两个是通过两个for语句将b的值一一输出.
就前两个for语句举例,顺序是i=0,j=0、1、2;i=1,j=0、1、2.

3.程序中b[j][i]=a[i][j];意思是通过i,j对调以及for语句对i.j值的循环,将a中各值一次转置赋给b。应该没有别的意思了。
写明了是
b[0][0]=a[0][0];b[1][0]=a[0][1];b[2][0]=a[0][2];
b[0][1]=a[1][0];b[1][1]=a[1][1];b[2][1]=a[1][2];
这样就可以舍去前两个for语句了。
不过还是建议学好for,挺好用的。
相似回答