C语言教程:运算符与表达式 学习目的:在编制算法时,表达 式是十分重要的。通过讲解,使 学生熟悉表达式的书写方式,能 够正确、快速理解复杂表达式
C语言教程:运算符与表达式 学习目的:在编制算法时,表达 式是十分重要的。通过讲解,使 学生熟悉表达式的书写方式,能 够正确、快速理解复杂表达式
运算符与表达式内容介绍 1、算术运算符与算术表达式、强制类型转换运 算符 2、赋值运算符与赋值表达式 3、逗号运算符与逗号表达式 4、关系运算与逻辑运算 5、长度运算符与长度运算表达式 6、位运算
运算符与表达式内容介绍 1、算术运算符与算术表达式、强制类型转换运 算符 2、赋值运算符与赋值表达式 3、逗号运算符与逗号表达式 4、关系运算与逻辑运算 5、长度运算符与长度运算表达式 6、位运算
运算符 鱉运算符概述 ◆运算符的概念 运算符是一种特殊的符号,用以表示数据的运算、赋值、比 较等,一般由1到2个字符组成 ◆运算符的种类 C语言的运算符可分为以下几类: 算术运算符用于各类数值运算。包括取正(+)、取负(-)、 加(+)、减(-)、乘(*)、除()、求余(或称模运算,%)、自增 (++)、自减(-)共七种。 关系运算符用于比较运算。包括大于(>)、小于(=)、小于等于()和不等于(l=)六种 逻辑运算符用于逻辑运算。包括与(&&)、或()、非()三 种
运算符 运算符概述 运算符的概念 运算符是一种特殊的符号,用以表示数据的运算、赋值、比 较等,一般由1到2个字符组成 运算符的种类 C语言的运算符可分为以下几类: • 算术运算符:用于各类数值运算。包括取正(+)、取负( - )、 加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增 (++)、自减(--)共七种。 • 关系运算符:用于比较运算。包括大于(>)、小于(=)、小于等于(<=)和不等于(!=)六种。 • 逻辑运算符:用于逻辑运算。包括与(&&)、或(||)、非(!)三 种
运算符 位操作运算符:参与运算的量,按二进制位进行运算。包括 位与(&)、位或()、位非()、位异或()、左移(>)六种。 赋值运算符用于赋值运算,分为简单赋值(=)、复合算术 赋值(+=-=*=/=%=)和复合位运算赋值(&=,,=,>=,<<=) 三类共十一种 条件运算符这是一个三目运算符,用于条件求值(? 逗号运算符用于把若干表达式组合成一个表达式(,)。 指针运算符用于取内容(*)和取地址(&)二种运算。 ·求字节数运算符用于计算数据类型所占的字节数( (Sizeof) 特殊运算符:有括号(,下标,成员(→,)等几种
运算符 • 位操作运算符:参与运算的量,按二进制位进行运算。包括 位与(&)、位或(|)、位非(~)、位异或(^)、左移(>)六种。 • 赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术 赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=) 三类共十一种。 • 条件运算符:这是一个三目运算符,用于条件求值(?:)。 • 逗号运算符:用于把若干表达式组合成一个表达式(,)。 • 指针运算符:用于取内容(*)和取地址(&)二种运算。 • 求字节数运算符:用于计算数据类型所占的字节数(sizeof)。 • 特殊运算符:有括号(),下标[],成员(→,.)等几种
运算符 ◆运算符的优先级和结合性 运算符的优先级(运算符相邻时谁先运算)(见下页) 1+3*5、1+2+3 运算符的结合性(解决优先级相同的情况下,谁先运算的问题) ◆左结合性:从左到右的次序运算,大部分均是 右结合性:从右到左的次序运算,常见的有: !、~、艹+、--、-、(类型)、*、&、 sizeof、?:、赋 值 举例:i=5;-i+
运算符 运算符的优先级和结合性 • 运算符的优先级(运算符相邻时谁先运算)(见下页) 1+3*5、1+2+3 • 运算符的结合性(解决优先级相同的情况下,谁先运算的问题) ⬧ 左结合性:从左到右的次序运算,大部分均是 ⬧ 右结合性:从右到左的次序运算,常见的有: !、~、++、- -、-、( 类型)、 * 、&、sizeof、? :、赋 值 举例:i=5 ; - i++
附: Turbo c运算符的优先级 O(小括号)可(数组下标)·(结构成员)一(指针型结构成员)!最高,二二 (逻辑非).(位取反)-负号)++(加1)-(减1)&(变量地址) *(指针所指内容)type(函数说明) sizeof(长度计算) *(果) /(除) %(取模) +(加) (减) >(位右移) (大于)>=(大于等于) ==(等于) !=(不等于) &(位与) (位异或) (位或) &&(逻辑与) |(逻辑或 ?:(?表达式) =+==(联合操作) ,(逗号运算符) 最低
附:Turobo C运算符的优先级
运算符 ※算术运算符 运算符 运算 范例 结果 正号 负号 b=4;-b; 5+ 10 加减乘除 6-4 2 3*4 12 5/5 取模 5%5 自增(前) a=2:b=++a a=3;b=3 自增(后) a=2:b=a++ a=3:b=2 自减(前) a=2:b=-a a=1:b=1 自减(后) a=2:b=a- a=1:b=2
运算符 算术运算符
运算符 ◆强调和技巧 两个整数相除5/3,结果应为整数1,又如 ntx=3510;x=x/1000*1000结果为多少? ·%只能对两个整数进行运算,5/3.2错误 %取模运算中,摸数和被摸数为负数的情况 举例23%3、23%3、-23%3、-23%3 结果为2、 2、 2 ◆规律:摸数为负数时,将负号忽略即可;若被取模的 数是负数时,先忽略负数,然后将结果置为负
运算符 强调和技巧 • 两个整数相除5/3,结果应为整数1,又如 int x=3510 ; x=x / 1000 * 1000结果为多少? • %只能对两个整数进行运算,5/3.2错误 • %取模运算中,摸数和被摸数为负数的情况 ⬧ 举例23%3、23%-3、-23%3、-23%-3 结果为 2、 2、 -2、 -2 ⬧ 规律:摸数为负数时,将负号忽略即可;若被取模的 数是负数时,先忽略负数,然后将结果置为负
算符 分析(计+)+(计++)+(i++)的结果 int 1=3, aa=(i++)+(i++)+(i++), printf( a=%d, i=%/dn", a, i) 结果为:a=9i=6 int 1=3 printf("(++)+(计++)+(i++)=%d,i=%dn"(i++)+(i++)+(i+), 结果为:(i++)+(i计+)+(i++)=12,i=3 :而在函数的参数中,则是从右到左,对各个子表达式进行运拿加 我的理解:在赋值语句中,对x++是先取值运算,再赋值,最后 举一反 分析(++i)+(++i)+(++i)的结果?答案是:18,6和15,3 再分析x=0;x=x+%10; printf(%dn”,x);的输出结果? 答案是:1 解释:取ⅹ++的值0;0%10为0;x=0;最后X自加 ◆a-3;a=a+(a=a-a*a++)的结果为a=11
运算符 • 分析(i++)+(i++)+(i++)的结果 int i=3,a;a=(i++)+(i++)+(i++);printf("a=%d,i=%d\n",a,i); 结果为:a=9,i=6 int i=3; printf("(i++)+(i++)+(i++)=%d,i=%d\n",(i++)+(i++)+(i++),i); 结果为:(i++)+(i++)+(i++)=12,i=3 我的理解:在赋值语句中,对x++是先取值运算,再赋值,最后x自加 1;而在函数的参数中,则是从右到左,对各个子表达式进行运算 举一反三: ⬧ 分析(++i)+(++i)+(++i)的结果?答案是:18,6和15,3 ⬧ 再分析x=0;x=x++%10;printf(“%d\n”,x);的输出结果? 答案是:1 解释:取x++的值0 ; 0%10为0;x=0;最后X自加1 ⬧ a=3;a=a+(a=a-a*a++)的结果为a=11
运算符 思考题1:某个培训中心要为新到的学员安排房间,假设 共有x个学员,每个房间可以在6人,让你用一个公式来计 算他们要住的房间数(不允许男女混住)? 正确答案:(x+5)6,错误答案:x6+1。上述算法还可以在 查看留言板的分页显示上:其中x是总共的留言数,结果 就是总共有多少页。 思考题2:假设你要让x的值在0到9之间循环变化请写出相 应的程序代码。 答案 0j=0; while(j<20) { xX%10: printf(-%/od,,x); x++: j++, 举一反三:在15到25之间循环变化。答案如下: a=15+(x-X%11), printf( a=%/od n, a); x+:j++
运算符 • 思考题1:某个培训中心要为新到的学员安排房间,假设 共有x个学员,每个房间可以住6人,让你用一个公式来计 算他们要住的房间数(不允许男女混住)? 正确答案:(x+5)/6,错误答案:x/6+1。上述算法还可以在 查看留言板的分页显示上:其中x是总共的留言数,结果 就是总共有多少页。 • 思考题2:假设你要让x的值在0到9之间循环变化请写出相 应的程序代码。 答案: int x= 0,j=0; while(j<20) { x=x%10;printf(“%d”,x);x++;j++; } 举一反三:在15到25之间循环变化。答案如下: a=15+(x=x%11);printf(“a=%d\n”,a);x++;j++;