运算符与表达式
运算符
赋值运算符、算术运算符、关系运算符、逻辑运算符
表达式
符号与操作数的组合
例如:a = (b + 3) + (b -1)
赋值运算符
单等号 =
计算顺序:从右往左
#include <stdio.h>
int main()
{
//符合赋值运算符示例
int num = 5;
x += 10; //等价 x = x + 10;
printf("%d\n",x);
x -= 10; //等价 x = x - 10;
printf("%d\n",x);
x *= 10; //等价 x = x * 10;
printf("%d\n",x);
x /= 10; //等价 x = x / 10;
printf("%d\n",x);
x %= 10; //等价 x = x % 10;
printf("%d\n",x);
return 0;
}
算术运算符
算术运算符可以进行算术运算
一元运算符:++、-- ()
#include <stdio.h>
void main()
{
int num = 5;
int result = num++; //后置
printf("result = %d\n",result);
}
//结果为5
#include <stdio.h>
void main()
{
int num = 5;
int result = num; //先赋值给了result
num++; //再++ 就是num加了一个1
printf("result = %d\nnum++ = %d\n",result,num++);
}
//结果为 5 6
注意:代码段一等价于代码段二的写法,这就是为啥result = num++ 的结果为5,而不是6
二元运算符:+、-、*、/、%
#include <stdio.h>
int main()
{
//定义两个整型变量
int num1 = 5,num2 =2;
//4个double型变量用来存放计算结果
double result1,result2,result3,result4;
result1 = num1 / num2; //除法
result2 = num1 % num2; //取模
result3 = num1++; //后置
result4 = --num2; //前置
printf("num1 / num2 = %.2lf\n",result1);
printf("num1 %% num2 = %.2lf\n",result2);
printf("num1++ = %.2lf\n",result3);
printf("--num2 = %.2lf\n",result4);
return 0;
}
关系运算符
关系运算符可以比较大小、高低、长短
- >、<
- >=、<=
- ==、!=
注意:C语言中,0表示假,1(非零)表示真
逻辑运算符
运算符 | 表达式 | 说明 |
&& 并且 | 条件1 && 条件2 | 两个条件同时为真时,结果为真 |
|| 或 | 条件1 || 条件2 | 两个条件有一个为真时,结果为真 |
! | ! 条件 | 条件为真时,结果为假 条件为假时,结果为真 |
位运算符(选学)
运算符 | 作用 | 示例 |
& | 按位与 | 两个操作数同时为1结果为1 |
| | 按位或 | 两个操作数只要有一个为1,结果就为1 |
~ | 按位非 | 操作数为1,结果为0;操作数为0,结果为1 |
^ | 按位异或 | 两个操作数相同,结果为0;不相同结果为1 |
<< | 左移 | 右侧空位补0 |
>> | 右移 | 左侧空位补符号位 |
>>> | 无符号右移 | 左侧空位补0 |
sizeof运算符
使用sizeof运算符可以获得数据类型占用内存空间的大小
基本用法:sizeof(type name)
结果以字节为单位
#include <stdio.h>
void main()
{
printf("int类型占用内存空间:%d\n",sizeof(int));
printf("long类型占用内存空间:%d\n",sizeof(long));
printf("float类型占用内存空间:%d\n",sizeof(float));
printf("double类型占用内存空间:%d\n",sizeof(double));
printf("char类型占用内存空间:%d\n",sizeof(char));
}
运算符优先级
运行结果是什么
#include <stdio.h>
void main()
{
printf("%d\n",!((18+45%3*5)>16));
}
//结果 0
记忆技巧
- 单目运算符号包括 ! ~ ++ -- sizeof,优先级别高
- 优先级别最低的是赋值运算符
- 可以通过()控制表达式的运算顺序,()优先级最高
- 从右往左结合性的只有赋值运算符、三目运算符和单目运算符
- 算术运算符 > 关系运算符 > 逻辑运算符
//级别从高到低排序
// () sizeof ++ --
// !
// 算术运算符
// 关系运算符
// &&
// ||
// 赋值运算符
条件结构
先判断后执行
#include <stdio.h>
void main()
if(条件为真)
{
//代码块1
}
else
{
//代码块2
}
多重if结构
#include <stdio.h>
void main()
if(条件1)
{
//代码块1
}
else if(条件2) //这里区分python里面的 elif
{
//代码块2
}
else
{
//代码块3
}
switch结构
#include <stdio.h>
int main()
switch(表达式){
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
...
default:
语句;
}
switch结构注意点
- switch后的表达式只能是整型或字符型
- case后常量表达式的值不能相同
- case后允许多条语句,不需要大括号
- 如果不添加break语句,需要特别注意执行顺序,不管后面有没有case都会执行语句
- case和default子句的先后顺序可以变动,但是default不放在最后时一定要加break
- default子句可省略
#include <stdio.h>
int main()
{
//一般处理数轴中某几个点的情况
//想知道某个月有多少天。逻辑:用户输入月份,根据月份判断当月天数
int month; //用户输入月份数据类型与名称
printf("请输入月份,我来判断天数:");
scanf("%d",&month);
switch(month)
{
case 1:
printf("一月31天\n");
printf("一月完了就要过年了\n"); //可以执行多条语句
break;
case 2:
printf("二月28天\n"); //这里没有判断闰年平年
break;
case 3:
printf("一月31天\n");
break;
case 4:
printf("一月30天\n");
break;
default:
printf("只判断1~4月份\n");
}
return 0;
}
switch和多重if对比
相同点
都是用来处理多分支条件的结构
不同点
switch:等值条件判断 — 条件是有限个的时候(杀鸡刀)
多重if:判断某个连续区间时的情况(杀牛刀)
❥(^_-) 我的学习之路任重道远,咱们下期见~~~