第三章_数据类型、运算符、表达式

上传人:cl****1 文档编号:568262156 上传时间:2024-07-23 格式:PPT 页数:57 大小:817.50KB
返回 下载 相关 举报
第三章_数据类型、运算符、表达式_第1页
第1页 / 共57页
第三章_数据类型、运算符、表达式_第2页
第2页 / 共57页
第三章_数据类型、运算符、表达式_第3页
第3页 / 共57页
第三章_数据类型、运算符、表达式_第4页
第4页 / 共57页
第三章_数据类型、运算符、表达式_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《第三章_数据类型、运算符、表达式》由会员分享,可在线阅读,更多相关《第三章_数据类型、运算符、表达式(57页珍藏版)》请在金锄头文库上搜索。

1、 C C语言程序设计语言程序设计 主讲:王鑫便 663195第三章 数据类型 运算符与表达式内容提要C语言的基本元素常量和变量的概念各种数据类型的常量及变量变量赋初值不同类型数据间的混合运算几种基本运算符及其表达式程序程序指令指令C语言中的基本元素标识符标识符关键字关键字常量常量运算符运算符分隔符分隔符等等3.1 C语言的基本元素nC语言使用的基本符号共有如下五种:n大写字母:AZn小写字母:azn阿拉伯数字:09n下划线:_n标点符号和运算符:, 逗号. 圆点; 分号: 冒号? 问号 单引号“ 双引号( 左圆括号) 右圆括号 左方括号 右方括号 左大括号 右大括号 左尖括号 右尖括号! 感叹

2、号| 竖线/ 斜杠 反斜杠 波折号# 井号% 百分号& and(与) xor(异或)* 乘号- 减号= 等于号+ 加号3.1.1 符号集(字符集)3.1 C语言的基本元素n标识符:用来标记常量、变量、函数及文件名字的字符序列。n标识符的构成规则:n以字母(大小写皆可)或下划线开头n随后可跟若干个(包括0个)字母、数字、下划线n标识符的长度各个系统不同,最好不要超过8个字符n如:x y3 _imax Else X_to_B (合法)n如:7x int #No bad one re-input (不合法)n注意:n区分大小写!如:sum,Sum,SUM,表示不同的标识符。3.1.2 标识符n关键字

3、n也称“保留字”它是C语言中具有特定含义、专门用作语言特定成分的一类标识符。nANSI推荐的C语言的关键字有32个(Turbo 另扩展了11个)n如:main、int、char、float、define等。n注意n所有的关键字都有固定的意义,不能用作其它n所有的关键字必须小写n如:else与Else表示不同的含义:nelse是关键字;Else是用户定义的标识符3.1 C语言的基本元素3.1.3 关键字3.2 C的数据类型n数据是操作的对象,数据类型是指数据的内在表现形式(代码、存储、运算)nC的数据类型如下:数据类型基本类型构造类型指针空类型整型 int实型(浮点型)字符型 char单精度 f

4、loat双精度 double3.3 常量和变量n常量n在执行过程中其值不能被改变的量n常量区分为不同类型(表示形式)n如:12、3.2、an符号常量n用一个标识符代表的一个常量n定义方法:#define 标识符 常量n如:例3.1例3.1#define PRICE 30void main() int num,total; num=10; total=num*PRICE; printf(“total=%d”,total)total=3003.3.1 常量和符号常量3.3 常量和变量n变量n其值可以改变的量,它用标识符(变量名)来表示,在内存中占据一定的存储单元。n变量的定义n类型符 标识符n注意

5、事项n见名之意n先定义后引用n习惯上,符号常量名用大写,变量名用小写,以示区别变量表示变量名存储单元值例3.1#define PRICE 30void main() int num,total; num=10; total=num*PRICE; printf(“total=%d”,total);如:int i,j,imax; char c1,c2,s; float x,root1,root2; double y1,y2;3.3.2 变量变量命名在 C 语言中,变量命名需要遵循一定的规则有效名称有效名称principalcost_pricemarks_3lastnamecity无效名称无效名称1

6、23ratecurrency$discount%zip coden变量的命名规则:n变量名可以由字母、数字和 _(下划线)组合而成n变量名不能包含除 _ 以外的任何特殊字符,如:%、# 、逗号、空格等n变量名必须以字母或 _(下划线)开头n变量名不能包含空白字符(换行符、空格和制表符称为空白字符)nC 语言中的某些词(例如 int 和 float 等)称为保留字,具有特殊意义,不能用作变量名nC 语言区分大小写,因此变量 price 与变量 PRICE 是两个不同的变量变量程序内存编写程序时,常常需要将数据存储在内存中,方便后面使用这个数据或者修改这个数据的值。通常使用变量来存储数据。使用变量

7、可以引用存储在内存中的数据,并随时根据需要显示数据或执行数据操纵。存储 RateRate * 5%将值存储为DiscAmtRate-DiscAmt100.5将值存储为Result9.5 C语言的基本数据类型数据属于不同类别AfricaThe quick brown foxTRUE数据 非数值数值整型非整型9002.129999/12/20032.175123Jackie Chanchar数据类型非数值数值整型intshort intlong intdoublefloat非整型3.4 整型数据n整型常量n即整常数,C中整常数可以有三种表示形式,即十进制整数、八进制整数和十六进制整数。n计算机中数

8、的表示及进制转换n数码、基和权n数码:表示数的符号n基:表示数码的个数n权:表示每个位所具有的值n数制n二进制n八进制n十进制n十六进制3.4.1 整型常量3.4 整型数据n计算机中数的表示及进制转换n数码、基和权n数制(数据在内存中是以二进制形式存放的)n二进制n由数字0和1组成。如:00001010n八进制n以数字0开头的数;由数字07组成。如:0123(123)8n十进制n一串连续的数字表示,最高位非零。如:123、-34、0n十六进制n以0x开头的数;由09、af(AF)组成。如:0x123(123)163.4.1 整型常量判断:32767,-32768,0,010,011,016,0

9、18,0x10,0xde,0xf 3.4 整型数据n计算机中数的表示及进制转换n各种进制之间的转换n二进制、八进制、十六进制转换成十进制n方法:按权相加。3.4.1 整型常量例:3.4 整型数据3.4.1 整型常量n计算机中数的表示及进制转换n各种进制之间的转换n二进制、八进制、十六进制转换成十进制n方法:按权相加。n十进制转换成二进制、八进制、十进制n方法:连续除以基,从低到高记录余数,直至商为03.4 整型数据3.4.1 整型常量n计算机中数的表示及进制转换例1:把十进制数59转换成二进制数(59)10=(111011)259229214272321110111余余余余余余1 1 1 0

10、1 1例2:把十进制数159转换成八进制数15981982(159)10=(237)82 3 7 余7余3余2例3:把十进制数459转换成十六进制数4591628161160(459)10=(1CB)161 C B 余11余12余 13.4 整型数据3.4.1 整型常量n计算机中数的表示及进制转换n各种进制之间的转换n二进制、八进制、十六进制转换成十进制n十进制转换成二进制、八进制、十进制n二进制与八进制间的转换n二进制转换成八进制:n方法:从右向左,每3位一组(不足3位左补0),转换为八进制n八进制转换成二进制:n方法:用3位二进制数代替每一位八进制数例:(1101001)2=(001,10

11、1,001)2=(151)8例:(246)8=(010,100,110)2=(10100110)2000 0001 1010 2011 3100 4101 5110 6111 73.4 整型数据3.4.1 整型常量n计算机中数的表示及进制转换n各种进制之间的转换n二进制、八进制、十六进制转换成十进制n十进制转换成二进制、八进制、十进制n二进制与八进制间的转换n二进制与十六进制间的转换n二进制转换成十六进制n方法:从右向左,每4位一组(不足4位左补0),转换成十六进制n十六进制转换成二进制n方法:十六进制转换成二进制:用4位二进制数代替每一位十六进制数例:(11010101111101)2=(0

12、011,0101,0111,1101)2=(357D)16例:(4B9E)16=(0100,1011,1001,1110)2=(100101110011110)20000 00001 10010 20011 30100 40101 50110 60111 71000 81001 91010 A1011 B1100 C1101 D1110 E1111 F3.4 整型数据3.4.1 整型常量n计算机中数的表示及进制转换n字节和位n内存以字节为单元组成n每个字节有一个地址n一个字节一般由8个二进制位组成n每个二进位的值是0或1012345678910.012345671个字节1或03.4 整型数据3

13、.4.1 整型常量n计算机中数的表示及进制转换n字节和位n数值的表示方法原码、反码和补码n原码n最高位为符号位,其余各位为数值本身的绝对值n反码n正数:反码与原码相同n负数:符号位为1,其余位对原码取反n补码n正数:原码、反码、补码相同n负数:最高位为1,其余位为原码取反,再对整个数加13.4 整型数据3.4.1 整型常量原码反码补码 +7000001110000011100000111 -7100001111111100011111001 +0 00000000 00000000 00000000 -0 10000000 11111111 00000000数的范围 01111111 1111

14、1111(-127+127) 01111111 10000000(-127+127) 01111111 10000000(-128+127) (用一字节表示数)n负数补码转换成十进制数:最高位不动,其余位取反加1例:补码:11111001 取反:10000110 加1: 10000111=-7练习n请将下面数用八进制和十六进制数(补码)表示103275-617-1112483-28654210033.4 整型数据n整型数据在内存中的存放形式n数据在内存中以二进制的补码表示n每一个整型数据在内存中占两个字节n正数的补码和源码相同;负数的补码等于该数绝对值的源码加1n整型数据分类n整型变量根据其数

15、值的范围,可以将变量定义为三类:n基本整型(int)2 短整型(short int)2 长整型(long int)4n为了充分利用变量的表数范围,又可以将其划分为两类:n有符号数(signed) (可省略) 无符号数(unsigned)n组合起来就有六种:nint, short int, long int, nunsigned int, unsigned short int, unsigned long int0000000000001010+101111111111110110-103.4.2 整型变量3.4 整型数据n整数在存储单元的存储情况:以13为例:00 00000000001101

16、00 0000000000000000 0000000000110100 00000000001101int 型short 型00 00000000001101long 型unsigned int 型unsigned short 型00 0000000000000000 0000000000110100 00000000001101unsigned long 型符号位0-32768全0的时候32767全1的时候int 型:3.4.2 整型变量3.4 整型数据n整型变量的定义例如:nint a,b;nlong num,i,;nunsigned short c,d;例3.2 不同类型整型数据的运算

17、#include void main() int a,b,c,d; unsigned u; a=12;b=-24;u=10; c=a+u; d=b+u;printf(“a+u=%d,b+u=%dn”,c,d);a+u=22,b+u=-143.4.2 整型变量3.4 整型数据n值在-3276832767范围内,认为是int型n值在-2147483648+214748647内,认为是long int型n八进制、十六进制常量的类型根据数值的大小可以是整型、无符号整型(065535)、长整型或无符号长整型n整数后有后缀u或U,认为是unsigned型n整数后有后缀l或L,认为是long int型(在严

18、格要求类型匹配的场合有用,如函数参数)n123 123u -123u 123uln-0123 0123u -0123l 0123uln-0x123 0x123u -0x123ul 0x123ul3.4.3 整型常量的类型补充(只适用于整型变量)n1.占用字节数为n的有符号整型变量,其值域为: -2n*8-1(2n*8-1-1) 2.占用字节数为n的无符号整型变量,其值域为:0(2n*8-1)3.5 实型数据n实数又称浮点数,有两种表示形式n十进制小数形式n例如:0.345、.345、345.0、345.、0.0、0.、.0n指数形式n例如:3.45e3、3.45E3,都表示3.45*103n注

19、意:e前后必须有数字,e后必须为整型数n.3e3 3e3 3.e3(合法) 3e e3 e0.3(不合法)n实数的类型n缺省为double型n后缀f或F,为float型;后缀为l或L,为long double 型3.5.1 实型常量3.5 实型数据n单精度(float):n占4个字节,7位有效数字n表示数的范围:3.4e-383.4e+38n双精度(double):n占8个字节,1516位有效数字n表示数的范围:1.7e-3081.7e+308nlong double型:n占10个字节n表示有效数的范围:3.4e-49321.1e+4932n如:float x,y; double a,b,c3

20、.5.2 实型变量(取值范围与值的精度与及其有关)单精度浮点型 float 在 C 语言中用于存储单精度浮点数float32 位10-38 至 10+38 ,7位有效数字n声明:float selling_price;n初始化:float selling_price = 11.3;selling_price = 65.90;双精度浮点型内存内存floatdouble213.5671435568967 64位位取值范围:10-308 至 1030816 位有效数字n声明:ndouble pressure_level; n初始化:npressure_level = 213.567143556896

21、7; ndouble dvalue = 35.4; 【例例】 float、double两种类两种类型使用上的不同。型使用上的不同。nmain()nfloat a;ndouble b;na=66666.66666;nb=66666.666666666666;nprintf(%fn%fn,a,b);nn程序执行结果为:程序执行结果为:n66666.664062n66666.666667 n从本例可以看出,由于从本例可以看出,由于a 是单精度型,有效位数只有七位。而整数是单精度型,有效位数只有七位。而整数已占五位,故小数二位之后均为无效数字。已占五位,故小数二位之后均为无效数字。b 是双精度型,有效

22、位是双精度型,有效位为十六位。但为十六位。但Turbo C默认格式输出浮点数时,规定小数后最多保默认格式输出浮点数时,规定小数后最多保留六位,其余部分四舍五入。留六位,其余部分四舍五入。 3.5 实型数据n虽然实型数据在程序中的表示形式有两种,但是在内存中均是以指数形式存放。3.5.3 实型数据的舍入误差数符阶符小 数指 数例3.3#include void main() float a,b; a=123456.789e5; b=a+20; printf(“a=%f,b=%fn”,a,b);a=12345678848.000000,b=12345678848.000000n若数据超过有效位数,

23、则被舍去,故可能产生误差。在线保险单在线保险单年龄:_保险总额:_性别:_3.6 字符型数据2398340 M int/floatchar3.6 字符型数据n用单引号括起来的一个字符n如:a、A、b、*、$n转义字符:特殊的字符常量,它们都已开头。(代表一个字符)n如:n 换行符 0 空值 t 横向跳格 v 纵向跳格 b 退格 a 报警 r 回车 f 走纸换页 输出反斜杠 输出单引号 ddd 13位八进制数表示的字符 (ASCII码)n如:101 代表字符A xhh 12位十六进制数表示的字符(ASCII码)n如:x41 代表字符A3.6.1 字符常量输出格式控制符输出字符3.6 字符型数据n

24、用来存放变量,且只能存放一个字符。n定义方法:nchar c1,c2;nunsigned char c3,c4;n字符型变量的赋值方法:nc1=a; c2=101;65 Anc3=0xff;255 c4=377255n十进制数向其它数转化:求商取余法n其它数向十进制数转化,展开法3.6.2 字符变量3.6 字符型数据n将一个字符常量存放到一个字符变量中, 是将该字符相应的ASCII码存放到存储单元中。3.6.3 字符数据的存储 例3.4:字符的存储与输出#includevoid main() char c1,c2; c1=a,c2=b; printf(“%c %cn”,c1,c2); c1=9

25、7,c2=98; printf(“%c %cn”,c1,c2);a ba b内存中c1、c2的存放形式:9701100001c19801100010c23.6 字符型数据n字符数据与整形数据可以相互赋值n字符数据可以以字符形式输出,也可以用整数形式输出。3.6.3 字符数据的存储 例3.5#include void main() int i; char c; i=a; c=97; printf(“%c,%dn”,c,c); printf(“%c,%dn”,i,i);a,97a,97注意:Turbo C 把字符数据处理成一个带符号的整形数据。如:字符a的存储形式: 0 1 10 00 01符号位

26、例3.6#include void main() char c; c=376; printf(“%c,%dn”,c,c); ,-2八进制数376(十进制为254)ASCII码字符为:11 11 11 10unsigned char c; ,2543.6 字符型数据n字符串常量:用一对双引号括起来的字符序列n如:“Hello”,“1999”,“a”n字符串结束标记0n每一个字符串常量结尾都有一个字符0(系统自动加上)n如:“CHINA”在内存中为:3.6.4 字符串常量C H I N A 0na是一个字符,而“a”是两个字符大小写字母的转换 #include #include void main

27、()void main() char c1,c2 char c1,c2; c1= c1=a a; ; c2= c2=b b; ;c1=c1-32;c1=c1-32;c2=c2-32;c2=c2-32; printf( printf(“c c cc,c1,c2c1,c2);); n n说明:说明:说明:说明:程序的作用是将两个小写字母a和b转换成大写字母A和B。从代码表中可以看到每一个小写字母比它相应的大写字母的码大。语言允许字符数据与整数直接进行算术运算。 n运行结果:运行结果: 3.7 变量赋初值n在定义变量的同时设置初值,亦称初始化n如:nint a=3;nfloat f=3.56;nch

28、ar c=a;nint i,j,k=5;nint x=1,y=1,z=1;3.8 不同类型数据间的混合运算n整型、实型(包括单、双精度)、字符型数据间可以混合运算n例如:10+a+12.3-3.14*x是合法的n运算时,不同类型的数据要先转换成同一类型,然后进行运算n转换规则:高低doubleintunsignedlongfloatchar,shortnfloat型数据在运算时一律先转换成double型n不同类型进行混合运算时,按照类型级别由低到高的顺序转换n字符型和short型在运算时一律转换成int型3.9 算术运算符和算术表达式3.9.1 C运算符1、算术运算符 +,-,*,/,%2、关

29、系运算符 ,=,=,!=3、逻辑运算符 !,&,|4、位运算符 ,|,&5、赋值运算符 =6、条件运算符 ?,:7、逗号运算符 ,8、指针运算符 *,&9、求字节运算符 sizeof10、强制类型转换运算符 11、分量运算符 . 12、下标运算符 13、其它算术运算算术运算符与算术表达式符与算术表达式算术 一元一元 二元二元操作数操作数运算符3.9 算术运算符和算术表达式3.9.2 算术运算符和算术表达式n基本的算术运算符n+(加法运算符,或正值运算符)n如:2+3、+6n-(减法运算符,或负值运算符)n如:3-4、-6n*(乘法运算符)n如:2*xn/(除法运算符)n如:(x+y)/(a+b

30、)n两个整数相除,其值为整数。如:5/3值为1n除数、被除数有一个为负值时,结果“向零取整”如-5/3值为-1n除数、被除数有一个为实数时,结果为double型n%(模运算符,或求余运算符)%两侧均为整型数据n如:7%4的值为3n-7%4、7%-4、-7%-4的值是多少? (-3、3、-3)符号由被除数决定!3.9 算术运算符和算术表达式3.9.2 算术运算符和算术表达式n算术表达式和运算符的优先级与结合型n用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语言语法规则的式子,称为算术表达式n运算对象包括常量、变量、函数等n如:3.14*r*r x+sqrt(0.25*y)/(abs

31、(a+b)-3.6)n运算符的优先级和结合型n优先级:先 *、/、% 后 + 、-n结合型:左结合性。即表达式从左向右计算。n强制类型转换n可利用强制类型转换将一个表达式转换成所需类型n形式:(类型名)表达式n(double)a n(int)(x+y) 注意(int)(x+y)和(int)x+y不同n(float)(8%5)例3.7#include void main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i);x=3.6,i=3算术一元一元-+num+ num=num+1num- num=num-1+num-numnu

32、m+num-前缀前缀后缀后缀二元二元表达式表达式如何如何计算算结果果 (num1=5)num2 = +num1;num1 = num1 + 1;num2 = num1;num2 = 6;num1 = 6;num2 = num1+;num2 = num1;num1 = num1 + 1;num2 = 5;num1 = 6;num2 = -num1;num1 = num1 - 1;num2 = num1;num2 = 4;num1 = 4;num2 = num1-;num2 = num1;num1 = num1 - 1;num2 = 5;num1 = 4;算术运算算术运算符与算术表达式符与算术表达

33、式3.9 算术运算符和算术表达式3.9.3 自增、自减运算符n+i,-in在使用i之前,先使i的值加1或减1ni+,i-n在使用i之后,再使i的值加1或减1例3.8:自增或自减运算#include void main() int i=0,j; j=i+; printf(“%d %dn”,i,j) i=0; j=+i printf(“%d %d”,i,j);1 01 1注意:自增、自减运算符只能用于变量,而不能用于常量或表达式。n如:5+、-(a+b)+和的优先级别高于算术运算符,结合方向是“自右向左”n如:-i+相当于-(i+)3.10 赋值运算符3.10.1 赋值运算符“=”n用法:变量=表

34、达式n作用:将表达式的值赋给变量(常量、变量时表达式的特例)n如:a=5;nave=(a+b)/10;注意:与数学中的等式不同!3.10 赋值运算符n实型数据(包括单、双精度)n赋给整型变量时,舍弃实数的小数部分n整形数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中例3.9#include void main() int i; float f; i=5.34; f=23; printf(“%d %f”,i,f);5 23.0000003.10.2 赋值结果与类型转换3.10 赋值运算符3.10.2 赋值结果与类型转换n长度相同的有符号与无符号整型数间,原样赋值(但数值有时会有变化

35、)例3.10#include void main() unsigned a; int b=-1; a=b; printf(“%d,%un”,b,a); a=65534u;b=a; printf(“%d,%un”,b,a);11 11 11 11 11 11 11 11b11 11 11 11 11 11 11 11a-1,65535-2,655343.10 赋值运算符3.10.2 赋值结果与类型转换nchar、int、long等类型的转换n“短”数据赋给“长”变量n符号扩展:若高位为1(负数),则变量高字节位补1;反之,补0。例3.11#include void main() char c;i

36、nt i; c=43;i=c; printf(“i=%dn”,i); c=376;i=c; printf(“i=%dn”,i);00 10 10 1100 00 00 00 00 10 10 1111 11 11 11 11 11 11 1011 11 11 1043号字符+ 53254号字符+ 37643-23.10 赋值运算符3.10.2 赋值结果与类型转换nchar、int、long等类型的转换n“短”数据赋给“长”变量n“长”数据赋给“短”变量n只将数据低字节位原封不动送到变量中(数据可能有差错)例3.12#include void main() int i; long L=63242

37、32L; i=L; printf(“i=%d,L=%ldn”,i,L);00 00 00 00 01 10 00 00 10 00 00 00 00 00 10 00L=632423210 00 00 00 00 00 10 00i=-32760i=-32760,L=63242323.10 赋值运算符3.10.3 复合的赋值运算符n在赋值符“=”之前加上其它运算符构成复合运算符n+=,-=,*=,/=,%=,=,&=,=,|=n如:a+=3 等价于 a=a+3n如:b-=9 等价于 b=b-9n如:x*=y+8 等价于 x=x*(y+8)n如:a/=b+c 等价于 a=a/(b+c)n如:x%

38、=3 等价于 x=x%33.10 赋值运算符3.10.4 赋值表达式n赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子。n形式:变量=表达式n如:a=5、 a=(b=5)(右结合)n计算过程n计算赋值运算符右侧表达式的值n将计算结果赋给左侧的变量n赋值表达式的值就是被赋值的变量的值例:a=b=c=5a=5+(c=6)a=(b=4)+(c+6)a=(b=4)+(c=6)a=(b=10)/(c=2)a+=a-=a*a思考:a=a+(a-(a*a)?3.11 逗号运算符和逗号表达式n形式:表达式1,表达式2,表达式in作用:用于连接表达式n计算过程:n求解表达式1n再求解表达式2,表达式in整个逗号表达式的值是表达式i的值n一个逗号表达式又可与另外一个逗号表达式组成一个新的逗号表达式n如:(a=3*5,a*4),a+5 20n逗号运算符是所有运算符中级别最低的n如:x=(a=3,6*3) x=18 n如:x=a=3,6*a x=3 表达式值为18 注意:并不是任何地方出现的逗号都是逗号运算符。例3.13#include void main() int a=1; printf(“%dn”,a=3*a,3*a);3,a=(3*a,3*a);9

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号