C++语言基础|判断控制结构

C++语言基础|判断控制结构

  • 判断
    • 1. if 判断
      • 1.1 基本的if语句
      • 1.2 完整的if语句
      • 1.3 if语句的嵌套
    • 2 switch…case判断式
    • 3. if语句和switch语句的比较

判断

顺序的执行程序对人们解决实际问题往往不够,如以下数学问题:
y = { n / 2 , if n is even 3 n + 1 , if n is odd y= \begin{cases} n/2, & \text{if n is even}\\ 3n+1,& \text{if n is odd} \end{cases} y={n/2,3n+1,if n is evenif n is odd
这个问题并不复杂,但是通过顺序执行是不能解决的。这里必须用到判断选择结构。
判断选择结构又称条件分支结构,是一种基本的程序结构类型。在程序设计中,当需要进行选择、判断和处理的时候,就要用到条件分支结构。条件分支结构的语句一般包括if语句、if–else语句、switch–case语句1

1. if 判断

1.1 基本的if语句

基本的if语句具有如下的一般形式:
if(表达式)语句;
其中:表达式通常是一个关系表达式或逻辑表达式,语句可以是一个单条语句,或是一个块语句,甚至是一个空语句。它的执行过程如下图。在C++中,if后面实际可以跟任意一个可计算出结果的表达式,甚至可以直接用常量0代表逻辑假,用非0代表逻辑真。
在这里插入图片描述

  if (i>10)    i=i-5;
  cout<<i<<endl; 

执行过程为:先对i的值进行判断;如果i的值大于10,则将i的值减5,然后输出;否则直接输出i的值。

注意:
➢关系表达式两边的括号必不可少。
➢不要将关系表达式误写成赋值表达式。

1.2 完整的if语句

完整的if语句有如下的一般形式:

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

首先计算表达式的值,如果表达式的值为真,则执行语句1;否则就执行语句2。流程如下图所示。
通常,将前者叫做if分支,将后者叫做else分支。
在这里插入图片描述

if (x>y)  cout<<x<<endl;
else cout<<y<<endl;

实现了从x和y中选择较大的一个输出。

注意:
➢尽管完整的if语句中存在两个语句段,且有两个表示语句结束的分号,但整个 语句在语法上只是一条语句。
➢if分支后边的分号是不可缺少的(除非这里是一条复合语句)。

1.3 if语句的嵌套

将if语句用作if语句的语句段。这就是所谓的if语句的嵌套。if语句的嵌套常用于多次判断选择。
【例】将百分制的成绩按等级分输出。
分析:等级分为四等:A、B、C、D,分别对应的分数段为90~100、80~89、60~79、0~59,转换时需要进行多次判断,要用多重选择结构,这里我们选用嵌套的if语句。
在这里插入图片描述
C++规定else与前面最近的没有else的if语句配对。

2 switch…case判断式

在有的问题中,需要进行多次判断选择,C++中使用switch语句,其语法形式如下:

switch (表达式)
 {
 case 常量表达式1[语句块1][break;]
 case 常量表达式2[语句块2][break;]case 常量表达式n:[语句块n][break;]
 [default: 语句块n+1]
 }
  • 表达式可以是任意一个合法的C++表达式,但其值只能是字符型或者整型。
  • 常量表达式是由常量组成的表达式,其值也只能是字符型常量或者整型常量, 各常量表达式的值不可以重复(相等)。
  • 符号[ ]表示其中的内容可选,语句块是可选的,它可以由一条语句或一个复合 语句组成。
  • break语句、default语句也是可选的。

switch语句的执行过程:

  1. 先求出表达式的值;
  2. 将表达式的值依次与case后面的常量表达式值相比较,若与某一常量表达式的值相等,则转去执行该case语句后边的语句序列,直到遇到break语句 或switch语句的右花括号为止。
  3. 若表达式的值与case语句后的任一常量表达式的值都不相等,如果有default语句,则执行其后边的语句序列。如果没有default语句,则什么也不 执行。

在使用switch-case语句时经常容易丢失必要的break语句,这样程序会产生结 果的错误,此类错误往往不易发觉。

【例】将百分制的成绩按的等级分输出的switch-case语句的实现

/************************************************************
*  程序名: p2_6.cpp                                        *
*  功  能: 将百分制的成绩按等级分输出switch-case实现   	*
************************************************************/

	#include<iostream>
	using namespace std;
	int main()
	{
		int n;
		cout<<"Enter a score:";
		cin>>n;
	    switch(n/10)
	{
			case 9: case 10:
				 cout<<"The degree is A"<<endl;
	              break;
	         case 8:
	              cout<<"The degree is B"<<endl;
	              break;
	         case 7: case 6:
	              cout<<"The degree is C"<<endl;
                 break;
	         default:
	              cout<<"The degree is D"<<endl;
	}
      return 0;
	}

3. if语句和switch语句的比较

if语句和switch语句都可以用来处理程序中的分支问题,在许多场合可以互相替代。
差别表现为:
(1)if语句常用于分支较少的场合;而switch语句常用于分支较多的场合。
(2)if语句可以用来判断一个值是否落在一个范围内;而switch语句则要求其相应分支的量必须与某一值严格相等。


  1. 本教程仅供教学使用,参考教材 :《C++语言程序设计教程》,杨进才、沈显君编著,清华大学出版社,2022年1月第4版 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皖山文武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值