好啦,继续上次的内容,我们来先说下条件运算符。
这是一个三目运算符,貌似也是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;
}
结果为y是10,x是6
需要注意的是:
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;
}
}
a是2,b是4,a自然小于b,所以a<b为真,就输出了a<b。a>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;
}
}
这样就没问题了