C# for循环语句的用法(非常详细)
假设现在要求读者设计一个从 1 加到 10 的程序,然后打印结果,读者可能用下列方式设计这个程序。
for循环(loop)的语法如下:
其中,表达式 1 和表达式 3 是一般设定语句。而表达式 2 则是一个关系表达式,如果此条件判断关系表达式是真(true)则循环继续,如果此条件判断关系表达式是伪(false),则跳出循环或是称结束循环。另外,若是循环主体只有一道指令,则可将大括号省略,否则我们应继续使用大括号。
由于 for 循环各表达式功能不同,所以也可以用下列表达式替换:
【实例】从 1 加到 100,并将结果打印出来。
富有变化,是 C# 语言最大的特色,使用同样的控制语句,配合不同的运算符,却可得到同样的结果,下面程序范例将充分说明这个概念。
【实例】重新设计从 1 加到 100 的程序,并将结果打印出来。
【实例】从 1 加到 9,并将每一个加法后的值打印出来。
【实例】列出从 97 至 122 间所有的 ASCII 字符。
如果程序设计错误掉入无限循环陷阱,可以使用
我们也可以将多层次的循环称为嵌套循环(nested loop)。
【实例】利用双层for循环语句,打印九九乘法表。
int sum = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10; Console.WriteLine($"总和 = {sum}");执行结果为:
总和 = 55
现在假设要求各位从 1 加至 100 或是 1000,若是仍用上面方法设计程序,就显得很麻烦了,幸好 C# 语言为我们提供了解决这类问题的方式,可以借助 for 循环语句。for循环(loop)的语法如下:
for (表达式 1; 表达式 2; 表达式 3) { 循环主体 }上述各表达式的功能如下:
- 表达式 1.设定循环指标的初始值;
- 表达式 2.这是关系表达式,判断是否要离开循环控制语句;
- 表达式 3.更新循环指标。
其中,表达式 1 和表达式 3 是一般设定语句。而表达式 2 则是一个关系表达式,如果此条件判断关系表达式是真(true)则循环继续,如果此条件判断关系表达式是伪(false),则跳出循环或是称结束循环。另外,若是循环主体只有一道指令,则可将大括号省略,否则我们应继续使用大括号。
由于 for 循环各表达式功能不同,所以也可以用下列表达式替换:
for (设置循环指标初始值; 条件判断; 更新循环指标) { 循环主体 }当然,在上述 3 个表达式中,任何一个都可以省略,但是分号(;)不可省略,如果不需要表达式 1 和表达式 3,那么把它省略不写就可以了。
【实例】从 1 加到 100,并将结果打印出来。
int sum = 0; int i; for (i = 1; i <= 100; i++) sum += i; Console.WriteLine($"总和 = {sum}");执行结果为:
总和 = 5050
上述实例的 for 循环流程如下:
富有变化,是 C# 语言最大的特色,使用同样的控制语句,配合不同的运算符,却可得到同样的结果,下面程序范例将充分说明这个概念。
【实例】重新设计从 1 加到 100 的程序,并将结果打印出来。
int sum = 0; int i = 1; for (; i <= 100; ) sum += i++; Console.WriteLine($"总和 = {sum}");上述的程序范例中,for 语句的表达式 1 被省略了,但是我们在 for 的前一列已经设定 i=1 了,这是合法的动作。另外,表达式 3 的指令也省略了,但是这并不代表,我们没有进行表达式 3 对应的动作,在此程序中,我们只是把表达式 3 和循环主体融合成一个指令罢了。
sum += i++; // 这是循环主体上述相当于:
sum = sum + i; i = i + 1;所以,程序仍能产生正确结果。
【实例】从 1 加到 9,并将每一个加法后的值打印出来。
int sum = 0; Console.WriteLine(" i 总和 "); Console.WriteLine(("").PadRight(16, '-')); for (int i = 1; i <= 9; i++) { sum += i; Console.WriteLine($"{i} {sum}"); }执行结果为:
i 总和 ---------- 1 1 2 3 3 6 4 10 5 15 6 21 7 28 8 36 9 45上述程序的 for 循环概念的流程如下:

【实例】列出从 97 至 122 间所有的 ASCII 字符。
int i; for (i = 97; i <= 122; i++) Console.Write($"{i}={Convert.ToChar(i)}\t");执行结果为:
97=a 98=b 99=c 100=d 101=e 102=f 103=g 104=h 105=i 106=j 107=k 108=l 109=m 110=n 111=o 112=p 113=q 114=r 115=s 116=t 117=u 118=v 119=w 120=x 121=y 122=z
for无限循环
在 for 语句中如果条件判断,也就是表达式 2 不写的话,那么这个结果将永远是真,所以下面写法将是一个无限循环。for(表达式1; ;表达式3) { ... }或者是:
for( ; ; ) { ... }如果程序掉入无限循环,那么其实就是一个错误。如果要在程序中设计一个无限循环,就必须在特定情况让此程序离开此无限循环,无限循环常用在以下两个地方:
- 让程序暂时中断。其实我们可以使用 C# 语言的 Thread.Sleep() 方法执行此功能;
- 猜谜游戏,答对才可以离开无限循环。
如果程序设计错误掉入无限循环陷阱,可以使用
Ctrl+C
键强行离开无限循环。for循环嵌套
和其他高级语言一样,C# 中 for 循环也可以形成双层循环。所谓的双层循环控制语句就是某个 for 语句在另一个 for 语句里面,其基本语法概念如下所示:
我们也可以将多层次的循环称为嵌套循环(nested loop)。
【实例】利用双层for循环语句,打印九九乘法表。
int i, j, result; for (i = 1; i <= 9; i++) { for (j = 1; j <= 9; j++) { result = i * j; Console.Write($"{i}*{j}={result,-3}"); } Console.WriteLine(""); }执行结果为:
1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9 2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 3*1=3 3*2=6 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 4*1=4 4*2=8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81上述程序的流程如下所示:
