问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C语言基础:分支结构(条件判断 & 用if语句实现分支结构)

创作时间:
作者:
@小白创作中心

C语言基础:分支结构(条件判断 & 用if语句实现分支结构)

引用
CSDN
1.
https://m.blog.csdn.net/2402_88621999/article/details/145702356

本文将详细介绍C语言中的分支结构,包括条件判断、关系运算、逻辑运算以及使用if语句实现的单分支、双分支和多分支结构。通过详细的理论解释和多个代码案例,帮助读者理解如何在C语言中实现分支结构。

分支结构

在程序设计中,我们经常会遇到需要根据某个条件的结果来选择下一步操作的情况。例如,下面的函数计算:

$$
y = \begin{cases}
1/x & \text{当 } x \neq 0 \
10000 & \text{当 } x = 0
\end{cases}
$$

这种算法上的分支结构在C语言中主要通过if语句来实现。

条件判断

条件判断是根据某个条件成立与否,决定是否执行指定的任务(操作)。条件判断的结果是逻辑值(布尔类型值),在程序中用真(1)和假(0)来表示。

关系运算及其表达式

关系运算符及其优先级次序

C语言中提供了6种关系运算符:

在C语言中,用1(非0)表示关系表达式的值为真(条件成立),0表示关系表达式的值为假(条件不成立)。

逻辑运算及其表达式

逻辑运算符及其优先级

C语言中提供了3种逻辑运算符:

  • 逻辑非(!)
  • 逻辑与(&&)
  • 逻辑或(||)

逻辑表达式中各种运算符的优先级顺序如下:

  1. 逻辑非(!)
  2. 算术运算符(+、-、*、/、%)
  3. 关系运算符(>、<、>=、<=、==、!=)
  4. 逻辑与(&&)
  5. 逻辑或(||)
  6. 赋值运算符(=、+=、-=、/=、%=)

用if语句实现分支结构

单分支:if

语法:

// 语法1:可以舍弃{}
if (条件表达式)
    单语句;

// 语法2:必须保留{}
if(条件表达式)
{
    单语句或者复合语句;
}

功能:

  • 若表达式值为真(非0),则执行表达式后面的语句,执行完该语句后继续执行if语句后的代码。
  • 若表达式值为假(0),则不执行表达式后面的语句而直接执行if语句后面的语句。

案例

计算并输出下列分段函数的值:

$$
y = \begin{cases}
-2 & \text{当 } x < 0 \
2 & \text{当 } x \geq 0
\end{cases}
$$

代码:

#include <stdio.h>

int main(int argc, char *argv[])
{
    double x, y = -2;
    printf("请输入一个数,作为x的值:\n");
    scanf("%lf", &x);
    
    if (x >= 0) y = 2;
    
    printf("x=%lf,y=%lf\n", x, y);
    
    return 0;
}

双分支:if...else

语法:

// 语法1:舍弃{}
if(条件表达式)
    单语句1;
else
    单语句2;
    
// 语法2:保留{}
if(条件表达式)
{
    单语句1或者复合语句1;
}
else
{
    单语句2或者复合语句2;
}

功能:

  • 若表达式的值为1,则执行语句1;否则执行语句2。
  • 不管条件表达式成不成立都要执行一个语句。
  • 语句1和语句2都可以是单语句或者复合语句。

案例

计算并输出下列分段函数的值:

$$
y = \begin{cases}
-2 & \text{当 } x < 0 \
2 & \text{当 } x \geq 0
\end{cases}
$$

代码:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int x, y;
    
    printf("请输入一个整数:\n");
    scanf("%d", &x);
    
    if (x < 0) 
        y = -2;
    else 
        y = 2;
    
    printf("x=%d,y=%d\n", x, y);
    
    return 0;
}

三目运算符

语句:

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

说明:

  • 如果表达式1的结果为真,就执行表达式2,否则就执行表达式3
  • 三目运算符的写法实际上就是单语句的双分支的缩略写法

案例

将上面双分支的案例改造为三目运算符的写法:

代码:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int x, y;
    
    printf("请输入一个整数:\n");
    scanf("%d", &x);
    
    y = x < 0 ? -2 : 2;
    
    printf("x=%d,y=%d\n", x, y);
    
    return 0;
}

多分支:if...else if...else

语法:

// 写法1:嵌套if..else..(不推荐)
if (表达式1) 语句1;
else
    if (表达式2) 语句2;
    else
       ...
        else
            if (表达式n) 语句n;
               else 语句n+1;

// 写法2:并列if..else if....else..(推荐)
if (表达式1) 语句1;
else if (表达式2) 语句2;
...
[else if (表达式n) 语句n;]
[else 语句n+1;]   // else是可选,写不写由我们最终的需求决定

注意:多分支中,同一时刻只能满足一个分支。

案例

根据学生的成绩,对学生进行分级:

  • 成绩 >= 90 A
  • 成绩 >= 80 B
  • 成绩 >= 60 C
  • 成绩 < 60 D

代码:

#include <stdio.h>

int if_test1()
{
    int score;
    printf("请输入一个整数:\n");
    scanf("%d", &score);
    
    if (score >= 90) printf("A\n");
    else if (score >= 80) printf("B\n");
    else if (score >= 60) printf("C\n");
    else printf("D\n");
}

int if_test2()
{
    int score;
    printf("请输入一个整数:\n");
    scanf("%d", &score);
    
    if (score >= 60 && score < 80) printf("C\n");
    else if (score >= 80 && score < 90) printf("B\n");
    else if (score >= 90) printf("A\n");
    else printf("D\n");
}

int main(int argc, char *argv[])
{
    if_test1();
    if_test2();
    
    return 0;
}

if语句的嵌套

语法:

if(..)
    if(..) 语句1;
    else   语句2;
else
    if(..) 语句3;
    else   语句4;

注意:

  • else总是与前面最近的未配对的if配对使用
  • 可通过增加{}来确定配对关系
  • 只要if中包含if,都属于是if语句的嵌套

案例

#include <stdio.h>

int if_test1()
{
    int score;
    printf("请输入一个整数:\n");
    scanf("%d", &score);
    
    if(score < 0 || score > 100)
    {
        printf("您的输入不合法!\n");
    }
    else
    {
        if(score >= 90)
        {
            printf("A\n");
        } 
        else if(score >= 80)
        {
            printf("B\n");
        }
        else if(score >= 60)
        {
            printf("C\n");
        }
        else 
        {
            printf("D\n");
        }
    }
}

int if_test2()
{
    int score;
    printf("请输入一个整数:\n");
    scanf("%d", &score);
    
    if(score < 0 || score > 100)
    {
        printf("您的输入不合法!\n");
    }
    else if(score >= 60 && score < 80)
    {
        printf("C\n");
    }
    else if(score >= 80 && score < 90)
    {
        printf("B\n");
    }
    else if(score >= 90)
    {
        printf("A\n");
    }
    else 
    {
        printf("D\n");
    }
}

int if_test3()
{
    int num;
    printf("请输入一个整数:\n");
    scanf("%d", &num);
    
    if(num == 0)
    {
        printf("0既不是偶数也不是奇数!");
    }
    else
    {
        if(num % 2 == 0)
        {
            printf("%d是偶数!\n", num);
        }
        else
        {
            printf("%d是奇数!\n", num);
        }
    }
}

int main(int argc, char *argv[])
{
    if_test1();
    if_test2();
    if_test3();
    
    return 0;
}

小贴士

如何拆出一个三位数中的每一位:

实现:123,

  • 个位:123 % 10 = 3
  • 十位:123 % 100 / 10 = 2
  • 百位:123 / 100 = 1
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号