mylogo

退役程序员的茶室 RetiredCoder.cn

← 返回上一页

C++编程基础: 7. 条件语句结构

2025-04-12 10:02:25

本系列文章是配合我发布的《C++编程基础》系列视频教程的知识点总结和补充。这一节我们主要讲讲if-else 结构和switch-case 结构。

if-else 结构

在日常里我们常会遇到像“如果怎样,就怎样”这样的语境,翻译成C++的语言,可以这样:

if(条件表达式)
    语句; //只有一行语句时
或
if(条件表达式){
    语句块 //有多行语句时
}

其中条件表达式是比较大小的相等运算符和关系运算符与逻辑运算符的组合,得出的结果是布尔类型,如果为真,则执行语句。

例如,我要输入一个整数值,让程序根据这个输入值的大小与10进行比较,从而打印出不同的输出结果(这里我们先忽略对输入非整数的判断,在讲完循环语句结构后再来考虑)。

int x;
cout<<"Please input an integer:"<<endl;
cin>>x;
if(x>10){
    cout<<"x is greater than 10."<<endl;
}

当满足条件时如果只执行1条语句,可以省略大括号,如果是执行多条语句,则需要大括号括起来形成语句块。

如果我们还要告诉程序当条件表达式不成立时该如何执行,就需要添加else的部分,也就是“否则”的情况。

if(条件表达式)
  语句; //只有一行语句时
else
  语句; //只有一行语句时
或
if(条件表达式){
  语句块  //有多行语句时
}else{
  语句块  //有多行语句时
} 

条件成立或不成立两个部分中的语句不可能同时都被执行,只可能是其中之一。

在上面的例子中,if的程序块后面加上else的语句块,如果输入的值并不大于10的时候,就会执行else后面的语句。

int x;
cout<<"Please input an integer:"<<endl;
cin>>x;
if(x>10){
    cout<<"x is greater than 10."<<endl;
}else{
    cout<<"x is less than or equal to 10."<<endl;
}

当有多个不同条件,彼此互斥,可以用下面的结构来描述

if(条件表达式){
  语句;
}else if(条件表达式){
  语句;
}else if(条件表达式){
  语句;
...
}else{
  语句;
}

例如我希望让程序在输入值大于10、小于5、或为5到10之间的某个值时输出不同的结果,可以将上面的代码按如下方式修改:

int x;
cout<<"Please input an integer:"<<endl;
cin>>x;
if(x>10){
    cout<<"x is greater than 10."<<endl;
}else if (x<5){
    cout<<"x is less than 5."<<endl;
}else{
    cout<<"x is between 5 and 10."<<endl;
}

上面的例子中,如果没有最后的else部分,当输入值在5到10之间时,没有相应的输出,在使用这种多重判断的结构时要注意是否希望程序作出反应的范围都涵盖其中了,以及设定的条件边缘是否准确,例如项目需求要求的是大于10的情况,还是大于等于10的情况。

当一个条件满足是依赖于一个先决条件时,嵌套就登场了,为了避免结构的混乱,对于初学者来讲,不管语句是一行还是多行,都括起大括号来提高程序的可读性。

if(条件表达式1){
    语句;
    if(条件表达式2){
        语句;
    }else{
        语句;
    }
}else{
    语句;
}

在上面的例子中,当大于10的条件成立时,增加判断x值是否等于15。注意这里判断是否相等的运算符是2个“=”符号,而不是赋值语句用的1个“=”符号。

if(x>10){
    cout<<"x is greater than 10."<<endl;
    if(x==15){
        cout<<"x is equal to 15."<<endl;
    }
}else if(x<5){
    cout<<"x is less than 5."<<endl;
}else{
    cout<<"x is between 5 and 10."<<endl;
}

switch-case 结构

当需要将特定表达式的值和一系列常量进行比较并相应地执行不同操作时,可以用switch-case结构:

switch(表达式){
    case 常量表达式1:
        语句组1;
        break;

    case 常量表达式2:
        语句组;
        break;
    ...
    case 常量表达式n:
        语句组n;
        break;
    default:
        语句组n+1;
        break;
}

其中,case后边必须是个常量,组合在一起相当于一个标号,每个标号不能相同,它们只作为标号,并不能控制程序的流程,要影响程序的流程,需要用break;语句,break的作用是跳出当前的switch语句块。

遇到switch-case结构时,程序会先计算switch关键字后的表达式的值,然后按顺序和case语句里的常量比较,如果满足条件就会执行对应case里的语句,直到遇到break;命令,才会退出当前的switch语句块。例如下面的例子,如果将一个在0到6之间的整数赋给变量x,会打印出对应的星期几:

int x;
cout<<"Please input an integer:"<<endl;
cin>>x;
switch(x){
    case 0:
        cout<<"It's Sunday"<<endl;
        break;
    case 1:
        cout<<"It's Monday"<<endl;
        break;
    case 2:
        cout<<"It's Tuesday"<<endl;
        break;
    case 3:
        cout<<"It's Wednesday"<<endl;
        break;
    case 4:
        cout<<"It's Thursday"<<endl;
        break;
    case 5:
        cout<<"It's Friday"<<endl;
        break;
    case6:
        cout<<"It's Saturday"<<endl;
        break;
    default:
        cout<<"Wrong number!"<<endl;
        break;
    }

如果这里省略了break语句,程序会在找到与x对应的等值常量后继续执行后面的打印语句,直到遇到一个break语句跳出,否则只能等到程序运行到switch结构的最后再跳出了。