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

C++运算符、表达式 条件结构

  • 1.表达式与运算符
    • 1.1赋值运算符
    • 1.2算术运算符
    • 1.3关系运算符
    • 1.4逻辑运算符
    • 1.5位运算符
    • 1.6 sizeof()
    • 1.7 三目运算符
    • 1.8 运算符的优先级
  • 2.条件结构
    • 2.1--if
    • 2.2 --switch结构
    • 2.3 switch 和 多重if 结构的对比

条件结构)
《老九学堂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, Falsecout << "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 =16cout << (16 >> 3) << endl;  // 16->10000,(尾部的元素舍弃掉3个)->10=2cout << (3 << 3)<< endl;    // 3->11 (1向左移动3位)-->11000=24return 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;  // 字符串类型会自动在末尾加\0return 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关系数据库——mysql常用函数总结

文本处理函数 Left(x,len) – 返回串左边的字符&#xff08;长度为len&#xff09; Right(x,len) Length(x) – 返回串的长度 Locate(x,sub_x) – 找出串的一个子串 SubString(x, from, to) – 返回字串的字符 Lower(x) Upper(x) LTrim(x) RTrim(x) Soundex(x) – 读…

setsockopt()用法(参数详细说明)

先来看看函数的原型: int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen); 然后我们来看看参数: s(套接字): 指向一个打开的套接口描述字 level:(级别): 指定选项代码的类型。

再议libcurl编程

那是2年前用libcurl了,我肯定好久不用的知识,放置久了就会遗忘,现在我又重拾起这个知识点,重头再来,至于前面的基础知识,可以参考我的 http://blog.csdn.net/pbymw8iwm/article/details/6675754 假设你要获取URL所表示的远程主机上的资源。你需要写一段程序用来完…

关系数据库——并发控制

并发控制 多用户数据库&#xff1a;允许多个用户同时使用的数据库&#xff08;订票系统&#xff09; 不同的多事务执行方式&#xff1a; 1.串行执行&#xff1a;每个时刻只有一个事务运行&#xff0c;其他事务必须等到这个事务结束后方能运行。 2.交叉并发方式&#xff1a; …

C++(6)--初识循环while,do-while

初识循环1.使用while 循环结构2.使用do-while 循环3.python中的while循环《老九学堂C课程》《C primer》学习笔记。《老九学堂C课程》详情请到B站搜索《老九零基础学编程C入门》-------------简单的事情重复做&#xff0c;重复的事情用心做&#xff0c;用心的事情坚持做(老九君…

map类的erase方法的在Linux与Windows中的差异

这次的代码是跨平台的,尼玛在win32上通过,但是在linux上不通过了,查找了一下原来是平台linux不支持。 有人举了例子: std::map< int , float > i_f_map; i_f_map[1] = 1.2f; i_f_map[23] = 1.4f;

C++(7)--for循环,break,continue语句

for循环1.for循环2.break 语句3.continue语句4.while,do-while,for 循环的异同5.for循环demo 嵌套循环-打印图形6.python 中的for循环《老九学堂C课程》《C primer》学习笔记。《老九学堂C课程》详情请到B站搜索《老九零基础学编程C入门》-------------简单的事情重复做&#x…

关系数据库——数据库恢复

实现技术 恢复操作的基本原理&#xff1a;冗余 恢复机制涉及的两个关键问题 如何建立冗余数据 数据转储&#xff08;backup&#xff09;登录日志文件&#xff08;logging&#xff09; 如何利用这些冗余数据实施数据库恢复数据转储 数据转储定义&#xff1a; 转储是指DBA将整个数…

Lua语言中pairs和ipairs的区别

tbl = {"alpha", "beta", ["one"] = "uno", ["two"] = "dos"} for key, value in ipairs(tbl) do print(key, value) end --pairs() --pairs()函数基本和ipairs()函数用法相同, 区别在于pairs()可以遍历整个table…

算法(22)-leetcode-剑指offer6

leetcode-剑指offer-545.面试题55- 二叉树的深度46.面试题55-2-平衡二叉树47.面试题57-1-和为s的两个数字-双指针48.面试题57-2-和为s 的连续正数序列-双指针49.面试题56-数组中出现数字的次数-位运算leetcode-136 只出现一次的数字Ileetcode-137 只出现一次的数字IIleetcode-2…

leetcode160 相交链表

编写一个程序&#xff0c;找到两个单链表相交的起始节点。 如下面的两个链表&#xff1a; 在节点 c1 开始相交。 示例 1&#xff1a; 输入&#xff1a;intersectVal 8, listA [4,1,8,4,5], listB [5,0,1,8,4,5], skipA 2, skipB 3 输出&#xff1a;Reference of the node…

lua的一些api文档总结吧

打算记录一些我认为重要的常用的api: 1. 建一个新表 void lua_createtable (lua_State *L, int narr, int nrec) 创建一个新的table, 并把它放在栈顶. narr和nrec分别指定该table的array部分和hash部分的预分配元素数量 无返回值 栈高度+1, 栈顶元素是新table #define l…

关于mysql的一些时间格式和字符的问题

最近在做一些游戏的数据分析&#xff0c;需要对大量数据的用户行为进行处理存库&#xff0c;其中有个数据库字段是datetime类型的&#xff0c;这个以前都没用过&#xff0c;我以前都喜欢用int来存放时间戳&#xff0c;但这次这样用&#xff0c;我就得在数据库中转换了&#xff…

算法(17)-leetcode-剑指offer1

leetcode-剑指offer-11.面试题3-数组中的重复数字2.面试题04-二维数组中的查找3.面试题05-替换空格4.面试题06-从尾到头打印链表5.面试题07-重建二叉树6.面试题09-两个堆栈实现队列7.面试题10-1-斐波那契数列8.面试题10-2-青蛙跳台阶问题9.面试题11-旋转数组的最小数字10.面试题…

蚁群算法的一些东西

运行了三个TSP经典用例,基本符合要求。仅仅是一份按照蚁群算法的原理写的代码,没有做任何优化。 // bigSearch.cpp : 定义控制台应用程序的入口点。 // #include<iostream> #include<math.h> #include<time.h> using namespace std; //该程序是以…

leetcode101 对称二叉树

给定一个二叉树&#xff0c;检查它是否是镜像对称的。 例如&#xff0c;二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3 说明: 如果你可以运用递归和迭…

Linux内核OOM机制的详细分析

Linux 内核有个机制叫OOM killer&#xff08;Out-Of-Memory killer&#xff09;&#xff0c;该机制会监控那些占用内存过大&#xff0c;尤其是瞬间很快消耗大量内存的进程&#xff0c;为了防止内存耗尽而内核会把该进程杀掉。典型的情况是&#xff1a;某天一台机器突然ssh远程登…

算法(18)-leetcode-剑指offer2

leetcode-剑指offer-211.面试题13-机器人的运动范围-广度优先搜索12.面试题14-1-剪绳子13.面试题14-2-剪绳子214.面试题16-二进制中1的个数-布莱恩克尼根15.面试题16-数值的整数次方-快速幂解析法16.面试题17-打印从1到最大的n位数17.面试题18-删除链表的节点18.面试题19-正则匹…

rabbitmq技术的一些感悟(一)

Rabbitmq 初识rabbitmq RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。如果不熟悉AMQP,直接看RabbitMQ的文档会比较困难。不过它也只有几个关键概念,这里简单介绍 几个概念说明: Broker

leetcode21 合并两个链表

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例&#xff1a; 输入&#xff1a;1->2->4, 1->3->4 输出&#xff1a;1->1->2->3->4->4 思路&#xff1a;链表归并。 /*** Definition for si…