今天主要学习了循环结构
循环结构1-while循环
格式如下:
1 while ( 条件 ) 2 { 3 语句1; 4 语句2; 5 .... 6 }
1)如果条件成立,就会执行循环体中的语句(“循环体”就是while后面大括号{}中的内容)。然后再次判断条件,重复上述过程,直到条件不成立就结束while循环
2)while循环的特点:如果while中的条件一开始就不成立,那么循环体中的语句永远不会被执行
例如:
1 /* 2 输出十次hello world 3 */ 4 int main(){ 5 6 int i = 0; 7 8 while (i < 10) { 9 10 printf("Hello world!----%d\n",i); 11 i++; 12 13 } 14 15 }
如果省略第11行的i++,count就一直是i,那么i<10一直都是成立的,这个while循环将会陷入“死循环”,一直在重复执行第10行代码。
循环结构2-do while循环
格式如下:
1 do { 2 语句1; 3 语句2; 4 ... 5 } while (条件);
1)注意第5行,后面是加上一个分号;的
2)当执行到do-while循环时,首先会执行一遍循环体中的语句(“循环体”就是do后面大括号{}中的内容)。接着判断while中的条件,如果条件成立,就执行循环体中的语句。然后再次判断条件,重复上述过程,直到条件不成立就结束while循环
3)do-while循环的特点:不管while中的条件是否成立,循环体中的语句至少会被执行一遍
4)其实do while循环的用法跟while循环是差不多的,这里就不举例子了。
循环结构3-for循环
for循环是所有循环结构中最复杂的。
1 for (语句1; 条件; 语句2) { 2 语句3; 3 语句4; 4 ... 5 }
1)for循环开始时,会先执行语句1,而且在整个循环过程中只执行一次语句1
2)接着判断条件,如果条件成立,就会执行循环体中的语句(“循环体”就是for后面大括号{}中的内容)
3)循环体执行完毕后,接下来会执行语句2,然后再次判断条件,重复上述过程,直到条件不成立就结束for循环
例如 :
1 int main(){ 2 /* 3 利用循环输出: 4 1 5 1 2 6 1 2 3 7 */ 8 for (int i =1 ; i <= 3; i++) { 9 for (int j = 1; j <= i; j++) { 10 printf("%d ",j); 11 } 12 printf("\n"); 13 14 } 15 16 return 0; 17 }
输出结果为:
1 1 2 1 2 3
需要注意的是:变量i的作用域是第8~14行。一旦离开了这个第一层for循环,变量i就失效了,变量j的作用域是9~11行,一但离开内部for循环,变量j就失效了。
总结:
1.for最常用,通常用于知道循环次数的循环。
2.while也很常?,通常用于不知道循环次数的循环。
break和continue
1.break
前面在switch语句中已经用到了break,它的作用是跳出switch语句。它也可以用在循环结构中,这时候它的作用是跳出整个循环语句。
这里以for循环为例子,break也可以用在while循环、do-while循环中。
1 for (int i = 0; i<5; i++) { 2 printf("i=%d \n", i); 3 4 if (i>2) { 5 break; 6 } 7 }
上面代码的意思是当i>2时,就跳出整个for循环,也就是结束for循环,所以输出结果是:
i=0 i=1 i=2 i=3
for循环嵌套
先来看一个for循环嵌套的例子,嵌套的意思就是:for循环内部又一个for循环
1 for (int x = 0; x<2; x++) { 2 for (int y = 0; y<2; y++) { 3 printf("x=%d, y=%d \n", x, y); 4 } 5 }
输出结果是:
x=0, y=0 x=0, y=1 x=1, y=0 x=1, y=1
这个时候如果在for循环中加入一个break,那么这个break究竟是跳出里面还是外面的for循环呢?
1 for (int x = 0; x<2; x++) { 2 for (int y = 0; y<2; y++) { 3 printf("x=%d, y=%d \n", x, y); 4 5 break; 6 } 7 }
注意第5行的break,这个break的作用是跳出里面的for循环,并非外面的for循环。所以输出结果是:
x=0, y=0 x=1, y=0
如果改变一下break的位置
1 for (int x = 0; x<2; x++) { 2 for (int y = 0; y<2; y++) { 3 printf("x=%d, y=%d \n", x, y); 4 } 5 6 break; 7 }
注意第6行的break,这个break的作用是跳出外面的for循环,并非里面的for循环。所以输出结果是:
x=0, y=0 x=0, y=1
规律已经很明显了:break只会影响它所在的那个for循环
2.continue
continue只能使用在循环结构中,它的作用是跳过这一次循环,直接进入下一次循环。
这里以for循环为例子,continue也可以用在while循环、do-while循环中。
1 for (int x = 0; x<10; x++) { 2 if (x%2==0) { 3 continue; 4 } 5 6 printf("x=%d \n", x); 7 }
注意第2行,当x%2==0,也就是当x是2的倍数时,就跳过这次循环,不执行第6行语句,直接进入下一次循环。输出结果:
x=1 x=3 x=5 x=7 x=9
跟break一样,continue只会影响它所在的那个for循环