c语言二维数组输入用下面的程序,但是第一次循环结束不是返回for (i…),那不是只能输?

入a[1][1].a[2][2]这样的对角线元素?那a[0][1]这样的呢
for(i=0;i<2;i++)
for(j=0;j<2;j++)
printf("%d",a[i][j]);

首先说明一点,这样的语句并不能输入任何一个元素,它只能输出元素。你得把printf改成scanf,才能输入。
其次程序虽然只有短短的三句,但它包含一个嵌套循环:
外循环的循环变量是i,第二句和第三句是它的循环体(可称"外循环体");
内循环的循环变量是j,第三句是它的循环体(可称"内循环体")。
写成能够一目了然的方式,是这样的:
①for(i=0;i<2;i++)
{
②for(j=0;j<2;j++)
{
③scanf("%d",a[i][j]);
}
}
可以看到,它的运行过程是(为了叙述方便,我写上了行号):
1、第一次执行①,i赋值0,比较i=0<2成立,符合循环条件,进入外循环体;
2、第一次进入内循环体,执行②,j赋值0,比较j=0<2成立,进入内循环体;
3、执行③,输入a[i][j]的值,这时,因为i=0,j=0,输入的是a[0][0]的值————这一点你分析的对;
4、完成内循环体的执行后,返回②,而不是①。因为,内循环还没有执行完!这是你分析错误的地方。返回②后,先执行j++,j成为1,而且j=1<2成立,再执行③;
5、再执行③,因为这时候i=0,j=1,所以,输入a[0][1]的值;
6、程序再返回②,j++成为2,比较j=2<2不成立,跳出内循环,回到外循环①;
7、执行①,i自增为1,i=1<2成立,再进入外循环体;
8、执行②,再进入内循环,像第一次一样,j先赋值0,比较j=0<1成立,执行③,输入a[1][0]的值,......
后面就不要写了吧。
有什么问题请留言。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-12-17
你上面的代码是按行从左到右,从上至下进行输出,也就是a[0][0] a[0][1] a[1][0] a[1][1] 这种,不清楚你想问什么。追问

大神,我想它为什么是for的双重循环,为什么输出先保留下标i=0,待j不满足后才开始循环i=1。为什么它不是i=0 j=0然后i=1 j=1然后结束程序输出a[0][0] a[1][1],为什么会有a[0][1]这种

😭

追答

双层循环本身就是这样规定的,外层执行一次的话,内层要执行多次,如果你只是需要对角线,比如数组a[5][5],那可以简单的
for(i=0;i<5;i++) printf("%d ",a[i][i]);

追问

谢谢!!!!!

本回答被提问者采纳
第2个回答  2022-01-01
双重循环就是这么工作的:
for(i=0;i<2;i++){
for(j=0;j<2;j++){
printf("%d",a[i][j]);
}
}
i = 0的时候,进入二重循环,必须等里面运行结束,到后面一个} 才会回到第一重循环的判断条件
第3个回答  2022-01-04
对于二次循环的顺序,是先获取外部循环的一个值,然后循环内部,当内部循环完之后,再循环外部,所以它的输出顺序是。
a[0][0],a[0][1],a[1][0],a[1][1]
第4个回答  2022-02-14
要输入二维数组中所有的元素,只要使用如下的输入语句就可以了:
for(i=0;i<2;i++)for(j=0;j<2;j++)scanf("%d",&a[i][j]);
相似回答