关系运算
将2该值进行比较,真为1,假为0
1.运算符种类 < <= > >= 优先级相同(优先级第8组)
== != 优先级相同(优先级第9组)
eg: 10+20 > 30 //比较算术表达式和常量的值,为0
(a=20)>(b=30) //比较两个赋值表达式的值,为0
2.注意:对于a<b<c的运算,先将a<b计算得0或1,再将值与c比较,而不是平常的理解。
★ 关系表达式的值可以做为整型参与运算
★ 实数参与关系运算时要考虑误差
3.判断数是否相等
● 用==(辨别与=的区别)判断实型数是否相等,某些情况下可能与预期结果不符合,因此禁用
● fabs()函数是通用的保证实型数误差方法,但是使用时不要超过有效位数限(超范围会使值不准确)
eg: float b=1.1f;
cout << (b==1.1) << endl; 0(猜测进行了类型转换导致float后位数不准确)
cout << (fabs(b-1.1)<1e-6) << endl; 1(fabs是专用的求绝对值的函数,加括号猜测与优 先级有关)
逻辑运算
1.逻辑常量:true / false
逻辑变量:bool
★ 在内存中占1个字节,表示为整型值,取值只有(true=1/false=0) sizeof(bool) => 1
★ cin时只能输入0/1,输出时按整型量进行处理
★ 赋值及运算时,按"非0为真零为假"的原则进行(不是按照高位舍,低位赋值的规则。可设计程 序如:bool k; k=256;(低位为0)cout << k << endl; 可得结果为1)
2.逻辑运算符
&&(与)(第13组) ||(或)(第14组) !(非)(单目,第3组)
例:4 && 0 || 2 = 1
★ (短路运算)仅当必须执行下一个逻辑运算符才能求出解时,才执行该运算符,否则不执行
a&&b&&c 若a=0,值必为0,b,c不求解
a||b||c 若a=1,值必为1,b,c不求
★ 容易犯的错误:表示 t在(70,80]之间
错误:70<t<=80(前面的式子值为0或1,故输入任何数都会得到1) 正确:t>70 && t<=80
★★★ 常见的等价表示
a==0 <=> !a a!=0 <=> a
例题:若某年是闰年,则符合下列两个条件之一
(1)被4整除,不被100整除
(2)被4整除,又被400整除
各种形式的表示:
(year%4==0)&&(year%100!=0)||(year%4==0)&&(year%400==0)
(year%4==0)&&(year%100!=0)||(year%400==0)
(year%4==0)&&(year%100)||(year%400==0)
!(year%4)&&(year%100)||!(year%400)
!(year%4)&& year%100 ||!(year%400)
真:闰年
假:非闰年
选择结构
if语句
单支:if(表达式){ ★表达式后不能跟分号,表达式为真才执行,为假不执行
语句序列; ★若只有一个语句,则大括号可以省略
}
双支:if(表达式1){ ★ 当表达式为真时执行语句序列1,为假则执行语句序列2
语句序列; ★ 整个双支语句可以作为一个语句来看待
} ★ 中间不允许插入任何的其它语句
else{ ★★★若不带大括号,缺省执行一个语句
语句序列;
}
多支:if( ) 若1对,执行1,跳出
else if( ) 若1错,判断2
else if( )
else 若以上全错,执行else,跳出
注意:if不一定有else,但else一定有if
表达式1 ?表达式2 :表达式3(唯一的三目运算符,优先级第15组)
1与2与3可以不是同一类型,但2与3必须是同一类型(否则无法确定条件表达式的值类型)
switch语句
switch(整型表达式) { ★ 表达式可以是任何类型,最终取值为整型即可
case 整型常量表达式1: ★ 当整型表达式的取值与整型常量表达式1-n中的任意一个相等时,
语句序列1; 执行对应的语句序列;否则执行default后的语句序列(不能是实
case 整型常量表达式2: 型数,因为无法直接判断相等)
语句序列2; ★ 各整型常量表达式的值应各不相同,但顺序无要求
... ★ 各语句序列的最后一句应是break,否则连续执行下一case语句
case 整型常量表达式n: (最后一个default可省)
语句序列n; ★ 语句序列不必加{}
default: ★ 不能完全替代多重if语句的嵌套(无法处理小数)
语句序列n+1; ★★★不能处理小数
}
循环结构
1.goto语句(无条件转换到语句处)
结构:goto 语句标号;
当型
直到型:
思考题答案个人认为是改为:i <= 99
2.while语句
形式:while(表达式){ ★ 先判断,后执行,表达式可以是任意类型,按逻辑值求解
语句序列; (非0为真0为假),为真时反复执行
} ★ 语句序列中应有改变表达式取值的语句,否则死循环
eg
3. do-while语句
形式:do{
语句序列;
}while(表达式);
4.for语句
形式:for(表达式1;表达式2;表达式3){ 执行过程:①求表达式1的值(初值)
循环变量赋初值;循环条件;循环变量增值 表达式均可省,要在适当位置添句子,但分号不能
语句序列; ② 以逻辑值解表达式2,为真则执行循环体
} ③ 执行完循环体后,解表达式3,重复②
等价于:while(语句2){
语句序列;
表达式3;
}
eg
--i是因为多加了一次
5.break语句
★ 无条件结束循环体,因此必须和if/else语句一起使用才能体现实际的意义
★ 当多重循环嵌套时,break仅跳出本层循环
★ 若出现循环和switch语句的嵌套,则break的位置决定了跳转的位置
6.continue语句
★ 若出现循环和switch语句的嵌套,则continue只对循环体有效
★ for语句中若出现continue,则先执行表达式3,再去判断表达式2是否应该继续执行
★结束本次循环,进行下一次是否执行循环的判断
eg