qst(int x,int y)
{int i,a,b;
for(i=1;i<x;i++)
{a=i;
for(i=1;i<y;i++)
b=i;}
printf("%d,%d,%d\n",a,b,i);}
main()
{qst(3,3);qst(4,3);qst(5,3);}
其输出结果是什么???为什么????
qst(int x,int y)
{int i,a,b;
for(i=1;i<x;i++)
{a=i;
for(i=1;i<y;i++)
b=i;}
printf("%d,%d,%d\n",a,b,i);}
main()
{qst(3,3);qst(4,3);qst(5,3);}
其输出结果是什么???为什么????
内层循环for不要使用同外层循环for同样的变量i做循环条件,那样内层i的变化会影响到外层循环条件的判断,导致与预想不同的结果,除非你用的是巧妙的算法计算,
就单说你这段代码,qst(3,3)的输出是1,2,4,qst(4,3)的输出也是1,2,4,因为这两个内层for第一次循环完i=3,外层for对i加1后i=4,不满足外层for的循环判断条件i<3或i<4,所以两层循环都结束,而qst(5,3)则陷入死循环
1;2;3
3;2;4
4;2;5
qst(3,3)在执行完b的赋值,a=1;b=2;i=3;当执行第一个for(i=1;i<x;i++)时表达式3<3为假所以结束循环,不再执行。
qst(4,3)在执行完b的赋值,a=1;b=2;i=3;当执行第一个for(i=1;i<x;i++)时表达式3<4为真所以继续执行循环,a=3,在第二个for循环里面3<3为假不执行。同理qst(5,3)。