C++(5)--运算符、表达式、条件结构(if, switch)


条件结构)
《老九学堂C++课程》《C++ primer》学习笔记。《老九学堂C++课程》详情请到B站搜索《老九零基础学编程C++入门》

-------------简单的事情重复做,重复的事情用心做,用心的事情坚持做(老九君)---------------

1.表达式与运算符

(上一章只讲了算术运算符号)
运算符:赋值运算符,算术运算符,关系运算符,逻辑运算符
表达式:符号和操作数的组合

1.1赋值运算符

从右向左运算,将右边的值赋给左边的对象
复合赋值运算符: +=, *=, ,\=,

1.2算术运算符

一元运算符:++, --;二元运算符:+,-,*,/,%

1.3关系运算符

比较符号两边对象的关系,(结果是0/1):>,<,>=,<=,==,!=

#include <iostream>
int main(){
	cout << "15 > 88 吗?" << (15 > 88) << endl;
	cout << "16 > 99 吗?" << (16 < 99) << endl;
	cout << boolalpha;      // 设置输出True, False
	cout << "15 > 88 吗?" << (15 > 88) << endl;
	cout << "16 > 99 吗?" << (16 < 99) << endl;
	return 0;
}

输出

15 > 88 吗?0
16 > 99 吗?1
15 > 88 吗?false
16 > 99 吗?true

1.4逻辑运算符

(与、或、非)&&、||、 !
(python 中使用 and, or, not 来表示逻辑运算符 与,或,非)

1.5位运算符

运算符作用示例
&按位与两位同时为1时,结果为1
|按位或两位有一个为1时,结果为1
~按位非操作数为1,结果为0;操作数为0,结果为1
^按位异或两个操作数相同,结果为0,不同结果为1
<<左移右侧补零
>>右移左侧补符号位

#include <iostream>
int main(){
	cout << (4 & 5) << endl;
	cout << (~ 2) << endl; 
	cout << (2 << 3) << endl; // 2->10,(1向左移动3位)->10000 =16
	cout << (16 >> 3) << endl;  // 16->10000,(尾部的元素舍弃掉3个)->10=2
	cout << (3 << 3)<< endl;    // 3->11 (1向左移动3位)-->11000=24
	return 0;
}

输出

4
-3
16
2
24

提示1: 正数按位取反后为负数,负数在内存中是以补码的形式存储的。2->00000010 取反11111101.第一个位符号位,第一位为为0正数,第一位为1的为负数。负数在计算机中以补码的方式存储,11111101如何转换为十进制呢?将二进制取反+1乘以负一。

提示2:区分cout 运算符(<<运算符重载),左移,右移操作符号两边都是数字,用在2 的倍数。用来处理2的倍数十分高效

1.6 sizeof()

Sizeof 认为是一个运算符,测量数据类型占内存空间的大小,单位为字节

sizeof(type_name)

demo1

#include <iostream>
using namespace std;
int main(){
	cout << sizeof(int) << endl;
	cout << sizeof(10) << endl;
	cout << sizeof(0.1) << endl;
	cout << sizeof("abc") << endl;  // 字符串类型会自动在末尾加\0
	return 0;

}

输出

4
4
8
4

demo2: sizeof(num++)

int main(){
	int num = 5;
	cout << sizeof(num++) << endl;  //sizeof 只是一个运算符,不凑成任何运算,mac的编译器过不去
	cout << num << endl;
	return 0;
}

应该输出

4
5

1.7 三目运算符

(条件)?条件满足表达式的结果:条件不满足表达式的结果

int num= 5>6 ? 10 :12;

1.8 运算符的优先级

1.单目运算符~, ++,–,sizeof()
2.!
3.算术运算符
4.关系运算符
5.&&, ||
6.赋值运算符
(有限级别由上到下依次递减)

2.条件结构

2.1–if

单个if
代码格式(python 的条件/else后要接冒号,C++条件在括号中,代码块用大括号界定)整个if 语句作为一条语句

if(条件为真){
	//代码块1
}
else{
	//代码块2
}

demo1–硬盘盘符一半采用A-Z的大小字母表示,使用程序判断用户输入的字符是否是合法的硬盘盘符
(早期的计算机是AB软盘,所以硬盘盘符号一般从C开始)

int main18(){
	//使用程序判断用户输入的字符是否是 合法的硬盘盘符
	char pan = '\0'; //默认值设置为空字符,ASCII 码为0 的字符
	cout << "请输入一个字符,我来判断是否合法:";
	cin >> pan;
	// "A"~"Z"之间
	if ('A' <= pan && pan <= 'Z'){
		cout << "是合法的字符" << endl;
	}
	else{
		cout << "不是合法字符" << endl;
	}

	return 0;
}
请输入一个字符,我来判断是否合法:A
是合法的字符

demo2-购物车打折

int main(){
	// 购物车总价大于5W打7折,否则打9折
	double price_louis = 35000.0;
	double price_hemes = 11044.5;
	double price_chanel = 1535.0;
	double total_price = 0.0;
	double discout = 0.0;
	total_price = price_louis + price_hemes + price_chanel;

	if (total_price > 50000 || price_louis > 1000 || price_chanel > 1000 || price_hemes > 1000){
		discout = 0.7;
	}
	else{
		discout = 1.0;
	}
	cout << "最终付款: " << total_price * discout << endl;
	return 0;
}
最终付款: 33305.7

多重if结构
常用来做区间判断(python 中else if 是连在一起写的,写作elif)

if(条件1){
	//代码块1
	}
else if(条件2){
	//代码块2
}
else{
	//代码块3
}

2.2 --switch结构

开关语句,
1.switch 后的表达式只能是整型或者字符型,
2.case 后常量表达式的值不能相同;
3.可以不添加break,但是需要特别注意执行的顺序(进到一个分支里头,没有遇到break语句会一直执行到最后);
4.case 和defult字句的先后顺序可以自行变动>
用途:菜单选择,判断某个月份有几天

switch(表达式){
case 常量1:
	语句1break;
case 常量2:
	语句2break;
...
default:
	语句;
}

demo1

int main(){
	int choice  = 2;
	switch(choice){
	case 1:
		cout << 1 << endl;
	case 2:
		cout << 2 << endl;
	case 3:
		cout << 3 << endl;
		break;
	case 4:
		cout << 4 << endl;
	}
	return 0;
}
2
3

demo 2: default 放在开头,如果所有的情况不满足的化会执行default,直至至遇到的第一break,或者最后;如果有一个case满足会执行该case,见demo3.

int main(){
	int choice  = 7;
	switch(choice){
	default:
		cout << 998 << endl;
	case 1:
		cout << 1 << endl;
	case 2:
		cout << 2 << endl;
		break;
	case 3:
		cout << 3 << endl;
		break;
	case 4:
		cout << 4 << endl;
	}
	return 0;
}
998
1
2

demo3–demo2的变形,如果有case 满足,是不会执行default 的了

int main(){
	int choice  = 3;
	switch(choice){
	default:
		cout << 998 << endl;
	case 1:
		cout << 1 << endl;
	case 2:
		cout << 2 << endl;
		break;
	case 3:
		cout << 3 << endl;
		break;
	case 4:
		cout << 4 << endl;
	}
	return 0;
}
3

2.3 switch 和 多重if 结构的对比

相同点:都是用来处理多分支条件结构
不同点:
switch: 等值条件判断,条件个数有限(杀鸡刀,大于20个分支,就不要用了)
多重if:判断某个连续区间时的情况(杀牛刀)
demo: 判断一个有多少天, case 中的语句可以省略

int main(){
	//判断某月有多少天
	int month = 2;
	switch(month){
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
		cout << "31天" << endl;
		break;
	case 4:
	case 6:
	case 9:
	case 11:
		cout << "30天" << endl;
		break;
	case 2:
		cout << "28 或者 29 天" << endl;	
		break;
	}
	return 0;
}
28 或者 29
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值