C语言程序设计数据类型课件.ppt

上传人:飞****2 文档编号:92228746 上传时间:2023-06-01 格式:PPT 页数:72 大小:531KB
返回 下载 相关 举报
C语言程序设计数据类型课件.ppt_第1页
第1页 / 共72页
C语言程序设计数据类型课件.ppt_第2页
第2页 / 共72页
点击查看更多>>
资源描述

《C语言程序设计数据类型课件.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计数据类型课件.ppt(72页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第三章 数据类型、运算符 与表达式l算法处理的对象是数据。l数据是以某种特定的形式存在的,如整数、实数、字符等。l所谓数据结构,就是指数据的组织形式。完整的程序设计数据结构算法完整的程序设计数据结构算法程序设计方法语言工具程序设计方法语言工具青岛农业大学理信学院主要内容数据成分运算成分青岛农业大学理信学院一、数据类型C语言的数据类型构造类型指针类型 *空类型(无值类型)void枚举类型 enum数组类型结构类型 struct联合类型 union基本类型整型 int字符型 char实型(浮点型)单精度实型 float双精度实型 double青岛农业大学理信学院二、变量与常量l常量:指在程序运行过

2、程中,值不能发生变化的量。l常量可以有不同类型:l比如,这些常量称为字面常量或直接常量整型 100,125,-100,0实型 3.14,0.125,-3.789字符型 a,b,2字符串“a”,“ab”,“1232”青岛农业大学理信学院符号常量定义与使用l定义:使用definedefine PI 3.14l使用:area=PI*3*3程序中用#define命令行定义PI代表常量3.14,此后凡在本文件中出现的PI都代表3.14,可以和常量一样进行运算。PI=3.1415 错误!常量值不能改变!习惯上,符号常量名用大写,变量名用小写l优点:含义清楚;一改全改青岛农业大学理信学院例例3.1#defi

3、ne PRICE 30#include void main()int num,total;num=10;total=num*PRICE;printf(total=%d,total);青岛农业大学理信学院变量l变量:程序运行期间值可以发生改变的量。变量代表内存中具有特定属性的一个存储单元,它用来存放数据,这就是变量的值。青岛农业大学理信学院l变量名实际上是一个以一个名字对应代表一个地址。l在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。l从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。青岛农业大学理信学院变量定义l数据类型 变量名;l比如,int a;f

4、loat x,y;青岛农业大学理信学院变量命名l变量命名的规定:语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。变量名不能与关键字重名 例:例:sum,_total,month,Student_name,lotus_1_2_,BASIC,li_ling M.D.John,¥123,3D64,ab 青岛农业大学理信学院注意:lC语言区分大小写,即:ABC与Abc认为是两个不同的变量。l建议变量名的长度最好不要超过8个字符。l在选择变量名和其它标识符时,应注意做到“见名知意”,即选有含意的英文单词(或其缩写)作标识符。(intStu)l要求对所有用到的变量作强制

5、定义,也就是“先定义,后使用”。青岛农业大学理信学院补充C 语言的关键字(附录语言的关键字(附录B)l关键字(key words)是C语言预定义的词法符号,具有固定含义和用途,不能作为标识符使用。C语言的关键字: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 wh

6、ilel 注意,关键字必须小写。青岛农业大学理信学院1、整型l数据在内存中是以二进制形式存放的,整型数据占用两个字节的空间(TurboC2.0及TurboC+3.0中为两个字节,教材例子也假定整型占两个字节,但是在VC+6.0中则分配4个字节)。l数据采用补码形式表示。青岛农业大学理信学院1)整型常量l十进制整数123,-123l八进制整数。以0开头的数0123,-0123l十六进制整数以0 x开头的数0 x1A,-0 xFD青岛农业大学理信学院2)整型变量整型变量在内存中的存放形式l整型数据在内存中的存放形式数据在内存中是以二进制形式存放的l实际上,数值是以补码(complement)表示的

7、。10在内存中的存放在内存中的存放青岛农业大学理信学院10在内存中的存放在内存中的存放青岛农业大学理信学院整型变量的分类l基本整型 intl短整型 short intl长整型 long intl三者区别在于:可以表示的整数范围不同。青岛农业大学理信学院 类型 类型说明符 长度 数的范围 基本型 int 2字节 -3276832767 短整型 short 2字节 -215215-1 长整型 long 4字节 -231231-1青岛农业大学理信学院整型的符号l整型数据还有有符号数和无符号数之分。signedunsigned青岛农业大学理信学院整型共六种整型共六种有符号基本整型有符号短整型有符号长整

8、型无符号基本整型无符号短整型无符号长整型(signed)int(signed)short(int)(signed)long(int)unsigned intunsigned short(int)unsigned long(int)注意:注意:括号表示其中的内容是可选的。青岛农业大学理信学院整数(13为例)在存储单元中的存储情况青岛农业大学理信学院3)整型变量的定义和使用l定义:定义:int a,bint a,b(指定变量、为整型)(指定变量、为整型)unsigned short c,d;unsigned short c,d;(指定变量、为无符号短(指定变量、为无符号短整型)整型)long e,

9、f;long e,f;(指定变量、为长整型)指定变量、为长整型)对变量的定义,一般是放在一个函数的开头的声明部分(也可以放在函数中某一分程序内,但作用域只限它所在的分程序)l使用:a=12;b=10;a=12;b=10;c=a+b;c=a+b;赋值语句青岛农业大学理信学院溢出int a,b;a=32767;b=a+1;0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1a0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0b-32768青岛农业大学理信学院4)整型常量的类型l整型变量可分为int、short int、long int和unsigned int、unsig

10、ned short、unsigned long等类别。那么常量呢?在将一个整型常量赋值给上述几种类别的整型变量时如何做到类型匹配?l请注意以下几点:(1)一个整数,如果其值在-32768+32767范围内,认为它是int型,它可以赋值给int型和long int型变量。(2)一个整数,如果其值超过了上述范围,而在-2147483648+2147483647范围内,则认为它是长整型,可以将它赋值给一个long int型变量。青岛农业大学理信学院(3)如果某一计算机系统的c版本(例如turbo c)确定short int与int型数据在内存中占据的长度相同,则它的表数范围与int型相同。因此,一个

11、int型的常量也同时是一个short int型常量,可以赋给int型或short int型变量。(4)一个整常量后面加一个字母u,认为是unsigned int型,如12345u,在内存中按unsigned int规定的方式存放。如果写成-12345u,则先将-12345转换成其补码53191,然后按无符号数存储。(5)整常量后加一个字母l或L,则认为是long int型常量。l例如123l、432l、0l等,这往往用于函数调用中。如果函数的形参为long int型,则要求实参也为long int型,此时用123作实参不行,而要用123l作实参。青岛农业大学理信学院2、浮点型l1)浮点型常量两

12、种表两种表示形式示形式小数小数指数指数0.1230.1233 3e-3e-3注意注意:字母e(或E)之前必须有数字,且e后面的指数必须为整数:1e31e3、1.8e-31.8e-3、-123e-6-123e-6、-0.1e-3-0.1e-3e3e3、2.1e3.52.1e3.5、.e3.e3、e e 青岛农业大学理信学院规范化的指数形式l字母e之前的小数中,小数点左边有且仅有一位非零数字。l例如例如:123.456可以表示为:123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e 其中的1.23456e21.23456e

13、2称为“规范化的指数形式”。青岛农业大学理信学院浮点数在内存中的存放l一个浮点型数据一般在内存中占4个字节(32位)。l分为小数部分和指数部分,分别存放。青岛农业大学理信学院2)浮点型变量l单精度型 floatl双精度型 doublel长双精度型 long double类型类型 位数位数 数的范围数的范围 有效数字有效数字float 32float 32 10 10-37-37 10 1038 38 67 67 位位doubledouble型型 64 64 10 10-307-3071010308308 1516 1516位位long double 128 10long double 128

14、10-4931-493110104932 4932 18191819位位青岛农业大学理信学院浮点型数据的舍入误差l例3.4main()float a,b;a=123456,789e5;b=a+20;printf(%f,b);运行程序得到的a和b的值是12345678848.000000只有7位有效数字时准确的因此,避免将一个很大的数和很小的数相加减青岛农业大学理信学院浮点型常量的运算lC编译系统将实型常量作为双精度来处理。例如已定义一个实型变量f,有如下语句:f=2.45678*4523.65 系统将2.45678和4523.65按双精度数据存储(占64位)和运算,得到一个双精度的乘积,然后取

15、前7位赋给实型变量f。(除非在数据后加F或f)l一个实型常量可以赋给一个float型、double型或long double变量。根据变量的类型截取实型常量中相应的有效位数字。例如,float a;a=111111111;由于float型变量只能接收7位有效数字青岛农业大学理信学院3、字符型l1)字符常量:单引号括起来的一个字符l比如,a?l注意:a 与 A是两个不同的字符常量。a,A,1a,A,1abcabc、“a”“a”青岛农业大学理信学院补充C 语言的字符集(附录语言的字符集(附录A)l C 的字符集(character set)是 ASCII 码的子集。l 标准 ASCII 码从 0

16、127,共128个字符。0 31和127是控制字符,属不可见字符。32 126是可见字符。以下字符的码值要记忆:32-空格 48-0 65-A 97-al 扩展 ASCII 码,从 0255,共256个字符。128255是图形符号。青岛农业大学理信学院特殊的字符常量转义字符l以开头的字符序列,称为转义字符。n 换行 b 退格t 横向跳格 f 换页r 回车 反斜杠 单引号”双引号ddd ddd表示1到3位八进制数字xhh hh表示1到2位十六进制数字青岛农业大学理信学院转义字符的使用例3.5 ain()printf(ab ct derftgn);printf(htibbj k);青岛农业大学理信

17、学院2)字符变量l定义:char c;l 使用:ca;青岛农业大学理信学院字符数据在内存中的存储l一个字符变量在内存中占用一个字节。l内存中实际存储的并不是字符本身,而是字符的ASCII码。l整型数据和字符型数据存储形式类似,可以通用。青岛农业大学理信学院例3.6 向字符变量赋以整数char c1,c2;c1=97;c2=98;printf(“%c%cn”,c1,c2);printf(“%d%dn”,c1,c2);注意:字符数据长一个字节,所以最多只能表示0255范围内的整数。其第一位还可以被用作符号位。青岛农业大学理信学院例3.7 大小写转换#include void main()char

18、c;c=a;c=c-32;printf(“%c”,c);/*字符数据可以和整型数据相互赋值*/C语言允许字符数据与整数直接参与算术运算。青岛农业大学理信学院3)字符串常量l用双引号括起来的字符序列 如“abc”,“a”lC语言规定:在每个字符串最后加一个0作为字符串结束标记。l比如,“CHINA”这个字符串常量CHINA0青岛农业大学理信学院问题:l“a”与al是否相同?l答案是不同。a是字符常量,而“a”是字符串常量。“a”相当于a0l结论:不能把一个字符串常量赋给一个字符变量。lchar c;lc=“a”;错!青岛农业大学理信学院l在c语言中没有专门的字符串变量。如果想将一个字符串存放在变

19、量中,以便保存,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中每一个元素存放一个字符。青岛农业大学理信学院4、变量赋初值l语言允许在定义变量的同时使变量初始化。l比如,int a3;相当于int a;a=3;char ca;lint a,b,c=10;只对一部分变量赋初值lint a=1,b=1,c=1;不要写成int a=b=c=1;错!青岛农业大学理信学院三、运算符与表达式(1)算术运算符+-*/%(2)关系运算符 !(3)逻辑运算符!|(4)位运算符|(5)赋值运算符 及其扩展赋值运算符(6)条件运算符?:(7)逗号运算符 ,(8)指针运算符*和(9)求字节数运算符 siz

20、eof(10)强制类型转换运算符(类型))(11)分量运算符-(12)下标运算符(13)其他 如函数调用运算符()表达式:使用运算符和括号将变量、常量等操作数连接起来的,符合C语法规则的式子,称为表达式。青岛农业大学理信学院1、算术运算符与算术表达式 加法运算符,或正值运算符,如:、减法运算符,或负值运算符,如:、*乘法运算符,如:*除法运算符,如:模运算符,或称求余运算符,两侧均应为整型数据,如:的值为优先级:运算按照优先级由高到低进行结合方向(结合性):从左至右,也称为左结合性青岛农业大学理信学院算术运算符优先级和结合性(附录算术运算符优先级和结合性(附录C)l表达式求值的普遍顺序(从左向

21、右扫描):圆括号()先内圆括号,后外圆括号;函数引用运算符优先级不同,先做优先级高的操作,然后做优先级低的操作;运算符优先级相同,按结合性处理;青岛农业大学理信学院类型转换l自动类型转换如果运算符两侧的数据类型不同,先进行自动类型转换,再进行运算。l强制类型转换形式:(类型名)(表达式)short、chardoublefloatlongunsignedint高低青岛农业大学理信学院例float x;int i,j;x=3.6i=(int)x;j=(int)x%2;i的值是多少?j的值是多少?x的值是多少?青岛农业大学理信学院自增、自减运算符l自增 l自减 l作用:使变量的值增1或者减1l这两个

22、运算符只用于变量,而不用于常量和表达式。例如,5,(ab)不合法!l结合方向是“自右至左”,例如i青岛农业大学理信学院注意i和i的不同li先使用i的值,再将i加1li先将i加1,再使用i的值l例子:i3;ji;ji;青岛农业大学理信学院有关表达式使用中的问题说明l歧义问题 书写程序,注意避免歧义青岛农业大学理信学院2、赋值运算符和赋值表达式l1)赋值运算符 l作用:将右边的数据赋给左边的变量li3lixy青岛农业大学理信学院2)类型转换l如果赋值运算符两侧类型不一致,但都是数值型或字符型时,赋值时会自动进行类型转换。(1)将实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分。(2)将

23、整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。(3)将一个double型数据赋给float变量时,截取其前面7位有效数字,存放到float变量的存储单元(32位)中。但应注意数值范围不能溢出。将一个float型数据赋给double变量时,数值不变,有效位数扩展到16位,在内存中以64位(bit)存储。青岛农业大学理信学院(4)字符型数据赋给整型变量时,由于字符只占1个字节,需考虑是否有符号,有符号位需“符号扩展”。unsigned signed青岛农业大学理信学院(5)将一个int、short、long型数据赋给一个char型变量时,只将其低8位原封不动地送到char型变

24、量(即截断)。青岛农业大学理信学院(6)将带符号的整型数据(int型)赋给long型变量时,要进行符号扩展。反之,若将一个long型数据赋给一个int型变量,只将long型数据中低16位原封不动地送到整型变量(即截断)。青岛农业大学理信学院(7)将unsigned int型数据赋给long int型变量时,不存在符号扩展问题,只需将高位补0即可。将一个unsigned类型数据赋给一个占字节数相同的整型变量(例如:unsigned int=int,unsigned long=long,unsigned short=short),将unsigned型变量的内容原样送到非unsigned型变量中,但

25、如果数据范围超过相应整型的范围,则会出现数据错误。将非unsigned型数据赋给长度相同的unsigned型变量,也是原样照赋(连原有的符号位也作为数值一起传送)。青岛农业大学理信学院青岛农业大学理信学院3)复合的赋值运算符l赋值运算符前面加上其它运算符,就构成复合的赋值运算符;如 等l例子:l 等价于 l*等价于 *()l 等价于 以“”为例来说明,它相当于使进行一次自加的操作。即先使加,再赋给。青岛农业大学理信学院 l语言规定可以使用语言规定可以使用1010种复合赋值运算符:种复合赋值运算符:,*,|青岛农业大学理信学院4)赋值表达式l由赋值运算符将一个变量和一个表达式连接起来的式子称为“

26、赋值表达式”。l一般形式为一般形式为 比如a3就是一个赋值表达式青岛农业大学理信学院赋值表达式的值求赋值运算符右侧的“表达式”的值;赋给赋值运算符左侧的变量;赋值表达式的值就是右侧的计算结果。例子:a3*5青岛农业大学理信学院左值和右值左值左值(lvalue)(lvalue):赋值运算符左侧的标识符l变量可以作为左值;l而表达式就不能作为左值(如a+b);l常变量也不能作为左值。右值右值(rvalue)(rvalue):出现在赋值运算符右侧的表达式 左值也可以出现在赋值运算符右侧,因而左值 都可以作为右值。青岛农业大学理信学院 赋值表达式中的“表达式”,又可以是一个赋值表达式。例如例如:a=(

27、b=5)分析分析:括弧内的“b=5”是一个赋值表达式,它的值等于5。执行表达式“a=(b=5)”相当于执行“b=5”和“ab”两个赋值表达式。赋值运算符按照“自右而左”的结合顺序,因此,“(b5)”外面的括弧可以不要,即“a=(b=5)”和“a=b=5”等价。青岛农业大学理信学院赋值表达式(a=3*5)=4*3分析分析:先执行括弧内的运算,将15赋给a,然后执行4*3的运算,得12,再把12赋给a。最后a的值为12,整个表达式的值为12。可以看到(a=3*5)出现在赋值运算符的左侧,因此赋值表达式(a=3*5)是左值 注意注意:在对赋值表达式(a=3*5)求解后,变量a得到值15执行(a=3*

28、5)=4*3时,实际上是将4*3的积12赋给变量a,而不是赋给3*5。不能写成:a=3*5=4*3青岛农业大学理信学院赋值表达式也可以包含复合的赋值运算符。如:如:a+=a-=a*a分析分析:此赋值表达式的求解步骤如下 先进行“*”的运算,它相当于*,a的值为144132。再进行“”的运算,相当于=a+(-132),a的值为132-132-264。青岛农业大学理信学院 将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句、循环语句等)中。如:如:printf(%d,a=b);分析分析:如果b的值为3,则输出a的值(也是表达式a=b的值

29、)为3。在一个语句中完成了赋值和输出双重功能。青岛农业大学理信学院逗号运算符逗号运算符:将两个表达式连接起来,又称为“顺序求值运算符”如:如:5,一般形式一般形式:表达式,表达式表达式,表达式求解过程:求解过程:先求解表达式,再求解表达式。整个逗号表达式的值是表达式的值。逗号表达式 的值为143、逗号运算符和逗号表达式青岛农业大学理信学院例:例:逗号表达式*5,*分析分析:赋值运算符的优先级别高于逗号运算符,因此应先求解*5。的值为5,然后求解*,得。整个逗号表达式的值为。一个逗号表达式又可以与另一个表达式组成一一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式个新的逗号表达式 如如:(

30、*,*),先计算出的值等于,再进行*的运算得60(但值未变,仍为15),再进行得,即整个表达式的值为。青岛农业大学理信学院逗号表达式的一般形式可以扩展为 表达式,表达式,表达式,表达式,表达式,表达式,表达式,表达式 它的值为表达式的值。逗号运算符是所有运算符中级别最低的例例:(,*),*3赋值表达式,将一个逗号表达式的值赋给,的值等于 逗号表达式,包括一个赋值表达式和一个算术表达式,的值为,整个逗号表达式的值为18。青岛农业大学理信学院注意注意:并不是任何地方出现的逗号都是作为逗号运算符。例如函数参数也是用逗号来间隔的。如如:printf(“%d,%d,%d”,a,b,c);“,”并不是一个逗号表达式,它是printf函数的3个参数printf(“%d,%d,%d”,(a,b,c),b,c)“(,)”是一个逗号表达式,它的值等于的值。青岛农业大学理信学院

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁