《2022年《C语言程序设计》谭浩强版教学教案k .pdf》由会员分享,可在线阅读,更多相关《2022年《C语言程序设计》谭浩强版教学教案k .pdf(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、名师精编优秀教案宜宾学院教案C语言程序设计 _课程周次第 3 周,第 1 次课章节名称第三章数据类型、运算符与表达式3.7 各类数值型数据间的混合运算3.8 算术运算符和算术表达式3.9 赋值运算符和赋值表达式授课方式课堂讲授() ; 实验课() ; 其他方式()教学时数2 学时教学目的1、掌握 C语言数据类型基本概念。2、掌握不同类型数据之间的转换规则。3、掌握运算符与表达式的规则和使用方法。教学重点与难点教学重点与难点:1、C语言数据类型基本概念。2、不同类型数据之间的转换规则。3、运算符与表达式的规则和使用方法。参考资料C语言程序设计教程谭浩强高等教育出版社C高级实用程序设计王士元清华大
2、学出版社C程序设计及应用李盘林、孟宪福著高等教育出版社C语言程序设计王树义钱达源编著大连理工大学出版社C语言程序设计课程教案何明儒教授等四川大学计算机学院授课内容与过程步骤一:复习上次课内容用运算符和括号将运算对象(数据)连接起来的、符合C 语法规则的句子称为表达式。步骤二:讲授新课3.7 各类数值型数据间的混合运算整型(包括int,short,long) 、浮点型(包括float,double)可以混合运算。在进行运算时,不同类型的数据要先转换成同一类型, 然后进行运算. 其转换规则如下:double float 高long unsigned 低 intchar,short 上述的类型转换是
3、由系统自动进行的时 间分配约5分钟约 40分钟名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 1 页,共 7 页 - - - - - - - - - 名师精编优秀教案3.8算术运算符和算术表达式3.8.1 运算符简介的运算符有以下几类:(1) 算术运算符(+ - * / %)(2) 关系运算符(!)(3) 逻辑运算符(! | )(4) 位运算符( |)(5) 赋值运算符(及其扩展赋值运算符)(6) 条件运算符(?: )(7) 逗号运算符 ( ,) (8) 指针运算符
4、(* 和)(9) 求字节数运算符()(10) 强制类型转换运算符( ( 类型) ) (11) 分量运算符(- )(12) 下标运算符( )(13) 其他(如函数调用运算符()3.8.2 算术运算符和算术表达式(1) 基本的算术运算符: (加法运算符,或正值运算符。如: 、) (减法运算符,或负值运算符。如: 、)* (乘法运算符。如: *) (除法运算符。如: ) (模运算符,或称求余运算符,两侧均应为整型数据,如: 的值为)。(2) 算术表达式和运算符的优先级与结合性基本的算术运算符: 用算术运算符和括号将运算对象( 也称操作数 ) 连接起来的、符合语法规则的式子,称为算术表达式。运算对象包
5、括常量、变量、函数等。例如 : * .5 a是一个合法的表达式语言规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。规定了各种运算符的结合方向( 结合性 ) ,算术运算符的结合方向为 “自左至右 ”,即先左后右。(3) 强制类型转换运算符可以利用强制类型转换运算符将一个表达式转换成所需类型。一般形式 : (类型名)(表达式)例如: (double)将转换成double 类型(int)(x+y) 将 x+y 的值转换成整型(float)(5%3 )将 5%3的值转换成float型例 3.8 强制类型转换。名师归纳总结 精品学习资料 - - - -
6、- - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 2 页,共 7 页 - - - - - - - - - 名师精编优秀教案#include void ();(); printf(x=%f, i=%dn,x, i); (4) 自增、自减运算符作用是使变量的值增或减,如:,(在使用之前,先使的值加(减),(在使用之后,使的值加(减)i+ 与+i 的区别:是先执行后,再使用的值;是先使用的值后,再执行。例如:; i的值先变成4, 再赋给 ,j的值均为;先将 i的值 3 赋给 , 的值为,然后变为注意:自增运算符(),
7、自减运算符(),只能用于变量,而不能用于常量或表达式,和的结合方向是“自右至左 ”。自增(减)运算符常用于循环语句中使循环变量自动加。也用于指针变量,使指针指向下一个地址(5) 有关表达式使用中的问题说明ANSI C 并没有具体规定表达式中的子表达式的求值顺序,允许各编译系统自己安排。例如:对表达式 a = f1( )+f2( ) 并不是所有的编译系统都先调用f1( ), 然后调用f2( )。在有的情况下结果可能不同。有时会出现一些令人容易搞混的问题,因此务必要小心谨慎。语言中有的运算符为一个字符,有的运算符由两个字符组成,为避免误解,最好采取大家都能理解的写法。例如:不要写成i+j的形式,而
8、应写成 (i+)+j的形式在调用函数时,实参数的求值顺序,标准并无统一规定。例如:的初值为,如果有下面的函数调用: printf(, i+ )在有的系统中,从左至右求值,输出“,”。在多数系统中对函数参数的求值顺序是自右而左,函数输出的是“,”。以上这种写法不宜提倡,最好改写成j = i+; printf(%d, %d, j ,i) 不要写出别人看不懂的也不知道系统会怎样执行程序名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 3 页,共 7 页 - - - - -
9、- - - - 名师精编优秀教案3.9 赋值运算符和赋值表达式1.赋值运算符赋值符号“”就是赋值运算符,它的作用是将一个数据赋给一个变量。如“”的作用是执行一次赋值操作(或称赋值运算)。把常量赋给变量。也可以将一个表达式的值赋给一个变量. 2. 类型转换如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。将浮点型数据(包括单、双精度)赋给整型变量时,舍弃浮点数的小数部分。如: 为整型变量,执行“i=3.56 ”的结果是使的值为,以整数形式存储在整型变量中. 将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中如 : 将赋给float变量,即执行,先将
10、转换成 0,再存储在中。将赋给型变量,即执行,则将补足有效位数字为,然后以双精度浮点数形式存储到变量中。将一个double 型数据赋给float变量时,截取其前面7 位有效数字,存放到 float变量的存储单元 ( 4 个字节) 中。但应注意数值范围不能溢出。如:float f;double d=123.456789e100; f=d; 就出现溢出的错误。如果将一个float型数据赋给double 变量时,数值不变,有效位数扩展到 16 位,在内存中以8 个字节存储字符型数据赋给整型变量时,由于字符只占1 个字节,而整型变量为个字节,因此将字符数据(个二进位)放到整型变量存储单元的低位中。第一
11、种情况 : 如果所用系统将字符处理为无符号的字符类型,或程序已将字符变量定义为型,则将字符的位放到整型变量低位,高位补零例如:将字符 赋给型变量第二种情况: 如果所用系统 (如 Turbo C+ ) 将字符处理为带符号的 (即 signed char ) ,若字符最高位为,则整型变量高位补;若字符最高位为,则高位全补。这称为“符号扩展 ”,这样做的目的是使数值保持不变,如变量(字符 )以整数形式输出为,的值也是。将带符号的整型数据(int型)赋给long 型变量时,要进行符号扩展,将整型数的16 位送到 long 型低 16 位中 : 如果 int型数据为正值 (符号位为) , 则 long
12、型变量的高16 位补;如果 int型变量为负值 (符号位为) , 则 long 型变量的高16 位补,以保持数值不改变。反之,若将一个long 型数据赋给一个int型变量,只将long 型数据约 40分钟名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 4 页,共 7 页 - - - - - - - - - 名师精编优秀教案中低 16 位原封不动地送到整型变量(即截断)。 例如: int a; long b; a=b 赋值情况如图 : 如果(八进制数), 则赋值后值为
13、。见图 3.14 将 unsigned int型数据赋给long int型变量时,不存在符号扩展问题,只需将高位补即可。将一个unsigned 类型数据赋给一个占字节数相同的非unsigned 型整型变量(例如:unsigned int -int,unsigned long-long,unsigned short-short) ,将 unsigned 型变量的内容原样送到非 unsigned 型变量中,但如果数据范围超过相应整型的范围,则会出现数据错误。例如: unsigned int 65535; int b;;将整个送到中, 由于是 int,第位是符号位,因此b 成了负数。根据补码知识可知
14、,的值为 -1 ,可以用 printf( %d,) ; 来验证。将非 unsigned 型数据赋给长度相同的unsigned 型变量,也是原样照赋(连原有的符号位也作为数值一起传送)例 3.9 有符号数据传送给无符号变量。#include void ();(n,) ;强调:“%u”是输出无符号数时所用的格式符。如果为正值,且在32767 之间,则赋值后数值不变。赋值情况见图运行结果: 6 5 5 3 5 3. 复合的赋值运算符在赋值符“”之前加上其他运算符,可以构成复合的运算符。例如 : 等价于* 等价于 *() 等价于以“ ”为例来说明,它相当于使进行一次自加的操作。即先使加,再赋给。为便于
15、记忆,可以这样理解: a += b (其中 a 为变量, b 为表达式 ) a += b(将有下划线的“ a+”移到 “ =”右侧) |_ a = a + b (在 “ =”左侧补上变量名a)注意 : 如果是包含若干项的表达式,则相当于它有括号。如: x %= y+3 x %= (y+3) |_x = x %(y+3)(不要错写成x=x%y+3) 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 5 页,共 7 页 - - - - - - - - - 名师精编优秀教案
16、凡是二元(二目)运算符,都可以与赋值符一起组合成复合赋值符。语言规定可以使用种复合赋值运算符:,* ,| 4. 赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式” 。一般形式为 : 例如 : “ 5”是一个赋值表达式对赋值表达式求解的过程是:求赋值运算符右侧的“表达式 ”的值 ; 赋给赋值运算符左侧的变量。例如 : 赋值表达式 “ =3*5 ” 的值为 15,执行表达式后,变量a 的值也是 15。注意 : 一个表达式应该有一个值左值 (lvalue):赋值运算符左侧的标识符变量可以作为左值;而表达式就不能作为左值(如 a+b);常变量也不能作为左值,右值 (lvalu
17、e):出现在赋值运算符右侧的表达式左值也可以出现在赋值运算符右侧,因而左值都可以作为右值。赋值表达式中的“表达式”,又可以是一个赋值表达式. 例如 : a=(b=5) 分析 : 括弧内的 “ b=5” 是一个赋值表达式,它的值等于5。执行表达式“a=(b=5) ” 相当于执行 “b=5” 和“a b” 两个赋值表达式。赋值运算符按照 “自右而左 ”的结合顺序,因此,“ (b5) ”外面的括弧可以不要,即“ a=(b=5)” 和“ a=b=5 ” 等价. 请分析下面的赋值表达式(a=3*5)=4*3 不能写成 :a=3*5=4*3 分析 : 先执行括弧内的运算,将15 赋给 a,然后执行4*3
18、的运算,得12,再把 12 赋给 a。最后 a 的值为 12, 整个表达式的值为12。 可以看到 (a=3*5)出现在赋值运算符的左侧,因此赋值表达式(a=3*5) 是左值注意 : 在对赋值表达式(a=3*5) 求解后,变量 a得到值 15执行 (a=3*5)=4*3时,实际上是将4*3 的积 12 赋给变量a,而不是赋给3*5 。赋值表达式也可以包含复合的赋值运算符。如: a+=a-=a*a 分析 : 此赋值表达式的求解步骤如下 先进行 “ * ”的运算,它相当于* ,a 的值为 144 132。再进行 “”的运算,相当于=a+(-132) , a 的值为132-132 -264 。将赋值表
19、达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句、循环语句等)名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 6 页,共 7 页 - - - - - - - - - 名师精编优秀教案中. 如: printf(%d,a=b); 分析 : 如果 b 的值为 3, 则输出 a 的值 ( 也是表达式a=b 的值 ) 为 3。在一个语句中完成了赋值和输出双重功能。步骤三 课堂小结1、算术运算符、逻辑运算符的应用,及相关表达式的逻辑值2、 + 、- 运算3、各种运算符的优先级步骤四 布置作业练习: P66 3.9、3.10 、3.11 、3.12 课后习题3.6,3.9 约5分钟课堂讨论与练习讨论课后习题3.6,3.9 课后记录注:教案按授课次数填写, 每次授课均应填写一份。 重复班授课可不另填写教案。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 7 页,共 7 页 - - - - - - - - -
限制150内