C语言表达式与if语句-学习七

2022-02-28 21:20:43 浏览数 (1)

1、关系运算符和关系表达式

关系运算符

运算符

描述

实例 (A=10, B=20)

==

检查两个操作数的值是否相等,如果相等则条件为真。

(A == B) 为假。

!=

检查两个操作数的值是否相等,如果不相等则条件为真。

(A != B) 为真。

>

检查左操作数的值是否大于右操作数的值,如果是则条件为真。

(A > B) 为假。

<

检查左操作数的值是否小于右操作数的值,如果是则条件为真。

(A < B) 为真。

>=

检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。

(A >= B) 为假。

<=

检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。

(A <= B) 为真。

  • 表达式:
    • 算术表达式
    • 关系表达式
    • 逻辑表达式
    • 赋值表达式
    • 字符表达式
算术运算符、关系运算符、赋值运算符优先级比较

关系表达式

  • 左结合性
  • 定义:用关系运算符将两个表达式连接起来的式子。
  • 一般形式: 表达式 关系运算符 表达式

关系表达式的值是一个逻辑值,即“真”或“假”。1代表真,0代表假一个非零的数值认作为“真”

逻辑运算符和逻辑表达式

  • 3种逻辑运算符:
    • && 逻辑与
    • || 逻辑或
    • ! 逻辑非
  • 说明:
    • &&||是双元/目运算符,它要求有两个运算
    • ! 是一元/单目运算符,它要求有一个运算量。
  • 例如:
    • (a>b) || (x>y)
    • !(a>b)
优先级比较

逻辑表达式

  • 一般形式: 表达式 逻辑运算符 表达式
  • 运算规则:
    • 只有在必须执行下一个表达式才能求解时,才求解该表达式(即并不是所有的表达式都被求解)。
    • 对于逻辑运算,如果第一个操作数被判定为“”,系统不再判定或求解第二操作数
    • 对于逻辑运算,如果第一个操作数被判定为“”,系统不再判定或求解第二操作数
例子

计算下列的结果

代码语言:javascript复制
#include <stdio.h>

void main() {
    char c = 'k'; 
    int i = 1, j = 2, k = 3;
    float x = 3e 5, y = 0.85;
    printf("%d,%dn", !x * !y, !!!x);
    printf("%d,%dn", x ||j && j - 3, i < j && x < y);
    printf("%d,%dn",i==5 && c &&(j=8),x y||i j k);
}

判断用year表示的某一年是否是闰年。

代码语言:javascript复制
#include <stdio.h>

void main() {

    int year;
    scanf_s("%d", &year);

    printf("%dn", year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
}

if语句

  • if语句的作用:用来判定所给定的条件是否满足,并根据判定的结果(真或假)决定执行给出的两种操作之一。
  • if语句有三种基本形式。
    • if
    • if else
    • if else if

前二种形式的if语句一般都用于两个分支的情况。 有多个分支选择时,可采用if-else-if语句。

例子

输入两个数a,b,判断并输出其中较大的数。

  • if
代码语言:javascript复制
#include <stdio.h>

void main() {
    int a, b, max;
    scanf_s("%d %d", &a, &b);
        max = a;
    if (max < b) max = b;

    printf("max=%dn", max);
}
  • if else
代码语言:javascript复制
#include <stdio.h>

void main() {
    int a, b, max;
    scanf_s("%d %d", &a, &b);

    if (a > b)
        max = a;
    else
        max = b;

    printf("max=%dn", max);
}

例5:已知百分制成绩mark,显示对应的五级制成绩。 90—100优秀 80—89良好 70—79中等 60—69及格 <60不及格

  • if else if
代码语言:javascript复制
#include <stdio.h>

void main() {
        double score;
        printf("请输入分数:n");
        scanf_s("%lf", &score);
        if (score < 60) 
            printf("(不及格)n"); 
        else if (score < 70) 
            printf("(及格)n"); 
        else if (score < 80) 
            printf("(中等)n"); 
        else if (score < 90)
            printf("(良好)n");
        else if(score<=100) 
            printf("(优秀)n");
        else printf("(输入错误n");

}
if语句中应注意的问题
  • 该表达式通常是逻辑表达式或关系表达式, if(x>b)
  • 但也可以是其它表达式,如赋值表达式等,甚至也可以是—个变量。
  • 例如:
    • if(a=5)
    • if(b) 语句;只要表达式的值为非0,即为“真”。
代码语言:javascript复制
if(a=b)   //把 b 的值赋给 a,如果非0则输出该值

    printf ("%d",a);
else
    printf("a=0");
  • 在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号if (a>b) max=a;
  • 在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。但要注意的是在}之后不能再加分号
  • 例如:
代码语言:javascript复制
if (a>b) 
    {a  ; b  ;}
else 
    {a--; b--;}
例子

输入两个实数,按代数值由小到大的顺序输出这两个数。

解题思路:

  • 只需要做一次比较,然后进行一次交换即可
  • 用if语句实现条件判断
  • 关键是怎样实现两个变量值的互换
代码语言:javascript复制
#include <stdio.h>

void main() {
    float a, b,c;
    scanf_s("%f %f", &a, &b);

    if (a < b)
    {
        c = a;
        a = b;
        b = c;
        printf("%.2f %.2fn", a, b);
    }
    else
        printf("%.2f %.2fn", a, b);
}

输入3个数a,b,c,要求按由小到大的顺序输出。

解题思路:

  • if a>b, a和b对换 (a是a、b中的小者)
  • if a>c,a和c对换 (a是三者中最小者)
  • if b>c,b和c对换 (b是三者中次小者)
代码语言:javascript复制
#include <stdio.h>

void main() {
    float a, b, c, d;
    scanf_s("%f %f %f", &a, &b, &c);

    if (a > b) 
        {
        d = a; a = b; b = d;
    }
    if (a > c)
    {
        d = a; a = c; c = d;
    }
    if ( b> c)
    {
        d = b; b = c; c = d;
    }
    printf("%.2f %.2f %.2fn", a, b, c);        
}
if语句的嵌套
  • 在if语句中又包含一个或多个if语句,称为if语句的嵌套。
  • else总是与它前面最近没有配对的if配对
例子

比较两个数的大小关系

代码语言:javascript复制
#include <stdio.h>

void main() {
    float a, b;
    scanf_s("%f %f", &a, &b);

    if (a != b)
        if (a > b)
            printf("%.2f > %.2fn", a, b);
        else
            printf("%.2f < %.2fn", a, b);
    else 
    printf("%.2f = %.2fn", a, b);        
}

条件运算符

条件运算符: ? :

  • 格式: 表达式1 ? 表达式2 : 表达式3 (如果表达式1为“真”,返回表达式2,否则返回表达式3)。
  • 使用场合:若在if语句中,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值时,可以用一个条件运算符来处理。
  • 例如:
代码语言:javascript复制
if(a>b)
    max=a;
else
    max=b; 
// 相当于
max = (a>b)? a : b;
例子

输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到结果。

代码语言:javascript复制
#include <stdio.h>

void main() {
    char x,y;
    scanf_s("%c",&x);

    y = (x >= 'A'&& x <= 'Z') ? (x   32) : x;

    printf("%cn", y);
}
max

0 人点赞