03运算符与表达式
一、课时2作业
-
leetcode考研时不需要刷,校招时需要
-
编译分为警告和错误,警告可以忽略
二、算数运算符与关系运算符
1.运算符分类
-
C语言提供了13种类型的运算符,黑色字体部分在初级阶段学习。
![](https://img-blog.csdnimg.cn/direct/e39f808bb30b49378567b7f704a8dc8b.png)
2.算数运算符及算数表达式
-
+、-、*、/、%
-
先进行乘、除、取余(取模),后进行加减。
-
除%运算符外,其余几种运算符既适用于浮点数又适用于整型数。
-
当操作符/的两个操作数都是整型数时,它执行整除运算,在其他情况下执行浮点型数除法。
-
%接收两个整型操作数,将左操作数除以右操作数,返回值是余数而不是商。
-
由算数运算符组成的式子成为算数表达式,表达式一定有一个值。
-
例子
#include <stdio.h>
int main() {
int result=4+5*2-6/3+10%4;
printf("result=%d\n",result);
return 0;
}
-
结果
result=14
3.关系运算符与关系表达式
-
关系运算符:>大于、<小于、==是否等于、>=大于等于、<=小于等于、!=不等于。
-
由关系运算符组成的表达式称为关系表达式。
-
关系表达式的值只有真和假,对应的值为1和0。0代表假,非0即为真。
-
关系运算符的优先级低于算术运算符。
-
判断整型变量i是否等于3时可以写为3==i,即把常量写在前面而把变量写在后面。
-
判断三个数是否相等,不能写5==5==5(5==5的结果为1,1==5的结果为0)。
-
判断三个变量a、b、c是否相等,不能写为a==b==c,而应该写为a==b&&b==c。
-
例子
#include <stdio.h>
int main() {
int a;
while(scanf("%d",&a))
{
if(3<a<10)//无论a的值为多少,这个表达式的值始终为真。
{
printf("a is between 3 and 10\n");
}else{
printf("Ha is not between 3 and 10\n");
}
}
return 0;
}
-
结果
5
a is between 3 and 10
90
a is between 3 and 10
4.运算符优先级表(重要)
![](https://img-blog.csdnimg.cn/direct/c1c1d5d9722e435bab2170c70ea902fe.png)
![](https://img-blog.csdnimg.cn/direct/f07970817e8141a4ab3b85059a5692b8.png)
三、逻辑运算符与赋值运算符
1.逻辑运算符与逻辑表达式
-
逻辑运算符:逻辑非!、逻辑与&&、逻辑或||。
-
逻辑非的优先级高于算术运算符,逻辑与和逻辑或的优先级低于关系运算符。
-
逻辑表达式的值只有真1和假0。
-
例子
#include <stdio.h>
//普通闰年:能被4整除但不能被100整除的年份为普通闰年。
//世纪闰年:能被400整除的为世纪闰年。
int main() {
int year;
while(scanf("%d",&year))
{
if(year%4==0 && year%100!=0 || year%400==0)
{
printf("%d is leap year\n",year);
}else{
printf(%d is not leap year\n",year);
}
}
return 0;
}
-
结果
1000
1000 is not leap year
2000
2000 is leap year
2001
2001 is not leap year
m//退出
-
例子
#include <stdio.h>
int main() {
int i,j=1;
i=!!j;//自又至左结合,!j=0,!!j=1
printf("i is %d\n",i);
return 0;
}
-
结果
i is 1
-
短路运算:逻辑与和逻辑或存在。
-
逻辑与短路运算,当前面一个表达式为假时,后面的表达式不会得到执行。
-
逻辑或短路运算,当前面一个表达式为真时,后面的表达式不会得到执行。
-
例子
#include <stdio.h>
int main() {
int i=0;
i && printf("You can't see me\n");
i || printf("You can see me\n");
return 0;
}
-
结果
You can see me
2.赋值运算符
-
左值是那些能够出现在赋值符号左边的东西,右值是那些可以出现在赋值符号右边的东西。(区别左操作数和右操作数)
-
左值必须是变量。b+25=a错误,因为b+25并未标识一个特定的位置(并不对应特定的内存空间)。
-
例子
#include <stdio.h>
int main() {
int a=1,b=2;
b+25=a;
return 0;
}
-
结果
error: lvalue required as left operand of assignment
b+25=a;
^
-
复合赋值运算符:+=、-=、*=、/=、%=。i=i+5;可以写为i+=5;
-
复合赋值运算符简化了程序,可以使程序精炼、提升月度速度;复合赋值运算符提高了编译效率。
-
例子
#include <stdio.h>
int main() {
int a=1,b=2;
a+=10;
b*=2;
printf("a is %d,b is %d\n",a,b);
return 0;
}
-
结果
a is 11,b is 4
3.求字节运算符sizeof
-
注意:sizeof不是函数,是运算符。
-
用于求常量或变量所占用的空间大小。
-
例子
#include <stdio.h>
int main() {
int i=0;
printf("i size is %d\n",sizeof(i));
return 0;
}
-
结果
i size is 4