Max*_*ich 16 c c# java loops for-loop
所以今天我去了一个面试,其中一个问题是以下(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());
}
Run Code Online (Sandbox Code Playgroud)
我以前从未见过这样的结构,并且问过我的同事,我工作场所的5个人中有4个也不知道(也许更多的是对我们的反思,但我离题了).使用一些基本逻辑,我能够正确回答这个问题,但是这些知识彻底改变了我对如何构造循环的理解.
所以我想我的问题归结为此.
pho*_*xis 25
for (statement1; statement2; statement3)
{
/* body */
}
Run Code Online (Sandbox Code Playgroud)
(1)首先statement1
执行.
(2)statement2
执行下一步.
(3)如果评估statement2
为真,则执行正文
(4)然后statement3
执行.
(5)从步骤(2)开始重复
| +<-----------------+
| | ^
V V |
for ( (s1); -------->(s2 true? | false?); (s3) )
{ | | ^
| | |
| | |
V | |
(body)-----|--------->+
} |
|
V
(come out)
Run Code Online (Sandbox Code Playgroud)
您显示的结构与上面的结构相同.该statement n
可以是任何声明.在您的示例中,您在和中用逗号运算符分隔.您可以用逗号运算符分隔任意数量的语句.statement1
statement3
通常,for
循环与statement1
with初始化一起使用,因为它只执行一次.该statement2
用于循环终止条件检查,因为这句话的评估值来决定是否进入破体而出.并且statement3
用于更新循环终止变量,因为它在正文之后执行.但通常它们可以以任何方式使用.
首先statement1
是i=10, j=0;
初始化变量.接下来statement2
是j <= 10
如果这是真的那么执行正文.执行体内后,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");
Run Code Online (Sandbox Code Playgroud)
我们应该总是尝试编写易于阅读且不会产生混淆的代码.这有助于代码编写者以及其他阅读代码的人.
Col*_*inE 10
归档时间: |
|
查看次数: |
1373 次 |
最近记录: |