算术运算符
- 两数相除,如果要得小数,必须有一个是double或者float
- 除数不能为零
- %:取模,就是数学中的余数
求个十百千位(int num 1234)
个位:num%10
十位:num/10%10
百位:num/100%10
千位:num/1000%10
自加自减
- 如果 a++和++a单独使用效果相同
1 | int a = 1; |
以上代码b等于1,a等于2;
结合其他表达式子
++在前先加后使用,++在后先用后加 5
赋值运算符号
- a += 2 -> a = a+ 2 ;
- a *= 3 -> a = a * 3;
比较运算符
- == 判断是否等于
- != 不等于
- 在x语言中0为假 1为真
逻辑运算符
- 逻辑非
- 非0为真
- 逻辑&&必须a和b都为真,整个表达式的值才为真
- 当前面为假的时候,b表达式不执行
- 逻辑||
- 只要有一个为真就为真
- 如果a||b,如果a为真b表达式不执行
优先级
- 如果是同一个优先级,则看结合方向
逗号运算符
- 最终的结果是最后一个表达式的结果
类型转换
自动转换
- 所需要的类型,和给的类型不匹配,需要进行转换
强制转换
- (int)2.14 :强制转换为int类型
- (double)2 :转换为double类型
转换的原则:
- 数据不丢失:一般都是小的转大的
选择结构
if else
- 结果有两种
1 |
|
- 如果条件成立执行if中的循环体语句,条件不成立执行else中的语句
- 除此之外我们还可以使用多级的if else if else if else
- 如果结果有多种,但是不确定,而且每个结果是互斥的用多级的if else
三目运算符
- 求a和b的最大值
- a>b?a:b
- 如果a大于b 表达式的值就是a,否则就是b
Switch
1 | switch (a) |
- ()中判断条件只能是整数
- break的作用是用来跳出循环,如果没有break会跳过下一句的判断直接执行
循环结构
while循环
1 |
|
- 当我们需要做多次且重复的事情的时候
- 上面的程序通过循环来实现了加和的计算
- while(1) : 死循环
do while循环
1 | do { |
- 与while的区别就是,会先进行执行,然后再进行判断
- 无论条件是否满足都会执行一次
for循环
1 | for(int x; x < n; x++) |
- 括号中的三个表达式都是可有可无
- 初始化表达式只会执行一次
- 条件表达式是执行的条件
- 条件递增是为了修改条件的控制
- for后面也不可以加分号,否则即使一直在执行空语句
- 如果for循环中不写条件,默认为真
嵌套循环
1 |
|
- 如果我们在循环中再写一个循环就叫做 循环的嵌套
- 不仅仅是for ,while,if也可以是用嵌套
跳转语句
break
- 跳出switch或者离break最近的一层循环
continue
- 跳过本次循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
int i = 0;
for (i = 0; i < 5; i++)
{
if (i == 2)
{
//break;
continue;
}
}
return 0;
}可以使用如上代码来比较continue和break的区别
goto
无条件跳转
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
int i = 0;
int j;
for (i = 0; i < 2; i++)
{
for ( j = 0; j < 3;j++)
{
if (j == 1)
goto end
//break;
printf("i = %d j = %d\n",i,j)
}
}
end:
return 0;
}由于break只能跳出一层的循环,所以我们可以使用goto来跳出多重的循环
循环的注意事项
- if(10 < a < 15)
- 实际上我写除这样的代码完全不是正确的:首先无论a是不是大于10,其结果只能是0或者是1,所以最终表达式的值只能1,因为无论是0还是1都注定小于15\
- 因此我们如果先写出表达区间的代码通常我们采用这种写法:a > 10 && a < 15
- 如果有两个三目运算符号在同一个表达式,按照从右向左的顺序进行运算