一个表达式是一系列运算符和算子的组合,用来计算一个值
计算时间差的代码,体现出/和%的区别,一个舍余数,一个取余数。
int main ()
{
//计算时间差
int hour1, hour2 = 0;
int minute1, minute2 = 0;
printf("请输入第一个时间\n");
scanf("%d:%d", &hour1, &minute1);
printf("请输入第二个时间\n");
scanf("%d:%d", &hour2, &minute2);
int t1 = hour1 * 60 + minute1;
int t2 = hour2 * 60 + minute2;
int delt = t2 - t1;
printf("时间差为%d小时%d分钟", delt /60, delt % 60);
return 0;
}
运算符的优先级
与数学相同,计算机中的运算符有不同的优先级
(单目 :表达式中有些运算符使用时用到两个算子称为双目运算符,而图中1,2所示单目运算符计算时只涉及一个算子,即图中1 2给变量b取正值和取负值,进行一次单目运算,之后进行多目运算,即与变量a相乘。)
赋值运算符
与一些别的语言不同,C中赋值也是一种运算符,也有结果(某些语言中赋值是一种语句),如a=6的结果是a被赋予的值,也就是6;而 a=b=6-->a=(b=6)
嵌入式赋值(一个不良习惯)
int a=6;
int b;
int c=1+(b=a);
- 不易阅读
- 容易产生错误
结合关系(另一个不良习惯)
result=a=b=3+c;
result=2;
result=(result=result*2)*6*(result=3+result);
这样的表达式太复杂,不容易阅读和理解,容易造成读程序时的误解。所以要避免写出这样的复杂表达式来。这个表达式应该被拆成若干个表达式,然后以明显的正确的顺序来进行计算。
交换 (常用套路)
int t=a
a=b
b=c
复合赋值
- 5个算术运算符,+-*/%,可以和赋值运算符“=”结合起来,形成复合赋值运算符:“+=”,“-=”,“*=”,“/=”,“%=”
- 如total += 5 -----> total = total+5;
- 注意两个运算符中间不要有空格
- 注意a+=(b+1)/2--->a=a+(b+1)/2 a*=b+1--->a=a*(b+1)
递增递减运算符
- “++”和“--”是两个很特殊的运算符,它们是单目运算符,这个算子还必须是变量。这两个运算符分别叫做递增和递减运算符,他们的作用就是给这个变量+1或-1
- count++; count+=1; count=count+1;
- 前缀后缀:++和--可以放在前面和后面叫做前缀后缀形式。但a++的值是a加1以前的值,而++a的值是加了1以后的值,无论哪个,a自己的值都加了1
int main()
{
int a;
a= 10;
printf("a++=%d\n", a++);
printf("a=%d\n", a);
printf("++a=%d\n", ++a);
printf("a=%d\n", a);
return 0;
}
关系运算符
- 用于判断条件,决定程序的流程
- “=”是赋值,“==”是判断两个数是否相等,注意不能混用。
- C没有“之间”,“中间”,“之内”或“在某范围内”的关系运算符,只能表达大于等于某并且小于等于某。
当两个值的关系符合关系运算符的预期时,关系运算的结果为整数1,否则为整数0.
int main()
{
printf("%d\n", 5 == 5);
printf("%d\n", 5 == 6);
printf("%d\n", 5 < 6);
printf("%d\n", 5 > 6);
return 0;
}
结果
优先级
1.所有的关系运算符的优先级比算数运算的低,但比赋值运算的 高。
int main()
{
printf("%d\n",7>=3+4);
return 0;
}
得到结果为1(7>=3+4的和关系为真,值为1),而非5(7>=3的关系为真,值为1,与4相加得5)
2.判断是否相等的==和!=的优先级比其他的低,而连续的关系运算符是从左到右进行的。
5>3==6>4 先判断大小再判断相等 且判断大小从左到右进行
逗号运算符
一条语句理论上是有返回值的,如果语句里面有多个逗号,则以最后一个逗号后面的表达式值为返回值
目前就只在for中使用ex:for(i=0,j=1;i<j;i++,j--)...
条件运算符(旧朝遗老)
count=(count>20)?count-10:count+10;
||
if(count>20) 易嵌套不易理解
count-=10; 条件运算符的优先级高于赋值运算符,但是低于其他运算符
else 条件运算符是自右向左结合的
count+=10; 不建议用
逻辑运算符
#include <stdio.h>
int main()
{
int year;
printf("请输人年份:");
scanf("%d", &year);
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
printf("%d 是闰年\n", year);
else
printf("%d 非闰年\n", year);
return 0;
}
! > 算术运算符 > 关系运算符 > && > || > 赋值运算符