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

一、关系运算

若干表达式用关系运算符连接而成,就构成关系表达式。 关系表达式中,表达式成立,其值为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输入错误,请重新输入。");
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java架构沉思录

从节省Redis内存空间说开去

上周部门会议上讨论的一个议题是如何节省Redis内存空间,其中有个小伙伴提到可以从压缩字符串入手,我觉得这是一个可以尝试的思路。因为有时候我们存在Redis中的...

1022
来自专栏阿凯的Excel

Vlookup函数的大表哥介绍

谈到匹配函数,杠把子肯定是Vlookup函数,由于Vlookup前期的文章已经分享过了,今天分享Vlookup的大表哥,谁是他的大表哥呢?有人会说Hlookup...

3004
来自专栏take time, save time

可能是最通俗的Lempel-Ziv-Welch (LZW)无损压缩算法详述

  最近工作正好接触到这一块,试着自己总结了一下,给需要的人提供一点帮助。 一、概述      首先看看百度百科里的一句话介绍:“LZW就是通过建立一个字符串表...

1.1K7
来自专栏开发技术

排序之冒泡排序

  本篇博客是在伍迷兄的博客基础上进行的,其博客地址点击就可以进去,里面好博客很多,我的排序算法都来自于此;一些数据结构方面的概念我就不多阐述了,伍迷兄的博客中...

714
来自专栏苦逼的码农

递归与动态规划----基础篇2

ps:最近几天正在刷一些有关动态规划的题,我会把自己学习时的想法以及做题的想法记录下来。如果你觉得对你有帮助,欢迎关注,谢谢。

532
来自专栏xiaoxi666的专栏

状态机编程思想(1):括号内外字符串统计

我们拿到这个问题时,第一感觉往往是顺序遍历字符串,并检测左右相邻字符是否满足边界条件,从而进行分支处理。但是这样做有以下棘手之处:

723
来自专栏C语言及其他语言

【优秀题解】问题 1442:打印十字图

我的思路就是一步一步的分析,首先我想到的就是分配一块内存来储存图案,通过观察知道图案是一个方正,于是想到用字符矩阵。然后分布完成,首先就是把方块字符中...

371
来自专栏PHP在线

关于php运算符优先级的几道题

今天正好群里有人在问一道php运算符优先级的问题,正好以前也遇到过类似的问题,这里整理一下吧,方便大家理解 以防掉坑:) 先来道简单的: $a = 3; if ...

3246
来自专栏tkokof 的技术,小趣及杂念

位运算实用指南

说明 : 想来这应该是初次接触移位操作符时一定会了解到的知识点,根据2进制的整数表示方法应该不难理解,原因细节不再赘述~

531
来自专栏Python、Flask、Django

爬虫--下载视频

992

扫码关注云+社区