运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等
1)算术运算符(+, - ,*, /, %)
2)赋值运算符(=,+=,-=,*=)
3)关系运算符(比较运算符)[比如:>,>=,<=,<,==等等]
4)逻辑运算符(&&,|| ,!)
5)位运算符(& 按位与 |按位或 ^按位异或~按位取反等等)
6)三元运算符运算符(表达式 ? 表达式1:表达式2)
介绍;
算术运算符是对数值类型的变量进行运算的,在C程序中使用的非常多。
算术运算符一览表:
算术运算符的使用
代码演示(/he%)
#include
//非常重要
int main1() {
//处理流程分析
//10/4=2.5==截取整数==>1==2.00000
double d1=10/4;
//如果需要保留小数那么参与运算的数必须有浮点数
double d2=10/4.0;
printf("d1=%f\n",d1);//2.000000
printf("d2=%f\n",d2);//2.500000
return 0;
}
#include
void main2(){
int res1=10%3 ;//求10、3的余数是1
int res2=-10%3;
printf("res=%d\n",res1);//值为1
printf("res2=%d",res2);//值为-1:
//-10-(-10)/3*3=-10-(-3)*3=-10+9=-1;
//取模公式(遇到负数时可用此公式解答)
//a%b=a-b*b(这个公式很重要
int res3=10%(-3);//10-10/(-3)*(-3)=1;
printf("res3=%d\n",res3);//值为1
int res4=-10%-3;//-10-(-10)/(-3)*(-3)=-10-(-9)=-1
printf("res4=%d",res4);
}
作为独立的语句使用:前++和后++都完全等价于i=i+1;
作为表达式所用
前++:++1 先自增后赋值
后++:i++先赋值后自增‘
代码演示
#include
//关于i++,++i
void main(){
//i++的使用
int i=10;
//int j=i++;//10等价于int j=i;i=i+1==>j=10,i=11
int k=++i;//12 等价于 int k=i+1;i=i+1
printf("i=%d\n",i);
//printf("j=%d",j);
printf("k=%d\n",k);
//printf("j=%d k=%d\n",j,k);
//++或者--可以独立的使用,就相当于自增(二者效果完全一致)
k++;//等价于k=k+1
++k;//等价于k=k+1;
printf("k=%d",k);
}
习题理解:
#include
void main4(){
int i1=10,i2=20;
int i=i1++;
printf("i=%d\n",i);//i=10
printf("i1=%d\n",i1);//i1=11
i=++i1;
printf("i=%d\n",i);//12
printf("i1=%d\n",i1);//12
i=i1--;
printf("i=%d\n",i);//12
printf("i1=%d\n",i1);//11
i=--i1;
printf("i=%d\n",i);//10
printf("i1=%d\n",i1);//10
}
题二
#include
void main(){
//假如还有97天放假,问:xxx个星期零xx天
//题1
//思路
/*
* 1.定义一个days保存天数
* 2.定义week保存计算得到
*/
int days=97;
int week=days/7;
int mod=days%7;
printf("%d个星期%d天\n",week,mod);
//题2
/*
* 定义一个变量保存华氏温度,华氏温度转换摄氏度温度的公式为:
* 5/9*(华氏温度-10),请求出华氏温度对应的摄氏温度
* 思路
* 1用huaShi华氏温度
* 2.用sheshi摄氏温度
* 3.使用公式进行转换
*/
double huashi=146.7;
double sheshi=5.0/9*(huashi-100);//参与的运算的变量要有小数的
printf("\n华氏温度%.2f对应的摄氏温度是%.2f",huashi,sheshi);
}
1)介绍
注意:在C语言中没有boolean类型。
2)关系运算符
关系运算一览表
运算符 | 运算 | 例子 | 结果 |
---|---|---|---|
== | 相等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | false |
>= | 大于等于 | 4>=3 | true |
3).细节说明
关系运算符的结果要么是真(非0表示,默认使用1)要么是假(用0表示)
关系运算符组成的表达式,我们称为关系表达式:a>b
比较运算符"==“[关系运算符] (不能误写成”="[赋值])
案例:
#include
void main(){
int a=6;
int b=7;
printf("a>b=%d\n",a>b);//输出0表示假
printf("a,a<b);//输出1表示真
printf("a>=b=%d",a>=b);//输出0表示假
}
用于连接多个条件(一般来讲就是关系表达式),最终的结果要么是真(非0表示),要么是假(0表示)
下表显示了C语言支持的所有逻辑运算符。假设变量A的值是1,变量B的值为0,。则
运算符 | 描述 | 实例 |
---|---|---|
&& | 称为逻辑与运算符。如果两个操作数都非零则条件为真 | A&&B为假 |
|| | 称为逻辑或运算符。如果两个操作数中有任意一个为非零,则条件为真 | A||B为真 |
! | 称为逻辑非运算符。用来逆操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假 | !(A&&B)为真 |
逻辑&&的案例
#include
void main(){
double score=56;
if(score>=60&& score<80){//两个满足才为真,否则为假
printf("ok1");
}else{
printf("ok2");
}
}
#include
//逻辑与的操作
void main(){
int a=10,b=99;
//说明
//1.在进行&&操作时,如果第一个条件为false,则后面的条件不在判断
//2.该现象称为短路现象,所以逻辑与也成位短路逻辑与
//3.如果第一个条件为真,那么第二个条件就会执行并判断
if(a<2&&++b>99) {
printf("ok100");
}
printf("b=%d",b);//输出b=99
}
逻辑或||的案例操作
#include
//逻辑或的话如果第一个条件为真,程序就不会继续判断了,
// 如果第一个条件为假第二个条件就会继续执行判断操作
//该现象称为段落逻辑或现象,因此逻辑或也称为断路逻辑或
void main(){
int a=10,b=99;
if(a<20||++b>99) {
printf("ok100\n");
}
printf("b=%d",b);//输出99
}
逻辑非!的案例操作
#include
void main9(){
int score=100;
int res=score<99;
if(res){
printf("hello tom\n");
}
if(!res){//假的变成真的
printf("hello,jack");
}
}
逻辑运算符题目
#include
void main10(){
int x=1;int y=1;
if(x++==2&&++y==2){
x=7;
}
printf("x=%d y=%d\n",x,y);//x=2,y=1
}
#include
void main(){
int x=1;int y=1;
if(x++==1 || ++y==1){
x=7;
}
printf("x=%d y=%d\n",x,y);//x7,y=1
}
#include
void main(){
int x=1;
int y=0;
short z=42;
if((z++==42)&&(y==1)){
z++;//不会执行
}
if((x=0)||(z++==45)){
z++;//不会执行
}
printf("z=%d",z);//z=44
}
#include
void main(){
int x=1;
int y=0;
short z=42;
if((z++==42)&&(y=1)){//z=43 y=1
z++;//z=44
}
if((x=0)||(++z==45)){ //z=45
z++;//z=46
}
printf("z=%d",z);//z=46
}
5.赋值运算符
1)介绍
赋值运算符就是将某个运算后的值,赋给指定的变量。
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符,把右边操作数的值赋给左边操作数 | C=A+B把A+B的值赋给C |
+= | 加且赋值运算符,把右边的操作数加上左边的操作数赋值给左边操作数 | C+=相当于C=C+A |
-= | 减且赋值运算符,把右边的操作数减去左边的操作数赋值给左边操作数 | C-=A相当于C=C-A |
*= | 乘且赋值运算符,把右边的操作数乘去左边的操作数赋值给左边操作数 | C*=A相当于C=C*A |
/= | 除且赋值运算符,把右边的操作数除去左边的操作数赋值给左边操作数 | C/=A相当于C=C/A |
%= | 求模且赋值运算符,求两个操作数的值赋值给左边操作数 | C%=A相当于C=C%A |
<<= | 左移且赋值运算符 | C<<=2等同于C=C<<2 |
>>= | 右移且赋值运算符 | C>>=2等同于C=C>>2 |
&= | 按位与且赋值运算符 | C&=2等同于C=C&2 |
^= | 按位异或且赋值运算符 | C=2等同于C=C2 |
|= | 按位或且赋值运算符 | C|=2等同于C=C|2 |
2).案例演示
赋值基本案例[int num=10]
int num=10;
有两个变量,a和b,要求将其进行交换,最终打印结果
#include
void main(){
//有两个变量,a和b,要求将其进行交换,最终打印结果
int a=10;
int b=11;
printf("交换前: a=%d b=%d\n",a,b);//交换前: a=10 b=11
int c;
c=a;
a=b;
b=c;
printf("交换后: a=%d b=%d",a,b);//交换后: a=11 b=10
}
+=的使用案例
3).赋值运算符的特点
运算顺从右往左
赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值
复合赋值运算符等价于下面的效果
eg:
a+=3.等价于a=a+3
基本语法
条件表达式?表达式1:表达式2;
1)如果条件表达式为非0(真),运算后的结果是表达式1;
2)如果条件表达式为0(假),运算后的结果是表达式2;
使用细节
表达式1和表达式2要为可以赋给接受变量的类型(或可以自动转换),否则会有精度损失
三元运算符可以转换为if-else语句
int res=a>b ? a++: --b;//if ...else...
练习
【1】案例1:实现两个数的最大值(a,b)
【2】案例2:实现三个数的最大值
#include
void main(){
//比较两个数的最大值
int a=10;
int b=100;
int c=199;
int max=a>b ? a:b;
int max2= max>c ? max:c;//求三个数之间的最大值
int max3=(a>b? a:b) >c ? (a>b? a: b)//另一中写法
printf("a和b两个数之间的最大值为=%d\n",max);//输出为100
printf("a和b和c三个数之间的最大值为=%d",max2);//199
}
a>b? a:b) >c ? (a>b? a: b)//另一中写法
printf(“a和b两个数之间的最大值为=%d\n”,max);//输出为100
printf(“a和b和c三个数之间的最大值为=%d”,max2);//199
}
同级别优先级的比较