for循环执行顺序
答案:7 悬赏:80
解决时间 2021-01-23 03:39
- 提问者网友:斑駁影
- 2021-01-22 18:15
for循环执行顺序
最佳答案
- 二级知识专家网友:孤独的牧羊人
- 2021-01-22 19:41
for循环的执行顺序用如下表达式:
'WenQuanYi Micro Hei Mono',
'WenQuanYi Micro Hei',
'Microsoft Yahei Mono',
'Microsoft Yahei',
sans-serif;">for(expression1;expression2;expression3)
{
expression4;
}
执行的顺序应该是:
1.第一次循环,即初始化循环。
首先执行表达式expression1(一般为初始化语句);再执行expression2(一般为条件判断语句),判断expression1是否符合expression2的条件;如果符合,则执行expression4,否则,停止执行;最后执行expression3。
2.第N(N>=2)次循环
首先执行expression2,判断在expression3是否符合在expression2要求;如果符合,则继续执。
行expression4,否则,停止执行。最后执行在expression3。如此往复,直至expression3不满足expression2条件是为止。
总结:
总的来说,执行的顺序是一致的。先条件判断(expression2),再函数体执行(expression4),最后for执行(expression3)。往复......区别在于,条件判断的对象。第一次判断时,对象为初始化语句(expression1), 后续的判断对象为执行后的结果(expression3)。
拓展资料注意事项:
1.for循环中的变量可以是一个也可以是多个,不要局限于一个变量处理到底,那样有时会很单调,当程序适合把多个变量组成循环时,用多个for语句来表示就是有些浪费了!
2.for循环中语句可以为语句体, 语句体外加大括号"{}"将参加循环的语句括起来。 for循环的三个表达式都是逗号表达式,这样来说,其实每个分号表达式可以由几个逗号表达式构成,中间用",”隔开,最后以“;”结束。
3. for循环中的"单次表达式"、"条件表达式"和"循环体语句"都是选择项, 即可以缺省成只剩下“;”的空语句, ";"不能缺省的原因是编译格式如此,缺省了编译器不认识而会报错。
省略了用来初始化的单次表达式时, 表示不对循环控制变量赋初值。
省略了条件表达式, 若不做其它处理则成为死循环。
省略了所有循环体, 则for语句不被其它形式处理时不产生任何作用。
百度百科for循环
'WenQuanYi Micro Hei Mono',
'WenQuanYi Micro Hei',
'Microsoft Yahei Mono',
'Microsoft Yahei',
sans-serif;">for(expression1;expression2;expression3)
{
expression4;
}
执行的顺序应该是:
1.第一次循环,即初始化循环。
首先执行表达式expression1(一般为初始化语句);再执行expression2(一般为条件判断语句),判断expression1是否符合expression2的条件;如果符合,则执行expression4,否则,停止执行;最后执行expression3。
2.第N(N>=2)次循环
首先执行expression2,判断在expression3是否符合在expression2要求;如果符合,则继续执。
行expression4,否则,停止执行。最后执行在expression3。如此往复,直至expression3不满足expression2条件是为止。
总结:
总的来说,执行的顺序是一致的。先条件判断(expression2),再函数体执行(expression4),最后for执行(expression3)。往复......区别在于,条件判断的对象。第一次判断时,对象为初始化语句(expression1), 后续的判断对象为执行后的结果(expression3)。
拓展资料注意事项:
1.for循环中的变量可以是一个也可以是多个,不要局限于一个变量处理到底,那样有时会很单调,当程序适合把多个变量组成循环时,用多个for语句来表示就是有些浪费了!
2.for循环中语句可以为语句体, 语句体外加大括号"{}"将参加循环的语句括起来。 for循环的三个表达式都是逗号表达式,这样来说,其实每个分号表达式可以由几个逗号表达式构成,中间用",”隔开,最后以“;”结束。
3. for循环中的"单次表达式"、"条件表达式"和"循环体语句"都是选择项, 即可以缺省成只剩下“;”的空语句, ";"不能缺省的原因是编译格式如此,缺省了编译器不认识而会报错。
省略了用来初始化的单次表达式时, 表示不对循环控制变量赋初值。
省略了条件表达式, 若不做其它处理则成为死循环。
省略了所有循环体, 则for语句不被其它形式处理时不产生任何作用。
百度百科for循环
全部回答
- 1楼网友:夜风逐马
- 2021-01-23 01:01
for(i = 0; i < 6; i++)
{
printf("%2d%2d", i, k);
k++;
这句来说
首先赋值 再比大小 i<6 则执行printf("%2d%2d", i, k);
k++; 最后执行i++
{
printf("%2d%2d", i, k);
k++;
这句来说
首先赋值 再比大小 i<6 则执行printf("%2d%2d", i, k);
k++; 最后执行i++
- 2楼网友:十鸦
- 2021-01-23 00:12
我看主要是这句难以理解,我给你解释一下:
for(i = 0; i < 6; i++ && k++)
printf("%2d%2d", i, k);
短这里涉及到c的一个语法:段路径求值(应该是叫这个)。
表达式&&的计算顺序是从左到右,所以当第一次进行&&运算的时候i++的值为0,则此时整个表达式的值则为假,c语言不会再继续进行k++的运算。第二次运行&&的时候,i++的返回值是真,则c++继续运行k++。
for(i = 0; i < 6; i++ && k++)
printf("%2d%2d", i, k);
短这里涉及到c的一个语法:段路径求值(应该是叫这个)。
表达式&&的计算顺序是从左到右,所以当第一次进行&&运算的时候i++的值为0,则此时整个表达式的值则为假,c语言不会再继续进行k++的运算。第二次运行&&的时候,i++的返回值是真,则c++继续运行k++。
- 3楼网友:渡鹤影
- 2021-01-22 23:44
看了半天 才明白过来
下面的那个循环我就不说了 相信你能看明白
我讲讲上面的循环
for(i = 0; i < 6; i++ && k++)
printf("%2d%2d", i, k);
第一次循环 i=0 k=0
直接输出 毫无争议
之后执行 i++&&k++
这里要提到编译器执行这种判断性的语句的方式
比如
int i=0;
if(i==1&&k++)//由于前面的判断已经为假 与操作1假结果就是假的 不成立的 所以后面的j++就不去执行了
这里的情况也类似 i这时等于0 先进行判断 再进行++运算 由于i=0所以编译器直接认为后面的不需要继续操作了 所以 k++没有执行
到下面 判断i<6 成立 输出 i=1 j=0
再执行i++&&j++
这个时候 i=1 编译器认为大于0的数字均为真
所以前面判断为真 就要判断后面的 继而执行了j++ 程序继续判断i<6成立 输出i=2 j=1
就这样下去 输出所有的结果
你也可以吧 i++&&j++ 换为i++||j++试试看结果
用这个方法分析就可以了
不过我在调试过程中遇懂啊了一个问题
就是调试与直接执行的结果不一样
希望下面有高手能够解答
下面的那个循环我就不说了 相信你能看明白
我讲讲上面的循环
for(i = 0; i < 6; i++ && k++)
printf("%2d%2d", i, k);
第一次循环 i=0 k=0
直接输出 毫无争议
之后执行 i++&&k++
这里要提到编译器执行这种判断性的语句的方式
比如
int i=0;
if(i==1&&k++)//由于前面的判断已经为假 与操作1假结果就是假的 不成立的 所以后面的j++就不去执行了
这里的情况也类似 i这时等于0 先进行判断 再进行++运算 由于i=0所以编译器直接认为后面的不需要继续操作了 所以 k++没有执行
到下面 判断i<6 成立 输出 i=1 j=0
再执行i++&&j++
这个时候 i=1 编译器认为大于0的数字均为真
所以前面判断为真 就要判断后面的 继而执行了j++ 程序继续判断i<6成立 输出i=2 j=1
就这样下去 输出所有的结果
你也可以吧 i++&&j++ 换为i++||j++试试看结果
用这个方法分析就可以了
不过我在调试过程中遇懂啊了一个问题
就是调试与直接执行的结果不一样
希望下面有高手能够解答
- 4楼网友:野味小生
- 2021-01-22 23:09
for(i = 0; i < 6; i++ && k++)
printf("%2d%2d", i, k);
for(i = 0; i < 6; i++)
{
printf("%2d%2d", i, k);
k++;
我觉得,你的for循环中令i=0,那么每次执行for循环的时候i都会被重新值0,那么你的for循环应该是一个死循环,
k到值应该会输出无限个,而i 的值始终为0,而且永远不会执行到第二个循环去,你的结果是怎么得出来的?。
学习学习
printf("%2d%2d", i, k);
for(i = 0; i < 6; i++)
{
printf("%2d%2d", i, k);
k++;
我觉得,你的for循环中令i=0,那么每次执行for循环的时候i都会被重新值0,那么你的for循环应该是一个死循环,
k到值应该会输出无限个,而i 的值始终为0,而且永远不会执行到第二个循环去,你的结果是怎么得出来的?。
学习学习
- 5楼网友:封刀令
- 2021-01-22 22:14
程序重点位置就是 for(i = 0; i < 6; i++ && k++)里面的,i++ && k++,由于一般的编译器,对于逻辑运算符 的处理,按照从左之右,并且如果左面的表达式就可以得到最终的结果,那右边的就不执行了。
所以,本程序中。i++,先运行 i的 && 然后再执行i自加1。
当i=0的时候,第一次进入for循环,for语句执行到i = 0; i < 6;结束,并不执行i++ && k++,当第一次循环结束后i=0,k=0。
进行第二次循环for语句执行 i < 6; i++ && k++。并先执行i++ && k++。这个时候i=0,&&不需要右边的表达式已经可以知道结果,所以就不执行k++。由此第二次循环后i=1,由于k++没有执行,所以k还是=0。
进入第三次循环,i=1。&&必须要通过计算右边的表达式才能得出结果。所以开始执行k++。所以第三次循环 时候 i=2,k=1
调试与直接运行EXE的结果不同,问题我没有发现,不知道楼上使用的是什么编译器环境?
所以,本程序中。i++,先运行 i的 && 然后再执行i自加1。
当i=0的时候,第一次进入for循环,for语句执行到i = 0; i < 6;结束,并不执行i++ && k++,当第一次循环结束后i=0,k=0。
进行第二次循环for语句执行 i < 6; i++ && k++。并先执行i++ && k++。这个时候i=0,&&不需要右边的表达式已经可以知道结果,所以就不执行k++。由此第二次循环后i=1,由于k++没有执行,所以k还是=0。
进入第三次循环,i=1。&&必须要通过计算右边的表达式才能得出结果。所以开始执行k++。所以第三次循环 时候 i=2,k=1
调试与直接运行EXE的结果不同,问题我没有发现,不知道楼上使用的是什么编译器环境?
- 6楼网友:千夜
- 2021-01-22 21:14
外面的for循环和单循环一样,外面的for循环一次,里面的for循环跑完
for(int i =; i <2;i++){
for(int j =0;j<3;j++){
//TODO
}
}
i=0时,外面的循环1次,然后内部j从0开始,执行3次
然后i++, i=1 ;再次进入内部循环,j还是从0
开始
for(int i =; i <2;i++){
for(int j =0;j<3;j++){
//TODO
}
}
i=0时,外面的循环1次,然后内部j从0开始,执行3次
然后i++, i=1 ;再次进入内部循环,j还是从0
开始
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯