C语言之分支循环语句

        前言

        C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构。

分支结构

  • if
  • switch

一、if语句

语法

if ( 表达式 ) 语句

表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏;

在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果是 不是0,则语句执⾏。

执行流程

练习

1.输入一个整数判断奇数

#include <stdio.h>

 int main()
 {
     int num = 0;
     scanf("%d", &num);
     if(num % 2 == 1)
         printf("%d 是奇数\n", num);
    return 0;
 }

else 语句

如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表示呢?

这⾥就需要 if...else... 语句了

if ( 表达式 )

        语句 1;

else

        语句 2;

练习

1.输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数

#include <stdio.h>

 int main()
 {
     int num = 0;
     scanf("%d", &num);
     if(num % 2 == 1)
         printf("%d 是奇数\n", num);
     else

     return 0;
 }

2.输⼊⼀个年龄,>=18岁就输出:成年,否则就输出:未成年嵌套if

 #include <stdio.h>

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

     return 0;
 }

嵌套if

        在if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断

练习

       1. 要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数

 #include <stdio.h>
 int main()
 {
     int num = 0;
     scanf("%d", &num);
     if(num == 0)
         printf("输⼊的数字是0\n");
     else if(num > 0)
         printf("输⼊的数字是正数\n");
     else
        printf("输⼊的数字是负数\n");
    
    return 0;
}

2.输⼊⼀个⼈的年龄

如果年龄 <18 岁,打印 " 少年 "

如果年龄在 18 岁⾄ 44 岁打印 " ⻘年 "

如果年龄在 45 岁⾄ 59 岁打印 " 中⽼年 "

如果年龄在 60 岁⾄ 89 岁打印 " ⽼年 "

如果 90 岁以上打印 " ⽼寿星 "

#include <stdio.h>
 int main()
 {
    int age = 0;
    scanf("%d", &age);
    if(age<18)
    {
        printf("少年\n");
    }
    else 
    {
        if(age<=44)
        {
            printf("⻘年\n");
        }
        else 
        {
            if(age<=59)
            {
                printf("中⽼年\n");
            }
            else 
            {
                if(age<=90)
                    printf("⽼年\n");
                else
                    printf("⽼寿星\n");
            }
        }
    }
    return 0;
 }

二、switch语句

        switch 语句是⼀种特殊形式的 的 el if...else 结构,⽤于判断条件有多个结果的情况。它把多重 se if 改成更易⽤、可读性更好的形式

语法

switch (expression)

{

        case value1: statement

        case value2: statement

        default: statement

}

上⾯代码中,根据表达式expression不同的值,执⾏相应的case分支。 如果找不到对应的值就执⾏ default 分⽀。

注: switch expression 不同的值,执⾏相应的 itch 后的 expression 必须是整型表达式;

         case 后的值,必须是整形常量表达式;

练习

输⼊任意⼀个整数值,计算除3之后的余数

#include <stdio.h>
 int main()
 {
     int n = 0;
     scanf("%d", &n);
     switch(n%3)
     {
         case 0:
             printf("整除,余数为0\n");  
             break;
         case 1:
             printf("余数是1\n");       
             break;
         case 2:
             printf("余数是2\n");       
             break;
     }
     return 0;
}

上述的代码中,我们要注意的点有:

1. case 和后边的数字之间必须有空格

2. 每⼀个 case 语句中的代码执⾏完成后,需要加break ,才能跳出这个switch语句。


循环结构

  • while
  • for
  • do while

一、while

执行流程

        首先上来就是执行判断表达式,表达式值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下一次判断。

语法

        while()

                语句;

练习

1.在屏幕上打印1~10的值

#include <stdio.h>

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

2.输⼊⼀个正的整数,逆序打印这个整数的每⼀位

例如: 输⼊:1234,输出:4321 输⼊:521,输出:125

#include <stdio.h>

int main()
{
    int a = 0;
    scanf("%d",&a);
    while(a)
    {
        printf("%d",a % 10);
        a = a / 10;
    }

    return 0;
}


二、for循环

执行流程

语法

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

        语句;

表达式1 用于循环变量的初始化

表达式2 用于循环结束条件的判断

表达式3 用于循环变量的调整

                                                        for 循环是三种循环中使用最多的

练习

1.在屏幕上打印1~10的值

#include <stdio.h>

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

2.计算1~100之间的3倍数字之和

#include <stdio.h>

int main(){
    int i = 0;
    int sum = 0;
    for(i = 1; i <= 100; i++)
    {
        sum += i;
    }
    printf("1~100数字之和=%d",sum);
    return 0;
}


三、do-while循环

执行流程

语法

do

        语句;

while(表达式);

while和for这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环;

而do while循环则是先直接进入循环体,执行循环语句,然后再执行while后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。

                        在循环语句中do while语句的使用最少

练习

1.在屏幕上打印1~10的值

#include <stdio.h>

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


goto语句

C语⾔提供了⼀种⾮常特别的语法,就是goto 语句和跳转标号, goto 语句可以实现在同⼀个函数 内跳转到设置好的标号处。

练习

 #include <stdio.h>
 int main()
 {
         printf("hehe\n");
    goto next:
         printf("haha\n");
    next:
        printf("跳过了haha的打印\n");
    return 0;
}

goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建 议是能不⽤尽量不去使⽤;但是 使⽤ goto 就⾮常的⽅便了。 1 2 3 4 5 6 7 8 9 10 goto 语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳出


关系操作符:

C语言用于比较的表达式,称为“关系表达式”,里面使用的运算符就称为“关系运算符”,主要有下面6个

  • > 大于运算符
  • < 小于运算符
  • >= 大于等于运算符
  • <= 小于等于运算符
  • == 相等运算符
  • != 不相等运算符


条件操作符:         

条件操作符也叫三目操作符,需要接受三个操作数的

语法     

exp1 ? exp2 : exp3

条件操作符的计算逻辑是:如果exp1为真,exp2计算,计算的结果是整个表达式的结果;如果exp1为假,exp3计算,计算的结果是整个表达式的结果。 


逻辑操作符:&&,||,! 

逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有三个运算符

  • !: 逻辑取反运算符(改变单个表达式的真假)
  • &&: 与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
  • ||: 或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)

                                         注:C语言中,非0表示真,0表示假


逻辑取反运算符 

a

!a

非0

0

0

1

练习

有一个变量叫flag,如果flag为假,要做一个什么事情


与运算符: 

a

b

a&&b

非0

非0

1

非0

0

0

0

非0

0

0

0

0

&&就是与运算符,也是并且的意思,&&是一个双目操作符,使用的方式是a&&b,&&两边的表达式都是真的时候,整个表达式才为真,只要有一个是假,则整个表达式为假 

练习 

1.3月到5月,是春天,如何使用代码 


或运算符: 

a

b

a||b

非0

非0

1

非0

0

1

0

非0

1

0

0

0

 ||就是或运算符,也就是或者的意思,||也是一个双目操作符,使用的方式是a||b,||两边的表达式只要有一个是真,整个表达式就是真,两边的表达式都为假的时候,才为假

 练习

 1.一年中12月份或者1月或者2月是冬天,怎么代码体现


短路:

C语言逻辑运算符还有一个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。

如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路

如果mounth==12,则不用再判断mounth是否等于1或者2,整个表达式的结果也是1

所以,||操作符的左操作数的结果不为0时,就无需执行右操作数

表达式中&&的左操作数是mounth >= 3,右操作数是mounth <=5,当左操作数mounth>=3的结果是0的时候,即使不判断mounth <=5,整个表达式的结果也是0

所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执行

想这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进行计算的运算称为短路求值 

练习 

1.a=1,b=3,c=3d=5

        b=2

2.a=1,b=2,c=3,d=4

b=3


break和continue语句: 

在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中提供break和continue两个关键字,就是应该到循环中的 

  • break的作用是用于永久的终止循环,只要break被执行,直接就会跳出循环,继续往后执行。
  • continue的作用是跳过本次循环continue后边的代码,在for循环和while循环中有所差异的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值