cpp-base
1.cin&cout
-
cin对应输入流,用于获得输入/取数据;cout对应输出流,用于输出数据 -
cin对应于>>,要从中取,数据的流向是流->变量。对应的>>叫做输入运算符。 -
cout对应于<<,要向其中输入,数据的流向是流<-变量。对应的<<叫做输出运算符。考虑是>>还是<<时,将流作为左边的,固定的,被输入/输出的对象
-
cin,cout是iostream头文件中定义的对象,该文件中还定义了cerr,clog共四个ostream对象 -
使用istream(cin)对象作为条件时,
2.两种注释方式
//注释方法1,‘//’。用于单行注释
/*
注释方法2, 用于多行注释
*/
特别注意,两种注释方法不可以均不可以嵌套
3.读取不定量的数据
将std::cin >> val作为循环条件,可以实现不定次数的输入
#include <iostream>
int main(){
int val = 0, sum = 0;
while (std::cin >> val){
sum += val;
}
std::cout << sum << std::endl;
return 0;
}
- 当后续输入的值类型与第一次输入值的类型一致时,
std::cin >> val的值为1,会继续循环。 - 当后续输入的值类型与第一次输入值的类型一致时,
std::cin >> val的值为0,会结束循环。
for (cin >> n; n != 0; cin>>n){}
上面的for语句也可以实现不定次数的输入,当输入0时停止。
4.常量
-
const关键字定义的常量格式:
const valType valName value -
#define定义的常量格式:
#define valType value这种方法的常量会通过值的类型来自动确定它的类型,属于隐式
-
bool类型的值与符号常量
bool类型的值,即
True/False可以看作cpp预定义的两个整形常量,其值分别为1、0。
5.浮点数的等于与不等
-
应该避免对浮点数进行
==/!=的运算,如下例。double x = 3.0, y = 4.0; bool a = (y-x*(y/x)*y == 0.0); cout << a << endl; ##一些编译器中,a的值可能为0,即false。说明浮点数相减的值不为零。 -
对于浮点数的比较,应当采用
绝对值只差很小来判断两个浮点数是否相等。double x = 3.0, y = 4.0; if (abs(x-y) < 1e-7) cout << "x == y" << endl; else cout << "x != y" << endl;
6.位运算
-
取反
~指将0变为1,将1变为0
-
与
&1&1=1,其余为0
-
或
|0|0=0,其余为1
-
异或
^相异为1,其余为0。异或的一个性质:
( x ^ a ) ^ a = x -
左移操作
<<- 左移规则:将符号左边的数转为二进制后,将该数整体左移,移动的位数为符号右边的数。
- 移动方法:将二进制数整体向左移动,高位舍弃,低位补齐0
- 有时左移1位相当于
*2
-
右移操作
>>- 右移规则:将符号左边的数转为二进制后,将该数整体右移,移动的位数为符号左边的数。
- 移动方法:将二进制数整体向右移动,舍弃低位,而对于高位:
- 对于
有符号的数:高位补齐原最高位(符号位) - 对于
无符号的数和有符号的非负数:高位补0
- 对于
7.表达式
- 常量表达式:在编译时能够确定其值的表达式
- 左值表达式:指能出现在赋值操作符
=左边的表达式。这种表达式值的结果存放在固定的、可读取的内存中,而非临时的存储空间中。如:++x是一个左值表达式,该式子的值存在了x中x++不是一个左值表达式,该式子的值为x+1,遇上一个例子不一样的是这个式子的值没有被存在变量x中,而是作为一个临时常量存在了临时存储空间中
- 用大括号
{}括起来的表达式被视作一整个表达式
8.空语句
cpp中的空语句指的是:只包含语句结束的;,而不包含任何表达式的语句。
9.switch语句
switch (exp){
case expVal1: .......; break;
case expVal2: .......; break;
default: ........;
}
- 要检测的表达式/有值的变量放在括号中
case后跟要检测变量的值,且将要执行的语句放在冒号后case中可以放多条语句,用;隔开,一般在语句末加break
10.循环语句
while语句
while (exp0) {exp1;exp2;...}
while语句的执行顺序如下图所示:
do-while语句
do {exp1,exp2,.....} while (exp0);
do-while循环的执行流程如下所示:
for语句
for (expA; expB; expC) {exp1,exp2,.....}
for循环的执行流程如下图所示:
expA|expB|expC:三个表达式可以均为空语句,但必须含有两个;expA:用作赋值表达式,for开始时会无条件执行expB:用于判断,值为1时循环执行循环体-expC;值为0时结束for语句expC:用于迭代,即对迭代变量进行改变,为下次的循环做准备
11.无条件转移语句
无条件转移语句包括:goto,break,continue和return
goto
labelName: doSth.....;
......
goto labelName;
goto用于转至标签处执行,标签是指用labelName:这种格式标识的内容。
特别注意:
- goto在跳转时,不可以越过变量定义。即是说若想跨过的语句中含有变量的定义,则不能够使用goto语句。
- goto在跳转时,不可以跳出/跳入函数体。
- goto语句常用于跳出多重循环,因为
break语句只能够跳出一重循环。
break
break的作用:跳出当前break所在的循环
continue
continue只能够用在循环语句中。具体来说,只能结合while,do-while,for这三种循环语句来使用。
- 用于
while时,continue将会跳过其后的语句,转至while的条件判断处 - 用于
do-while时,continue会跳至位于末尾的条件判断处 - 用于
for时,continue会跳至expC处,即循环末段迭代处,然后再送至expB条件判断处

浙公网安备 33010602011771号