C语言 第四章 关系、逻辑运算与分支流程控制

简介: 一、关系运算 若干表达式用关系运算符连接而成,就构成关系表达式。 关系表达式中,表达式成立,其值为1(真);表达式不成立,其值为0(假)。其他表达式中,其结果如果是非0则为真,结果为0则为假。 关系运算符的优先级低于算术运算符,高于赋值运算符。

一、关系运算

若干表达式用关系运算符连接而成,就构成关系表达式。
关系表达式中,表达式成立,其值为1(真);表达式不成立,其值为0(假)。
其他表达式中,其结果如果是非0则为真,结果为0则为假。
关系运算符的优先级低于算术运算符,高于赋值运算符。

关系运算符号:> >= < <= !=

#include "stdio.h"
void main()
{
    //1、关系运算常用于比较
    //2、关系运算只有两种结果,1真,0假
    int a=1,b=2,c=3;
    printf("\n %d",a==b);
    printf("\n %d",a>=b);
    printf("\n %d",a!=b);
    printf("\n %d",1<=2);
    printf("\n %d",c<2);
    printf("\n %d",a+b>c);
}

运算结果:

 

 

二、逻辑运算

!(逻辑非)
运算规则:!1 = 0,!0 = 1 。优先级:高。
&&(逻辑与)
运算规则:1&&1=1,1&&0=0,0&&1=0,0&&0=0优先级:中
||(逻辑或)
运算规则:0||1=1,1||0=1,0||0=0,1||1=1。
优先级:低

注意:短路,当与运算时,第一个表达式为假时,不会再处理第2个表达式。

a&&b

当或运算时,第1个表达式为真是,不会再处理第2个表达式

a||b

注意:

另外使用时必须注意以下几点:
代数中的不等式0<x<5必须写成(x>0)&&(x<5)
C语言允许直接对数字或字符进行逻辑运算。
例如:!5,其结果为0。因为在C语言中,非0的值均认为是“真”,而5是个非零值,对非零值求反,即得零值。5&&‘c’,结果为1。因为字符'c'的ASCLL码为非零的整数,非零值与非零值作“与”运算,结果为真。

三、运算优先级

 

四、if语句

4.0、代码块

代码块表示一段代码,有{}符号界定,是一个新的作用域,可以有0-n行代码。

#include "stdio.h"
void main()
{
    //代码块1
    {
        int a=1;
        printf("\n %d",a);
    }
    
    //代码块2
    {
        int a=2;
        printf("\n %d",a);
    }
    
}

4.1、单if语句

#include "stdio.h"
void main()
{
    int a=1,b=2,c=3;
    if(a<=b&&c++<=c)
    {
        printf("\n yes %d",c);
    }
    printf("\n no %d",c);
}

 

if(条件表达式)
{
条件表达式为真时要执行的语句块(分支一语句);
}
其语义是:
如果表达式的值为真,则执行其后的分支一语句, 否则不执行该分支一语句。

 

4.2、if else

if(条件表达式)
{
条件表达式为真时要执行的语句块(分支一语句);
}
else
{
条件表达式为假时要执行的语句块(分支二语句);
}
其语义是:如果表达式的值为真,则执行分支一语句,否则执行分支二语句。

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
    int a,b,c,max;
    scanf("%d",&a);
    scanf("%d",&b);
    scanf("%d",&c);
    //如果条件成立
    if(a>b)
    {
        max=a;
    }
    else  //如果条件不成立
    {
        max=b;
    }
    
    if(c>max){  //有代码块的地方,总是会执行一句
        max=c;
    }
        
    printf("最大值是:%d",max);
}

 

4.3、多重if

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
    int a;
    scanf("%d",&a);
    
    if(a<0)
    {
        printf("负数");
    }
    else if(a==0)
    {
        printf("");
    }
    else if(a>=100)
    {
         printf("大于100的正数");
    }
    else
    {
        if(a>=1 && a<=50)
        {
            printf("1-50");
        }
        else
        {
            printf("51-99");
        }
    }
    
    printf("\n程序完成");
    
}

使用多重if完成下面的内容:
输入分数,根据分数输出等级.
0-59 不及格
59-70 良好
71-85 优秀
86-100 卓越

4.4、?号:号表达式

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
    int a,b,c;
    scanf("%d",&a);
    scanf("%d",&b);
    
    //a>10?printf("大于10"):printf("小于等于10");
    c=(a>b)?(a++):(++b); printf("%d",c); }

五、switch语句

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
    int a;
    scanf("%d",&a);
    
    switch(a)
    {
        case 1:
            printf("a");
            break;
        case 2:
            printf("b");
            break;
        case 3:
            printf("c");
            break;
        default:
            printf("错误:");
            if(a>3)
            {
               printf("数字太大。");
            }
            else
            {
               printf("数字太小");
            }
    }
    
}

 

练习:

使用switch完成菜单功能,用户按键(1-5)选择。
1、开始游戏
2、创建存档
3、加载存档
4、加载地图
5、退出
请选择(1-5):

当输入1-5以外的内容时输出错误

 

switch练习2:

输入年份与月份,输出天数。

年:2008

月:2

29

 

年:2009

月:3

31

 

 

 

答案:

#include "stdio.h"
void main()
{
    float mark;

    printf("请输入分数:");
    scanf("%f",&mark);

    if(mark<60)
    {
        printf("不及格");
    }
    else if(mark>=60 && mark<=70)
    {
        printf("良好");
    }
    else if(mark>=71 && mark<=85)
    {
        printf("优秀");
    }
    else
    {
        printf("卓越");
    }

}

 

#include "stdio.h"
void main()
{
    int menu;
    printf("\n**********************************");
    printf("\n1、开始游戏");
    printf("\n2、创建存档");
    printf("\n3、加载存档");
    printf("\n4、加载地图");
    printf("\n5、退出");
    printf("\n**********************************");
    printf("\n请选择(1-5):");
    scanf("%d",&menu);
    
    switch(menu)
    {
        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;
        default:
            printf("\a输入错误,请重新输入。");
    }
}

 

目录
相关文章
|
前端开发 C语言
C语言06-HelloWorld执行流程分析
C语言06-HelloWorld执行流程分析
C语言06-HelloWorld执行流程分析
|
C语言
初识C语言2——分支语句和循环语句
初识C语言2——分支语句和循环语句
407 5
|
7月前
|
C语言
C语言分支和循环语句
分支语句由`if-else`构成,用于根据不同条件执行相应代码。`else`会与最近未配对的`if`结合,多个条件可用`else if`实现。若连续使用`if`,各条件互不影响。嵌套结构可在`if`中再加入`if-else`。此外,`switch`语句适用于多分支选择(注意表达式不能为浮点数,`case`后需加`break`)。循环语句包括`for`、`while`和`do...while`,注意`do...while`末尾需加分号。循环中,`break`直接终止循环,`continue`跳过当前循环剩余部分,但`for`的语句三仍会执行,而`while`中位置影响效果。
167 0
|
C语言
C语言判断逻辑的高阶用法
在C语言中,高级的判断逻辑技巧能显著提升代码的可读性、灵活性和效率。本文介绍了六种常见方法:1) 函数指针,如回调机制;2) 逻辑运算符组合,实现复杂条件判断;3) 宏定义简化逻辑;4) 结构体与联合体组织复杂数据;5) 递归与分治法处理树形结构;6) 状态机管理状态转换。通过这些方法,可以更高效地管理和实现复杂的逻辑判断,使代码更加清晰易懂。
534 88
|
C语言
【C语言】逻辑操作符详解 - 《真假美猴王 ! 》
C语言中有三种主要的逻辑运算符:逻辑与(`&&`)、逻辑或(`||`)和逻辑非(`!`)。这些运算符用于执行布尔逻辑运算。
1172 7
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
621 2
|
C语言
【c语言】分支语句
C语言通过三种基本结构——顺序、选择和循环,构建复杂的程序逻辑。本文主要介绍了C语言的选择结构,即if-else语句及其变体,包括简单的if语句、if-else组合、else if多分支判断、嵌套if以及解决悬空else问题的方法。此外,还详细讲解了逻辑运算符和关系运算符的使用,以及如何利用条件操作符简化逻辑判断。最后,文章对比了if-else与switch语句在实现多分支逻辑时的应用,并解释了switch语句中的break和default关键字的作用。
210 8
|
Serverless C语言
C语言控制语句:分支、循环和转向
C语言控制语句:分支、循环和转向
|
算法 编译器 C语言
【C语言】实现猜数字游戏(分支语句与循环语句的运用)
【C语言】实现猜数字游戏(分支语句与循环语句的运用)
276 1