第3章数据类型、运算符与表达式ff.ppt

上传人:sccc 文档编号:5897497 上传时间:2023-08-31 格式:PPT 页数:33 大小:1.70MB
返回 下载 相关 举报
第3章数据类型、运算符与表达式ff.ppt_第1页
第1页 / 共33页
第3章数据类型、运算符与表达式ff.ppt_第2页
第2页 / 共33页
第3章数据类型、运算符与表达式ff.ppt_第3页
第3页 / 共33页
第3章数据类型、运算符与表达式ff.ppt_第4页
第4页 / 共33页
第3章数据类型、运算符与表达式ff.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《第3章数据类型、运算符与表达式ff.ppt》由会员分享,可在线阅读,更多相关《第3章数据类型、运算符与表达式ff.ppt(33页珍藏版)》请在三一办公上搜索。

1、重点:理解常量变量含义理解整型、实型、字符型数据的表示和存储理解表达式的含义和组成方式,第三章 数据类型、运算符与表达式,3.1 C的数据类型,C的数据类型,数据类型,基本类型,构造类型,指针类型(),空类型(void),字符型(char),数值类型,枚举类型(enum),数组类型(),结构体类型(struct),共用体类型(union),整型(short,int,long,unsigbed),实型,单精度型(float),双精度型(double),用户标识符,表示变量名、函数名、数组名、文件名和类型名的有效字符序列,C语言的标识符分三类:,3.2 常量与变量,一、标识符,保留关键字 均用小写

2、字母表示,如:char int auto break 等。保留关键字不能作用户标识符使用。,保留关键字,1,预定义标识符 供C的库函数名或预编译处理中的专用命名使用。如:NULL=0等,预定义标识符,2,用户标识符 C程序中用户用于表示变量名,函数名,数组名,文件名,类型名的有效字符序列。,3,用户标识符的命名规则,用户标识符的命名规则 由英文字母,数字,下画线 组成,且必 须是由字母或下画线开头。大、小写英文字母的含义不同。个数随机器系统不同而不同。一般取前 面 8 个字符(Turbo C 可取 32 个字符)如:stud_name,stud_number stud_nam,stud_num

3、 应尽量“简洁明了,见名知意”。,符号常量举例,符号常量使用错例,二、常量和符号常量,3.2 常量与变量,2.符号常量:习惯上用大写字母表示。,注意:符号常量在其作用域内不能改变,也不能再被赋值,1.一般常量,重点,一般常量:整型常量:1,4,3,0实型常量:1.23,0.345字符常量:a,d 字符串常量:“CHINA”“”,符号常量使用错例#define PRICE 30 main()int num,total;num=10;total=num*PRICE;printf(“total=%d”,total);PRICE=40;/*此句有误*/total=num*PRICE;printf(“t

4、otal=%d”,total);,例 3.1 输入半径,计算圆的周长和面积及圆球体积。#define PI 3.14159main()float radius;float circum,area,bulk;printf(“Please input radius:n”);scanf(“%f”,三、变量 在程序运行过程中其值可以被改变的量称为变量,习惯上变量名用小写字母表示。C 语言中,变量必须“先定义,后使用”。定义格式:存储类型 数据类型 变量名 如:auto int a;或 int a;定义作用:保证变量的正确引用。根据变量的数据类型而分配内存空间。根据变量的类型确定变量参与的运算是否合法。

5、,例题答案,变量存储示意,举例,3.2 常量与变量,重点,变量存储示意 如:int a=3;表示变量 a 为整型,为其分配两个字节的存储单元,并按整数方式存储数据。,变量定义举例以下各标识符组中,合法的用户标识为:(1)A)Pad!B)getc C)void D)a*(2)A)bb B)CCp?C)hiy D)_isw(3)A)_0123 B)_del C)if D)keep%,例题答案 B(2)C,D(3)A,B,重点,二、整型变量,2.定义:一般格式:存储类型 数据类型 变量名,1.分类 基本型 int 短整型 short int 或 short 长整型 long int 或 long,例

6、如,说明,一、整型常量,整型常量 十进制整型常量。如:123,0,45 八进制整型常量,用 0 开头。如:0121 十六进制整型常量,用0 x 开头。如:0 x12 整型常量又可以表示成短整型常量和长整型常量。如:123L 或 123l;345S 或 345s,一,说明 可以加修饰符:unsigned 或 signed 87ANSI C 中并没有 规定各类型数据的长度、精度和数值范围。各类数据所占内存字节数随系统不同而不同,一般以一个机器字存放一个 int 型数据。,整型变量定义 int x;int a,b;unsigned short c,d;long max,min;,举例,3.3 整型数

7、据,3.整数数据的存储方式 有关原码、反码、补码的规定:原码:只将最高位作符号位,其余各位代表数 值本身的绝对值(以二进制表示)。,00000000,00001010,10 的原码:,10000000,00001010,10 的原码:,3.3 整型数据,如:int a;a=10;,反码:一个数如其值为正,则它的反码与原码相同;反之则符号位为 1,其余各位是对原码取反。如:,10的补码:,11111111,11110110,补码:正数的原码、反码、补码相同。负数的补码最高位为 1,其余各位为原码的 相应位取反,然后对整个数加 1。,00000000,00001010,10 的原码,0000000

8、0,00001010,10 的反码,10000000,00001010,10 的原码,11111111,11110101,10 的反码,怎么办?,为什么?,32767+1=?,将一个负数的补码转换为十进制数:a:先对其各位取反 b:再将其转换成十进制数 c:加上负号,再减 1 如:,00000000,00001001,10的补码为:,11111111,11110110,9,加负号再减 1 得 10,32767+1=?main()int a,b;a=32767;b=a+1;printf(“%d”,b);运行结果:-32768 Why?,why,理解运算结果32767+1=-32768?,?,32

9、767+1=?main()long a,b;a=32767;b=a+1;printf(“%ld”,b);运行结果:32768 OK!,!,以整数 13 为例:int 型 符号位 short 型 long 型 unsigned int 型 unsigned short 型 unsigned long 型,0 0000000,00001101,00001101,0 0000000,00000000,0 0000000,00001101,00000000,00001101,00000000,00001101,00000000,00001101,00000000,00000000,00000000,对

10、于有符号整型数据,其存储单元的最高位 代表符号位,(0 为正;1 为负)对于无符号型整型数据,存储单元的所有位均 用作存放数本身。,例 3.2(p43)main()int a,b,c,d;unsigned int 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=14,4.整型数据的溢出 int 型变量的最大允许值是 32767,超出则会溢出。如:main()int a,b;a=32767;b=a+1;printf(“%d%d”,a,b);,01111111,11111111,10000000,0

11、0000000,a,b,32767,32768,结果为:32767,32768,5.整型常量的类型 整型常量其值:在32768 32767范围内,则视为 int 型,可赋值给 int 型 或 long 型变量,如超出上述 范围,在231(231 1),则视为 long 型。一个非负值的整常量,可以赋给 unsigned 型 变量,但应考虑数值范围。如:50000 unsigned int 变量。70000 unsigned int 变量,则溢出。unsigned int 的范围:0 65535(0 216 1),4.关于实型常量的说明,3.实型数据的舍入误差 123456.789e5+20=?

12、,舍入误差举例,2.实型数据的存储方式,1.实型变量分类,二、实型变量 单精度型(float)双精度型(double)长双精度型(long double),单精度提供 7 位,双精度提供1516位有效数字。,一、实型常量,3.4 实型数据,实型常量 1.十进制数形式:数字+小数点(必须有小数点)如:0.123;.123;123.0 等。2.指数形式:尾数+e或(E)+指数部分 如:26.49e+12 26.49E+12 26.49E12 注:字母 e 之前必须要有数字,指数 必须为整数。如:e3;2.1e3.5;e3 等都不合法。,注意,实型数据存储方式 实型数据按浮点数形式存储,将一个实型数

13、据分成小数部分和指数部分,分别存放。用二进制数来存放小数部分,用 2 的幂次来表示指数部分。如:3.14159 32位中,一般用 24 位表示小数(包括符号),8位表示指数部分。,2,实型常量的说明有些系统将其作为双精度来处理(64位)。以保证精度,但降低了运算速度。如:f=2.4567*4523.65 取前 7 位赋给 f。可在数的后面加字母 f 或 F来使系统按单精度(32位)来处理。实型常量赋给一个 float 型或 double 型变 量时,应考虑有效位数会不同。,4,实型变量分类 单精度型(float)占 32 位 双精度型(double),占 64 位 长双精度型(long dou

14、ble),占128 位 单精度实数提供 7 位有效数字,双精度 实数提供1516位有效数字,数值范围 随机器系统而异。如:float x,y;double m,n;,1,舍入误差举例 存放实型数据的内存单元总是有限的,提供的有效位数也有限。main()float a,b;a=123456.789e5;b=a+20;printf(“%f,%f”,a,b);a,b均为 12345678848.000000,3,3.5 字符型数据 一、字符常量 C 语言中,字符常量代表 ASCI I 码字符集里的一个字符,用单引号括起来的 一个字符来表示。如:a,X 字符常量也可用一类特殊形式(转义字符)表示,用反

15、斜杠开头(),代表特定的ASCII码字符。如:n代表一个换行符。,转义字符:,例3.3 转义字符的使用main()printf(“abctderftgn”);printf(“htibbjk”);,a,b,c,d,e,f,g,h,i,j,k,例 3.4 可向字符变量赋以整数。,源程序,三、字符变量在内存中的存储形式及使用方法 char c1,c2;c1=a;c2=b;,97,98,01100001,01100010,c1,c2,二、字符变量,字符变量用关键字 char 来说明。如:char c1,c2;char min;一个字符变量只能存放一个字符,在内存中一般占一个字节,结论,结论 字符型数据

16、与整型数据在一定范围内可以通用。二者可以相互赋值,一个字符数据可以按字符形式输出也可以按整数形式输出。,重点,可向字符变量赋以整数main()int i;char c;i=a;c=97;printf(“%c,%dn”,c,c);printf(“%c,%dn”,i,i);输出:a,97 a,97,实例,有些系统(如 Turbo C)将允许使用有符号字符型变量,把字符处理成带符号的整数,字符型变量的取值范围为(128 127)。main()signed char c=376;printf(“%d”,c);,1 1111110,0 0000001,3位 8 进制数表示的字符。,可去掉,按位取反,加负

17、号,再减 1,2,输出为:2,C 语言对字符串常量的长度不加限制,C 编译系统总是自动在字符串结尾加一个转义字符0,作为字符串常量的结束标志。如:“Hellow”在内存中占 7 个字节。,注意:字符常量与字符串常量的区别。如:a和“a”在C语言中是两种完全不同类型的数据。,四、字符串常量 如:“CHINA”;“How do you do?”,3.6 变量赋初值 C 语言中规定变量应先定义后使用。允许在定义变量时对变量进行初始化。int a=3;/*指定a为整型变量,初值为3*/float f=3.56;char c=a;int a,b,c=4;多个同类型的变量定义时赋相同的初 值,方式为:in

18、t a=3,b=3,c=3;而 int a=b=c=3;(错误的)C语言中变量的初始化不是在编译时完成的(除静态 存储型变量和外部变量),是在程序运行时完成的。,正例,错例,变量初始化错误形式main()int a=b=c=3;/*上句有误*/printf(“%d%d%d”,a,b,c);,注意,多个变量正确的初始化main()int a=3,b=3,c=3;printf(“%d%d%d”,a,b,c);a=b=c=8;printf(“%d%d%d”,a,b,c);,重点,例如,3.7 各类数值型数据间的混合运算 C 语言中各类型数据间可以进行混合运算,但不同类型的数据应先转换成同一类型,然后

19、进行运算。规则如下:,10+a+i*f d/e,10+a+i*f d/e运算结果类型=?已知:int i;float f;double d;long e;(1)a 97(10+97)(2)i,f double型 i*f(3)107 double型再加(4)e double d/e 将10+a+i*f 的结果与d/e的 商相减结果为double型。,实例,举例,注意,例如,优先级和结合性,3.8 算术运算符和算术表达式一、C 运算符简介 共有13类,除了控制语句和输入输出外,几乎所有的基本操作都可以用运算符来处理。掌握运算符的关键在于“优先级和结合性”。二、算术运算符和算术表达式,2.算术表达式

20、:a b/c 1.5+a,4.强制类型转换:格式:(类型名)(表达式),3.算术运算符和算术表达式的,1.基本算术运算符:,/,%,优先级和结合性 C语言中不同的运算符有不同的优先级,按先高后低的原则进行。对同优先级的运算符采用结合性原则。结合性:“从左至右”“从右至左”算术运算符结合性:“从左至右”。例如:abc a(b c)ab+c(ab)+c,重点,说明,基本算术运算符%为求余运算(模运算),操 作量均为整型数据 例如:5%3值为2,-5%-3值为-2。两整数相除其结果为整数,一般采用“向零取整”。例如:5/3值为1,5/3值可能是1 或2,“向零取整”则为-1。,说明,强制类型转换例如

21、:(double)a 将 a 转换成 double 类型(int)(x+y)将 x+y 的值转换成整型,例如,注意 在强制类型转换时,得到的是一个所需类型的中间变量,原来的变量的类型并未发生变化。,注意,强制类型转换举例main()float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);结果:x=3.600000,i=3 即 x 的类型仍为float 型。,重点,C 语言中数据类型的转换有两种:1系统自动进行,2强制类型转换。如:float x;则x%3 不合法,但可以用:(int)x%3,x+a%3*(int)(x+y)%2/4(设x=2.5

22、,a=7,y=4.7),解:x+a%3*(int)(x+y)%2/4 x+a%3*(int)(7.2)%2/4,x+a%3*7%2/4,x+7%3*7%2/4,x+1*7%2/4,x+1/4,2.5+0 2.5,“()”运算符优先级最高。,%,*,/运算符优先级相同,遵循从左至右的结合顺序。,5.自增、自减运算符 作用:使变量的值增 1(或)减 1,用+或 表示。+i,i(前置运算)先增(减)i 的值,再引用i 值。i+,i(后置运算)先引用i 值,再增(减)i 的值。,说明:自增、自减运算只能用于变量,不能用于常量 或表达式。具有双重性,构成的表达式有一个运算值,并使操作数变量增 1 或减

23、1。+和 运算符的优先级高于算术运算符,结合性按“从右至左”自增、自减运算主要用与循环语句和指针变量。,例如,典型问题,1.错误形式:5+(a+b)+(i)+2.结合性 i+(i+)不等价于(i)+,重点,自增、自减运算符main()int i,j;i=3;j=+i;/*i=i+1,j=i*/printf(“%d,%d”,i,j);i=3;j=i+;/*j=i,i=i+1*/printf(“%d,%d”,i,j);i=3,j=3;printf(“%d”,i+);printf(“%d”,+j);运行结果:?,重点,6.关于表达式中使用自增、自减运算符的问题 ANSI C 中并未规定表达式中各子表

24、达式的求解顺序,由编译系统自行安排。如:a=f1()+f2()表达式中包含有“+”和“”运算,如:int i=3,x;x=(i+)+(i+)+(i+);系统按自左向右求解括弧内的运算,3+4+5 即x=12,但是:有些系统如(Turbo C,MS C)则是把3作为表达式中所有 i 的值,即3+3+3,x=9 而 i=6。又如:x=(+i)+(+i)+(+i)结果:x=18,i=6 x=(+i)+(i+)+(+i)结果:x=15,i=6,表达式中有多个运算符时 如:i+j(i+)+j 因为编译时按从左 至右原则尽可能多地将若干个字符组成一个运算符。函数调用时,函数实参中有+或 运算符。如:int

25、 i=3;printf(“%d,%d n”,i,i+);结果:3,3 或是 4,3。又如:int i=3;printf(“%d n”,(i+)+(i+)+(i+);,则:5+4+3=12 i 的值为 6,而 printf(“%dn”,(+i)+(+i)+(+i);则:6+5+4=15 i 的值为 6 多数按 从右至左,如 Turbo C。,6.unsigned intint 或 unsigned longlong,则连同原有的符号位也作为数值位一起赋值。,3.int char:将字符型数据放入整型变量低 8 位,根据字符量符号扩展高8位补0或1。,4.long int signed int:高

26、16位补符号位。,5.int,long int unsignde int:高位补 0。,2.float,doubleint:值不变,按浮点数存储。,二、进行类型转换 1.int 变量float,double型:舍去小数部分。,3.9 赋值运算符和赋值表达式,一、赋值符号“=”,赋值运算符 将一个数据或一个表达式的值赋给一个变量。如:int x,y=2;x=y;x=y+2;赋值表达式的值:即为左侧变量的值。典型错误:a+b=2;X 为什么?,例1,float,double 型赋给 int 型 舍去实数小数部分。如:int i;i=3.56;则:i 的值是 3。main()int a,b=12.5

27、;a=b+2.5;printf(“%d,%d”,a,b);输出结果:14,12Why?,1,例2,int 型赋给 float,double型 数值不变但按浮点形式存储到变量中 如:float f;f=23;将 23 转换成 23.00000再存入变量 f 中。main()float f1,f2=12;f1=f2/5;printf(“%f”,f1);输出结果:2.400000,2,例3,char 型赋给 int 型 将字符型数据(8位)放入整型变量的低 8 位,而高 8 位分两种情况:作无符号量处理时:高8位补零。作带符号量处理时:若字符量的最高位为“0”,则 int 型变量的高8位全补“0”。

28、若字符量的最高位为“1”,则 int 型变量的高8位全补“1”。例如:int i=376;,3,例4,带符号的int 型赋给 long int 型 int 型数据为正,则long int 型变量的高16位全补 0,反之全补1。将long int 型赋给int 型:将long int 型数据的低16位原样送入int 型变量。如:int a;long int b=65536;a=b;则 a 为 0,4,例5,unsignde int型赋给 int 和 long int 只须将高位补“0”。但应注意数值范围。例如:unsigned int a=65535;int b;b=a;则 b 为 1,5,例6

29、,将非unsigned 型数据赋给长度相同的 unsigned 型变量则连同原有的符号位也作为数值位一起赋值。main()unsigned a;int b=1;a=b;printf(“%u”,a);结果为:65535 Why?注意:若b为正值,且在 0 32767 之间,赋值后不变。,6,6.unsigned intint 或 unsigned longlong,则连同原有的符号位也作为数值位一起赋值。,3.int char:将字符型数据放入整型变量低 8 位,根据字符量符号扩展高8位补0或1。,4.long int signed int:高16位补符号位。,5.int,long int un

30、signde int:高位补 0。,2.float,doubleint:值不变,按浮点数存储。,二、进行类型转换 1.int 变量float,double型:舍去小数部分。,2.9 赋值运算符和赋值表达式,一、赋值符号“=”,赋值运算符 将一个数据或一个表达式的值赋给一个变量。如:int x,y=2;x=y;x=y+2;赋值表达式的值:即为左侧变量的值。典型错误:a+b=2;X 为什么?,例1,float,double 型赋给 int 型 舍去实数小数部分。如:int i;i=3.56;则:i 的值是 3。main()int a,b=12.5;a=b+2.5;printf(“%d,%d”,a,

31、b);输出结果:14,12Why?,1,例2,int 型赋给 float,double型 数值不变但按浮点形式存储到变量中 如:float f;f=23;将 23 转换成 23.00000再存入变量 f 中。main()float f1,f2=12;f1=f2/5;printf(“%f”,f1);输出结果:2.400000,2,例3,char 型赋给 int 型 将字符型数据(8位)放入整型变量的低 8 位,而高 8 位分两种情况:作无符号量处理时:高8位补零。作带符号量处理时:若字符量的最高位为“0”,则 int 型变量的高8位全补“0”。若字符量的最高位为“1”,则 int 型变量的高8位

32、全补“1”。例如:int i=376;,3,例4,带符号的int 型赋给 long int 型 int 型数据为正,则long int 型变量的高16位全补 0,反之全补1。将long int 型赋给int 型:将long int 型数据的低16位原样送入int 型变量。如:int a;long int b=65536;a=b;则 a 为 0,4,例5,unsignde int型赋给 int 和 long int 只须将高位补“0”。但应注意数值范围。例如:unsigned int a=65535;int b;b=a;则 b 为 1,5,例6,将signed 型数据赋给长度相同的 unsign

33、ed 型变量则连同原有的符号位也作为数值位一起赋值。main()unsigned int a;int b=1;a=b;printf(“%u”,a);结果为:65535 Why?注意:若b为正值,且在 0 32767 之间,赋值后不变。,6,3.9 赋值运算符和赋值表达式,3.9 赋值运算符和赋值表达式,四、赋值表达式 用赋值运算符将一个变量和一个表达式连接起来的式子。格式:注意:赋值运算符的结合性为“从右至左”如:a=(b=5)a=b=5 c=(a=20)/(b=3)例:int a=12;a+=a=a a;(1)a=a a a=a a a 132(2)a+=132 a=a+(132)264,3

34、.10 逗号运算符和逗号表达式一般形式:表达式 1,表达式 2 扩展形式:表达式 1,表达式 2,表达式 n逗号表达式的值:与表达式 n 的值相同。注意:1.正确区分各表达式 2.并非所有逗号都是逗号运算符,例如,逗号表达式的值 1:a=35,a4 2:a=35,a4,a+5 3:(a=35,a4),a+5,示例,例如,正确区分各表达式 1:x=(a=3,63)x的值为18 2:x=a=3,6 3 x的值为3 表达式的值为18,示例,运算符或是分隔符?main()int a,b,c;a=3;b=4;c=5;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);,例如,示例,作业:p66 3.6,3.9,3.10,3.12,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号