1. 输入输出
1)控制符
2) 如果要读取所有输入的字符,包括空格和回车,可以有如下两种方法,其中EOF在windows里默认是 ctrl+Z
注:输入字符时,scanf不会跳过空格,输入其他类型数据时会跳过空格。但是cin会跳过空格。
#include <iostream> using namespace std; int main(){ int a; while((a = cin.get()) != EOF){ cout << (char)a; } char c; while(scanf("%c",&c) != EOF){ printf("%c",c); } ; }
3)cin/cout比scanf/printf速度慢,因此数据量比较大时推荐使用后者。此外在一个程序里不建议同时使用cin和scanf,或者同时使用cout和printf。
4)freopen重定向输入:用于调试程序时避免手动输入测试数据
注:1.文件路径的输入用到了\\而不是\,是因为字符串的输入中要输入\就得在前面加个\;2.while(cin>>n) 这里也可以用while(scanf("%d",&n) == 1),对于scanf来说,返回值为输入变量的数目,对于cin来说,返回值为是否按要求输入了所有的变量(即0和1),停止输入可输入ctrl+Z。
2. 加减乘运算
1)以操作数中精度高的类型为准,其中
double>long long>int>short>char
2)运算溢出
溢出的部分直接丢弃,举例如下。解决溢出的方法就是使用更高精度的数据类型。
3. 运算符优先级
4. switch
switch语句在进入某个case分支后,会一直执行到第一个碰到的break,即使这个break是在后面的case 分支中,直到swith语句末尾的}。举例如下
5.数组
注:1.数组一般不要定义在main里面;2.数组越界,比如定义int a[10],语句a[-2]=100编译也不会报错,但可能会修改其他变量的值,或者访问指令区域,使得程序运行会出错。
举例:筛法求n以内的素数(素数即不存在除1和本身外的因子)
思路1):遍历一一判断。判断数j,即判断小于等于j的平方根的数可不可以整除j;
思路2):对于数i,删掉i的倍数的数
6.函数
1)传值:形参只是实参的拷贝,形参的改变不影响实参
2)传引用:形参的改变影响实参,比如数组
7.库函数和头文件
库函数是由编译器自带的,为使用这些库函数需要有声明,而头文件内部即包含许多库函数的声明。
比如 cin cout ,需要使用头文件iostream 因此需要#include <iostream>
8.位运算
按位与&:置0
按位或|:置1
按位异或:取反 0xff(1111 1111)
注:异或运算的特点是 如果a^b=c则 c^b=a c^a=b 此特点可用于加密解密,或者交换两个数的值