C语言基本语法元素.ppt

上传人:小飞机 文档编号:6503806 上传时间:2023-11-07 格式:PPT 页数:118 大小:611KB
返回 下载 相关 举报
C语言基本语法元素.ppt_第1页
第1页 / 共118页
C语言基本语法元素.ppt_第2页
第2页 / 共118页
C语言基本语法元素.ppt_第3页
第3页 / 共118页
C语言基本语法元素.ppt_第4页
第4页 / 共118页
C语言基本语法元素.ppt_第5页
第5页 / 共118页
点击查看更多>>
资源描述

《C语言基本语法元素.ppt》由会员分享,可在线阅读,更多相关《C语言基本语法元素.ppt(118页珍藏版)》请在三一办公上搜索。

1、C语言程序设计教程,第2章:C 语言基本语法元素(3课时),提纲,计算机内数的表示数据类型量与表达式语 句本章小结,程序和数据,通常程序要对数据进行操作处理:处理的对象是数据通过运算符和表达式进行操作举例:文字处理软件数值计算软件多媒体软件你如何描述数据?,数据在程序如何描述?,为什么不使用:0和1组成的位串?程序设计语言本身提供某种程度的抽象。C语言中数据类型分为三大类:基本类型 构造类型 指针类型带来了什么好处?,例如:,计算圆的面积,半径为 5 cm。程序如下:,main()float r,area;r=5;area=3.14*r*r;printf(%fn,area);,运算结果是输出圆

2、的面积:78.500000,程序中用到的数据:r、area、5、3.14对数据进行的运算:*、=,分析:,计算机操作处理时,要完成以下工作:在内存中给半径 r 和运算结果 area 开辟存储空间,存放它们的值。应该留多大的地方来存放它们的值?数据 5 和 3.14 与 r、area 不同,它们是在编写程序时就给出确定的值,在运算过程中不会改变。这样的数计算机怎么处理?对整数 5 和小数3.14,计算机存放时是否有区别?,涉及数据类型的基本知识,C语言的数据类型,C数据类型,本章讨论基本类型数据,计算机中数的表示 数值数据:表示数量的多少。数据 非数值数据:表示符号、标记。我们讨论各类数据的表示

3、方法,就是讨论它们在计算机内的存储格式和编码规则。,如字母、汉字、标点符号、运算符等。,R进制计数法 数制 就是用一组固定的数码和一套统一的运算规则表示数值的方法。例如:十进制使用10个数码(09),计数规则是“逢十进一”。二进制使用2个数码(0,1),计数规则是“逢二进一”。八进制使用8个数码(07),计数规则是“逢八进一”。十六进制使用16个数码(09,A,B,C,D,E,F),计数规则是“逢十六进一”。,基数(R)是指一种数制中所使用的数码个数。十进制使用10个数码,基数R=10;二进制使用2个数码,基数R=2;同样,八进制的基数R=8;十六进制的基数R=16。由以上四种数制可以看出一个

4、规律:各种数制中,最小的数码都是0,最大的数码都比基数小1(R1)。,练习与讨论,1.有人说:“2008不可能是八进制数”,这种说法对吗?,对。因为八进制数中没有数码8。2008可能是十进制数,也可能是十六进制数。,位权 在一个数中,同一个数码处于不同位置所代表的值不同。例如,十进制数111.8中有3个1,它们分别表示100、10、1。111.8 可以写成如下形式:111.8=1102+1101+1100+810-1 其中,以基数10为底的整数幂(如102,101,100,10-1)称为各位的位权。上式等号右面的多项式称为按权展开式。,同理,二进制数1011 B可以按权展开:1011 B=12

5、3+022+121+120 其中,以基数2为底的整数幂就是各位的权:位:1 0 1 1 位权:23 22 21 20,四种数制间的转换 1.二进制数与十进制数之间的转换 二进制数十进制数 方法:按权展开求和。例1.1101 B=D,1101 B=,123,+122,+021,+120,=8+4+0+1,=13,13,十进制整数二进制整数 方法:除2取余,余数倒序排列。例2.13=B,0 1,1101,商为0,除法停止,十进制小数二进制小数 方法:乘2取整,整数正序排列。例3.0.125=B,0.250,小数部分为0,乘法停止,0.001,例4.0.43=B 0.43 2 0 0.86 2 1

6、1.72(取走整数)0.72 2 1 1.44(取走整数)0.44 2 0 0.88,0.430.0110 B 误差小于2-4,例5.13.125=B 方法:先把整数部分13转换成二进制整数1101;再把小数部分0.125转换成二进制小数0.001;把两部分写在一起:1101.001B,2.二进制数 八进制数 先看 表1-1。从表中可看出如下规律:二进制数八进制数 方法:先将二进制数从小数点开始,向左或向右每3位分成一组,再将每一组写成1位八进制数。例6.1011101.11 B=001 011 101.110 B=135.6 Q,3位二进制数对应1位八进制数;4位二进制数对应1位十六进制数。

7、,八进制数二进制数 方法:将每1位八进制数直接写成3位二进制数。例7.237 Q=010 011 111 B=10011111 B,3.二进制数 十六进制数 二进制数十六进制数 方法:将二进制数从小数点开始,每4位分成一组,再将每一组写成1位十六进制数。例8.1011100 B=0101 1100 B=5C H,十六进制数二进制数 方法:将每1位十六进制数直接写成4位二进制数。例9.1C8 H=0001 1100 1000 B=111001000 B,注:十进制数 八进制数 十进制数 十六进制数 方法与十进制数 二进制数类似。例10.127 Q=D 127 Q=182+281+780=64+1

8、6+7=87,例11.100=H 方法:除基取余。,6,0,64,提示:当数值较大时(如226),为了减少除法次数,以减少出错机会,更好的方法是:十进制数十六进制数二进制数,10 0 10 B,8 0 H,数值数据有两种表示方法,例如:后缀法 下标法 1010 B(1010)2 6072 Q(6072)8 985 D 或 985(985)10 或 985 9F0 H(9F0)16 0B407 H(B407)16,十六进制数以字母开头时,前面加0,计算机中数据的编码方法 数值数据包括整数和实数。在计算机内部都用二进制表示。实数表示形式有两种:小数和指数。为了便于理解,用十进制与二进制进行对比:十

9、进制 二进制 小数形式 1.5 1.1 B 指数形式 1.5*100 1.1*200B 或 0.15*101 0.11*201B 或 0.015*102 0.011*210B,规格化形式,中整数部分为0,小数部分最高位不为0。在计算机中,只能用有限个二进制位存储一个数。在这有限个二进制位(如32位)中,尾数和指数各占多少位,才能使精度最高、数的表示范围最大呢?C语言采用IEEE(美国电气和电子工程师学会)格式:符号位占1位,指数占8位,尾数占23位。具体格式将在第9章介绍。下面介绍整数的编码。,数据的原码、反码和补码表示 我们以8位二进制数为例,介绍整数编码的概念和方法。用8个二进制位表示1个

10、整数时,各位的序号是:7 6 5 4 3 2 1 0 1.原码表示法 最高位为符号位,其余各位表示数的绝对值。,符号位:0 表示正,1 表示负,例如:3的原码:0 0 0 0 0 0 1 1 3的原码:1 0 0 0 0 0 1 1 表示范围:1111111101111111 127127 即(27 1)(27 1)原码的缺点:零的表示不唯一:00000000 10000000 运算时,要对数的不同符号作不同的处理,相当麻烦。,2.反码表示法 正数的反码同原码。负数的反码:符号位为1,其余各位是其原码的按位取反。例如:3的原码:1 0 0 0 0 0 1 1 3的反码:1 1 1 1 1 1

11、0 0 表示范围:10000000 01111111 即 127 127 反码也有两个零,使用也不方便。引入反码的目的是通过它来求补码。,3.补码表示法 正数的补码同原码。负数的补码:符号位仍为1,在其反码的末位加1便得到补码。例如:3的原码:1 0 0 0 0 0 1 1 3的反码:1 1 1 1 1 1 0 0 3的补码:1 1 1 1 1 1 0 1 表示范围:10000000 01111111 128 127 即27(271),补码的变化规律(128127)*127 01111111 126 01111110 2 00000010 1 00000001 0 00000000 1 111

12、11111 2 11111110 127 10000001 128 10000000,练习与讨论,4.请写出10和10的8位二进制补码。,注意:负数的补码不表示真值,再对其求一次补码才是真值。,10的补码:00001010 10的原码:10001010 10的反码:11110101 10的补码:11110110,练习与讨论,5.8位二进制补码能够表示的数值范围是。超过此范围的数如何表示?,128127,用16位或32位来表示更大的数,ASCII码字符的编码 字符编码就是规定用怎样的二进制码来表示字母、数字及各种符号,以便计算机能够识别、存储和处理它们。在微机中,字符编码采用ASCII(美国信息

13、交换标准代码)。ASCII码有7位和8位两种版本。7位ASCII码是国际标准(见教材P539附录A)。1个字符的ASCII码虽然是7位,但是字节是基本存储单位,所以1个字符必须占1个字,节,最高位置0。表中,ASCII码为031和127总共33个字符为控制符,如回车符CR、换行符LF、删除符DEL等,控制符主要用于数据传输。ASCII码为32126的字符是可打印字符(其中SP表示空格),这些字符用于显示或打印输出。由ASCII码表可以看出如下规律:小写字母的ASCII码比其大写字母的ASCII码大32。例如,A的ASCII码为65,a的ASCII码为65+32=97。,阿拉伯数字0的ASCII

14、码为48,1的ASCII码为49,依次递增。只要记住两个ASCII码和一条规律,便能计算出所有字母和数字字符的ASCII码:例如,d是第4个英文字母,所以d的ASCII码为:65+41+32=100 6排在0后面第6个位置,所以6的ASCII码为:48+6=54,A65,048 小写字母ASCII码比其大写字母ASCII码大32,扩展ASCII码*采用8位编码,最高位是1,从1000000011111111(128255),可表示127个符号,如希腊字母、等,数学符号、等,拼音字母、等等。汉字也是非数值数据,其编码方法比较复杂,请参考第5章。,练习与讨论,6*.计算机中为什么使用二进制?,可靠

15、性 二进制使用的数码少,传输和处理时不易出错,因而可以保障计算机具有很高的可靠性。二进制数与十进制数之间的自动转换很容易实现。人们使用计算机时可以仍然使用熟悉的十进制数,这给工作带来极大的方便。,计算机中采用二进制,是因为二进制具有许多优点,例如:可行性 二进制仅使用0和1两个数码,用双稳态电路表示二进制数很容易实现。简易性 与十进制数相比,二进制数的运算规则简单。这可以使运算器的结构得到简化,有利于提高运算速度。逻辑性 二进制中的1和0可以分别表示逻辑值“真”和“假”,容易实现逻辑运算。,基本数据类型,C99又增加了三种类型:_Bool,_Complex,_Imaginary,字符型数据,字

16、符型数据char,分配 1 Byte 字符型数据是指字母、数字、各种符号等用ASCII值表示的字符例如 a 是一个char类型数据,称作字符常量,存储:,0 1 1 0 0 0 0 1,整型数据,基本整型数据 int 数据类型的尺寸:为了移植性考虑,标准并未指定,通常和程序执行环境的字长相同。C语言规定了每种类型的最小范围。整型数据均以二进制补码形式存储。类型修饰符:signed(有符号)unsigned(无符号)long(长型)short(短型),实型数据,1实型数据的类型 单精度实型数据 float,分配4 Byte双精度实型数据double,分配 8 Byte2实型数据的存储,单精度实型

17、,指数部分,小数部分,小数的符号位,指数的符号位,数据表示范围,常量、变量与标准函数,主要内容:常量变量标准库函数,常量,在运行程序的过程中值保持不变的量1整型常量 十进制:09八进制:07,以 0开头十六进制:09,AF/af,以 0 x或 0X 开头,例如:100-8 0+123010 024 0100 0730 x38 0 x10 0X10 0XFF 0 x0a,整型常量,整型常量的类型:根据值大小默认类型。整型常量后面加l或L,则认为是long int型 例如:123L、0L、432l、0 x100l,注意:十六进制常量中可以使用大写字母AF,也可以使用小写字母af。八进制常量中不能出

18、现数字 8 或 9例如:018、0921非法,实型常量,十进制形式 1.0 1.+12.0-12.0 0.0指数形式 1e3 1.8e-3-123E-6-.1E-3,指数只能是整数,而尾数则可以是整数也可以是小数,无论指数或尾数均不能省略例如:1e、E.5、E-3 非法实型常量的类型:默认为double型,后面加F(或f),则强调表示该数是float类型例如:3.5f、1e2F,字符型常量,可视字符常量 单引号括起来的单个可视字符例如:a、A、+、3、等 转义字符常量单引号括起来的 与可视字符组合,例如:,字符串常量,用双引号括起的一个字符序列例如:ABC、123、a、nt nGood mor

19、ning字符串常量的长度:所包含的字符个数 字符串常量的存储方式:,所占存储单元数:串长度1例如:,字符串结束标记,符号常量,以标识符来代表的常量事先编译预处理命令define定义编译时先由系统替换为它所代表的常量,再进行编译例如:,#define LEN 2.5main()float a,b;a=2*3.14*LEN;b=3.14*LEN*LEN;printf(a=%f,b=%fn,a,b);,编译前系统进行替换,符号常量,main()float a,b;a=2*3.14*2.5;b=3.14*2.5*2.5;printf(a=%f,b=%fn,a,b);,define是编译预处理命令,必须

20、以“#”开头,替换为,变量,变量的有关概念在程序运行过程中,其值改变的数据,称为变量,变量用标识符表示,称为变量名。变量必须“先定义后使用”系统为变量分配存储单元,存储变量的值。编写程序时通过变量名来存、取变量值。,例如:有变量a它的值是510,变量定义,变量定义的一般格式:数据类型说明符 变量列表;例如:int i,j;long k,m;float x,y;char ch1,ch2;,必须使用合法的标识符作变量名不能使用关键字为变量命名,变量 在程序运行过程中,其值可以改变的量称为变量。C语言规定:,变量名、数组名、函数名、文件名等标识符只能由字母、数字和下划线组成,且第1个字符必须是字母或

21、下划线;标识符最大长度不要超过32个字符。,例如,下面的变量名是合法的:sum,number_1,_add 而$56,3a,a5是非法的变量名。注意:变量名中的字母区分大小写。如:sum 和Sum 是两个不同的变量。变量在使用前,必须先定义,指明它为何种类型,然后才能在程序中使用它。如:int n;n被定义为整型,在程序中,通过变量名找到内存单元的地址,从中读取它的值。为了增加程序的可读性,建议大家使用能够“见名知意”的标识符。例如,name、sum比n、s的含义更明确,可读性更好。,变量的初始化:,允许在说明变量的时候对变量赋初值。例如:int a=5,b=10+2;double x=23.

22、568,y;char ch1=a,ch2=66,ch3=142;表示定义变量并对变量存储单元赋值。错误的初始化:int a=3+b,b=5;float m=n=23.16;,标准库函数,由C编译系统定义的一种函数,存放在系统函数库中,用户可以根据需要随时调用常用函数如:printf、scanf、fabs、sqrt、sin、(常用数学函数参见教材 P30 表2.5)函数调用形式:函数名(参数表)例如:putchar(a)sqrt(x),运算符和表达式,主要内容:算术运算符和算术表达式赋值运算符和赋值表达式关系运算符和关系表达式逻辑运算符和逻辑表达式位运算符和位运算表达式条件运算符和条件表达式逗号

23、运算符和逗号表达式其他运算符及其运算,运算符的有关概念,作用:对运算对象完成规定的操作运算类型:按运算对象分:单目、双目、三目按功能分:算术、赋值、关系、逻辑条件、逗号、位、其他,运算符的优先级和结合性,优先级指各种运算符号的运算优先顺序例如:算术运算优先于关系运算 算术运算中先*/后+-,结合性指运算符号和运算对象的结合方向分为:从左向右(左结合)和从右向左(右结合)例如:算术运算符为左结合 a-b+4 赋值运算符为右结合 a=b=5,本章涉及的运算符,+-*/%+-+-=+=-=*=/=%=&=|=?:,&sizeof(数据类型标识符),表达式的有关概念,什么是表达式由运算符将运算对象连接

24、成的式子,它描述了一个具体的求值运算过程。计算表达式的值按照运算符的运算规则求值求值时注意运算符的优先级和结合性表达式值的类型自动转换强制转换,例如:,表达式:150+b*212.456 b=(+a)-2a/=a*=(a=2)f=abc-a|+b&c+max=ab?a:b a=3,a+=3,a*a 1/(float)a+6,算术运算,算术运算符的优先级,没有乘方运算符,要计算a3要写作 a*a*a 的连乘,或用标准库函数 pow(a,3)“/”的运算对象可为各种类型数据,但是当进行两个整型数据相除时,运算结果也是整型数据“%”要求运算对象必须是整型数据,功能是求两数相除的余数,余数的符号与被除

25、数的符号相同。,自增自减运算,+-是单目运算符有前缀和后缀两种形式 前缀形式:先自增(自减)再引用;后缀形式:先引用再自增(自减);功能:前缀形式+a 等价于 a=a+1-a 等价于 a=a 1 后缀形式 a+等价于 a=a+1 a-等价于 a=a 1,表达式的值会不同,例如:,当 a5 时+a 表达式的值为 6,且 a6 a+表达式的值为5,且 a6 b=+a 等价于 a=a+1;b=a 表达式的值为6,且 a=6,b=6 b=a+等价于 b=a;a=a+1 表达式的值为5,且 a=6,b=5,说明:,+和-的运算对象只能是变量(或运算结果是变量的表达式),不能是常量(或运算结果是数值的表达

26、式)。例如:5+、(a+2)+不合法。具有右结合性,结合方向为从右到左。例如:a+等价于-(a+)如果有多个运算符连续出现时,C系统尽可能多的从左到右将字符组合成一个运算符例如:i+j 等价于(i+)+j-i+-j 等价于-(i+)+(-j),赋值运算,赋值运算符(右结合)=+=-=*=/=%=&=|=赋值表达式将表达式的值存入变量对应的内存单元中m=12b=(+a)-2 m%=3+n 等价于 m=m%(3+n)x*=(x=5),说明:,赋值号左边必须是变量,右边可以是C语言任意合法的表达式例如:n=t+210 等价于:a=(b=(b*c)10)赋值号与数学中的等号含义不同例如:数学中 a=b

27、 等价于 b=a C语言中 a=b 不等价于 b=a,关系运算,关系运算符(左结合)=c 等价于 a=(b=c)与(a=b)=c 不等价关系运算符优先于赋值,低于算术,说明:,关系运算的结果应该是逻辑值。C语言用数值用 1 表示逻辑真,0 表示逻辑假例如:75 的值是 1,57 的值是 0 ab的值是 0,ab 的值是1即关系表达式的值:0 或1 实型数可进行大于或小于比较,但通常不进行=或!=的关系运算,逻辑运算符,逻辑运算符&|!逻辑运算符的运算规则,逻辑表达式,逻辑表达式用逻辑运算符将运算对象连接成的式子 例如:0&b a&b|c&d a|b-5|c/4!x+y=z 逻辑运算符的优先级

28、和结合性:!是单目运算符,右结合,高于算术&和|是双目运算符,左结合,高于赋值运算符,低于关系运算符,逻辑运算规则,从左到右依次进行逻辑计算运算对象为非0表示逻辑真运算对象为 0 表示逻辑假逻辑运算的结果为 0 或 1例如设:a=15,b=0,c=-2 a&b&c 结果为0 a|b|c 结果为1(a+c)|b&c 结果为1,逻辑运算规则(续),运算按照从左至右的顺序进行,一旦能够确定逻辑表达式的值,就立即结束运算逻辑运算的短路性质例如设:a=1,b=0,c=-2a&b&c,(a+)|+b&-c,为 0,运算终止,表达式值为 0,为非0,运算终止,表达式值为 1且a为2,b为0,c为-2(b,c

29、保持原值),关系与逻辑运算符的应用,表示数学公式abc 判断a,b,c三条线段能否组成一个三角形 a,b不同时为负,a+bc&a+cb&b+ca,a=0|b=0!(a=0)|(a=0&b=0&b=0),ab&bc,位运算符,&|,位运算符的运算对象只能是整型数据或字符型数据,不能是实型数据运算对象一律按二进制补码参加运算,并按位进行运算位运算的结果是一个整型数据,低于单目、算术运算符,高于其他运算符,低于单目、算术和关系运算符,高于其他运算符,位逻辑运算符的运算规则,假设ai和bi均是一个二进制位(bit),例如:假设a=10,b=010 求a&b、a|b、ab、a,程序如下:,main()i

30、nt a=10,b=010;printf(%d%dn,a,输出结果:8 102-11,0000 0000 0000 1010&0000 0000 0000 1000 0000 0000 0000 1000即:a&b的值是8,例9.1 编写程序,对2个十六进制数进行按位与运算,并输出计算结果。#include void main()int x=0 xad,y=0 xcb;printf(%xn,x 输出结果:89,2按位或|设 x=0 x10;(即00010000B)y=0 x78;(即01111000B)求 x|y。a和b进行按位或运算,当对应位皆为0时才得0,否则得1。0 0 0 1 0 0

31、0 0|0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0结果为:78H。,3按位取反 按位取反运算符要求1个操作数。如:a 对a的每个二进制位取反的操作是:1变0,0变1。例如:a=0 xF9,求a。a:11111001 a:00000110 即:06H,例9.2 编写程序,对整数6按位取反并输出。#include void main()int n=6;printf(%x,n);输出结果:fff9,0F本身进行异或,就是两个相同的数进行异或。因为两个相同的数对应位都相同,根据“相同为0”的运算规则,所以每一位都是0,即结果为0。可见,要将某寄存器或内存单元清0,用其自身值进行异或

32、运算即可。,移位运算,例如:ab-1 等价于(a+8)(b-1),例如:假设a=10,b=2,求ab-1,main()int a=10,b=2;printf(%d%dn,ab-1);,输出结果:40 9,请自行分析运行结果,5按位左移 an 表示将a的每一位依次左移n位。左移后,右边的空位补0,左边的位移出数外。例如:a的值为0 x85,求:a2 a:10000101 a2:00010100/左边的1和0移出 利用按位左移可实现乘2的幂运算。如:设x=00000001B,则x2为00000100(即4),这就实现了x22的运算。,6按位右移 an表示将a右移n位,右边的n位被移出。左边n位要区

33、分情况处理:无符号数,右移后左边n位补0;有符号数,正数右移后左边n位补0;负数右移后左边n位补1。例如:无符号数a的值为3 a:00000011 a1:00000001/左边补0 又如:有符号数b的值为3,b的原码为:10000011 b的反码为:11111100 b的补码为:11111101 b1为:11111110/左边补1 再求一次补码得真值:10000010 即:2,位 运 算 符 小 结,7由位运算构成的复合赋值运算 位运算符(按位取反运算符除外)都可以与赋值运算符构成复合赋值运算符:&=,|=,=,=设a和 b是 int 变量,则:a&=b 等价于 a=a&b a|=b 等价于

34、a=a|b a=b 等价于 a=ab a=b 等价于 a=ab,8*.不同长度数据间的位运算 不同长度数据间进行位运算时要进行类型转换,将低长度数据升格为高长度数据再进行位运算。例如:long a;int b;当a与b进行位运算时,将b由16位升格为32位(原b值占低16位)。若b为无符号数,则左边高16位补0;,若b为有符号数,且b0,则左边高16位补0;若b为有符号数,且b0,则左边高16位补1。当b升格并与a进行了指定运算后,b本身值并不改变。,条件表达式运算,条件运算符:?:条件表达式的一般形式 表达式1?表达式2:表达式3例如:m=10&b-20?a:b x=3+a5?100:200

35、,C语言中唯一的三目运算符,要正确区分用?和:分隔的表达式涉及条件运算符的优先级与结合性,条件运算符优先级,条件运算符优先级高于赋值、逗号运算符,低于其他运算符 例如:m=10&b-20?a:b x=3+a5?100:200,等价于:(mn)?(x):(a+3),等价于:(a+=10&b-20)?a:b,等价于:x=(3+a5)?100:200),条件运算符的结合性,条件运算符具有右结合性当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号配对,并按这一原则正确区分各条件运算符的运算对象。,例如:wx?x+w:xy?x:y 与 wx?x+w:(xy?x:y)等价 与(wx

36、?x+w:xy)?x:y 不等价,逗号表达式运算,逗号表达式的一般形式 表达式1,表达式2,表达式n 逗号表达式的值从左向右,依次对表达式求值,最后得到表达式n 的值就是逗号表达式的值,例如:a=5,a+,a*3 表达式值为 18,且a=6 t=1,t+5,t+表达式值为 1,且t=2 x=(a=3*5,a*4)赋值表达式的值为60,且x=60,a=15,取地址运算符&,为单目运算符运算对象只能是变量 运算结果是变量的存储地址 例如有定义:int a,student;char ch;可以对变量a、ch、student 进行&运算:&a&ch&student,长度运算符 sizeof,为单目运算

37、符运算对象只能是变量名或数据类型标识符 运算结果为该变量或该数据类型的长度,main()int a=5;double x;printf(%d%d,sizeof(int),sizeof(a);printf(%d%d,sizeof(double),sizeof(x);printf(%d%dn,sizeof(float),sizeof(char);,输出结果:?,运算中数据类型的转换,数据类型的自动转换转换原则:,自动将精度低、表示范围小的运算对象类型向精度高、表示范围大的运算对象类型转换,例如有定义:int a;char ch;表达式:a-ch*2+35La-ch*2+35.,赋值运算中的类型转换

38、,=小数部分自动补0,=自动舍去实型表达式的小数部分(注意不进行四舍五入)=自动截取表达式值的低字节赋值,舍去高字节=自动给高字节补0 或补1,数据类型的强制转换,强制转换的一般形式(类型名)表达式例如:(int)(b+3*x)%3 1/(float)a+6,注意:(float)22/5 与(float)(22/5)不同错误的类型转换:(int)b=a+5 b=int(3*a),正确。因为字符以ASCII码存储,也是二进制形式,与整数的存储形式类似。所以,字符数据与整型数据可以进行运算。,课堂讨论,4.执行下列语句后,输出结果是什么?char c1=A,c2=a;printf(n%c,c1+2

39、);printf(n%c,c232);,输出结果:C A,实现了小写字母到大写字母的转换,5.下列自加自减运算符的用法中,错误的是()。A)n+B)9+C)3 D)(c+1)+E)+a F)(a/b),课堂讨论,B C D F,自加自减运算符的操作数必须是变量,不能是常数或表达式。,3 4,因为a*=b1 相当于 a=a*(b1),所以变量a的值为6。,6,补充:逗号表达式的用途 1个逗号表达式语句代替多个赋值语句。如 a=1,b=2,c=3;可代替3条赋值语句:a=1;b=2;c=3;1个逗号表达式语句可以得到多个计算结果。例如:y=10;x=(y=y5,30/y);/y 的值为5,x 的值为6,某个位置只允许出现1个表达式,而实际需要多个表达式时,可用1个逗号表达式实现多个表达式的运算。例如,在 for 循环中:for(i=0,s=0;i10;i+),用1个逗号表达式为2个变量赋初值,作 业,计算一个多项式的值:写一个程序计算下式的值:对于整数i和j,求比i大,且能被j整除的最小整数y。(如:i=5,j=3;则y=6;)请思考:写出该表达式(提示:使用模除),4.请打印出ASCII码表,看看是什么结果?,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号