C语言学习笔记C++iOS Developer

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

2016-12-06  本文已影响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;

  

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

除了 “+=”,还有


-=

*=

/=

%=

上一篇 下一篇

猜你喜欢

热点阅读