Bootstrap

C语言分支和循环语句

分支语句(选择结构)

if

语法结构:
if(表达式)
   语句;
if(表达式)
   语句1else
   语句2//多分支
 if(表达式1)
   语句1else if(表达式2)
   语句2else
   语句3

如果表达式结果为真,则语句执行。在C语言中,0为假,非0为真。

悬空else
#include <stdio.h>
int main()
{
  int a=0;
  int b=2;
  if(a==1)
    if(b==2)
     printf("2");
  else printf("0");
  return 0;
}//代码中的else即为悬空else,虽然从代码格式上看应与外if匹配,但else匹配规则是就近原则,与相邻较近的if进行匹配

switch语句

switch语句也是一种分支语句

switch(整型表达式)
{
    语句项;//是一些case语句
    case 整型常量表达式:
      语句;
}

在switch中的break;
在switch语句中,没法直接实现分支,搭配break使用才能实现真正的分支。若没有break,代码将会依次执行所有switch中的语句。

break语句的实际效果是把语句列表划分成不同的部分

default子句
写在任何一个case标签可以出现的位置。
当switch表达式的值与所有case标签都不匹配时,default子句后的语句就会执行。
所以每一个switch语句中只能出现一条default子句。但是它可以出现在语句列表中的任何位置,而且语句流会像贯穿一个case标签一样贯穿default子句。

循环语句

while循环

语句结构
while(表达式)
循环语句;

//while语句中的break和continue
#include <stdio.h>
int main(){
  int i=1;
  while(i<=10){
   if(i==5)
     break;
     printf("%d",i);
     i++;
 }
return 0;
}//输出为1 2 3 4

break在while中的作用:
退出当前循环,并永久终止循环,若多层循环嵌套,只会跳出当前这一层循环

#include <stdio.h>
int main(){
  int i=1;
  while(i<=10){
   if(i==5)
     continue;
     printf("%d",i);
     i++;
 }
return 0;
}//输出为1 2 3 4 6 7 8 9 10

continue在while循环中的作用
coutinue是用于终止当前循环中的本次循环,也就是本次循环中Continue之后的代码不会执行,而是直接跳转到while的判断语句,进行下次循环。

for循环

语句结构
for(表达式1;表达式2;表达式3)
循环语句;

表达式1 表达式1为初始化部分,用于初始化循环变量的。 表达式2 表达式2为条件判断部分,用于判断循环时候终止。 表达式3 表达式3为调整部分,用于循环条件的调整。

//break在for循环中
#include <stdio.h>
int main()
{
 int i = 0;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 break;
 printf("%d ",i);
 }
 return 0; }


//continue在for循环中
#include <stdio.h>
int main()
{
 int i = 0;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 continue;
 printf("%d ",i);
 }
 return 0; }

注意:
1.不可在for循环体内修改循环变量,防止for循环失去控制。
2.建议for语句的循环控制变量的取值采取“前闭后开区间”写法。

for循环变种


#include <stdio.h>
int main()
{
 //变种1
 for(;;)
 {
 printf("hehe\n");
 }
 //变种2
 int x, y;
    for (x = 0, y = 0; x<2 && y<5; ++x, y++)
   {
        printf("hehe\n");
   }
 return 0; }

do…while()循环

语法结构
do
循环语句;
while(表达式);

特点:循环至少执行一次,使用场景有限,大部分都可以用for循环替代。
do…while循环中的break和coutinue

//break
#include <stido.h>
int main()
{
 do
 {
        if(5 == i)
            break;
 printf("%d\n", i);
 }while(i<10);
 return 0;
 }
 
//continue

#include <stdio.h>
int main()
{
 int i = 10;
 do
 {
        if(5 == i)
            continue;
 printf("%d\n", i);
 }while(i<10);
 return 0; }

goto语句

C语言中提供了可以使用的goto语句和标记跳转语句,与汇编语言中的跳转语句有类似之处。
goto语句一般用于多层循环嵌套中,break无法直接从最内层循环退出到指定某上层循环中。因此需要goto进行跳转。


for(...)
    for(...)
   {
        for(...)
       {
            if(disaster)
                goto error;
       }
   }
    …
error:
 if(disaster)
         // 处理错误情况
;