在C#中,我们有四种循环结构,分别是for、foreach、do、while,并且它们在程序设计中有着不同的用途。
for循环
for循环重复执行语句,直到指定的条件不再满足为止。for循环包含三个表达式,分别是表达式1、表达式2和表达式3。表达式1用于初始化循环计数器,表达式2为循环的条件,表达式3用于在每次循环结束时更新循环计数器。
for循环的基本语法如下:
for(<表达式1>;<表达式2>;<表达式3>) { //循环体 }
例如:
for(int i=0;i<10;i++) { Console.WriteLine(i); }
上述代码段会输出0到9的数字。
foreach循环
foreach是一个用于遍历集合类对象的循环语句,foreach循环可用于访问数组和集合类型的元素,遍历数组和集合中的元素。
foreach循环的基本语法如下:
foreach( Type identifier in expression ) { //循环体 }
例如:
int[] arr = { 1, 2, 3, 4, 5 }; foreach( int i in arr ) { Console.WriteLine(i); }
上述代码段会输出1到5的数字。
do循环
do循环和while循环非常相似,只不过do循环语句块中的语句至少会被执行一次。do循环主要用于在循环开始之前执行一些必要的操作。
do循环的基本语法如下:
do { //循环体 } while ()
例如:
int i = 0; do { Console.WriteLine(i); i++; } while(i<5);
上述代码段会输出0到4的数字。
while循环
while循环重复执行语句,只要指定的条件为true。while循环使用非常广泛,当我们想要在某些特定条件下执行代码块时,在条件不成立之前就会一直循环执行。
while循环的基本语法如下:
while () { //循环体 }
例如:
int i = 0; while(i < 5) { Console.WriteLine(i); i++; }
上述代码段会输出0到4的数字。
除了以上介绍的基本语法,这里还需要注意以下几点:
for循环和while循环都需要在循环体内部控制循环变量的变化,否则会导致死循环。
例如:
int i = 0; while(i<5) { Console.WriteLine(i); }
上述代码段没有循环体内部的i++语句,会导致i始终为0,导致死循环。
for循环和foreach循环中,表达式1可省略。如果省略表达式1,意味着在进入循环之前不需要初始化循环变量。
例如:
int[] arr = { 1, 2, 3, 4, 5 }; for(int i=0 ; i<arr.Length ; ) { Console.WriteLine(arr[i]); i += 2; }
上述代码段省略了for循环的表达式1,直接从0开始循环,实现了遍历数组元素并输出两次。
while和do循环中的循环条件必须有所改变,否则会导致死循环。
例如:
int i = 0; while(i<5) { Console.WriteLine(i); }
上述代码段没有对i进行修改,每次循环条件都是true,导致死循环。正确的写法应该是将i在循环体内进行修改。
continue和break关键字可以用于控制循环体的流程。
continue:当执行到continue语句时,会跳过当前循环中的其余语句,并立即进行下一次循环迭代。
例如:
for(int i=0;i<10;i++) { if(i%2 == 0) { continue; } Console.WriteLine(i); }
上述代码段会输出1,3,5,7,9。
break:当执行到break语句时,会立即退出该循环,不再执行该循环之后的语句。
例如:
for(int i=0;i<10;i++) { if(i == 5) { break; } Console.WriteLine(i); }
上述代码段会输出0,1,2,3,4。
在循环体中可以定义一个变量来控制循环次数。
例如:
int i = 0; while(i<5) { int j = i; while(j<5) { Console.WriteLine(j); j++; } i++; }
上述代码段定义了一个变量j来控制内层循环的次数,通过改变i和j的值来实现双层循环输出数字。
如果循环体中只有一条语句,并且不需要在循环体中控制变量,则可以省略花括号。
例如:
for(int i=0;i<5;i++) Console.WriteLine(i);
上述代码段中省略了for循环的花括号。
总之,for、foreach、while和do循环是C#中最常见的循环结构,它们都有各自的用途和优劣点,我们需要根据具体的任务需求来选择使用哪种循环结构。在实际编程中,我们需要注意循环条件和循环变量的控制,避免出现死循环和陷入无限循环的问题。