重温C语言五:运算符的学习

运算符

1、运算符的介绍

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等

1)算术运算符(+, - ,*, /, %)

2)赋值运算符(=,+=,-=,*=)

3)关系运算符(比较运算符)[比如:>,>=,<=,<,==等等]

4)逻辑运算符(&&,|| ,!)

5)位运算符(& 按位与 |按位或 ^按位异或~按位取反等等)

6)三元运算符运算符(表达式 ? 表达式1:表达式2)

2.算术运算符

介绍;

算术运算符是对数值类型的变量进行运算的,在C程序中使用的非常多。

算术运算符一览表:

在这里插入图片描述

算术运算符的使用

1)+,-*,/,%,++,–

代码演示(/he%)

#include <stdio.h>
//非常重要
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 <stdio.h>
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);
}

2)自增:++

作为独立的语句使用:前++和后++都完全等价于i=i+1;

作为表达式所用

前++:++1 先自增后赋值

后++:i++先赋值后自增‘

代码演示

#include <stdio.h>
//关于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);
}

3)–也是一个道理

4)细节说明:

  • 对于除号"/",它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。例如:doublex=10/3,结果是3.000000,如果要保留小数点,则要使参与运算的变量一个保留小数点即可
  • 当对于一个数取模时,可以等价 a%b=a-a/b*b ,这样我们可以看到取模的一个本质运算
  • 当自增当作一个独立语言使用时,不管是**++i还是i++**;都是一样的都等价于:i=i+1;
  • 当后加自增作为一个表达式进行赋值给另一个变量时 k=i++;等价于:k=i,i=i+1
  • 当前加自增作为一个表达式进行赋值给另一个变量时 **k=++i;**等价于:k=i+1,i=i+1

习题理解:

#include<stdio.h>
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 <stdio.h>
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);

}

3.关系运算符

1)介绍

  • 关系运算符的结果要么就是真(非0表示),要么就是假(0表示)
  • 关系表达式经常用if结构的条件表达式中或循环结构的条件中

注意:在C语言中没有boolean类型。

2)关系运算符

关系运算一览表

运算符运算例子结果
==相等于4==3false
!=不等于4!=3true
<小于4<3false
>大于4>3true
<=小于等于4<=3false
>=大于等于4>=3true

3).细节说明

  • 关系运算符的结果要么是真(非0表示,默认使用1)要么是假(用0表示)

  • 关系运算符组成的表达式,我们称为关系表达式:a>b

  • 比较运算符"==“[关系运算符] (不能误写成”="[赋值])

案例:

#include<stdio.h>
void main(){
    int a=6;
    int b=7;
    printf("a>b=%d\n",a>b);//输出0表示假
    printf("a<b=%d\n",a<b);//输出1表示真
    printf("a>=b=%d",a>=b);//输出0表示假
}

4.逻辑运算符

1)介绍;

用于连接多个条件(一般来讲就是关系表达式),最终的结果要么是真(非0表示),要么是假(0表示)

2).逻辑运算符一览

下表显示了C语言支持的所有逻辑运算符。假设变量A的值是1,变量B的值为0,。则

运算符描述实例
&&称为逻辑与运算符。如果两个操作数都非零则条件为真A&&B为假
||称为逻辑或运算符。如果两个操作数中有任意一个为非零,则条件为真A||B为真
称为逻辑非运算符。用来逆操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假!(A&&B)为真

逻辑&&的案例

#include <stdio.h>
void main(){
    double score=56;
    if(score>=60&& score<80){//两个满足才为真,否则为假
        printf("ok1");
    }else{
        printf("ok2");
    }
}

#include <stdio.h>
//逻辑与的操作
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<stdio.h>
//逻辑或的话如果第一个条件为真,程序就不会继续判断了,
// 如果第一个条件为假第二个条件就会继续执行判断操作
//该现象称为段落逻辑或现象,因此逻辑或也称为断路逻辑或
void main(){
    int a=10,b=99;
    if(a<20||++b>99) {
        printf("ok100\n");
    }
    printf("b=%d",b);//输出99
}

逻辑非!的案例操作

#include<stdio.h>
void main9(){
    int score=100;
    int res=score<99;
    if(res){
        printf("hello tom\n");
    }
    if(!res){//假的变成真的
        printf("hello,jack");
    }
}

逻辑运算符题目

#include<stdio.h>
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<stdio.h>
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<stdio.h>
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<stdio.h>
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 <stdio.h>
    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

5.三元运算符

基本语法

条件表达式?表达式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 <stdio.h>
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
}

6.运算符的优先级

1)优先级一览表

在这里插入图片描述

在这里插入图片描述

2)运算符优先级小结:

  • 结合方向只有三个式从右向左,其余都是从左向右
  • **所有的双目运算符(有两个操作符的)**中,只有赋值运算符的结合方向是从有向左
  • 另外两个从右向左的结合运算符,一个是单目运算(只跟一个变量的这种++i),一个三目运算(三元运算符)
  • 逗号的运算符优先级是最低的
  • 说一下优先级的大概顺序:算数运算符>关系运算符>逻辑运算符>赋值运算符>逗号运算符

a>b? a:b) >c ? (a>b? a: b)//另一中写法
printf(“a和b两个数之间的最大值为=%d\n”,max);//输出为100
printf(“a和b和c三个数之间的最大值为=%d”,max2);//199
}
同级别优先级的比较
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值