前言

这部分东西不多,相对简单,快速上手,通俗易懂。

关系运算符和关系表达式

关系运算符

在程序中经常需要比较两个量的大小关系,以决定程序的下一步进行的工作。比较两个量的运算符称为关系运算符。通俗来讲,也就是比较运算,即将两个操作数比较并产生运算结构0(假)或1(真)。C语言提供的关系运算符有6种,例如:

运算符功能
<小于
<=小于或等于
>大于
>=大于或等于
==等于
!=不等于

说明:

  1. C语言中的关系运算符与数学中的(>,>=等)不一样。
  2. 以上6种关系运算符中,前4种(<,<=,>,>=)的优先级相同,后两种(==,!=)的优先级相同,前4种优先级高于后两种。
  3. 关系运算符的结合性为从左到右。

关系表达式

关系表达式是指用关系运算符将两个数(或者表达式)连接起来进行关系运算的式子,代码示例:

3<2;
a>b;
a<a+b;

关系表达式的结果是逻辑值,即真值或者假值,其中1为真,0为假,真值表示关系表达式表示关系成立,反之则不成立

优先级和结合性

关系运算符的结合性都是自左向右的。

注意运算符的优先级

逻辑运算符和逻辑表达式

C语言中,对参与逻辑运算的所以数值,都转化为逻辑“真”或“假”后才参与逻辑运算,如果参与逻辑运算的数值为0,则把它作为逻辑“假”处理,而所有非0的数值都作为逻辑“真”处理

逻辑运算符

C语言中有3种逻辑运算符:逻辑与(和)(&&),逻辑或(||),逻辑非(!),详细如下表:

运算符功能
&&与(和),双目运算符,左右两数为“真”则为真,反之为“假”
||或,双目运算符,左右都为“假”则为假,反之为“真”
非,单目运算符,对操作符取反

逻辑表达式

逻辑表达式是由逻辑运算符将逻辑量连接起来构成的式子。对象可以是任何类型的数据,但运算结果一定是整型值,并且只有两个值:1和0,分别表示真和假

说明:

  1. 对于a&&b,只有a的值为真时,才需要判断b的值。
  2. 对于a||b,只有a的值为真时,才不需要判断b的值。
  3. 对于$2<a<3$这类表达式,C语言中的实现为(a>2)&&(a<3)

优先级和结合性

三种运算符的优先级由高到低依次为:!&&||

逻辑运算符中的&&||的结合性为从左向右,!的结合性为从右向左。

【实例】逻辑运算符的应用

【代码示例】

#include <stdio.h>
int main(){
    
    int a, b;
    a = 12;
    b = 0;
    printf("a与b的结果为 %d\n", a && b);
    printf("a与b的结果为 %d\n", a || b);
    printf("b取反的结果为 %d", !b);

    return 0;
}

【输出结果】image-20220107202757950

if语句

if语句是条件选择语句,它先对给定条件进行判断,根据判定的结果(真或假)决定要执行的语句。if语句有if分支,if-else分支和嵌套的if语句3种形式

if分支

if分支是最简单的条件语句,if分支语句的一般形式如下:

if(表达式)
    语句1;

其中,表达式一般为逻辑语句或者关系表达式。语句1可以是一条简单的居于或者多条语句,当为多条语句时,需要用大括号{},将这些语句括起来,构成复合语句
if分支语句的执行过程是:当表达式值为真(非0)时,会执行语句1,反之则不执行。

【实例】从键盘输入一个整数,如果输入的是2的倍数,则显示“成功”,反之则不显示
【代码示例】

#include <stdio.h>
int main(){

    int a;
    scanf("%d", &a);    //获取输入
    if (a%2==0)     //取余判断
        printf("成功");     //输出
    return 0;
}

【输出结果】image-20220107212112534

if-else分支

if分支语句只允许在条件为真时指定要执行的语句,而if-else分支还可以在条件为假时指定要执行的语句。if-else分支语句的一般形式如下:

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

还是上面2的整数的例子,稍微改进一下,如果不是2的倍数,则输出“不是2的倍数”。代码示例:

#include <stdio.h>
int main(){

    int a;
    scanf("%d", &a);    //获取输入
    if (a%2==0)     //取余判断
        printf("%d是2的倍数",a);
    else
        printf("%d不是2的倍数", a);
    return 0;
}

输出结果:image-20220107212335429

【实例】输入三个值,如果三个值均大于0且符合任意两个之和大于第三个,则计算以这三个值为边的三角形面的结果。
【代码示例】

#include <stdio.h>
#include <math.h>
int main(){

    int a, b, c;    //定义三边长
    double s;   //定义面积
    scanf("%d %d %d", &a, &b, &c);
    if (a+b>c && a+c>b && b+c>a && a>0 && b>0 && c>0)
    {
        s = sqrt(( a + b + c )*(a + b - c)*(a + c - b)*(b + c - a))/4;
        printf("三角形的面积为%f", s);
    }else{
        printf("出错啦");
    }
    
    return 0;
}

【输出结果】image-20220107214623210

已知三边,求三角形面积参考 海伦公式

嵌套的if语句

简单的if语句只能通过给定条件的判断执行两种操作,而不能多种操作中选择一个,此时嵌套的if语句解决了这个问题。if语句中又包含一个或者多个if语句时,称为if语句的嵌套
常用的if语句嵌套有以下两种形式:

  • 形式一,代码示例:

    if(表达式)
        if(表达式)
            语句1;
    	else
            语句2;
    else
        if(表达式)
            语句3;
    	else
            语句4;
    
  • 形式二,代码示例:

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

    【实例】将学生成绩按分数输出 A B C D E 等级
    【补充】成绩对照关系表

    百分制等级
    90$\leq$score$\leq$100A
    80$\leq$score$<$90B
    70$\leq$score$<$80C
    60$\leq$score$<$70D
    0$\leq$score$<$60E

    【代码示例】

    #include <stdio.h>
    #include <math.h>
    int main(){
        int score;  //定义分数
        printf("请输入分数:");
        scanf("%d", &score);    //获取输入的分数
        if (score>100 || score <0)
        {
            printf("输入的成绩不合法");
        }else if (score <=100 && score>=90)
        {
            printf("该同学的成绩等级为 A");
        }else if (score <90 && score >=80){
            printf("该同学的成绩等级为 B");
        }else if (score <80 && score >=70)
        {
            printf("该同学的成绩等级为 C");
        }else if (score <70 && score >=60)
        {
            printf("该同学的成绩等级为 D");
        }else{
            printf("该同学的成绩等级为 E");
        }
        return 0;
    }
    

    【输出结果】image-20220107221041613

switch语句

对于常规的两种选择可以使用if-else语句,那么对于两种及以上的多种选择则需要switch语句的帮助了。当然你也可以通过使用嵌套的if-else语句来实现多种选择。

switch语句的一般格式如下:

switch (表达式)
{
case 常量表达式1:
    语句系列1;
    break;
case 常量表达式2:
    语句系列2;
    break;
//default可以为空    
default:
    break;
}

【实例】在键盘上输入 1~7 实现输出对应的星期几,如果输入的值不是 1~7,则输出非法数据。

【代码示例】

#include <stdio.h>
int main(){
    int a;
    printf("请输入数值:");
    scanf("%d", &a);
    switch (a)
    {
    case 1:
        printf("星期一");
        break;
    case 2:
        printf("星期二");
        break;
    case 3:
        printf("星期三");
        break;
    case 4:
        printf("星期四");
        break;
    case 5:
        printf("星期五");
        break;
    case 6:
        printf("星期六");
        break;
    case 7:
        printf("星期天");
        break;
    
    default:
        printf("输入的数据非法");
        break;
    }
}

【说明】

  1. break表示跳出当前循环。
  2. case的循序是任意的,也就是说default可以放到最前面或者任意一个位置。

条件运算符和条件表达式

条件运算符很特殊,它是C语言中唯一一个三目运算符,也就是说,它要求要有三个运算对象。条件表达式的一般形式如下:

表达式1 ? 表达式2 : 表达式3 ;

条件表达式的执行过程:如果表达式1的值为真,则执行表达式2,反之则执行表达式3。例如:

c=a>b?a:b;

若a大于b,则c的值由a赋值,反之,则c的值由b赋值。

比较两个数最大值可以使用该方法

说明:

  1. 条件运算符的优先级低于算术运算符,关系运算符以及逻辑运算符,仅高于赋值运算符和逗号运算符

  2. 条件运算符的结合性为从左到右,当有条件运算符镶嵌时,按照从右到左的顺序依次运算。

  3. 条件表达式中三个表达式的类型可以不同,其中表达式1表示条件,只能是0或者非0的结果;当表达式2和表达式3的类型不同时,条件表达式值的类型为两者中较高的类型(可以参考自动类型转换阶级)。例如:

    int a=1,b=2;
    a<b?3:4.0;
    

    该例子的值为 3.0 而不是整型数 3 。

应用实例

【实例】经典问题,对于输入的年份,计算该年份是否为闰年。

【代码示例】

#include <stdio.h>
int main(){

    int year;
    printf("请输入年份:");
    scanf("%d", &year);
    if (year%4==0)
    {
        if (year%100 !=0)
        {
            printf("%d 为闰年", year);
        }else{
            if (year%400==0)
            {
                printf("%d 为闰年", year);
            }else{
                printf("%d 不是闰年", year);
            }
        }
    }else{
        printf("%d 不是闰年", year);
    }

    return 0;
}

【说明】闰年判断规则:

  1. 能被4整除且不能被100整除。
  2. 世纪年能被400整除的。

Q.E.D.


赤脚踩在明媚的沙滩上,我看见了你闪耀的双眼,柔软的头发,我便心有所属