02. 分支语句与循环语句

91 阅读6分钟

分支语句与循环语句

分支语句

  1. if
  2. switch

循环语句

  1. while
  2. for
  3. do while

goto语句

1.c语言语句

在c语言中可以将语句分为以下五类:

  1. 表达式语句
  2. 函数调用语句
  3. 控制语句
  4. 复合语句
  5. 空语句

我们先来介绍控制语句。

控制语句用于控制程序的执行流程,用于实现程序的各种结构方式,它们一般都由特定的语句定义符组成,c语言有九种控制语句。

可以分为以下三大类别

  1. 条件判断语句:if语句、switch语句;
  2. 循环执行语句:do while语句、while语句、for语句。
  3. 转向语句:break语句、goto语句、continue语句、return语句。

2. 分支语句

2.1 if语句

if的语法结构如下:

if(表达式)
     语句1else(表达式)
     语句2if(表达式1)
   语句1else if(表达式2)
   语句2else
   语句3

实例代码演示:

#include <stdio.h>

int main()
{
   int age = 0;
   scanf("%d",&age);
   if(age < 18)
   {
        printf("未成年人\n");
   }
}

#include <stdio.h>

int main()
{
    int age = 0;
    scanf("%d",&age);
    if(age < 18)
    {
        printf("少年\n");
    }
    else if(age >= 18 && age <= 30)
    {
        printf("青年\n");
    }
    else if(age >= 30 && age <= 50 )
    {
        printf("中年\n");
    }
    else if(age >= 50 && age <= 80 )
    {
        printf("老年\n");
    }
    else
    {
        printf("old");
    }
}

在表达式中,如果结果为真,则语句执行。

在c语言中,0表示假,非0表示真。

注意:上次代码块中,else是和离它最近的if进行匹配。

if书写形式的对比

//代码1 
if (condition) 
{ 
    return x; 
} 
    return y; 
    
//代码2 
if(condition) 
{ 
    return x; 
} 
else 
{
  return y; 
 } 
 
 //代码3 
 int num = 1; 
 if(num == 5) 
 { 
    printf("hehe\n"); 
  }  
  
  //代码4 
  int num = 1; 
  if(5 == num) 
  { 
       printf("hehe\n"); 
  }
  

2.2 switch语句

switch语句也是一种分支语句,常常用于多分支情况。

比如:

  • 输入1,输出星期一
  • 输入2,输出星期二
  • 输入3,输出星期三
  • 输入4,输出星期四
  • 输入5,输出星期五
  • 输入6,输出星期六
  • 输入7,输出星期日
switch(整型表达式) 
{ 
    语句项; 
 }

那么其中的语句项。

case 整形常量表达式: 
     语句;

代码实例:

#include 

int main() 
{ 
    int day = 0; 
    switch(day)   
    { 
        case 1printf("星期一\n"); 
           break; 
        case 2: 
           printf("星期二\n"); 
           break; 
        case 3: 
           printf("星期三\n"); 
           break;     
        case 4: 
           printf("星期四\n"); 
           break;     
        case 5: 
           printf("星期五\n"); 
           break; 
        case 6: 
           printf("星期六\n"); 
           break; 
        case 7: 
           printf("星期天\n");     
           break;   
      } 
  return 0;
}

break语句的实际效果是将语句列表划分为不同的分支效果。

default语句

如果表达的值与所有的case标签的值都不匹配怎么办? 其实也没什么,结果就是所有的语句都被跳过而已。程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。 但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢? 你可以在语句列表中增加一条default子句,把下面的标签 default:写在任何一个 case 标签可以出现的位置。

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

3. 循环语句

  1. while
  2. for
  3. do while

代码实例:

#include <stdio.h>
//将数字由1到10进行打印。
int main()
{
    int i=0;
    while(i <= 10 )
    {
         printf("%d\n", i);
         i=i++;
    }
    return 0;
}

3.1 while语句中的break和continue

break语句

#include <stdio.h>

int main() 
{ 
   int i = 1; 
   while(i<=10) 
   { 
       if(i == 5) 
          break;
          printf("%d ", i); 
          i = i+1; 
    } 
    return 0;
 }

那么上面这串代码的输出结果是:

image.png

总结: break在while循环中的作用: 只要在循环中遇到break,就直接终止循环。 while中的break是用于永久终止循环的。

continue介绍

//continue 代码实例1 

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

那么输出结果是什么?

总结:continue在while循环中的作用是:

终止本次循环,也就是本次循环中continue后边的代码不会执行,而是会直接跳转到while语句的判断部分,进行下一次的循环的入口判断。

3.2 for循环

我们还是以实际的案例引入:

//使用for循环在屏幕上打印数字1到10
#include <stdio.h>
int main() 
{  
    int i = 0; //for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/) 
    for(i=1; i<=10; i++) 
    { 
        printf("%d ", i); 
    } 
    return 0;
 }
for(表示式1; 表达式2;表达式3)
    循环语句;

上述表达式:

表达式1为初始部分,用于初始化循环变量。

表达式2为条件判断部分,用于判断循环时进行终止。

表达式3为调整部分,用于循环条件的调整。(注意不要让循环陷入死循环。)

3.3 do while()循环

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

do while() 循环的特点:至少执行一次。

代码实例:

#include 
int main() 
{  
    int i = 10;
    do 
    {
       printf("%d\n", i);
    }while(i<10);
    return 0;
 }

3.4 练习

  1. 计算 n的阶乘。
  2. 计算 1!+2!+3!+……+10!
  3. 在一个有序数组中查找具体的某个数字n。(讲解二分查找)
  4. 编写代码,演示多个字符从两端移动,向中间汇聚。
  5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。)

4. goto语句

C语言中提供了可以随意滥用的goto语句和标记跳转的标号。

从理论上goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。

例如:一次跳出两层或多层循环。 多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

以下为一个关机程序,用到goto语句:

#include <stdio.h>
int main() 
{ 
     char input[10] = {0}; 
     system("shutdown -s -t 60"); 
   again: 
     printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>"); 
     scanf("%s", input);
     if(0 == strcmp(input, "我是猪"))   
     { 
        system("shutdown -a");
     } 
     else   
     { 
        goto again;   
     } 
     return 0; 
}