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

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

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;

  

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

除了 “+=”,还有


-=

*=

/=

%=

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容