一、控制流
循环语句:for、while、do-while
分支语句: switch,if-else if-else if-else
跳转语句: goto
- 循环语句
- while:循环
while(判断表达式) --》注意:()后面不能加分号
{
//代码块1
}
....//代码块2
判断表达式:其实就是一些值比较的结果 如3>5
判断表达式为真,则执行代码1
判断表达式为假,则执行代码2
C语言--》非0即真 1(真) 2(真) 1000(真) -21(真) 0(假)
bool类型的值--》true 值为1 false 值为0
- do-while:循环
do --》先执行一次循环再判断表达式
{
//代码块1
}while(判断表达); --》注意:()后面一定要加分号
....//代码块2
判断表达式为真,则执行代码1
判断表达式为假,则执行代码2
C语言非0即真 1(真) 2(真) 1000(真) -21(真) 0(假)
注意:while与do-while循环区别是什么
do-while循环内代码至少执行一遍
- for:循环
for(赋值表达式; 判断表达式; 变量变化表达式)
{
...//代码块1
}
...//代码块2
for代码先执行顺序:
赋值表达式(只执行一次)
判断表达式,若成立(判断结果为真),则执行代码块1 ,否则执行代码块2
判断结果为真,才有第三步:变量变化表达式
判断表达式,若成立(判断结果为真),则执行代码块1 ,否则执行代码块2
判断结果为真,才有第五步:变量变化表达式
注意:
三个表达式之间要以;隔开
- for扩展写法
写法一: for(; ; )==>while(1)
写法二: for( ;i<5; i++) 使用,for循环之前的变量赋值
- 分支语句
- if-else:选择控制流
if(判断表达式)
{
...//代码块1
}
else
{
...//代码块2
}
判断表达式为真,则执行代码1
判断表达式为假,则执行代码2
两个代码块当中只能执行其中一个
非0即真 1(真) 2(真) 16546(真) -21(真) 0(假)
模型一:这种模型,只要满足条件都会执行相关语句
if(判断表达式)
{
...
}
if(判断表达式2)
{
...
}
if(判断表达式3)
{
...
}
...
模型二:这种模型,它是从上往下进行判断,当满足其中一个时,后面的则不考虑执行
if(判断表达式)
{
...
}
else if(判断表达式2)
{
...
}
else if(判断表达式3)
{
...
}
else
...
- switch-case:选择控制流
switch(变量)--》变量:整型变量、字符变量、枚举变量
{
case 变量值:
代码块1;
break;
case 变量值:
代码块2;
break;
default:
printf("输入有误");
代码块n;
break;
}
- 跳转语句
goto:跳转语句
模型1:(可用,处理错误信息后退出程序)
。。。。//代码块
goto 标签;
。。。。//代码块
标签:
- 区别:
break:一般用于循环体或者switch-case;
用于循环体作用:跳出包含自己循环体,用于switch-case,跳出switch-case
continue:用于循环体内,作用:跳过continue后面代码块
return:在函数当中用于返回函数值,或者结束该函数。
二、运算符
- 算术运算符
算术运算符:+ - * / % ++ --
解析
+ :加法 num = a+b; num = a+5; num = 25+12;
+ :减法 num = a-b; num = a-5; num = 25-12;
+ :乘法 num = a*b; num = a*5; num = 25*12;
/ :取整(商) num = a/b; num = a/5; num = 2/5;
% :取余(余) num = a%b; num = a%5; num = 2%5;num = 12%5;
++ :自加 运算遵守最近原则(指的是最左边,如果是变量,先赋值再加;若是加
号,先加,再赋值)
-- :自减 运算遵守最近原则(指的是最左边,如果是变量,先赋值再加;若是加
号,先加,再赋值)
- 逻辑运算符
逻辑运算符:!&& ||
解析
- !:逻辑非
if(!判断表达式)
{
。。。//代码块
}
判断表达式为假,运行代码块
判断表达式为真,不运行代码块
- &&:逻辑与
if(判断表达式1 && 判断表达式2)
{
。。。//代码块
}
两个判断表达式1与判断表达式2都为真时,才能运行代码块
- ||:逻辑或
if(判断表达式1 || 判断表达式2)
{
。。。//代码块
}
两个判断表达式1与判断表达式2中的一个为真时,才能运行代码块
- 关系运算符
关系运算符:> >= < <= == !=
解析
> :大于 a > b
>= :大于等于 a >= b
< :小于 a < b
<= :小于等于 a <= b
== :等于 a == b if(a == b)
!= :不等于 a != b
>= <= == !=这些运算符是不能分开的
在数学当中 a < b < c
在代码如何表达 (a < b) && (b < c)
- 复合运算符
复合运算符:+= -= *= /= %= >>= <<= &= ^=
a %= b == a = a%b i++ -->i=i +1
a ^= b == a = a ^ b
1byte = 8bit 1111 1111 -->
解析
+=: num += i; ==> num = num+i;
-=: num -= i; ==> num = num-i;
*= /= %= >>= <<= &= ^=
a ^= b; ==>a = a^b;
注意:复合运算符是不能分开写
- 位运算
位运算:& | ~ ^ >>(右移) <<(左移)--》stm32
&: 位与
技巧:两位为1,结果为1;只有一位为0,结果为0;
- 例子
0x12 & 0x47
0x12: 0001 0010
&
0x47: 0100 0111
结果:0000 0010 ==>0x02==>2
- | :位或
技巧:两位只要有一位为1,结果为1
- 例子:
0x12 & 0x47
0x12: 0001 0010
|
0x47: 0100 0111
结果:0101 0111 ==>0x57
- ~ :位取反
按位取反 ~1 = 0 ; ~0 = 1;
例子:
0x12
二进制:0001 0010
~: 1110 1101--> 0xed
^ :异或
概念:两位相同为0,不同为1
- 其它运算符
逗号,--》 顺序运算符,从左到右
例子:
int a=5, b=6, c=10;
int b = 6 ;
int c = 10;
= --》赋值运算
例子:
int b = 10; //把10赋值给b变量空间 ;将10赋值给变量b
三目运算符 (常用)
判断表达式? 运行结果1:运行结果2
判断表达式为真时,结果为:运行结果1
判断表达式为假时,结果为:运行结果2
int a = 2 ;
int b = 4 ;
int c = if((a-b) > 5 )? a : b
(a+b)> 5:判断表达式
a:运行结果1 -->2
b:运行结果2 --> 4
例子:
int a = 10, b = 5, c = 3, ret;
ret = (a>b && b>c) ? a+b : c>b;
(a>b && b>c)为真,结果:a+b = 15
故ret = 15