过程控制——分支语句(一)if语句

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangqimo/article/details/87001026

嗯,因为无聊,今天多发几篇编程学习blog。

不对!我是爱学习的人,我要每天都发!!!

if语句

1. 分支结构

分支结构示意

程序语言有了分支结构,才有计算动作的可选择性。有了选择性,循环结构才有灵活决定其终止或重复的自由;有了选择性,程序才能根据运行时的情形决定要执行的动作。因而,分支是程序语言必须具备的功能结构。

分支是指动作执行来到了一个转折点,通过判断当时所处的条件,决定转向某个动作执行路径继续运行下去。

整体性

分支结构与循环结构一样,从整体上看,其可以看做一个处理框,它具有一个入口和一个出口。

2. if分支结构

if 语句结构

if语句有两种结构,对应的两种语法形式为:

if (条件) 语句

if (条件) 语句1 else 语句2

if条件

if条件是一个表达式,如果表达式为0,则条件呈假值,否则呈真值。在C++中,有许多类型的数学表达式其值都有可能为0,所以,很多类型的表达式都能表示条件。整型是经常用来做条件值的典型形式。任何非0整数都使条件值为真。

条件很多时候都是用关系不等式表示,因为关系不等式的结果非真即假,表达十分明确。但是关系表达式只是反映了一个逻辑值,而条件往往是若干个逻辑值的逻辑操作。

if条件后面的语句对应分支结构中的处理框。语句可以是单一的语句,也可以是由花括号括起来的语句集合。当分支结构中的语句集合多于一条语句时,就必须要用花括号括起来。

例如,若条件(a==3)成立,则输出一个刚刚输入的整数,否则,就输出一个“OK”,代码如下:

if (a == 3){
    int n;
    cin>>n;
    cout<<n<<"\n"
}else
    cout<<"OK\n";

语句块与花括号省略

循环中的花括号省略问题,在分支语句中同样存在,原理相同。

if后面紧跟着的“语句1”由定义一个整型变量n、输入整型数和输出整型数组成,包含了三条语句,所以为了输出一个刚刚输入的整数,就需要用花括号将这些语句括起来。

一旦用花括号括起来,该语句块便表示一个语句单位,或者相当于一条语句。而else后面的“语句2”,只是输出单一字串“OK\n”,只需要一条语句,其花括号就可以省略了。

有时候if条件的乬集合多于一条,花括号不能省。

例如,若条件(a>3)成立,则令a=a+5,并输出a这个整数:

if(a>3)
    a=a+5;
    cout<<a<<"\n";

结果由于花括号省略,使得在a>3不满足的情况下,仍可以看到a的输出。这便是一种代码错误,它是由理解错误造成的。计算机的执行与代码书写中的风格(语句cout<<a<<"\n";嵌进去两格)是无关的,只与语法有关。因为语法将保证寓意理解的唯一性。

又例如,一对花括号内的内容整体,可以被看做一个语句单位。如果上述“语句1”集合不用花括号对:

if(a==3)
    int n;
    cin>>n;
    cout<<n<<"\n";
else
    cout<<"OK\n";

则编译器只接受if后面的定义语句“int n;”为条件语句中的组成部分,即认定“if(a==3)int n;”为合法语句。if语句结束后,n就不复存在,所以之后的“cin<<n;”和“cout<<n<<"\n”;"都被当做是孤立的语句,编译报告“名字n不认识”的错误也就在情理之中。

为了用if语句准确表示分支结构,if条件后面的集合需要用花括号对括起来,并紧跟else关键字。

语句独立性

if语句中,if和else属下各种描述的语句是彼此对的。例如:

if(a==3){
    int n;
    cin>>n;
    cout<<n<<"\n";
}else
    cout<<n<<"OK\n";        //报错

这里,if属下的n定义语句不能作为访问else属下的变量n的依据。

事实上,条件判断只认定if属下或else属下的一个部分允许继续工作。因此,为了适应正反条件的两种情况都对n进行访问,应将定义语句挪到if之前去:

int n;
if(a==3){
    cin>>n;
    cout<<n<<"\n";
}else
    cout<<n<<"OK\n";

3. if语句嵌套

嵌套形式

分支结构整体也是一个执行体,所以,if语句虽然包含了一些分支执行的语句,但整体上也是一个语句单位。既然是语句,就可以含在if条件后面的语句集合中。if语句含在if语句中,称为if语句的嵌套。嵌套形式如下:

if()//联系1
{
    if()
    语句
}


if()//类型2
{
    if()
        语句
    else
        语句
}


if()//类型3
{
    if()
        语句
    
}
else
        语句


if()//类型4
        语句
else
{
    if()
        语句
}


if()//类型5
{
    if()
        语句
    else
        语句
}
else
        语句


if()//类型6
        语句
    else
{
    if()
        语句
    else
        语句
}

if语句有两种类型。其中,没有else的形式在嵌套中对应两种形式,有else的形式在嵌套中对应四种形式,所以,各种形式一共有6中。任何形式的分支结构,都可以从上述嵌套语句或者其组合中产生。

分支结构本身表示为一种独立的语句单位,因而任何可以描述语句的地方,都可以使用if语句。

语义唯一性

if语句虽然可以嵌套,但要防止模棱两可。对于下列if嵌套的代码,似有两种解释:

if(x>0)
if(x<50)
cout<<"x is OK.\n";
else
cout<<"x is not OK.\n";

第一种解释是外部的if把后面的语句全包进去:

if(x<0)
{
    if(x<50)
    cout<<"OK\n";
    else
    cout<<"NOT OK\n";
}

即在0<x<50时,OK,而在x≥50时,NOT OK。

第二种解释是外部的if与else配对:

if(x>0)
{
    if(x<50)
    cout<<"OK\n";
    
}else
    cout<<"NOT OK\n";

即在0<x<50时,OK,而在x≤0时,NOT OK。

显然两种解释不同。

作为计算机来说,所做的工作都有确定意义,只要没有编译错误,都只有唯一的一种解释。

c++规定,遇到这样的情况,只有一种解释,即else跟从最靠近它的if,也即第一种解释。

如果想要表示第二种解释,可以用花括号括起来的办法,来明确其分支意图。

计算机所做的任何工作,都表达了人的意愿。上述代码在计算机看来,意义是明确的,所反应出来的人们理解上的模糊性,说明编程意图还不是很明确。

如果要表达更明确的话,一般都会采用这样的代码:

if (0<x && x<50)
    cout<<"OK\n";
else
    cout<<"NOT OK.\n";

即使用与或非。

OK,今天就学到这里吧,去找几个题目练一下了。

祝好。

猜你喜欢

转载自blog.csdn.net/zhangqimo/article/details/87001026