表达式
一个表达式是一系列运算符和算子的组合,用来计算一个值
amount = x * (1 + 0.033) * (1 + 0.033) + (1*0.033);
total = 57;
count = count + 1;
value = (min / 2) * lastValue;
运算符
- 运算符(operator)是指进行运算的动作
eg.“+”,“-”
- 算子(operand)是指参与运算的值,可能是常数,可能是变量,也可能是一个方法的返回值
eg. a = b + 5
a,b,5 算子
=,+ 运算符
计算时间差
输入两个时间,每个时间分别输入小时和分钟的值,然后输出两个时间的差
- 当思考一个问题如何用程序来解决的时候
- 程序里要有什么样的变量,这些变量怎么表达这些数据,怎么读取用户数据
- 有数据后怎么计算
int hour1, minute1;
int hour2, minute2;
scanf("%d %d", &hour1, &minute1);
scanf("%d %d", &hour2, &minute2);
变量 hour1,hour2,minute1,minute2
计算 如果直接分别减,会出现分钟错位的情况
>>小时×60+分钟 形成以分钟为单位的时间数据
>>对结果取余,分别得到小时和分钟
int hour1, minute1;
int hour2, minute2;
scanf("%d %d", &hour1, &minute1);
scanf("%d %d", &hour2, &minute2);
int t1 = hour1 * 60 + minute1;
int t2 = hour2 * 60 + minute2;
int t = t2-t1;
printf("时间差是 %d小时%d分。", t/60, t%60);
运算符优先级
优先级 | 运算符 | 运算 | 结合关系 | 举例 |
---|---|---|---|---|
1 | + | 单目不变 | 自右向左 | a*+b |
1 | - | 单目取负 | 自右向左 | a*-b |
2 | * | 乘 | 自左向右 | a*b |
2 | / | 除 | 自左向右 | a/b |
2 | % | 取余 | 自左向右 | a%b |
3 | + | 加 | 自左向右 | a+b |
3 | - | 减 | 自左向右 | a-b |
4 | = | 赋值 | 自右向左 | a=b |
单目 只有一个算子
eg.-a表示负a
双目 有两个算子
赋值运算符
- 赋值也是运算,也有结果
- a=6的结果是a被赋予的值,也就是6
- a=b=6 >> a=(b=6)
嵌入式赋值
int a = 6;
int b;
int c = 1 + (b=a);
- 不利于阅读
- 容易产生错误
结合关系
-
一般自左向右
-
单目+-和赋值=自右向左
result = a = b + c;
result = 2;
result = (result = result * 2) * 6 * (result = 3 + result);
不容易阅读和理解,会造成误解,要避免这样复杂的表达式
求平均值
交换变量
交换两个变量
int a = 6;
int b = 5;
期望:a>>5 b>>6
程序是按步进行的:程序表达的是顺序执行的动作,而不是关系
eg.a=b; >>a=b=5, b=5
b=a; >>a=5, b=a=5
是依次执行的,结果使a,b都得到b原来的值
方法:引入“空变量”
用一个临时变量做交换时临时存放的地方(一种套路,靠阅读积累)
#include<stdio.h>
int main()
{
int a=5;
int b=6;
int t;
t=a;
a=b;
b=t;
printf("a=%d,b=%d\n", a,b);
return 0;
}
复合赋值和递增递减
复合赋值
- 5个算术运算符可以和赋值运算符结合起来,形成复合赋值运算符
“+=”、“-=”、“*=”、“/=”和“%=”
eg.total += 5 >> total = total + 5
- 两个运算符中间不要有空格
ex, total += (sum+100)/2; >> total = total + (sum+100)/2;
total *= sum+12; >> total =total*(sum+12);
递增递减运算符
“++”和“--”是两个很特殊的运算符,他们是单目运算符,这个算子还必须是变量。他们的作用是给这个变量+1或-1
(小延申:C++名字的由来)
count++; <<>> count += 1; <<>> count=count + 1;
前缀后缀
- ++和--可以放在变量前(前缀形式),也可以放在变量后(后缀形式)
- a++的值是a加1以前的值,而++a的值是加了1以后的值,无论怎样,a的值都加1
表达式 | 运算 | 表达式的值 |
---|---|---|
count++ | count加1 | count原来的值 |
++count | count加1 | count+1以后的值 |
count-- | count减1 | count原来的值 |
--count | count减1 | count-1以后的值 |