因此,今天我去了一次采访,其中一个问题是以下内容(C#上下文)。
//Print the output for the following code:
for (int i = 10, j = 0; j <= 10; j++, i--)
{
if (i > j)
Console.WriteLine(j.ToString());
}
我以前从未见过这样的结构,并问过我的同事,我工作场所中的5人中有4人也不知道(也许更多地反映了我们,但我离题了)。使用一些基本的逻辑,我能够正确回答问题,但是这种知识从根本上改变了我对如何构造循环的理解。
所以我想我的问题可以归结为这一点。
for (statement1; statement2; statement3)
{
/* body */
}
(1)首先statement1
执行。
(2)接下来statement2
执行。
(3)如果的评估statement2
为真,则执行主体
(4)然后statement3
执行。
(5)从步骤(2)重复
| +<-----------------+
| | ^
V V |
for ( (s1); -------->(s2 true? | false?); (s3) )
{ | | ^
| | |
| | |
V | |
(body)-----|--------->+
} |
|
V
(come out)
您显示的结构与上述相同。该statement n
可以是任何声明。在您的示例中,您在和中用逗号分隔。您可以使用逗号运算符分隔任意数量的语句。statement1
statement3
通常,for
循环与statement1
with初始化一起使用,因为它仅执行一次。该statement2
用于循环终止条件检查,因为这句话的评估值来决定是否进入中断了的身体。和,statement3
用于在主体之后执行循环更新终止变量。但是通常它们可以以任何方式使用。
首先statement1
是i=10, j=0;
这将初始化变量。接下来statement2
是j <= 10
如果为true,则执行主体。执行体内后,statement3
它i--,j++
被执行。循环将迭代11
时间0
到10
。但是,将打印5
时间,因为在一个点上i
,并j
成为同和if (i > j)
将评估假。
编辑这是一个示例,在其中可以使用它来检查回文字符串,但不是很实际,而是一个示例。
int i, j, n, flag;
char str[128];
printf ("\nEnter string: ");
scanf ("%s", &str);
n = strlen (str);
for (flag=1, i=n-1, j=0; j<n/2; j++, i--)
{
if (str[i] != str[j])
{
flag = 0;
break;
}
}
if (flag)
printf ("\n\"%s\" is a palindrome");
else
printf ("\n\"%s\" is not a palindrome");
我们应该始终尝试编写易于阅读且不会造成混淆的代码。这有助于代码编写者以及其他阅读代码的人。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句