首页 > 编程笔记 > C语言笔记

C语言if else语句详解

在很多情况下,只有顺序结构的代码是远远不够的,例如判断一个数是奇数还是偶数。这时程序就需要做出判断,并给出提示。

分支结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。C 语言把任何非零和非空的值假定为 true,把零或空值(NULL)假定为 false。

基本分支语句及描述如下表所示。

表 1 基本分支语句及描述
语句 描述
if 语句 —个 if 语句由一个布尔表达式后跟一个或多个语句组成。
if...else 语句 —个 if 语句后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。
if...else if 语句 可以在一个 if 或 else if 语句内嵌套另一个 if 或 else if 语句。
switch 语句 —个 switch 语句允许测试一个变量等于多个值时的情况。

本节重点讲解 if else 语句的用法,也就是讲解表中前 3 种分支语句的用法。

if语句

if 语句的格式如下:
if(表达式) 语句;
如果表达式的值为真,则执行其后的语句,否则不执行该语句。语句可以是单条语句,也可以是通过{ }构成的复合语句。

下面的实例用于判断字符变量是否是字母或数字:
#include <stdio.h>
#include <ctype.h>
 
int main()
{
    char ch_c='a';
 
    if (isalnum(ch_c))
        printf("%c is a character. \n",ch_c);
 
    return 0;
}
isalnum() 是 C 语言提供的一个函数,用于判断一个字符是否是字母(包括大写字母和小写字母)或数字(0~9)。这个函数需包含头文件<ctype.h>

isalnum() 的返回值非 0(真)表示 ch_c 是字母或者数字,返回值为 0(假)表示 ch_c 既不是数字也不是字母。

在这个程序中,先判断 a 是否为字母或者数字,是则输出 a 是字母或者数字,否则继续执行。程序的执行流程如下图所示:


图 1 if 执行流程图

再举个例子,输入两个整数,比较并输出其中的较大者。代码如下:
#include<stdio.h>
 
int main()
{
    int i_a,i_b,i_max;
 
    printf("\ninput two numbers:");
    scanf("%d%d",&i_a,&i_b);
    i_max=i_a;
    if(i_max<i_b) i_max=i_b;
    printf("i_max=%d\n",i_max);
 
    return 0;
}
运行结果为:

10 20
20

if...else语句

if else 语句格式如下:
if(表达式)
    语句1;
else
    语句2;
语义是:如果表达式的值为真,则执行语句 1,否则执行语句 2。语句 1 和语句 2 可以是通过{ }构成的复合语句。

例如,判断用户输入的整数是奇数还是偶数,代码如下:
#include <stdio.h>

int main()
{
    int i_num;

    printf("请输入一个整数: ");
    scanf("%d", &i_num);

    // 判断这个数除以 2 的余数
    if(i_num % 2 == 0)
        printf("%d 是偶数。", i_num);
    else
        printf("%d 是奇数。", i_num);

    return 0;
}
编译运行,结果如下:

请输入一个整数: 6
6 是偶数。

在这个程序中,对输入的数据进行判断,如果是偶数则判别式取真,输出是偶数;否则判别式取假,输出为奇数。程序的执行流程如下图所示:


图 2 if else执行流程图

if...else if语句

if...else if 语句一般形式为:
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else if(表达式3)
    语句3;
...
else if(表达式m)
    语句m;
else
    语句n;
语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句,然后跳到整个 if 语句外继续执行程序;如果所有的表达式的值均为假,则执行语句 n,然后继续执行后续程序。

举个例子,判断用户输入的字符是否是控制符,如果不是控制符,则判断是否是数字;如果不是数字,则判断是否是大写字母;如果不是大写字母,则判断是否是小写字母;如果不是小写字母,则是其他字符。
#include <stdio.h>
 
int main()
{
    char ch_a;
    printf("input a character:");
    ch_a =getchar();
    if(ch_a < 32)
        printf("This is a control character\n");
    else if(ch_a >= '0' && ch_a <= '9')
        printf("This is a digit\n");
    else if(ch_a >= 'A' && ch_a <= 'Z')
        printf("This is a capital letter\n");
    else if(ch_a >= 'a' && ch_a <= 'z')
        printf("This is a small letter\n");
    else
        printf("This is an other character\n");
    return 0;
}
运行结果为:

input a character:B
This is a capital letter


程序的执行流程如下图所示。


图 3 if...else if的执行流程图

总结

if 条件控制语句的形式是多种多样的,如 if 嵌套、if...if 类似的形式,但是都离不开上面介绍的 3 种基本形式。

应特别注意的是,如果有多个 if 语句,else 子句是就近配对的。

if 语句比较灵活,需要在深入理解的基础上活学活用。

声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。