断点调试
- 设置断点
- 点击调试
- 按Fn + F7运行下一行
交换两个变量
- 用第三个变量交换
- 不用第三个变量
a = a + b;
b = a - b; // a + b - b → a
a = a - b; // a + b - a → b
运算符
算术运算符
+ - * /
注意 / 的结果看两边操作数的精度,最终运算结果的精度会跟最高精度的数据类型相同
eg:
3 / 2 = 1;
3.0 / 2 = 1.5;
逻辑运算符
&& || !
与 或 非
if(n % 5 == 0 && n % 3 == 0) 既...又...
if(n % 5 == 0 || n % 3 == 0) ...或...
if(!(n % 5 == 0)) n不能被五整除
&& 优先级 要比 || 高
&& || &&
(||) && (||)
短路原则
A && B && C 前面出现false, 整个式子就为false, 就不会往后看了
A || B || C 前面出现true, 整个式子就为false, 就不会往后看了
简写
if(A) ~ if(A != 0)
if(!A) ~ if(A == 0)
0 表示假, false
非0 表示真 true
自增运算符
n++;
++n;
n++(整体) = n 先使用后自增
++n(整体) = n + 1 先自增后使用
int n = 100;
int m = n++; // ++ n
//n++
m = n;
n = n + 1;
//++n
n = n + 1;
m = n;
位移运算符
<< >>
三目运算符
a ? b : c
if(a)
{
b;
}
else c;
int gcd(int a, int b)
{
return !b ? a : gcd(b, a % b);
}
局部变量与全局变量
局部变量: 在main函数里面定义的,定义在栈中,如果不初始化,没有默认值
全局变量: 在main函数外面定义的,定义在堆中, 初始值默认为0
局部变量优先
常量
常量: 值不能改变
e → 10的多少次方, 1e5 → 1 * 10^ 5,它是一个浮点数
- 定义常量的方法
- const 修饰
- const 类型 变量名 = 值;
- const int n = 100;
const int N = 3e6 + 10; int q[N];//数组的大小必须是常数
- const 类型 变量名 = 值;
- #define 宏定义
- #define 变量名 数值
- #define n 100
- #define 可以用来定义函数,但是一定要把每一部分就加一个括号
- #define 变量名 数值
- const 修饰
选择结构
- if-else
单纯出现一个else, 取对立
出现else if 分更细的情况
判断闰年
如果它能整除100, 能否整除400
如果不能整除100, 能否整除4
if(n % 100 == 0 && n % 400 == 0)
yes
else if(!(n % 100 == 0) && n % 4 == 0)
yes
else no
简单一些的写法
if(n % 4 == 0 && n % 100 != 0 || n % 400 == 0)
{
printf("Yes");
}
else printf("No");
闰年👉
xx00 👉 % 400 == 0
xxxx 👉 % 100 != 0 && % 4 == 0
if()
else if()
else if()
else
if()
{
if()
{
1;
2;
}
else if();
else
{
;
}
}
- switch case
switch(n)
{
case '+':
1;
2;
3;
case '-': break;
case '*':
5;
6;
break;
default:
}
n可以是任何类型, case 后面的常量只要与n的类型对应即可
case 类似 else if()
default 类似 else
case 里的语句不需要用花括号括起来,但if里面的语句如果超过两条一定要用花括号括起来
case 相当于一个入口, 但是break 是设置一个出口,如果不加break,会一直往下滑,一直到break跳出来
好习惯: 给defalut以外的每一个case都加一个break;
int n = 3;
switch(n)
{
case 5:
printf("aaa");
printf("bbb");
break;
case 2:
printf("ccc");
break;
case 1:
printf("ddd");
break;
default:
printf("abs");
}