内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第二章 数据类型、运算符及表达式(二)

内蒙古科技大学 教 案 课程名称:C语言程序设计 编写时间:2014年2月16日 授课章节 第二章数据类型、运算符及表达式(二) 目的要求 C运算符和表达式、不同类型数据的转换 重点难点 C运算符和表达式 教学内容 一、C语言运算符和表达式 1运算符 1)运算符:能够完成某种操作(运算)的符号。 2)根据运算符的运算对象(操作数)的多少,运算符可分为: 运算符 a+b d/e ③三目(三元)运算符 x>y?x+3:y*9(条件运算符) 优先级 运算符 操作数 结合性 「1 -> 左右 -&sizeof 右→左 左右 左右 >> 左右 (= >= 左)右 == ! 左,右 R 左》右 9 左→右 左》右 11 左)右 左)右 右》左 <= 2 右→左 左→右
内 蒙 古 科 技 大 学 教 案 课程名称: C 语言程序设计 编写时间:2014 年 2 月 16 日 授课章节 第二章 数据类型、运算符及表达式 (二) 目的要求 C 运算符和表达式、不同类型数据的转换 重点难点 C 运算符和表达式 教学内容 一、C语言运算符和表达式 1 运算符 1)运算符:能够完成某种操作(运算)的符号。 2)根据运算符的运算对象(操作数)的多少,运算符可分为: ①单目(一元)运算符 i++ -i -n ②双目(二元)运算符 a+b d/e ③三目(三元)运算符 x>y?x+3:y*9(条件运算符) 优先级 运算符 操作数 结合性 1 ( ) [ ] -> . 1 左→右 2 ! ~ - ++ - & * sizeof 1 右→左 3 * / % 2 左→右 4 + - 2 左→右 5 > 2 左→右 6 = > 2 左→右 7 = = != 2 左→右 8 & 2 左→右 9 ^ 2 左→右 10 | 2 左→右 11 && 2 左→右 12 || 2 左→右 13 ? : 3 右→左 14 = *= /= %= += -= >= |= &= ^= 2 右→左 15 , 2 左→右

2表达式 1)C表达式:由C运算符和运算对象构成的式子。 运算对象可以是常量、变量、函数或表达式。 2) 表达式的书写原则 ①)C语言的表达式只能采用线性的形式书写。例如: ① 应写成1/3.0+i+j*j*j。 ② 应写成(a+b)/(c+d)*e+f (2)C语言的表达式只能使用C语言中合法的运算符,而且运算符不能省略。例如 Labsin a 应写成0.5*ab*sin(alph)。 ②|x-y应写成fabs(x-y)。 ③y+2x应写成y+pom(2,x) 3)表达式在求值时,遵循以下规则 (1)优先级:不同优先级的运算符出现在同一表达式时,按运算符的优先级的高 低次序执行。 例如: d=a+b*c; /*先乘后加*/ (2)结合性:是指表达式中出现同优先级的操作符时,该先做哪个操作符的规定 结合方向: “自左向右”、“自右向左” 例如: a+b-c 从左至右 d=a=b=3 从右至左 4)表达式的分类 C语言表达式种类很多,有多种分类方法。我们一般依据运算的特征将表达式分 为: ①算术表达式,如a+b*2.0-3.0/5.0。 ②关系表达式.如x)=v, ③逻辑表达式,如(x>=2)&(xb)?a:b。 ⑥逗号表达式,如a=2,b=a*a,c=sqrt(b)。 5)表达式值的数据类型 (1)每个表达式都有一个确定的值,因而有确定的数据类型
2 表达式 1)C 表达式:由C运算符和运算对象构成的式子。 运算对象可以是常量、变量、函数或表达式。 2) 表达式的书写原则 (1) C 语言的表达式只能采用线性的形式书写。 例如: ① 应写成 1/3.0+i+j*j*j。 ② 应写成(a+b)/(c+d)*e+f。 (2) C 语言的表达式只能使用 C 语言中合法的运算符, 而且运算符不能省略。例如: πr2 应写成 3.14159*r*r。 (3) 对有些操作须调用库函数完成, ① 应写成 0.5*a*b*sin(alph)。 ② |x-y|应写成 fabs(x-y)。 ③ y+2x 应写成 y+pow(2, x)。 3)表达式在求值时,遵循以下规则 (1)优先级:不同优先级的运算符出现在同一表达式时,按运算符的优先级的高 低次序执行。 例如: d=a+b*c; /*先乘后加*/ (2)结合性:是指表达式中出现同优先级的操作符时,该先做哪个操作符的规定。 结合方向:“自左向右”、“自右向左” 例如: a+b-c 从左至右 d=a=b=3 从右至左 4)表达式的分类 C 语言表达式种类很多, 有多种分类方法。 我们一般依据运算的特征将表达式分 为: ① 算术表达式, 如 a+b*2.0-3.0/5.0。 ② 关系表达式, 如 x>=y, ③ 逻辑表达式, 如(x>=2)&&(xb)?a: b。 ⑥ 逗号表达式, 如 a=2, b=a*a, c=sqrt(b)。 5)表达式值的数据类型 (1)每个表达式都有一个确定的值,因而有确定的数据类型。 3 3 1 + i + j e f c d a b + + + absin a 2 1

(2)表达式的数据类型取决与最后执行的运算符, 如: 345+(7+6) 为算术表达式,类型是doub1e型,值35.5 34.5+7>6 为关系表达式,类型是int型,值1 二、C表达式详解 (一)算术运算符和算术表达式 1、分类 单目运算符 +自增 -自减 +加 -减 米乘 /除 %求余 解释: “”为除法运算符」 C规定如果是两个整型数相除,其意义就是整数除,结果为it型。 如至少有一个操作数为实数时,其意义是实数除,结果为double型。 加: 5/2=2 5.0/2=2.5 “%”为取余运算符 如:5%2=1 注意: (1)只能对整数取余数,不能对浮点数取余数。 如表达式10.45是错误的 (2) 运算结果的符号与左操作数相同 -35%8=-3 35%-8=3 2、自增操作符和自减操作符 自增运算符“+”,功能是将变量的值加1:自减运算符“-一”,功能是将变量的值减 1。 414” “一”是对一个变量进行简单的加1算术运算,运算的结果仍赋给该变量。 所以,实际上自增、自诚运算是算术运算和赋值运算的结合。 运算符“+”或“-一”既可以作为一个变量的前缀,也可以作为一个变量的后缀。 例如 +x-x x++x- 前缀和后缀的区别 对一个变量,施加前缀或后缀运算其结果是相同的,都是该变量的值加1或减1
(2)表达式的数据类型取决与最后执行的运算符, 如: 34.5+(7+6) 为算术表达式,类型是 double 型,值 35.5 34.5+7>6 为关系表达式,类型是 int 型,值 1 二、C 表达式详解 (一)算术运算符和算术表达式 1、分类 单目运算符 - 负号运算 ++ 自增 - - 自减 双目运算符 + 加 - 减 * 乘 / 除 % 求余 解释: “/”为除法运算符。 C 规定如果是两个整型数相除,其意义就是整数除,结果为 int 型。 如至少有一个操作数为实数时,其意义是实数除,结果为 double 型。 如: 5/2 = 2 5.0/2= 2.5 “%”为取余运算符。 如:5%2 = 1 注意: (1) 只能对整数取余数,不能对浮点数取余数。 如表达式 10.4%5 是错误的。 (2) 运算结果的符号与左操作数相同。 -35%8 = -3 35%-8 = 3 2、自增操作符和自减操作符 自增运算符“++”,功能是将变量的值加 1;自减运算符“-”,功能是将变量的值减 1。 “++”、“-” 是对一个变量进行简单的加 1 算术运算,运算的结果仍赋给该变量。 所以,实际上自增、自减运算是算术运算和赋值运算的结合。 运算符“++”或“-”既可以作为一个变量的前缀,也可以作为一个变量的后缀。 例如 ++ x -x x ++ x- 前缀和后缀的区别: 对一个变量,施加前缀或后缀运算其结果是相同的,都是该变量的值加 1 或减 1

但是,当施加前缀或后缀运算的变量作为表达式中其它运算符的一个操作对象时,则 参与运算的值是不同的。前缀运算是先将该变量的值增】(或减1),然后再用该变量的值 参与表达式中的其它运算:而后缀运算是先用该变量的值参与表达式中的其它运算,然后 将该变量的值增1(或减1)。 例如: int x.a =5: x=3+(+a) 表达式x +a的运算等价于a=a+1、x=3+a,即先把变量a的值加1,然后再 把加1后的a值赋给x。执行结果为:a的值为6,x的值也为9。 而对于 int x,a=5; x=3+at+: 表达式x a 的运算等价于X二3+a、a三a+1即先把变量a的值赋给,然后 a的值加l。执行结果为:a的值为6,而x的值为8。 因为自增、自减运算是算术运算和赋值运算的结合。因此,自加或自减运算只能用于 变量,不能用于常量或表达式:下面的写法是错误的: 25+ (i+j)+ (二)赋值运算符和赋值表达式 1、赋值运算符: 赋值表达式:变量=表达式 赋值运算时先计 算右边表达式的值,然后将右边表达式的值赋给左边变量,并以 此值作为整个赋值表达式的值。 注意: 赋值运算符具有“自右向左”的结合性,赋值运算符右边的表达式也可以是赋值 表达式: 例如 a=b=5: 等同 a=h=5) 22、复合赋值运算 算术复合赋值运算符:仁 、粒、/、 位复合赋值运算符:&=、仁、=、〉三、〈 一般形式: 变量☆=表达式符。 等价于 变量=变量☆表达式 ☆代表任一双目算术运算符或位运算 例如: (1)inta=3; a+=2: 等价于a=a+2 (2)f1oatx=1.2,y=2.1: v*=X+3.4: 等价于y=y*(x+3.4) (3)int a=1,b=2; b/=a+=1; 等价于b=b/(a=a+1)
但是,当施加前缀或后缀运算的变量作为表达式中其它运算符的一个操作对象时,则 参与运算的值是不同的。前缀运算是先将该变量的值增 1(或减 1),然后再用该变量的值 参与表达式中的其它运算;而后缀运算是先用该变量的值参与表达式中的其它运算,然后 将该变量的值增 1(或减 1)。 例如: int x,a = 5; x = 3+(++ a); 表达式 x = ++a 的运算等价于 a = a + 1、x = 3+a,即先把变量 a 的值加 1,然后再 把加 1 后的 a 值赋给 x。执行结果为:a 的值为 6,x 的值也为 9。 而对于 int x,a=5; x = 3+a++; 表达式 x = a ++ 的运算等价于 x = 3+a、a = a + 1 即先把变量 a 的值赋给 x,然后 a 的值加 1。执行结果为:a 的值为 6,而 x 的值为 8。 因为自增、自减运算是算术运算和赋值运算的结合。因此,自加或自减运算只能用于 变量,不能用于常量或表达式;下面的写法是错误的: 25++ (i+j)++ (二)赋值运算符和赋值表达式 1、赋值运算符: = 赋值表达式:变量=表达式 赋值运算时先计算右边表达式的值, 然后将右边表达式的值赋给左边变量, 并以 此值作为整个赋值表达式的值。 注意: 赋值运算符具有 “自右向左”的结合性,赋值运算符右边的表达式也可以是赋值 表达式: 例如: a=b=5; 等同于 a=(b=5); 2 2、复合赋值运算 算术复合赋值运算符: +=、 -=、 *=、 /=、 %= 位复合赋值运算符: &=、 |=、 ^=、 > >=、 < <= 一般形式: 变量☆=表达式符。 等价于: 变量=变量☆表达式 ☆代表任一双目算术运算符或位运算 例如: (1) int a=3; a+=2 ; 等价于 a=a+2 (2) float x=1.2, y=2.1; y*=x+3.4; 等价于 y=y*(x+3.4) (3) int a=1, b=2; b/=a+=1; 等价于 b=b/(a=a+1)

(三)关系运算符和关系表达式 关系运算符: &> &和川运算符的优先级低于算术运算符和关系运算符,而高于赋值运算符 四、操作数是逻辑量 C语言在进行逻辑运算时,把所有的运算对象都看做是逻辑量,如果其值为0, 则为假,非0则为真。 逻辑表达式的运算结果仍然是逻辑量(0或1) 加: (6+5)&-8 结里为1 结 6110 结果为1 (五)条件运算符和条件表达式 条件表达式的语法形式: ?: 意义:如果表达式1的值为真,条件表达式的结果为表达式2的值:如果表达式 的值为假,条件表达式的结果为表达式3的值: 所: #include "stdio.h" Void main() int x: scanf (%d",&x); x>0?printf("%s",”正数"):printf(”%s","负数"):
(三)关系运算符和关系表达式 一、关系运算符: 、 =、 ==、 != 、 >=的优先级相同,==、 !=的优先级相同, 前者的优先级高 于后者。 二、关系表达式的运算结果是一个逻辑量,即“真”或“假”,关系表达式所表 达的关系如果成立,其值为“真”;若不成立,其值为“假”。 在 C 语言中没有逻辑类型,而是用 1 代表“真”,用 0 代表“假”。所以 关系表达式的值,不是 0,就是 1,其类型是 int 型。 (四)逻辑运算符与逻辑表达式 一、逻辑运算符 ! 逻辑非 && 逻辑与 || 逻辑或 二、逻辑表达式及其意义 &&: 两操作数同为真时结果为真 !: 取反 ||: 两操作数只要有一个为真时结果就为真 三、优先级: !> && > || &&和|| 运算符的优先级低于算术运算符和关系运算符,而高于赋值运算符。 四、操作数是逻辑量 C 语言在进行逻辑运算时,把所有的运算对象都看做是逻辑量,如果其值为 0, 则为假,非 0 则为真。 逻辑表达式的运算结果仍然是逻辑量(0 或 1) 如: (6+5)&&-8 结果为 1 !5 结果为 0 6||0 结果为 1 (五)条件运算符和条件表达式 条件表达式的语法形式: ? : 意义:如果表达式 1 的值为真,条件表达式的结果为表达式 2 的值;如果表达式 1 的值为假,条件表达式的结果为表达式 3 的值; 例: #include ″stdio.h″ Void main( ) { int x; scanf(″%d″, &x); x>0?printf(″%s″, ″正数″): printf(″%s″, ″负数″); }

注意:条件运算符的结合方向“自右向左” >b?a:c>d?c:d 相当于 a-b?a:(c-d?c:d) (六)逗号运算符和逗号表达式 一、逗号运算是双目运算,一般形式如下: 1, 表达武, 货芯的的求解过程是:先求解表达式山,再求解表达式之,整个表达的 是表达式2的值。逗号表达式的的求解过程是:先求解表达式1,再求解表达式2,整个表 达式的值是表达式2的值。 子部6和比作为整个达式的值达式的值为, 如 (七)求字节数运算 运算符:sizeof0 表达式:sizeof(数据类型标识符 sizeof(表达式) 求字节数运算是单目运算,操作数可以是类型名,也可以是表达式,用以求得相应 类型或数据所占的字节数。 例如: sizeof(float) 值为4,单精度类型占4个字节 sizeof2◆3) 值为4,算术表达式23是int型 (八)数据的类型转换 1系结自动讲行的类型转化 由系统自动完成类型转换, 转换的规则如下: int→ unsigned →long double short char float 纵向箭头方向表示必定要进行的转换,short型、char型数据必定先转换成it型,loa 型数据必定先转换成double型。再进行运算。 横向箭头方向表示类型自动转换的方向。由低向高转换,it型最低,double型最高。 2赋值时的类型转换 ()将实型数据赋给整型变量时,舍弃实数的小数部分。 t如:inti =1.93:/*结果i的值为1*/ (2)将整型数据赋给单、双精度型变量时,数值大小不变,但以浮点形式存储到变量
注意:条件运算符的结合方向“自右向左” a>b?a:c>d?c:d 相当于 a>b?a:(c>d?c:d) (六)逗号运算符和逗号表达式 一、逗号运算是双目运算, 一般形式如下: 表达式 1, 表达式 2 逗号表达式的的求解过程是:先求解表达式 1,再求解表达式 2,整个表达式的值 是表达式 2 的值。逗号表达式的的求解过程是:先求解表达式 1,再求解表达式 2,整个表 达式的值是表达式 2 的值。 如:q= (a=2, a*6) 先计算 a=2, 再计算 a*6, 并以此作为整个表达式的值, 表达式的值为 12。 (七)求字节数运算 运算符: sizeof() 表达式: sizeof(数据类型标识符) 或 sizeof(表达式) 求字节数运算是单目运算, 操作数可以是类型名, 也可以是表达式, 用以求得相应 类型或数据所占的字节数。 例如: sizeof(float) 值为 4,单精度类型占 4 个字节 sizeof(2*3) 值为 4,算术表达式 2*3 是 int 型 (八)数据的类型转换 1 系统自动进行的类型转化 由系统自动完成类型转换, 转换的规则如下: int unsigned long double ↑ ↑ short,char float 纵向箭头方向表示必定要进行的转换, short 型、char 型数据必定先转换成 int 型, float 型数据必定先转换成 double 型, 再进行运算。 横向箭头方向表示类型自动转换的方向。由低向高转换, int 型最低, double 型最高。 2 赋值时的类型转换 (1)将实型数据赋给整型变量时, 舍弃实数的小数部分。 如: int i; i=1.93; /*结果i 的值为1*/ (2) 将整型数据赋给单、双精度型变量时, 数值大小不变, 但以浮点形式存储到变量 中

3强制类型转换 强制类型转换通过类型转换运算进行。 格式:(类型名)(表达武) 功能:将表达式的类型强制转换成类型名指定的类型, 如:float x=5.2,y=6.3:intz: z=(int)(x+y); (int)(x+y)将表达式x+y的值强制转换成整型。 注意:强制类型转换在将高类型转换为低类型时,数据精度受损,是一种不安全的转换
3 强制类型转换 强制类型转换通过类型转换运算进行。 格式: (类型名)(表达式) 功能:将表达式的类型强制转换成类型名指定的类型。 如: float x=5.2, y=6.3; int z; z=(int)(x+y); (int)(x+y)将表达式 x+y 的值强制转换成整型。 注意:强制类型转换在将高类型转换为低类型时, 数据精度受损, 是一种不安全的转换
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第一章 C简介.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第三章 简单的C程序设计.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第四章 程序的控制结构(四).doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第四章 程序的控制结构(三).doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第四章 程序的控制结构(二).doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第四章 程序的控制结构(一).doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第六章 数组 6.3.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第六章 数组 6.3.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第六章 数组 6.2.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第五章 函数.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第七章 指针(一).doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第六章 数组.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第七章 指针(二).doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第六章 数组 6.5 字符数组.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第八章 结构体与共用体.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第七章 指针(三).doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第九章 文件操作.doc
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第七章 指针(四).doc
- 内蒙古科技大学:《C语言程序设计》课程教学大纲 C Language Programming.pdf
- 《计算机组成原理》课程教学课件(PPT讲稿)第1章 计算机组成原理概述 Computer Organization.ppt
- 内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第二章 数据类型、运算符及表达式(一).doc
- 内蒙古科技大学:《C语言程序设计》课程教学资源(作业习题)编程题.doc
- 内蒙古科技大学:《C语言程序设计》课程教学资源(作业习题)填空题.doc
- 内蒙古科技大学:《C语言程序设计》课程教学资源(作业习题)改错题.doc
- 内蒙古科技大学:《C语言程序设计》课程教学资源(作业习题)选择题.doc
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第八章 结构体与共用体.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第七章 指针.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第九章 文件操作.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第六章 数组.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第二章 数据类型、运算符及表达式.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第三章 简单的C程序设计.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第五章 函数.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第四章 程序的控制结构.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第一章 C语言概述.ppt
- 《过程流体机械》课程教学课件(PPT讲稿)第一章 绪论.ppt
- 《过程流体机械》课程教学课件(PPT讲稿)第四章 泵.ppt
- 《过程流体机械》课程教学课件(PPT讲稿)第二章 往复式压缩机.ppt
- 《过程流体机械》课程教学课件(PPT讲稿)第三章 离心式压缩机.ppt
- 《过程流体机械》课程教学课件(PPT讲稿)第五章 离心机.ppt