美文网首页C语言学习笔记C++iOS Developer
【持续更新】C语言 第二天学习笔记(第二章)

【持续更新】C语言 第二天学习笔记(第二章)

作者: 我是果冻妹纸 | 来源:发表于2016-12-06 14:22 被阅读61次

    一、【了解】运算符基本概念和分类
    本小节知识点:

    1.【了解】基本概念

    2.【了解】运算符分类

    3.【了解】运算符的优先级

    4.【了解】运算符的结合性

    1、运算符的基本概念

    突击考试:小学1年级期末考

    第一题:请在圆圈处填上“+”或“—”
    

    8○5=3 20○3=23

    第二题:请在圆圈处填上“>”“<” “=”
    

    13○26 6+8○8+6

    16-5○10 5+2○10-2

    第三题:请在圆圈处填上“>”“<” “=”
    

    14^23○13*24+12

    看到这道题,你的表情是否如此?


    图片来源于网咯

    上面那些,是我们现实生活中的数学运算符,在程序里是怎样的呢?比如假如说需要你写一个程序计算两个数的和,那么该怎么做?所以,我们必须要了解一下程序里的运算符!

    那么什么是程序里的运算符呢?

        度娘告诉大家:运算符用于执行程序代码运算,会针对一个或以上的操作数项目来进行运算。
    

    翻译成人话:简单来说,就是给程序里面的数据做运算的符号。

    比如:昨天学的 int a = 10 你能猜到哪个是运算符吗?

    二、运算符的分类

    按照功能可划分:

    1)算术运算符

    2)关系运算符

    3)逻辑运算符

    4)换位运算符

    按照参与运算的个数可分为:
    1)单目运算:只有一个操作数 如:i ++ -a;

    2)双目运算:有两个操作数 如:a + b;

    3)三目运算:C语言中唯一的一个,也叫问号表达式 a > b ? 1 : 0

    运算符列表
    3、运算符的优先级
        当一个运算式中是由不同的运算符组成的,那么该怎么进行计算呢?
    

    比如说 10 + 20 x 2 - 10 ÷ 2 该怎么算?

    张三:应该从左往右算。所以结果是25

    李四:应该先乘除后加减,所以结果是45

    小学一年级time!

    请问:数学的运算规则是?

    “先乘除后加减,如果有括号的先算括号里面的”

    正因为有了这些规则,才使得有不同的运算符时,也能统一获得正确的答案,那么在程序里如果遇到不同的运算符该怎么办呢?

    少侠莫慌,老衲给你一张祖传的表,你就知道该怎么做了!

    优先级图表 优先级图表2 优先级图表3 优先级图表4

    从上图我们可以看到C语言中的运算优先级共分为15 级。1 级最高,15 级最低。 优先级较高的先于优先级较低的进行运算。

    4、运算符的结合性

    如果运算优先级都相同的话,那么又该怎么计算呢?

    如:3 * 4 / 2 * 3

    上面这表达式,究竟该先算哪步呢?

    这就引申出了我们今天要学的另外一个概念:运算符的结合性

    运算符的结合性是指相同优先级的运算符在同一个表达式中,且没有括号的时候,运算符和操作数的结合方式,通常有从左到右结合和从右到左结合两种方式。

    例如表达式x-y+z 则y 应先与“-”号结合,执行 x-y 运算,然后再执行+z 的运算。这种自左至右的结合 方向就称为“左结合性”。

    而自右至左的结合方向称为“右结合性”。最典型的右结合性运算符是赋值运算符。

    如x=y=z,由于“=”的 右结合性,应先执行y=z 再执行x=(y=z)运算。

    二、【掌握】算术运算符及赋值运算符
    本小节知识点:

    1.【理解】算术运算符介绍和使用

    2.【掌握】算术运算符的结合性和优先级

    1、算术运算符和赋值运算符的介绍和使用
    1)算术运算符

    算术运算符

    使用方法:跟数学中的用法基本一致,但略有些差别,具体下面再讲。

    例:
    5 + 3 10-6 3*4 8/2 10%3
    这样的用算术运算符结合起来的式子,我们就称之为算术表达式。

    以后我们还会接触到更多的表达式,比如逻辑表达式,字符表达式等。
    但凡表达式,都一点有1个结果,比如上面的每个表达式,都会有结果。
    但是,如果我们不对这个结果进行处理,那么很明显表达式是毫无意义的。

    所以在我们程序中,对表达式的结果是需要进行处理的,而处理表达式的结果的最常用的方式:就是 通过赋值符号将表达式的结果存储在1个变量之中。

    2)赋值运算符

    赋值运算符记为“=”,由“=”连接的式子称为赋值表达式。

    其一般形式为: 变量 = 表达式

    其作用为:将“=”右边的值或者计算后的结果赋值给左边的变量

    例如: inta = 5 + 3;

    我们将算术表达式5 + 3的结果存储在变量a中了。

    注意:“=”在程序中代表“赋值号”与数学中的“等号”完全不同的概念!

    比如说 char a;

    a = 'b' ,这在数学中是完全不可理解的!!但是在程序中因为不是等于的作用,而是赋值,意为把字符'b'赋值给变量a。

    算术运算符与赋值运算符联合应用,具体如下:

    加法:


    加法示意图

    减法:

    减法示意图

    乘法:

    乘法示意图

    除法:

    int main(int
    argc, const char * argv[]) {
    
        
    
        //定义了三个int类型的变量
    
       int a = 10,b =3,result = 0;
    
        
    
        //用a所存的值除以b所存的值,把结果赋值给result
    
        result =
    a / b;
    
        
    
        //打印结果
    
        printf("a/b的结果是:%d
    \n",result);
    
        
    
        
    
       return 0;
    
        
    
    }
    
     
    
    在此,想请问同学们:接下来的值是打印3.33333333333……还是什么呢?
    
     
    
    Duang!
    
     
    
    答案一出:居然是3
    
    

    无图无真相,上图!

    真相图

    为什么是3而不是3.3333333……呢?

    这是因为,在c语言中,如果参与运算的都是整数,那么所得到的也是整数。

    那么,此时再讲代码稍微变动一下

    int main(int
    argc, const char * argv[]) {
    
        
    
        //定义了三个int类型的变量
    
       int a = 10,b =3,result = 0;
    
        
    
        //这里增加一个单精度小数类型
    
       float c = 3.0f;
    
        
    
        //用a所存的值除以单精度c,把值赋给result
    
        result =
    a / c;
    
    
        //打印结果
    
        printf("a/c的结果是:%d
    \n",result);
    
       return 0;    
    
    }
    

    我们增加了c这么一个小数,并且用a除以c。

    那么打印的结果是否如我们所愿变为3.33333333了呢?

    可结果依然为3,如图:

    结果图

    看到这,相信你们的表情是这样的

    为何会这样呢?
    我们注意看:result是一个整数类型,而当你将一个小数类型赋值给整数类型时,会自动触发一个类型转换,即:将那个小数的整数部分赋值给了result

    例如:int a =3.23; 实际a只取到了3.23的整数部分,即a的值为3
    取余:

    取余计算

    注意:取余只能用在整数间,不能用在小数中!

    余数的正负性:只跟第一个运算数有关!

    2、算术运算符的结合性和优先级

    结合性:从左往右

    优先级:先乘除后加减

    如:

    结合性 结合性2

    如果是同级的算术运算符,那么运算规则为:从左往右依次运算!

    如:35/3 ----> 先算35,再用结果除以3

    三、【掌握】算术运算符中的类型转换问题

    在上一节中,我们了解到,把小数赋值给整数时,会发生一个截取作用(只截取小数的整数),这在C语言中,其实称之为类型转换!

    类型转换分为:隐式数据类型转换 、显示数据类型转换

    C中的数据类型转换 数据转化图

    1)隐式转换:

    int i=1;    i=i+9.801
    
    

    按照隐式处理方式,在处理i=i+9.801时,首先i转换为double型,然后进行相加,结果为double型,再将double型转换为整型赋给i

    隐式转换

    2)显示转换:

    int i=1;
    i=i+(int)9.801 
    
        这时直接将9.801转换成整型,然后与i相加,再把结果赋给i。这样可把二次转换简化为一次转换。显示类型转换的方法是在被转换对象(或表达式)前加类型标识符,
    

    其格式是: (类型标识符)表达式

    显示转换

    将大范围的数据赋值给小范围变量时,系统会自动做一个强制类型转换的操作,这样容易丢失精度

    int
    i = 10.7;
    

    也可用明显地进行强制转换

    int
    i = (int) 10.7;
    

    常见的类型转换

     
      int a = 198l; // long 转换为 int
      charb = 65; // int 转换为 char
     int c = 19.5f; //
    float 转换为int
    

    四、【掌握】复合运算符

    思考:
    学生a考试成绩不理想,然后找老师聊了一下后,老师决定给她的分加10分。那么在程序里怎么实现呢?
    
        //学生a的分数为55分
    
       int a = 55;
    
        
    
        //让学生a的分数在原来的基础上加10分
    
        a = a +10;
    
     
    
     
    

    那么,除了上面这种方式,是否还有另外一种看起来更高大上的呢?

    有的,那就是我们的复合运算符!

    
      //学生a的分数为55分
    
    
    int a= 55;
    
    
    
      //让学生a的分数在原来的基础上加10分
    
      a += 10;  //这句话等价于a=a+ 10;
    
      
    
    

    复合运算符作用就是:让变量的值在自身的基础之上进行运算。

    除了 “+=”,还有

    
    -=
    
    *=
    
    /=
    
    %=
    
    

    相关文章

      网友评论

        本文标题:【持续更新】C语言 第二天学习笔记(第二章)

        本文链接:https://www.haomeiwen.com/subject/vvkrmttx.html