1、运算符相关概念
运算符:
具有一定运算规则的符号
运算符分类:
按照功能分:
赋值运算符
算术运算符
关系运算符
逻辑运算符
其他运算符
位运算符
按照操作数分:
单目运算符
双目运算符
三目运算符
表达式
具有一定意义的式子,它可以是常量 、变量 、也可以是操作数和运算符的组合
表达式是一定有结果的
例:苹果5块1斤,小明买了6斤,花了多少钱?
5 --- 苹果的价格
6 --- 重量
5*6 --- 价格
int a = 10; // a代表班级人数
根据运算符的操作数个数可以分为:
单目运算符: ~7 a++; ++b;
双目运算符: + - * /
三目运算符: ? :
运算符优先级:
() 单目 双目 三目 赋值组合
双目:算术 关系 逻辑
学习运算规则就是学习运算规则。
2、赋值运算符
符号: =
作用:把 = 右侧的值放入到左侧的"空间"去
= 左侧必须是一个内存空间
int a = 4.5; // a = 4; 隐式转换 4.5转成整型 4
float b = 4;
强制转换:(转换类型)值
int c = (int)4.5;
3、算术运算符
符号:+ - * / %(取余 取模)
/:除
规则:两边如果都是整型,结果是整型
如果有一个是小数结果就是小数
10 / 3 == 3
10.0 / 3 == 3.3333
1.4 + 3 / 2 == 2.4
%(取余 取模)
规则:两边必须是整数
10 % 3 == 1
101 % 3 == 2
m % n的结果是 0 ~ n-1
m % n == 0 ,m能被n整除 m是n的倍数 n是m的因数
整除关系使用 % 看结果是否为0
应用1:判断数据之间是否能够整除
例:输入一个数,判断这个数是不是偶数
偶数:能被2整除的数就是偶数
int a;
输入一个数
如果 数能被2整数 a % 2 == 0
{
输出 偶数
}
否则
{
输出 奇数
}
应用2:/ 和 % -- 做数据分离
需求:输入一个三位数,分离出个位 十位 百位
例如:345 分离个位 十位 百位
345 / 100% 10 == 3
345/10%10 == 4
345 % 10 == 5
代码:
#include<stdio.h>// 输入一个三位数,分离出来它的个位 十位 百位int main(void)
{int n;int ge,shi,bai;scanf("%d",&n); // 个位 ge = n % 10;shi = n / 10 % 10;bai = n / 100 % 10;printf("%d %d %d",ge,shi,bai);return 0;}
4、关系运算符
符号: > >= < <= ==(等于) !=(不等于)
结果:就看数据之前的关系成不成立,关系成立就是真(1),不成立就是假(0)
例1:
0 == ‘0’ 不成立 结果就是0
printf("%d\n",0=='0'); // 0
printf("%d\n",3 > 1 + 1);// 1
printf("%d\n",0 != '0'); // 1
printf("%d\n",0=='\0'); // 1
printf("%d\n",0==NULL); // 1
// 0 '\0' NULL
// 数字 字符\0 地址编号0
例2:
n % 2 == 0
5、逻辑运算符
符号:&&(逻辑与) ||(逻辑或) !(逻辑非)
C语言里面非0即为真,0是假
逻辑运算符的结果:0 或者 1
5.1、逻辑与&&
格式:表达式1 && 表达式2
规则:全真为真,有假则假
表达式1 表达式2 表达式1 && 表达式2
真 真 真
真 假 假
假 ----不需要计算 假
#include<stdio.h>int main(void)
{int a = 5;int b = 4;int c = (a > 3) && (b % 2 == 0);printf("%d\n",c); // 1int d = (a < 3) && (b = 5);printf("%d %d\n",d,b); // 0 4 表达式1为假直接跳过表达式2,结果直接为假 int e = -4 && 1;printf("%d\n",e);return 0;
}
场景:同时 并且
比如表述取值范围:0~9 三位数 100~999 ‘0’~‘9’ ‘a’~'z' 'A'~'Z'
输入一个数据,判断它是不是1位数字 x>=0 && x <=9
5.2、逻辑或 ||
格式:表达式1 || 表达式2
规则:全假为假,有真则真
表达式1 表达式2 表达式1 && 表达式2
真 --- 不需要计算 真
假 真 真
假 假 假
#include<stdio.h>int main(void)
{int a = 5;int b = 4;int c = (a > 3) || (b % 2 == 0);printf("%d\n",c); // 1int d = (a < 3) || (b = 5);printf("%d %d\n",d,b); // 1 5 int e = 0 || 1;printf("%d\n",e); // 1 int f = (a < 3) || (a == 4);printf("%d",f); // 0return 0;
}
场景:或者
某个范围外 不是1位数 x < 0 || x > 9
一个字符ch是字母 : 小写 || 大写
(ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')
输入月份month 输出这个月有多少天
month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12 --- 31天
month == 4 || month == 6 || month == 9 || month == 11 ------ 30天
month == 2
闰年 --- 29天
平年 --- 28天
5.3、逻辑非!
格式:!表达式
规则:真变假,假变真
表达式 !表达式
真 假
假 真
场景:判断表达式结果是否为假
如果 表达式为假
{
}
#include<stdio.h>int main(void)
{int x = 5;// x 是否等于0,如果为0输出 no,否则输出yes如果 !x (如果 x == 0){输出 no}否则{输出 yes}return 0;
}
6、其他运算符
6.1、自增自减运算符
++a ++在前先加后用
a++ ++在后先用后加
-- 同理
#include<stdio.h>int main(void)
{int a = 5;int b = 5;a++;++b;printf("%d %d\n",a,b); // 5 5int c = 5;int d = 5;int e = ++c; // c=c+1; c=6; e=6;int f = d++; // f=5 d=d+1; d=6printf("%d %d\n",e,f); // 6 5printf("%d %d\n",c,d); // 6 6int k = 3;int t = ++k + 3; printf("%d\n",t); // 7printf("%d\n",k); // 4return 0;
}
6.2、三目运算符
格式:
表达式1 ? 表达式2 : 表达式3
规则:
先计算表达式1的结果,
如果为真,执行表达式2或者选择表达式2的结果作为 三目运算符表达式的结果
如果为假,执行表达式3或者选择表达式3的结果作为 三目运算符表达式的结果
例子:输入一个数据,判断是偶数还是奇数
#include<stdio.h>int main(void)
{int n;scanf("%d",&n);n%2==0 ? printf("偶数") : printf("奇数");int n = (3 > 5 ? 3 : 5);printf("%d",n); // 5return 0;
}
6.3、复合运算符
= 算术运算符 位运算符组合
+= -= *= /= %= &= |= ^= <<= >>=
#include<stdio.h>int main(void)
{ int a = 5;a += 5; // a = a + 5; a = 10;printf("%d",a);return 0;
}