请详细解释下这段C语言
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);
}
解决方法
main()
{
int k,j,s; //定义三个变量,类型为int 整型变量
for(k=2;k<6;k ,k )
//开始一个循环,起始条件为k = 2, 循环的测试条件是 k< 6 时,进行循环( 也就是说当 K >= 6时结束循环)。每一次循环后,k 自增 两次 k , k 就等同于 k= k 2
{ //k 的循环体开始
s = 1;
for( j=k;j<6;j )
//开始一个循环。起始条件为 j=k,测试条件为 j<6, 自增为 j
s = j; //由于循环体只有一句,所有不用花括符号。
} //k 的循环体结束
printf("%d\n",s); //以整型值输出s的值。
}
这段代码,是在计算 s,其实外层循环 k 完全没有用。不管外层 k 怎么循环,s 都会被赋值为1。然后再进入内存循环 j 。
这里提示一下:
由于for 循环在循环时,先将进行测试条件比效,看测试条件是否符合,为真才进行循环。循环之后,再执行自增语句。也就是说,对于
for(k=2;k<6;k ,k ) 是先进行k=2 初始赋值(仅一次),开始循环检查,K <6 吗?是的话,进入循环,执行循环体内的语句,然后,再执行 k , k 。
也就是说以下代码:
for(k=2;k<6;k ,k )
{ s=1;
for(j=k;j<6;j )
s =1;
}
可以理解为:
当外层结束循环时之前,k=4( 注意:当这次循环结束后,K会自增2,然后下一次循环时,K=6,将不符合条件,将会退出循环,所以进行s 计算时,最后一次有效的计算是:
s = 1
for( j=4;j<6;j )
s =j;
j 的可以取值为 : 4, 5(j=6时,已经不符合测试条件j<6,已退出循环)
s = 1(s=1) 4 = 5
s = 5(s=5) 5= 10
最终结果, s =10;