C语言分支和循环语句

目录

分支语句(选择结构)

if语句

if语句举例

if  else 语句举例

if   else if else 举例

注意事项:如果if或else或else if后面的表达式语句,超过了一句,我们要用{}将属于if或属于else或属于else if的语句括起来

判断条件

else和if匹配问题

switch语句

switch嵌套

循环语句 

while()循环

break和continue

for循环

continue在for循环中的作用

break在for循环中的作用

for循环特点

for循环避雷

do...while()循环

continue在do...while中的作用

break在do...while中的作用


分支语句(选择结构)

生活中我们会遇到许多选择性的问题,如下图这样

在C语言中,该如何实现这种选择方式呢?

if语句

语法结构:方式1: if(表达式)  

                           语句;

                 方式2:

                  if(表达式)

                       语句1;

                          else

                          语句2; 

                           方式3:

                           if(表达式1)  

                                语句1;

                             else if(表达式2)

                                语句2;

                                 else  

                                      语句3;

if语句举例

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

输入一个年龄,如果年龄小于18则打印未成年

if  else 语句举例

#include <stdio.h>
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)
   {
        printf("未成年\n");
   }
    else
   {
        printf("成年\n");
   }
}

输入一个年龄,如果年龄小于18打印未成年,如果年龄大于18打印成年

if   else if else 举例

#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("老寿星\n");
   }
    
}

输入年龄,如果年龄<18,打印少年

                         年龄>=18并且年龄<30,打印青年

                              年龄>=30并且年龄<50,打印中年

                               年龄>=50并且年龄<80,打印老年

                           如果年龄不在以上数字段内,打印老寿星

注意事项:如果if或else或else if后面的表达式语句,超过了一句,我们要用{}将属于if或属于else或属于else if的语句括起来

判断条件

在C语言中,0为假,非0为真,当选择语句()里面的内容为真时,则会执行当前语句的表达式。

else和if匹配问题

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
    else
        printf("haha\n");
    return 0;
}

我们发现此时什么都没打印,这是因为 ,a=0,进入不了if(a==1)表达式,此时if(b==2)是属于if(a==1)的表达式,所以也无法执行if(b==2),这里的else是跟if(b==2)相匹配的,即else跟与它最近的且属于同一范围的if想匹配

正确的输入方式

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
   {
        if(b == 2)
       {
            printf("hehe\n");
       }
   }
    else
   {
         printf("haha\n");
   }       
    return 0;
}

switch语句

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

比如:从1-7中每输入一个数字就打印相对应的星期。若是用if语句得用7次,有点麻烦,此时我们可以用另一种语句叫switch语句

switch语句格式,switch(整型表达式)

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

从1-7中输入数字,打印所对应得星期

#include <stdio.h>
int main()
{
    int day = 0;
    switch(day)
   {
        case 1:
            printf("星期一\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的作用:如果输入1,打印星期一之后没有break,程序会自动往下进行,进入case2直到遇到break跳出程序或一直到switch语句结束。

 但如果输入的值超出了case语句后的范围怎么办?C语言中,当switch()中的值没有对应的case时候,我们可以用defalut语句。

default语句作用:当switch()中输入的值在case中没有相对应的满足条件时,即超出case的范围时,这种语句会统一进入default语句,default在switch语句中的位置,对输出的结果无影响,但一般人们默认把它放在switch{}的末尾。

注意事项:switch(整形表达式),()中的内容可以是整形表达式,也可以是char类型,因为字符型本身也是整形,这是因为它还是以ASCII码值进行保存的,case 整形常量表达式:    语句; case 后的表达式必须是常量,不能是变量,如果是变量则会报错。

switch嵌套

switch语句允许嵌套使用

#include <stdio.h>
int main()
{
    int n = 1;
        int m = 2;
    switch (n)
    {
    case 1:
        m++;
    case 2:
        n++;
    case 3:
        switch (n)
        {//switch允许嵌套使用
        case 1:
            n++;
        case 2:
            m++;
            n++;
            break;
        }
    case 4:
        m++;
        break;
    default:
        break;
    }
    printf("m = %d, n = %d\n", m, n);
    return 0;
}

循环语句 

while()循环

while(表达式)

       循环语句;

在屏幕上打印1-10

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

while(表达式)

循环语句; 

使用while语句时,首先会对表达式进行判断,若表达式为真,则执行循环语句,若表达式为假,则不进入while循环

break和continue

当我们在循环中使用break之后

原本是打印1-10,但是使用break之后只打印了1-4,这是因为进入while循环后有一个if(i==5),这里时判断i是否为5,若为5则执行break语句,当i==5时,执行了break语句,之后就再没打印数字,这是因为break语句的作用是跳出当前循环 

当我们在循环中使用continue之后

 

此时光标还在闪

 

这里当使用了continue之后,打印;1-4,未使用continue打印5,这是因为未使用continue时,有一个判断条件(i==5)判断i是否等于5,此时若i等于5,才进行打印,使用continue之后,程序会自动跳转到while()然后往下进行,当再一次遇到continue之后,仍然跳到while然后接着往下进行,所以此时的i永远等于5 

for循环

for(表达式1; 表达式2; 表达式3)

循环语句;

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

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

表达式3 表达式3为调整部分,用于循环条件的调整。

用for循环打印1-10

for循环流程图

for循环一开始执行表达式1.然后再对表达式2进行判断,若二为真执行循环语句,然后执行表达式三,知道表达式2为假停止循环

continue在for循环中的作用

在for语句中使用continue之后,当语句执行了continue后,程序会接着执行表达式3

break在for循环中的作用

在for语句中使用continue之后,当语句执行了break后,程序会直接跳出for循环

for循环特点

for循环可省略表达式1,2,3,但是当表达式2省略后,表达式2条件默认为恒成立,像下图一样会进入死循环。

for循环也可在语句1建立变量,并对其赋值,但一般不建议采用这种方式使用for循环

for循环避雷

#include <stdio.h>
    int main()
    {
        int i = 0;
        int k = 0;
        for (i = 0, k = 0; k = 0; i++, k++)
            k++;
        return 0;
    }

此程序不会进入for循环,因为表达式2为一个赋值语句而不是判断语句,将0赋给k,k此时为假,所以程序永远不会进入for循环 

do...while()循环

do

{

   循环语句;

}while(表达式);

do...while循环是先执行循环内的语句,然后再对条件进行判断,若条件为真,则继续执行循环,否则跳出循环 

continue在do...while中的作用

当i等于5时,执行continue语句,此时程序会一直执行if(i==5)和continue,所以此时光标一直在闪烁

break在do...while中的作用

此时4后面的光标停止闪烁,说明程序执行完毕,当i==5时,执行break,程序会直接跳出循环 

 

goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。 从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。 但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。 例如:一次跳出两层或多层循环。 多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

goto语句是语句在执行时,遇到goto语句之后,会自动跳转到goto语句所指示的地方,程序接着再往下执行,一下是goto语句的正确使用方法

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

举例

我们在电脑中找到命令提示符,并输入shutdown -s -t 60,含义为电脑在这条语句执行后开始60s倒计时关机,当再次输入shutdown -a时,会取消关机命令

但是goto语句具有一定的局限性,我们尽量少使用goto语句,用其他语句来代替goto语句,stdlib.h是system的头文件,strcmp的头文件是string.h

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

 

猜你喜欢

转载自blog.csdn.net/weixin_49449676/article/details/124139918