天天看点

c 语言的数据类型ppt,C语言第3章数据类型.ppt

c 语言的数据类型ppt,C语言第3章数据类型.ppt

C语言第3章数据类型.ppt

1,第 3 章 数据类型、运算符及表达式,基本数据类型的存储方式和表示方式 不同类型间数据转换的原则与方法 有关运算符与表达式的运用,2,一个C程序是由一个或多个函数组成,函数体由若干条C语句组成,那么,C语句又是由什么组成,思考,主函数 函数n,C语句1 C语句2 C语句n,关键字 标识符 字符集,C 程 序3,注意所有关键字都要用小写英文字母表示,且不允许被用作标识符使用,auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while,关 键 字,4,标 识 符,标识符是由英文字母、数字及下划线构成的字符串,并且首字符必须为字母或下划线。 用来标识常量、变量、函数名、数组名、类型定义符等。 注意关键字是用户标识符的禁区 命名原则见名知意大小写有区别 不同C语言版本允许的长度不一样 ANSI C为8个字符 Turbo C 为32,5,练习请找出不合法的标识符.,union abc_123 2ab3 db abc8* INT,stu _bc8 abcdefghi -s10 * r2.5; aPI*r*r; c2*PI*r; printf“rf,af;cfn”,r,a,c; 10,关于变量,变量的定义 变量是程序执行过程中其值可以改变的量。 变量的分类 整型变量 实型变量 字符变量 变量的命名同标识符的命名 变量的使用 先定义后使用,每一个变量指定为一确定类型 含义清楚 count name day 一般用小写字母表示11,3.3 整 型 数 据 int,三种形式 十进制数 如12、345、0 八进制数以0开头 如012、045 十六进制数0 x开头 如0 x12、0 x345,整型常量,0123 ( )10 0X123 ( )10 0XFF ( )10,83,255,291,例 30000为int型 65536为long int型,例 12与12L,整型常量的类型 根据其值所在范围确定其数据类型;,在整常量后加字母L或l,认为它是long int型常量。,十进制无符号整常数的范围为065535,有符号数为3276832767 八进制无符号数的表示范围为00177777 十六进制无符号数的表示范围为0X00XFFFF,12,整型常量举例,include void main printf“d,o,xn”,123,123,123; printf“d,o,xn”,023,023,023; printf“d,o,xn”,0 x12,0 x12,0 x12; ,例整型常量的不同进制表示。,d,o,x是输入输出的格式字符串 d表示十进制 o表示八进制 x表示十六进制,上述程序中的n 表示输出后回车换行,13,分 类 基本型int 短整型short int、short 长整型long int、long 无符号型 无符号整型unsigned int 无符号短整型unsigned short 无符号长整型unsigned long,整型变量,取值范围 -3276832767 -3276832767 -21亿21亿 065535 065535 042亿,所占位数 16 16 32 16 16 32,14,整型变量在内存中存储高字节,低字节,符号位 0表示正整数 1 表示负整数,采用补码表示 正整数补码与原码相同 负整数补码 原码(取反)1,例如 47 0 x2F 原码 0000,0000,0010,1111 取反 1111,1111,1101,0000 加1得到 - 47的补码 1111,1111,1101,0001,取值范围-215 215-1 -3276832767,15,整型变量定义,定义形式 数值类型 变量名表; 说明 数值类型即类型说明符int、short、long等。 变量名表可为一个或多个变量名,之间用逗号间隔。 变量被定义后,其取值范围也被确定。,include void main int a,b,c; a4; b5; ca*b; printf“a*bdn”,c; ,等价于 int a; int b; int c;,16,include void main int a,b; a32767; ba1; printf“d,d”,a,b; ,运行结果 32767,32768,a,b,整型数据的溢出,32767,-32768,溢出不报错 会出现不可预料后果,17,使用整型数据时的注意事项,若某系统的C版本确定short int与int型数据在内存中占据的长度相同,则二者等价。 一个int型常量-3276832767可以赋值给int型变量或long型变量。 其值在-231231-1内,而在-215215-1外的整数只可赋值给long型变量。 int a; a111111; 不报错但结果不对 常量无unsigned型,但一个非负整数可赋值给unsigned型整数变量 ,但要注意值的范围。 unsigned a; a10; 不报错但结果不对 长整型数的表示方法是在数值后面加字母l或L,如234L。 不同的数据类型有不同的存储字长,使用时注意其取值范围。,18,3.4 浮点型数据,浮点型常量 即实数。以十进制形式表示。 表示形式 小数形式由数字和小数点组成 如1.56、 - 0.231 指数形式科学计数法小数E或e整数 “小数”表示实数的数值位,即尾数部分。 “E”代表十进制数的基数10。 “整数”表示10的乘幂。,浮点型常量,1.23103,3.918e-2,1.23E3,3.91810-2,注意字母E 之前必须 有数字,19,浮点型变量,分 类 单精度float 双精度double 长双精度long double,有效数字 7位 1516位 1819位,所占位数 32 64 128,变量的定义 float x,y; double z; ,浮点型常量不分单、双精度,都按双精度double处理。一个浮点型常量可以赋给一个float型或double型,根据变量的类型截取浮点型常量中相应的有效位数字。,如 float a; a123456.123;,20,浮点型数据的舍入误差,由于浮点型变量的存储单元有限,因而小数部分的有效数字是有限的,超过部分将舍去。, include void main float a,b; a123456.789E5; ba20; printf“f”,b; ,运行结果 12345678848.000000,避免大数与很小数直接加减 判断两个浮点型变量是否相等,是判断二者的差的绝对值是否小于一个很小的数21,变量初始化定义时赋初值,变量的使用先定义,后使用,变量定义位置一般放在函数开头,例 int a2,b,c4; float data3.67; char chA; int x1,y1,z1; int xyz1;,例1 int student; stadent19; Undefined symbol statent in function main,例2 float a,b,c; cab; Illegal use of floating point in function main,22,3.5 字符型数据,概念指用单引号撇号括起来的单个字符。 例 a b 5 字符常量的值该字符的ASCII码值,字符常量,字符常量的分类 一般字符常量 x a A 2 转义字符常量 以一个反斜杠“”开头的字符序列,有特定含义。,ASCII码(见教材P364附录A) 8 位对字符编码, 码值0-255 032 为控制字符(不可印刷字符) 33-255为可印刷字符 128-255 为扩展ASCII码,23,转义字符常量表,101 - A 012 - n 376 - x61 - a 60 - 0 483 - ,24,include void main printf“101 x42 Cn“; printf“I say“How are you“n“; printf“C Programn“; printf“Turbo C“; ,运行结果屏幕显示 A B C I say”How are you” C Program Turbo C,例 include void main printf“Ybn”; ,运行结果 屏幕显示 打印机输出,转义字符的使用,25,运行结果 屏幕显示,屏幕输出在后面的字符会取代原来屏幕上该位置上显示的字符,include void main printf“_ab_ct_derftgn“; printf“htibbj_k“; ,打印机输出,f,a,b,c,g,d,e,h,j,i,k,转义字符的使用,26,字符变量,关于字符变量 字符变量用来存放字符常量。 一个字符变量只能存放一个字符常量。 一个字符变量在内存中占用一个字节的空间。,字符变量的定义格式 char 变量名表;字符变量的赋值 变量名字符常量; 变量名整型数据; 举例 char c; char ch1,ch2; c97;ch1B;ch2C;,27,include void main char c1,c2; c197;c298; printf“c,cn”,c1,c2; printf“d,dn”,c1,c2; ,include void main char c1,c2; c1a;c2b; c1c1-32;c2c2-32; printf“c,c”,c1,c2; ,运行结果 A,B,字符变量存放字符ASCII码 char与int数据间可进行算术运算 char与int数据可以相互赋值,运行结果 a,b 97,98,28,define PRICE 12.5 include void main int num3; float total; char ch1,ch2D; totalnum*PRICE; ch1ch2-Aa; printf“totalf,ch1cn”,total,ch1; ,运行结果 total37.50000, ch1d,29,分 类 基本型int 短整型short int、short 长整型long int、long 无符号型 无符号整型unsigned int 无符号短整型unsigned short 无符号长整型unsigned long,整型变量,取值范围 -3276832767 -3276832767 -21亿21亿 065535 065535 042亿,所占位数 16 16 32 16 16 32,30,浮点型变量,分 类 单精度float 双精度double 长双精度long double,有效数字 7位 1516位 1819位,所占位数 32 64 128,31,字符变量,关于字符变量 字符变量用来存放字符常量。 一个字符变量只能存放一个字符常量。 一个字符变量在内存中占用一个字节的空间。,字符变量的定义格式 char 变量名表;字符变量的赋值 变量名字符常量; 变量名整型数据; 举例 char c; char ch1,ch2; c97;ch1B;ch2C;,32,概念字符串常量是指用一对双引号括起来的字符序列。如“ Hello”、 “good”等。 字符串常量的存储 系统自动在字符串的末尾加上一个字符串结束标记0,以此判断字符串是否结束。 程序中长度为n个字符的字符串常量,在内存中需要用n1个字节空间来存储它。,字符串常量例字符串“string”的存储,33,字符常量与字符串常量的区别,二者表示形式不同。 字符常量的定界符是,而字符串常量的定界符是“”。 如a是字符常量,而“a”是字符串常量。 存储空间不同。 一个字符常量只占1个字节,而一个含有单个字符的字符串常量需要占用2个字节。 如a在内存中只占1个字节,“a”则需占用2个字节空间。 不允许将一个字符串常量赋给一个字符型变量。 如cha 是正确的;而ch“a” 不正确。,34,允许定义变量的同时使变量初始化 例如 int a3; 等价于 int a; a3; 允许只对其中一部分变量赋初值 例如int a3,b,c4; char ch1x,ch2; 若有几个变量初值相同,必须分别赋值 例如int a2,b2,c2;,3.6 变量赋初值,int abc2;,对字符型变量初始化时,既可以将字符用单引号括起来直接赋值,也可以使用该字符的ASCII码进行赋值。 例如char chA; 等价于 char ch65;,35,变量的地址,程序运行时,变量的值以二进制的形式存储在内存中。存储空间的大小由变量的数据类型决定。,内存的编址 内存分为若干个存储单元。 每个单元存放一个字节的数据。 每个单元有唯一的一个地址。 变量存放在内存单元中,若变量所占空间包括多个存储单元,则把首地址作为变量地址。,36,不同类型的数据混合运算,先转换成同一类型,然后进行运算。,3.7 各类数值型数据间的混合运算,double,float,long,unsigned,int,char, short必定的转换,不同类型数据转换方向,37,隐式转换 运算转换不同类型数据混合运算时 赋值转换把一个值赋给与其类型不同的变量时 输出转换输出时转换成指定的输出格式 函数调用转换实参与形参类型不一致时转换 显式转换(强制转换) 一般形式(类型名)(表达式) 例 intxy intxy double3/2 int3.6 说明强制转换得到所需类型的中间变量,原变量类型不变 可能发生较高类型向较低类型转换,不同类型数据间的转换, include void main float x; int i; x3.6; iintx; printf“xf,id”,x,i; ,结果x3.600000 , i3,38,例如习题3.9 1 xa3*intxy2/4 x2.5, a7, y4.7,2.573*int2.54.72/4,2.573*int7.22/4,2.51*72/4,2.572/4,2.51/4,2.50,2.5,39,按照运算类型分 算术运算符 、-、*、/、 关系运算符 、、| kj; j3; kj; j3; printf“d”,j; j3; printf“d”,j; a3;b5;ca*b; a3;b5;ca*b;,k4,j4,k3,j4,4,3,c20,a4,c15,a4,自增、自减运算符 ,使变量值加1或减1,i, i 在使用i前,使i的值加减1) i,i 在使用i后,使i的值加减1 ),说明 不能用于常量和表达式,只能用于变量。 如 5,ab是不合法的 结合方向 自右向左 优先级 - * / -,例 -i -i i3; printf“d”,-i;,44,1 k34512 a6,2 k3339 a6,例设a3 ,若执行语句kaaa后的k值为多少,turbo c运行结果例ij i)j 还是 i(j),c编译系统将尽可能多的将多个字符组成一个运算符, 并按自左而右的方法,为避免误解最好采取都能理解的方法,写成ij;,45,3.9 赋值运算符和赋值表达式,简单赋值运算符 ,变量标识符常量或表达式,说明 “”是一个双目运算符,需要左右两个运算量。 “”是赋值运算符,不等于等号,没有相等的含义。 “”左端的运算量必须是单个变量,而不能是表达式。 赋值运算中,使运算符左端的变量具有右端表达式的值。,46,1aa1; 等价于a; 2 abc2; 连续赋值 等价于abc2; 或者 a2;b2;c2; 3 a2b3; 等价于b3;a235; 4 ab2*c3; 等价于b2;c3;a2*36;,允许赋 值表达式中含 有另外的赋值 表达式,进行 连续赋值,举 例,47,a3,aa3,x*y8,xx*y8,x3,xx3,复合赋值运算符, * / ab3;,abc5 ab5 a5c6 ab4c6 ab10/c2,表达式值为5,a,b,c值为5, b5;a5,表达式值11,c6,a11,表达式值10,a10,b4,c6,表达式值5,a5,b10,c2,aa-a*a,( ),aa*a-a*3,( ),( ),( ),优先级 很低,仅高于逗号运算符 左侧必须是变量,不能是常量或表达式,赋值表达式的值与变量值相等,且可嵌套,49,赋值运算中数值类型的转换,intfloat舍弃实数的小数部分。,int i3.56;,i3,float f23;,f23.00000,float、doubleint数值不变,但以浮点数形式存储。,floatdouble截取前面7位有效数字,但数值范围不能溢出。 doublefloat数值不变,有效位数扩展到16位。 intchar字符ASCII码放到整型变量的低8位。 如果为无符号变量,则高8位补0。 如果为符号变量,若字符最高位为0,则高8位补0;若字符最高位为1,则高8位补1;,int c376;,11111110,11111111,unsigned,00000000,50,charint /short /long 只将其低8位送到char型变量(截断)。,char c289;,00100001,00000001,c33,long int 将2bytes送入低16位,高16位进行符号扩展。 int long 只将低16位送入,注意溢出。 longint, shortunsigned int不进行符号扩展,高位补0。 unsigned非unsigned原样赋出。, include void main unsigned a; int b -1; ab; printf“u”,a; ,65535,51,形式表达式1,表达式2,表达式n 结合性从左向右 优先级 15 在所有运算符中级别最低 逗号表达式的值等于表达式n的值 用途常用于循环for语句中,3.10 逗号运算符和逗号表达式,用逗号将两个表达式连接起来,顺序求值运算符,a3*5,a*4 a3*5,a*4,a5,xa3,6*3 xa3,6*a,a1;b2;c3; printf“d,d,d”,a,b,c; printf“d,d,d”,a,b,c,b,c;,52,作业3.4 3.6 3.7 3.9 3.10 3.12,END,