Chapt03数据类型、运算符与表达式.ppt_第1页
Chapt03数据类型、运算符与表达式.ppt_第2页
Chapt03数据类型、运算符与表达式.ppt_第3页
Chapt03数据类型、运算符与表达式.ppt_第4页
Chapt03数据类型、运算符与表达式.ppt_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章 数据类型、运算符与表达式 C语言提供的数据结构是以数据类型形式出现的。 C的数据类型有: 数据类型 整型 字符型 实型(浮点型) 枚举类型 基本类型 构造类型 指针类型 空类型 单精度型 双精度型 数组类型 结构体类型 共用体类型 1. 数据的描述(数据结构) 一个程序应包括两个方面的内容: 2. 操作的描述(即操作步骤、算法) 数据是操作的对象,操作的结果又会改变数据的状况。 数据结构与算 法的结合才成为一个程序。 3.1 C 的数据类型 C语言的基本符号 1. 基本符号: 26个英文字母 包括大写和小写,C 中大小写字母被认为是两个不同的字符。 数字 09。 特殊符号:如 初等量表达式操作符:( ), ,. ,; 一元操作符:*, 二元操作符: , *,%, , =,=, , = , = , (右移 ) 5. 赋值运算符 = 及其扩展赋值运算符(如 +=, -=, .) 6. 条件运算符 (1) ? (2) : (3) ( 如果(1)为真,则取(2),否则取(3) ) 7. 逗号运算符 , 8. 指针运算符 * , x-y ; x*y ; x/y ; x%y (表示两个整数求余数 , 如 7%4 的值为 3) C的算术表达式: 用算术运算符和括号将运算对象连接起来的、符 合C语法规则的式子。 这里运算对象包括:常量、变量、函数等 。 如: a*b/c+1+12.3*a 是一个合法的算术表达式 为了使算术表达式能按正确的法则运算,C规定了运算符的优先 级和结合性:在表达式 求值时,先按 运算符的优先级别高低次序 执行,如果优先级相同,再按 结合方向 处理。 优先级: - , + , - * , / ,% + , - 算术运算符的结合方向(结合性)是 自左至右 如: a-b*c - 与 * 之间先 * 后 - a-b+c - 与 + 同级,则先 - 后 + 如果一个运算符两边的数据类型不同,则按前面的法则进行转换 ,然后运算。 2. 算术表达式 和 运算符的优先级与结合性 3. 强制类型转换 可以用一个强制类型转换运算符将一个表达式的值转换成需要的类型。 一般形式: (类型名) (表达式) 因此有两种方法进行类型转换: (1) 自动转换 (按级别高低) (2) 强制转换 (用强制类型转换运算符) 例3.8 强制类型转换。 1) main( ) float x ; int i; x=5.8 ; i=(int) x ; printf(“x=%f , i=%d“,x, i) ; 运行结果: x=5.800000 , i=5 如: (double) a 将a 的值转换成double型 (int) (x+y) 将(x+y)的值转换成int 型 比较 与(int) x+y 有何不同? (float) (5%3) 注意:强制类型转换只是将表达式的值转换成所需的类型,而原来的变 量类型并没有变化。 3) main( ) float x ; int i , j ; x=3.6 ; i=3 ; j=(int)x%i ; printf(“j=%d“,j); 2) main( ) int x , y ; long z ; x=400 ; y=200 ; z=(long)x*y ; printf(“%ldn“,z) ; 强制类型转换运 算优先于%运算 运行结果: j=0 运行结果: z=80000 4. 自增运算符( +) 、自减运算符(- -) 自增、自减的作用是使变量的值自动 增1、减1。 +i 、 - -i :在使用 i 之前使i 的值先增加1(或减少1)。 即先变化 i 得到新值,再使用该新 i值 进行运算。 i+ 、 i- -:在使用 i 之后再使 i 的值增加1(或减少1)。 即先使用原来的 i 进行运算,再变化原来的 i得到新 i值 。 例如: n=3; n=3 ; m=n+ ; m=+n ; 结果是 m 为 3 , n 为 4 ; m为 4 , n 为 4 注意: 自增、自减运算符只能用于变量,不能用于常量或表达式。 自增、自减运算符是自右至左结合的(不同于算术运算符)。 如: -i+ 表示 (i+),而不是 (-i)+ , 而(-i)+也是不合法的。 若 i=3; printf(“%d“, -i+); 先取出i 的值3 ,输出-i 的 值-3,然后i 增值为4。 自增(减)运算符常用于循环语句中,使循环变量自动加1( 或减1),也用于指针变量,使指针指向下一个地址。 5. 有关表达式使用中的问题 C 运算符和表达式使用灵活,应避免出现歧义。 ANSI C 并没有具体规定表达式中的子表达式的求值顺序,允许各 编译系统自己安排。 例如,对表达式:a=f1( )+f2( );并不是所有的编译系统都是先调 用f1( ) ,然后调用f2( )。在一般情况下,先调用f1( ) 和先调用f2( ) 的 结果可能是相同的,但是有的情况下却截然不同。 如果有表达式: (i+)+(i+)+(i+)其值是多少呢?(设i 原值为3) 有的系统按照自左而右的顺序求解括弧内的运算,求完第一个括 弧求第二个括弧,结果为3+4+5,即12;而另一些系统(如Turbo C )则将表达式中的所有i 值视为3 相加,即3个3 相加得9,然后再实 现自加3 次,i 的值变为6。 运算符的组合。 C语言中运算符有的为一个字符,有的为两个字符,在表达式中 如何组合呢?C 编译系统在处理时尽可能多地(自左而右)将若干 个字符组合成一个运算符 (在处理标识符、关键字时也按同一原则处 理)。 如 i + + + j 应理解为 (i+)+j,而不是 i+(+j) 函数调用时,参数的调用顺序 函数调用时,实参数的调用顺序C 标准无统一规定,不同系统可导 致不同结果。 如 i 的初值为3,函数调用: printf(“%d,%d“, i, i+); 有的系统从左至右求值,输出“3,3”;在多数系统中对函数参数的 求值顺序是自右而左的,先求第二个表达式i+ 的值,再求第一个表达 式i 的值,故输出“4,3”。 注意:(1) 自增、自减运算,防止副作用; (2) 尽量书写简捷易读的表达式! 为了避免误解,最好写成大家都能理解的形式。 3.9 赋值运算符和赋值表达式 1. 赋值运算符 赋值号 “=” 就是赋值运算符。它的作用是将一个数据 赋给一个变量, 也可以将一个表达式的值赋给一个变量 。如: x=1 ;c=a+b; 2. 类型转换 当赋值号两边类型不一致,但都是数值型或字符型时, 赋值时要进行类型转换。 不同类型的整型数据间的赋值归根到底就是一条:按存 储单元中的存储形式直接传送。 例: *=: a*=3 ; a=a*3 ; /=:x/=y+3 ; x=x/(y+3); %=:a%=3 ; a=a%3 ; 在赋值运算符之前加上其它运算符可以构成复合运算符。 如: 在 = 之前加上 +, 则构成 +=。 a+=3 相当于 a=a+3 含义是: a+=表达式 相当于 a=a+表达式 如果表达式是由多项构成,则相当于有括号,即 a=a+(表达式) 凡是二元(二目)运算符都可以与 “ = ” 一起组成赋值运算。 C 语言中规定可以用10 种复合赋值运算符: += -= *= /= %= = ” ,则成为赋值语句。 4. 赋值表达式 3.10 逗号运算符和逗号表达式 用 “ , ” 将两个表达式连接起来所构成的表达式称为逗号表达式。 如: 3+5 , 6+8 逗号表达式的一般形式: 表达式1 , 表达式2 求解过程: 先求表达式1的值,再求表达式2的值,整个表达式的值 是表达式2 的值。 如上式,结果是14 又如: a=3*5,a*4 结果是a= 15, 表达式值是60。 一个逗号表达式可以与另一个逗号表达式组成新的逗号表达式。 如: (a=3*5,a* 4) , a+5 即:(1) a=15 (2) ( 15 , 60) = 值为 60 (3) 60 ,20 = 整个表达式的值为 20 例: (1) x=(a=3,6*a) (2) x=a=3,6*a 赋值表达式:a为 3 ,x 为18 ; 逗号表达式:x为 3,a为 3。 逗号表达式可以推广到多个表达式的情况 表达式1 , 表达式2, . , 表达式n 它的值是 表达式n 的值。 由于逗号运算符是所有运算符中级别最低的,因此书写表达式时要注 意求解的次序。 注意:并非所有的 “,“ 都是运算符 如: printf(“%d,%d,%d“,a,b,c); -这里的“,“ 都只是分隔符 而 printf(“%d,%d,%d“, (a,b,c), b, c); -这里(a,b,c)中的“,“是运算符 选择题:下面符合C 语言语法的赋值表达式是 ( )。 A) d=9+e+f=d+9B) d=9+e, f=d+9 C) d=(9+e, e+, d+9) D) d=9+e+=d+7 本章要点 C语言的标识符是如何定义的。 C语言有哪些基本数据类型? 各种基本数据类型的常量和变量是如何定义的? C语言有几种类型的表达式? 各种类型表达式是如何求值的? 在C语言混合运算的表达式中,各种运算符的优先级 和结合性。 习 题 二 1. 把以下数从小到大排列: 256, 0256, 0x256, -315, 15, 75 2. 以下各标识符中,哪些合法的标识符用户可以用: Pad, scanf, a*, P#D, a10, max, temp, a-b, _isw, float, INT, del_word, line10. 3. 写出下面程序段的输出结果是什么? int k=-1 ; printf(“%d,%un“,k,k) ; 4. 以下各组数据中不正确的数值是(1) (2)_(3)_. (1) A) 0.0 B) 5L C) o13 D) 9861 (2) A) 011 B) 3.987E-2 C)0xabcd D)0xabgf (3) A) 8.9e1.2 B) 1e1 C)0xFF00 D) 0.825e2 5. 以下两组整数值中不正确的八进制或十六进制是(1)_(2) _ (1) A) 0x16 B) 016 C)-16 D) 0xaaaa (2) A) 0xcc B)018 C)0xffff D) -0xffff -1,65535 测 验 一 1. 一个程序是从_ 函数开始执行的。 2. 一个C 源程序中的基本单位是_。 3. 一个C 语言程序是由_ 组成。 4. 一个C 源程序中至少应包括一个_。 5. C源程序中,注释部分两侧的分界符分别为_ 和_ 。 6. 写出下面不合法的用户标识符_ float , b-a , _123 , p_o , 1ao , temp , long , _A , 7. 写出下面不合法的整型常数是_ 160 , -01 , 0668 , 011 , 0x , 01a , -0xffff , -0x48aa , 3.4E2 8. 写出下面不合法的浮点数是_ 160. , e3 , 123 , 2e4.5 , .e5 , 1e3 , 9. 写出下面合法的字符常量是。 “c“ , , W , 011 , xab , 10. 写出下面不正确的八进制数或十六进制数是_。 016 , 0abc , o10 , 0a123 , 0xa123 , 11. 写出下面不正确的字符串常量是_。 abc , “12.12“ , “0“ , “ “ , 12. 在C语言中要求操作对象必须是整型的运算符是_。 13. C语言中int ,char, unsigned int ,long , float , double类型数据分别占用 内存的字节数为_ , _ , _ , _ , _ 和 _。 14. 若有代数式 3ae/bc,则C语言表达式是_。 15. 若 int a , b ; unsigned int w=5 ; 求:(1) 表达式w+=-2中的w值。 (2) 表达式a+=a-=(b=4)*(a=3)中的a 和b值。 16. 若 int i=8 , a=1 , b=4 , k ; double x=1.42 , y=5.2 ; 求: (1) a-=a*=a+3 ; (2) k=(int)x%3 ; (3) y=(float)b ; (4) k=(int)y%i ; 17. 若 int num=7 , sum ; 给出下面三个语句运行后的sum 和num 值。 sum=num+ ; sum+ ; +num ; 18. 若 int a=7 ; float x=2.5 ,y=4.7 ; 计算表达式的值: x+a%3*(int)(x+y)%2/4 19. 若 int b=7 ; float a=2.5 , c=4.7 ; 计算表达式 a+(int)(b/3*(int)a+c/2)%4 20. 给出下面语句的输出结果。 char a=31 ; printf(“%d , %o , %x ,%un“,a,a,a,a); 21. 下面程序要求变量a ,b进

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论