c语言中for循环嵌套的执行顺序疑问
程序如下:#include<stdio.h>intmain(){inti;inta[10];for(i=0;i<10;i++)scanf("%d",&a[i]);for(...
程序如下:
#include<stdio.h>int main(){ int i; int a[10]; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++); printf("%d",a[i]); printf("\n"); for(i=9;i>=0;i--) printf("%d\ ",a[i]);}
结果如下:
有俩点疑惑:
for循环嵌套的顺序是第一个为真则暂停执行下一个,直到最下层的执行完才往回跳是吧,那么为什么在程序中输入“1”,回车,然后就可以继续输入“2”,那岂不是停在了printf("\n");的地方?第三个循环为什么要等到10个数字输入完成才 会一次性出来?
i++和i--是什么时候执行的,是下级循环完成后一次性执行的还是分部执行的。
3.为什么结果中会多出一个10呢?
按照我的理解是,i=0,然后i<10为真,执行scanf,然后赋值给a[0],进入第二个循环,打印出a[0]和换行,然后卡在这里了。
接这卡的那里,为什么又直接回到scanf了,最后一个for怎么办 展开
#include<stdio.h>int main(){ int i; int a[10]; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++); printf("%d",a[i]); printf("\n"); for(i=9;i>=0;i--) printf("%d\ ",a[i]);}
结果如下:
有俩点疑惑:
for循环嵌套的顺序是第一个为真则暂停执行下一个,直到最下层的执行完才往回跳是吧,那么为什么在程序中输入“1”,回车,然后就可以继续输入“2”,那岂不是停在了printf("\n");的地方?第三个循环为什么要等到10个数字输入完成才 会一次性出来?
i++和i--是什么时候执行的,是下级循环完成后一次性执行的还是分部执行的。
3.为什么结果中会多出一个10呢?
按照我的理解是,i=0,然后i<10为真,执行scanf,然后赋值给a[0],进入第二个循环,打印出a[0]和换行,然后卡在这里了。
接这卡的那里,为什么又直接回到scanf了,最后一个for怎么办 展开
2个回答
展开全部
/* 你的程序有错,改过来之后就好理解了 */
#include<stdio.h>
int main()
{
int i;
int a[10];
for(i=0;i<10;i++)
scanf("%d",&a[i]);
/* 这里末尾多了一个分号,所以是空循环
for(i=0;i<10;i++);
printf("%d",a[i]);
修改如下: */
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
for(i=9;i>=0;i--)
printf("%d\ ",a[i]);
return 0;
}
更多追问追答
追问
哪里多了分号啊没看明白
意思是第二个for是空的,只是一直把第一个运行了,然后直接运行了第二个的printf运行了一次. 这里明白了,剩下就是假定那个分号没有,嵌套循环中两个i++分别是什么执行顺序? 然后还是那个为啥是空循环,依然从上之下都输出了输入的数字?
展开全部
for(i=0;i<10;i++); 这个循环后面跟的是空语句,什么也没做,printf("%d",a[i]);这里i已经是10了,a[10]是一个不确定的值,这里是10,你下次执行就不一定是10了。多的那个10是a[10],数组已经越界了。
追问
第二个for那多了个分号,既然是空循环那为什么在运行中依然正常输出了呢? 然后就是i++的执行点是在哪呢
意思是第二个for是空的,只是一直把第一个运行了,然后直接运行了第二个的printf运行了一次. 这里明白了,剩下就是假定那个分号没有,嵌套循环中两个i++分别是什么执行顺序? 然后还是那个为啥是空循环,依然从上之下都输出了输入的数字?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询