C语言-运算符:C语言各种类型运算符、C语言运算符优先级、C语言规则转换;
本章概述思维导图:
C语言运算符
C语言算术运算符
在C语言中,算术运算符用于执行基本的数学运算。跟我们现实中数学运算法则一致,只是有些个别小细节不一样。
符号
说明
举例
+
加法
int a=3, b=2; a+b=5;
-
减法
int a=3, b=2; a-b=1;
*
乘法
int a=3, b=2; a*b=15;
/
除法
int a=3, b=2; a/b=1;
%
取余
int a=3, b=2; a%b=1;
代码示例:
#include int main(){int a=3;int b=2;printf(\"a+b=%d\\n\",a+b);//加法printf(\"a-b=%d\\n\",a-b);//减法printf(\"a*b=%d\\n\",a*b);//乘法printf(\"a/b=%d\\n\",a/b);//除法printf(\"a%b=%d\\n\",a%b);//取余return 0; }//代码运行结果:a+b=5a-b=1a*b=6a/b=1a%b=1
通用细节:
1. 整数计算,结果一定是一个整数
2. 小数计算,结果一定是一个小数
3. 整数和小数计算,结果一定是一个小数
4. 小数之间参与计算,结果是有可能不精确
除法细节:
1. 被除数不能为0,因为除以0无意义
2. 结果一定是整数,小数会忽略。
3. 结果要控制是小时显示,那么就用小数来参与计算。
除法细节代码示例:
#include int main(){//结果一定是整数,小数会忽略。int num1=6;int num2=4;printf(\"num1/num2=%d\\n\",num1/num2);//除法num1/num2=1;//结果想是小数,那么就用小数来参与计算。float num3=6.0;float num4=4.0;printf(\"num3/num4=%.1f\\n\",num3/num4);//除法num3/num4=1.5;return 0; }//代码输出结果num1/num2=1num3/num4=1.5
取余细节:
1. 运算的数据必须全部都是整数
2. 获取余数的正负,是跟第一个数组保存一致
C语言自增自减运算符
在C语言中,自增(++
)和自减(--
)运算符用于对变量自身进行 加1 或 减1 操作。它们分为前缀和后缀两种形式,行为在表达式中有所不同,需特别注意。
自增(++
)和自减(--
)可以放在变量的前边,也可以放在变量的后边;
自增(++
)和自减(--
)放在变量的前边,是先运算,在取值;口诀:先加后用
代码示例:
#include int main(){//++和--放在变量的前边,是先运算,再取值;(先加后用)int num1=10;int num2=++num1;//num1=11;num2=11;printf(\"num1=%d\\tnum2=%d\\n\",num1,num2);int num3=100;int num4=--num3;//num3=99;num4=99printf(\"num3=%d\\tnum4=%d\\n\",num3,num4);return 0; }//代码运行结果:num1=11num2=11num3=99num4=99
自增(++
)和自减(--
)放在变量的后边,是先取值,在运算;口诀:先用后加
代码示例:
#include int main(){//自增(++)和自减(--)放在变量的后边,是先取值,在运算;口诀:先用后加int num1=10;int num2=num1++;//num1=11;num2=10;printf(\"num1=%d\\tnum2=%d\\n\",num1,num2);int num3=100;int num4=num3--;//num3=99;num4=100;printf(\"num3=%d\\tnum4=%d\\n\",num3,num4);return 0; }//代码运行结果:num1=11num2=10num3=99num4=100
注意:
自增(++
)和自减(--
)小细节:单独写一行,结果是一样的;不单独写一行,结果是不一样的;
代码示例:
#include int main(){//单独写一行int num1=10;num1++;int num2=num1;//num1=11;num2=11;printf(\"num1=%d\\tnum2=%d\\n\",num1,num2);//不单独写一行int num3=10;int num4=num3++;//num3=11;num4=10;printf(\"num3=%d\\tnum4=%d\\n\",num3,num4);return 0; }//代码运行结果:num1=11num2=11num3=11num4=10
C语言赋值运算符
在C语言中,赋值运算符用于给变量赋值。最基本的赋值运算符是 =
,但C语言还提供了一系列复合赋值运算符(如 +=
、-=
、*=
等),用于简化代码。
符号
说明
举例
=
直接赋值
int a=10;将10赋值给a;
+=
加后赋值
a+=b;将a+b赋值给a;
-=
减后赋值
a-=b;将a-b赋值给a;
*=
乘后赋值
a*=b;将a*b赋值给a;
/=
除后赋值
a/=b;减a/b的商赋值给a;
%=
取余赋值
a%=b;将a%b的余赋值给a;
代码示例:
#include int main(){//直接赋值\' = \'int num1=10;printf(\"num=%d\\n\",num1);//加后赋值\' += \'int num2=10;int num3=10;num2+=num3;//将num2+num3的值赋值给num2printf(\"num2=%d\\tnum3=%d\\n\",num2,num3);//num2=20,num3=10;//减后赋值\' -= \'int num4=10;int num5=10;num4-=num5;//将num4-num5的值赋值给num4printf(\"num4=%d\\tnum5=%d\\n\",num4,num5);//num4=0,num5=10;//乘后赋值\' *= \'int num6=10;int num7=10;num6*=num7;//将num6*num7的值赋值给num6printf(\"num6=%d\\tnum7=%d\\n\",num6,num7);//num6=100,num7=10;//乘后赋值\' /= \'int num8=10;int num9=10;num8/=num9;//将num8/num9的值赋值给num8printf(\"num8=%d\\tnum9=%d\\n\",num8,num9);//num8=1,num9=10;//乘后赋值\' %= \'int num10=10;int num11=10;num10%=num11;//将num10%num11的值赋值给num10printf(\"num10=%d\\tnum11=%d\\n\",num10,num11);//num10=0,num11=10;return 0; }代码运行结果:num=10num2=20 num3=10num4=0 num5=10num6=100num7=10num8=1 num9=10num10=0 num11=10
C语言关系运算符
在C语言中,关系运算符用于比较两个表达式的值,并返回一个布尔结果(1
表示真,0
表示假)。它们常用于条件判断(如 if
、while
等语句)。
符号
说明
结果
==
a==b 判断a是否等于b
成立(1)不成立(0)
<
a<b 判断a是否小于b
成立(1)不成立(0)
<=
a<=b 判断a是否小于等于b
成立(1)不成立(0)
>
a>b 判断a是否大于b
成立(1)不成立(0)
>=
a>=b 判断a是否大于等于b
成立(1)不成立(0)
!=
a!=b 判断a是否不等于b
成立(1)不成立(0)
代码示例:
#include int main(){int num1=10;int num2=10;//关系运算符\' == \'if(num1 == num2)//判断num1是否相等num2printf(\"成立\\n\");else printf(\"不成立\\n\");//关系运算符\' < \'if(num1 < num2)//判断num1是否小于num2printf(\"成立\\n\");else printf(\"不成立\\n\");//关系运算符\' <= \'if(num1 \'if(num1 > num2)//判断num1是否大于num2printf(\"成立\\n\");else printf(\"不成立\\n\");//关系运算符\' >= \'if(num1 >= num2)//判断num1是否大于等于num2printf(\"成立\\n\");else printf(\"不成立\\n\");//关系运算符\' != \'if(num1 != num2)//判断num1是否不等于num2printf(\"成立\\n\");else printf(\"不成立\\n\");return 0; }代码运行结果:成立不成立成立不成立成立不成立
C语言逻辑运算符
在C语言中,逻辑运算符(Logical Operators)用于对布尔表达式进行逻辑操作(与、或、非),并返回 1
(真) 或 0
(假)。它们通常与关系运算符结合使用,用于条件判断(如 if
、while
等语句)。
符号
作用
说明
&&
与(并且)
两边都为真,结果才是真
||
或(或者)
两边都为假,结果才是假
!
非(取反)
真变假,假变真
&&:计算规则:只有两边都成立,最终结果才是成立的。只要有一个不成立,最终结果就不成立;(同时满足)
代码示例:
#include int main(){int a=1;int b=1;int c=0;//1&&1 = 1;if(a && b)printf(\"成立\\n\");else printf(\"不成立\\n\");//1&&0 = 0;if(a && c)printf(\"成立\\n\");else printf(\"不成立\\n\");return 0; }//代码运行结果成立不成立
||:计算规则:只有两边都不成立,最终结果才是不成立的,只有有一个成立,最终结果就成立;(二选一 )
代码示例:
#include int main(){int a=1;int b=1;int c=0;int d=0;//1||1 = 1;if(a || b)printf(\"成立\\n\");else printf(\"不成立\\n\");//1||0 = 1;if(a || c)printf(\"成立\\n\");else printf(\"不成立\\n\");//0||0 = 0;if(c || d)printf(\"成立\\n\");else printf(\"不成立\\n\");return 0; }//代码运行结果成立成立不成立
!:计算规则:结果成立,最终结果不成立。结果不成立,最终结果成立;
代码示例:
#include int main(){int a=1;int b=0;//!1=0;if(!a)printf(\"成立\\n\");else printf(\"不成立\\n\");//!0=1if(!b)printf(\"成立\\n\");else printf(\"不成立\\n\");return 0; }代码运行结果:不成立成立
小细节:&&和||具有短路效果;例如:
int a= 0; printf(“%d\\n”,a >1 && a<10); / / 0 && 1=0
int a= 0; pirntf(“%d\\n”,a1); / / 1 || 0 =1
左边的式子成立了,就不会运算右边的式子了;
C语言三元运算符
在C语言中,三元运算符(也称为条件运算符)是一种简洁的条件判断结构;
格式: 关系表示式 ? 表达式1 : 表达式2 ;
计算规则:
1. 首先计算关系表达式的值
2. 如果成立,表达式1的值就是运算结果
3. 如果不成立,表达式2的值就是运算结果
代码示例:
#include int main(){int num1=100;int num2=1000;int max=num1>num2?num1:num2;printf(\"最大值max=%d\\n\",max);return 0; }//代码运行结果最大值max=1000
C语言逗号运算符(分隔符)
在C语言中,逗号运算符是一个特殊的运算符,它允许在一条语句中执行多个表达式,并返回最后一个表达式的值。逗号运算符的优先级最低,通常用于简化代码或特定场景(如 for
循环初始化/更新部分)。
格式: 表达式1,表达式2,表达式3,表达式4……,表达式n ;
逗号运算符规则:
1. 从左往右
2. 最后一个字表达式的结果,是整个表达式的结果
3. 优先级最低(永远是最后执行)
代码示例:
#include int main(){int num1=10;num1++,++num1,num1*=10,num1+=2;//num1=11,num1=12,num1=120,num1=122;printf(\"num1=%d\\n\",num1);return 0; }//代码运行结果:num1=122
C语言运算符优先级
运算符优先级
在 C 语言中,运算符优先级决定了表达式中运算的执行顺序。如果优先级不明确,可能会导致逻辑错误。
运算符
名称
()
小括号
++、--、
自增、自减、
+、-、!、
正号、负号、逻辑非
*、/、%、
乘、除、取余
+、-、
加、减、
>、>=、<、<=、
关系运算符
==、!=、
关系运算符
&&
逻辑与
||
逻辑或
?:
三元运算符
=、*=、/=、%=、+=、-=、
赋值运算符
,
逗号运算符
小心得:
1. 括号 ()
是最高优先级,不确定时用括号明确顺序。
2. 赋值运算符是右到左结合,例如 a = b = c
。
3. 逗号运算符优先级最低,常用于 for
循环或顺序执行。
4. 位运算、逻辑运算容易因优先级出错,建议多用括号。
如果记不住所有优先级,用括号明确运算顺序是最安全的做法!
C语言规则转换
隐式转换
在 C 语言中,隐式类型转换是指编译器自动进行的类型转换,无需程序员显式指定。这种转换通常发生在表达式计算、赋值或函数传参时,目的是使操作数的类型兼容。
隐式转换两条规则:
1. 取值范围小的,和取值范围大的计算,小的会自动提升为大的,再进行计算;
2. short ;char;类型的数据在运算的时候,先提升为int,再进行运算;
代码示例:
#include int main(){//把一个取值范围小的,转换成取值范围大的short a=10;int b=a;printf(\"a=%d\\tb=%d\\n\",a,b);//short ;char;类型的数据在运算的时候,先提升为int,再进行运算short c=10;short d=20;int e=c+d;printf(\"c=%d\\td=%d\\te=%d\\n\",c,d,e);return 0; }//代码运行结果:a=10b=10c=10d=20e=30
强制转换
在 C 语言中,强制类型转换是程序员显式地将一个数据类型转换为另一种类型的方式。与隐式转换(编译器自动完成)不同,强制转换由开发者主动控制,但如果不当使用可能导致未定义行为或数据丢失。
格式: 目标数据类型 变量名 =(目标数据类型) 被强转的数据;
代码示例:
#include int main(){int a=10;short b=(short)a;printf(\"b=%d\\n\",b);return 0; }//代码运行结果:b=10;
C语言运算符练习题
通过本章的学习,接下来就是进入实战环节,小伙伴们开始攻略C语言运算符练习题啦!小伙伴们先尝试自己敲代码在来查看代码示例啦!
C语言运算符(数值拆分)
题目:键盘录入一个四位数,将其拆分为个位、十位、百位、千位后,运行结果输出在终端显示上
代码示例:
#include int main(){int temp=0;printf(\"输入一个四位数:\\n\");scanf(\"%d\",&temp);if(temp10000){printf(\"输入的数据不为四位数,请重新运行程序\\n\");return 1;}int a,b,c,d;a=temp%10;//个位b=temp/10%10;//十位c=temp/100%10;//百位d=temp/1000;//千位printf(\"个位为%d\\n十位为:%d\\n百位为:%d\\n千位为:%d\\n\",a,b,c,d);return 0; }//代码运行结果:输入:1314个位为4十位为:1百位为:3千位为:1
C语言运算符(判断数据)
题目:键盘录入一个两位整数,要求该数字不能包含7。如果符合要求,输出1,不符合要求输出0
代码示例:
#include int main(){int temp=0;printf(\"输入一个2位数:\\n\");scanf(\"%d\",&temp);if(temp100){printf(\"输入的数据不为2位数,请重新运行程序\\n\");return 2;}int a,b;a=temp%10;//个位b=temp/10%10;//十位if((a==7) || (b==7)){printf(\"包含7不符合要求输出:0\\n\");return 0;}else{printf(\"满足要求输出:1\\n\");return 1;} }//代码运行结果:输入一个2位数:45满足要求输出:1//代码运行结果:输入一个2位数:77包含7不符合要求输出:0
C语言运算符(判断数据升级版)
题目:逻辑运算符-键盘录入一个两位整数,要求该数字不能包含7.而且不能是7的倍数。如果符合要求,输出1,不符合要求输出0
代码示例:
#include int main(){int temp=0;printf(\"输入一个2位数:\\n\");scanf(\"%d\",&temp);if(temp100){printf(\"输入的数据不为2位数,请重新运行程序\\n\");return 2;}int a,b;a=temp%10;//个位b=temp/10%10;//十位if((a==7) || (b==7) || ((temp%7)==0)){printf(\"不符合要求输出:0\\n\");return 0;}else{printf(\"符合要求输出:1\\n\");return 1;} }//代码运行结果:输入一个2位数:14不符合要求输出:0//代码运行结果:输入一个2位数:25符合要求输出:1
C语言运算符(利用三元运算符得到数据)
题目:键盘录入两个数据,利用三元运算符得到最大值数据
代码示例:
#include int main(){int num1=0,num2=0;printf(\"输入两个数据:\\n\");scanf(\"%d%d\",&num1,&num2);int max=num1>num2?num1:num2;printf(\"最大值为:%d\\n\",max);return 0;}//代码运行结果:输入两个数据:5445最大值为:54
C语言运算符(交换数据)
题目:定义两个变量并且键盘录入数值,在程序中交换数据。最后输出在显示终端上。(附加题:利用其它方法在交换)
代码示例:
#include int main(){int num1=0,num2=0;printf(\"输入两个数据:\\n\");scanf(\"%d%d\",&num1,&num2);printf(\"num1值为:%d\\tnum2的值为%d\\n\",num1,num2);//交换数据:第一种方法构建第三个临时变量实现交换int temp=0;temp=num1;num1=num2;num2=temp;printf(\"交换完成\\nnum1值为:%d\\tnum2的值为%d\\n\",num1,num2);return 0;}//代码运行结果:输入两个数据:10100num1值为:10num2的值为100交换完成num1值为:100num2的值为10
第二种方法(异或运算)实现代码示例:
#include int main(){int num1=0,num2=0;printf(\"输入两个数据:\\n\");scanf(\"%d%d\",&num1,&num2);printf(\"num1值为:%d\\tnum2的值为%d\\n\",num1,num2);//交换数据:使用异或运算方法实现num1=num1^num2;num2=num1^num2;num1=num2^num1;printf(\"交换完成\\nnum1值为:%d\\tnum2的值为%d\\n\",num1,num2);return 0;}代码运行结果:输入两个数据:4554num1值为:45num2的值为54交换完成num1值为:54num2的值为45
制作不易!喜欢的小伙伴给个小赞赞!喜欢我的小伙伴可以点关注!有不懂的地方和需要的资源随时问我哟!