一起学 c++(五) 运算符、条件语句

好啦,继续上次的内容,我们来先说下条件运算符。

这是一个三目运算符,貌似也是c++唯一一个这样的运算符,不过它其实很简单。

表达式如下:

Expr1 ? Expr2 : Expr3

意思就是如果Expr1是真,那么返回Expr2,否贼返回Expr3

例如:

int a=10;

int b=a<3 ? 3 : a; //a<3不成立,所以取a,所以b=a

 

逗号表达式:

(exp1,exp2)

其求职过程是分别求2个表达式的值,并以表达式2的值作为整个逗号表达式的值。

例如:

#include <iostream>

using namespace std;

void main()

{

     int a=2,b=4,c=6,x,y;

     y=((x=a+b),b+c);

     cout<<y<<endl;

     cout<<x<<endl;

}

结果为y10x6

需要注意的是:

1.       逗号表达式可以是一般形式中的表达式1和表达式2,也可以是逗号表达式。例如以下嵌套关系:

表达式1,(表达式2,表达式3)                 因此可以把逗号表达式扩展为:

表达式1,表达式2,表达式3

2.       在程序中使用逗号表达式,通常为了求逗号表达式的各个值

3.       不是所有的逗号的地方都是逗号表达式,所以要注意区分

 

 

求字节数运算符:sizeod(exp1)

刚开始看的时候,大家可能都认为这是个函数,但是还是要记住它不是。exp1可以是变量,也可以是某种数据类型的名称

 

下面来看个很重要的问题,就是运算符的优先级问题,优先级高的先于优先级低的进行运算,如果在一个运算中的优先级相同,则按运算符的结合性所规定的结合方向处理

优先级

运算符

结合性

1

()  []  ->  .  ::  ++(后置)  --(后置)

à

2

!  ~  ++(前置)  --(前置)  + * &(强转) sizeof new delete

à

3

.  ->

à

4

/  %  *

à

5

+  -

à

6

<<  >>

à

7

<=  <  >  >=

à

8

==  !=

à

9

&

à

10

^

à

11

|

à

12

&&

à

13

||

à

14

?:

à

15

=  *= /=  +=  -=  |=  <<=  >>=

à

16

,

à

 

 

说到强转,来说下类型转换

C++提供了2中转化机制:一是自动转换,二是强制转换。

自动转换发生在不同数据类型的量混合元算时,由编译器自动完成。转换规则是小类型总是被提升成大类型。以防止精度丢失。

强制转换是通过类型转换运算来实现的:一般形式如下:

(类型说明符)表达式            (float) a

关于类型转换我们以后还会说到

 

下面我们开始接触语句了。

什么是语句,它由由变量声明和表达式构成,将特定的关键和语法,按一定的功能组织起来的语句。

;   //这是一个最简单的语句,空语句

float a=1.0f;  //声明语句

当然语句不是只有这样,大部分我们会使用复合语句

那么我们先来看看条件语句,顾名思义,就是满足条件才执行的语句喽

条件语句的基本形式:

If(表达式1)

         语句1 ;

或者

If(表达式1)

{

         语句1 ;

}

我们可以理解为:如果表达式1是真的,那么执行语句1,否则不执行语句1

我建议大家最好都用第二种,有大括号包着,看着比较清晰明白

先来看个简单的例子:

#include <iostream>

using namespace std;

void main()

{

     int a=2,b=4;

     if (a<b)

     {

         cout<<"a<b"<<endl;

     }

 

     if (a>b)

     {

         cout<<"a>b"<<endl;

     }

}

 

a2b4a自然小于b,所以a<b为真,就输出了a<ba>b不满足,所以自然不会进入cout<<”a>b”<<endl

 

条件语句的其他形式

if-else形式:

if(表达式)

         语句1;

else

         语句2;

 

我们可以理解为:如果表达式是真的,那么执行语句1,否则执行语句2.

那么我可以把上面那个例子改下变成:

if (a<b)

{

     cout<<"a<b"<<endl;

}else

{

     cout<<"a>b"<<endl;

}

 

结果是一样的

 

if-else继续引出的就是if-elseif-else,它的表达式是:

if(表达式1)

         语句1;

else if(表达式2)

         语句2;

else

         语句n;

 

我们可以理解为:如果表达式1为真,那么执行语句1,如果表达式2为真,那么执行语句2……,都不满足的时候,执行语句n

例如我们把之前例子加个等于的判断:

#include <iostream>

using namespace std;

void main()

{

     int a=2,b=4;

     if (a<b)

     {

         cout<<"a<b"<<endl;

     }

     else if(a==b)

     {

         cout<<"a==b"<<endl;

     }

     else

     {

         cout<<"a>b"<<endl;

     }

}

条件语句的基本形式就是这样的,但是不仅仅限于此,嵌套式的条件语句用处更加广泛。

所谓嵌套式if的语句,就是if语句中,执行语句还是if

我们继续拿之前的例子修改下,看下什么是嵌套式的if语句

#include <iostream>

using namespace std;

void main()

{

     int a=2,b=4;

    

     if(a!=b)

     {

         if (a<b)

         {

              cout<<"a<b"<<endl;

         }

         else

         {

              cout<<"a>b"<<endl;

         }

     }

     else

     {

         cout<<"a==b"<<endl;

     }

}

再来看看另一个条件语句switch语句

Switch语句的表达式:

switch (表达式)
        {
            case
常量表达式1 :

语句1;

                          break;
            case
常量表达式2:

语句2;

                          break;
            default :  

                            语句n;

                          break;
        }

我们可以理解为:表达式的值与之后的常量表达式1,2…n直到都不满足的default进行比较,如果表达式的值与某个常量表达式的值相等,就执行对应的语句。

例如:

#include <iostream>

using namespace std;

void main()

{

     int a=2;

     switch(a)

     {

     case 1:

         cout<<"1"<<endl;

     case 2:

         cout<<"2"<<endl;

     case 3:

         cout<<"3"<<endl;

     default:

         cout<<"不是1,2,3"<<endl;

     }

}

我们执行一下:

结果是

2

3

不是1,2,3

为什么会这样,我们想要的就是2这个结果,仔细观察下就会发现,我们这里没写break;

这个在初期学习的过程中经常出现的问题,所以要注意哦。

所以在每一个条件后面都要加上break;

修改后:

#include <iostream>

using namespace std;

void main()

{

     int a=2;

     switch(a)

     {

     case 1:

         cout<<"1"<<endl;

         break;

     case 2:

         cout<<"2"<<endl;

         break;

     case 3:

         cout<<"3"<<endl;

         break;

     default:

         cout<<"不是,2,3"<<endl;

         break;

     }

}

 

这样就没问题了

 

个人网站http://www.ravedonut.com/

原文地址:https://www.cnblogs.com/panjiangfy/p/cxuexi5.html