大学课程《C语言程序设计》PPT课件:第三章.pptx
- 文档编号:18866971
- 上传时间:2024-02-03
- 格式:PPTX
- 页数:30
- 大小:388.77KB
大学课程《C语言程序设计》PPT课件:第三章.pptx
《大学课程《C语言程序设计》PPT课件:第三章.pptx》由会员分享,可在线阅读,更多相关《大学课程《C语言程序设计》PPT课件:第三章.pptx(30页珍藏版)》请在冰点文库上搜索。
第三章基本数据类型3.1常量3.2变量3.3变量赋初值3.4运算符与表达式3.5不同类型数据间的混合运算3.1常量3.1.13.1.1标识符标识符标识符是用来标识变量名、符号常量名、函数名、数组名、类型名、文件名等的有效字符序列。
在C语言中,构成标识符的命名规则如下:
(1)标识符只能由字母、数字和下划线三种字符构成。
(2)标识符的有效长度为132个字符。
(3)标识符的首字符必须是字母或下划线,其余字符可以是字母、数字或下划线。
(4)标识符中区分大写字母与小写字母。
如circle、Circle、CIRCLE是3个不同的标识符。
(5)标识符不能与任何关键字相同。
此外,为标识符取具有助记性质的名称是非常好的编程习惯,它可以提高程序的可读性,增强程序的文档信息。
注意:
以下划线开头的标识符可能与系统内部所使用的名称冲突。
如_iob这个标识符常常被定义为stdio.h中一个结构数组的名称,如果程序员试图将_iob用作其他用途,编译器可能会报错,或者程序会出现错误的行为。
因此,编写程序时,程序员应该避免使用以下划线开头的标识符。
3.1常量3.1.23.1.2常量常量常量是指在程序执行过程中其值不发生改变的量。
如程序中的具体数字、字符等。
通常常量分为以下五种类型。
1.1.整型常量整型常量整型常量就是整常数。
在C语言中,使用的整常数有八进制、十六进制和十进制三种。
(1)十进制整常数:
十进制整常数没有前缀,其数码为09,有正有负。
如123、-456、65535是合法的十进制整常数;012(不能有前导0)、56D(含有非十进制数码)不是合法的十进制整常数。
在程序中是根据前缀来区分各种进制数的。
因此,在书写常数时,不要把前缀弄错造成结果不正确。
(2)八进制整常数:
八进制整常数必须以0开头,即以0作为八进制数的前缀。
数码取值为07,通常是无符号数。
如017(十进制为15)、0101(十进制为65)、0177777(十进制为65535)是合法的八进制整常数;123(无前缀0)、03A(包含了非八进制数码)、-0127(出现了负号)是非法的八进制整常数。
(3)十六进制整常数:
十六进制整常数的前缀为0X或0x。
其数码取值为09,AF或af。
如0X1D(十进制为29)、0XF2(十进制为242)、0XFFFF(十进制为65535)为合法的十六进制整常数;B2(无前缀0X)、0X4H(含有非十六进制数码)为非法的十六进制整常数。
3.1常量此外,由于在16位字长的机器上,基本整型的长度也为16位,所以表示的数的范围是有限的。
十进制无符号整常数的范围为065535,有符号数为-32768+32767。
八进制无符号数的表示范围为00177777。
十六进制无符号数的表示范围为0X00XFFFF或0x00xFFFF。
如果使用的数超过了上述范围,就必须用长整型数来表示。
长整型数是用后缀“L”或“l”来表示的,例如,十进制长整常数:
158L(十进制为158)、358000L(十进制为358000);八进制长整常数:
012L(十进制为10)、077L(十进制为63)、0200000L(十进制为65536);十六进制长整常数:
0X15L(十进制为21)、0XA5L(十进制为165)、0X10000L(十进制为65536)。
长整数158L和基本整常数158在数值上并无区别。
但对于158L,因为是长整型量,C编译系统将为它分配4个字节的存储空间,而基本整型158,只分配2个字节的存储空间。
因此,在运算和输出格式上要予以注意,避免出错。
无符号数也可用后缀表示,整型常数的无符号数的后缀为“U”或“u”。
如358u、0x38Au、235Lu均为无符号数。
前缀、后缀可同时使用以表示各种类型的数。
如0XA5Lu表示十六进制无符号长整型数A5,其十进制为165。
2.2.实型常量实型常量实型常量也称为实数或者浮点数。
在C语言中,实数只采用十进制,主要有小数表示形式和指数表示形式两种。
(1)小数形式:
由数码09和小数点组成。
如0.0、25.0、5.678、0.13、5.0、-267.890等均为合法的实数。
注意:
必须有小数点。
3.1常量
(2)指数形式:
由十进制数加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。
其一般形式为:
aEn(a为十进制数,n为十进制整数)其值为a*10n。
例如,5.8E5/*等于5.8*/1.6E-2/*等于1.6*/0.3E7/*等于0.3*/-8.9E-2/*等于-8.9*/而以下表示为非法的实数。
例如,123/*无小数点*/E5/*阶码标志E之前无数字*/-1.5/*无阶码标志*/3.6.-E3/*负号位置不对*/2.7E/*无阶码*/此外,标准C允许浮点数使用后缀,后缀为“f”或“F”即表示该数为浮点数。
如789f和789是等价的。
3.1常量3.3.字符常量字符常量字符常量包括普通字符常量和转义字符常量。
(1)字符常量是由一对单引号括起来的单个字符,它可以是ASCII码字符集里的任一个字符。
如“a”、“A”、“5”、“+”、“”等。
在C语言中,字符常量有以下特点:
字符常量只能用单引号括起来,不能用双引号或其他括号。
字符常量只能是单个字符,不能是字符串。
字符可以是字符集中任意字符。
但数字被定义为字符型之后就不能参与数值运算。
如7和7是不同的。
7是字符常量,不能参与运算。
(2)转义字符常量又叫控制字符常量,转义字符以反斜线“”开头,后跟一个或几个字符。
转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。
表3-1列出了C语言中常用的转义字符及含义。
转义字符序列转义字符的意义ASCII代码n回车换行10t横向跳到下一制表位置9b退格8r回车13单引号39双引号“34反斜杠92ddd13位八进制数所代表的字符xhh12位十六进制数所代表的字符a鸣铃7f走纸换页12表表3-13-1常用的转义字符及含义常用的转义字符及含义3.1常量4.4.字符串常量字符串常量字符串常量是由一对双引号括起的字符序列。
如“CHINA”、“Howareyou”等都是合法的字符串常量。
注意:
字符串常量和字符常量是不同的量,它们之间主要有以下区别:
(1)字符常量由单引号括起来,字符串常量由双引号括起来。
(2)字符常量只能是单个字符,字符串常量则可以含一个或多个字符。
(3)可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。
在C语言中没有相应的字符串变量,但是可以用一个字符数组来存放一个字符串常量。
(4)字符常量占一个字节的内存空间。
字符串常量占的内存字节数等于字符串中字节数加1。
增加的一个字节中存放字符0(ASCII码为0),这是字符串结束的标志。
3.1常量【例【例3-13-1】字符变量的输出。
#includemain()chara,b;a=97;b=98;printf(%c,%cn,a,b);printf(%d,%dn,a,b);程序运行结果如图3.1所示。
分析:
本程序中定义a、b为字符型,但在赋值语句中赋以整型值。
从结果看,a、b值的输出形式取决于printf函数格式串中的格式符,当格式符为“c”时,对应输出的变量值为字符,当格式符为“d”时,对应输出的变量值为整数。
图图3.13.1例例3-13-1运行结果运行结果3.1常量5.5.符号常量符号常量在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。
符号常量在使用之前必须先定义,其一般形式为:
#define标识符常量其中,#define是一条预处理命令(预处理命令都以“#”开头),称为宏定义命令,其功能是把该标识符定义为其后的常量值。
一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。
习惯上,符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。
【例【例3-23-2】符号常量的使用。
#include#definePI3.14159main()doubled;d=PI;printf(a=%fn,d);程序运行结果如图3.2所示。
图图3.23.2例例3-23-2运行结果运行结果3.2变量变量是在程序运行中其值可以被修改的量。
变量具有三个基本要素:
变量说明、变量类型和变量值。
一个变量应该有一个名字,在内存中占据一定的存储单元,在该存储单元中存储该变量的值。
变量名和变量值是两个不同的概念,变量名实际是一个符号地址,在对程序连接编译时由系统给每一个变量名分配一个内存地址,而变量值则是其对应内存单元中所存放的数据。
程序执行过程中从变量取值时,实际上是通过变量名找到相应的内存地址,再从其内存单元中读取数据。
在C语言中,所有的变量在使用之前必须声明。
一般的定义形式为:
数据类型变量名列表;其中,数据类型是指C语言的有效数据类型,基本包括整形(int)、字符型(char)和浮点型(float)。
变量名列表中,变量与变量之间用逗号隔开。
例如,inti,j,k;floatx,y;在C语言中,变量名的命名要符合标识符的命名规则。
此外,为了提高程序的可读性,变量名应该取得尽量有意义,具有“见名知义”的效果。
3.2变量【例【例3-33-3】变量的使用。
#includemain()inta,b=5;/定义并给整型变量赋值floatx,y=5.4,z=-7.9;/定义并给浮点型变量赋值charch1=a;/定义并给字符型变量赋值printf(Inputtwointegers:
);scanf(%d,&b);a=b;printf(a=%dn,a);printf(y,z=%f%fn,y,z);printf(ch1=%cn,ch1);程序运行结果如图3.3所示。
图图3.33.3例例3-33-3运行结果运行结果3.2变量3.2.13.2.1整型变量整型变量1.1.整型变量的定义整型变量的定义变量定义的一般形式为:
类型说明符变量名标识符,变量名标识符,.;例如,intx,y;/*定义整型变量x、y*/longa,b,c;/*定义长整型变量a、b、c*/unsignedp,q;/*定义无符号整型变量p、q*/在书写变量定义时,应注意以下几点:
(1)允许在一个类型说明符后定义多个相同类型的变量,各变量名之间用逗号间隔。
类型说明符与变量名之间至少用一个空格间隔。
(2)最后一个变量名之后必须以“;”号结尾。
(3)变量定义必须放在变量使用之前。
一般放在函数体的开头部分。
3.2变量2.2.整型变量的分类整型变量的分类
(1)基本型:
类型说明符为int,在内存中占2个字节。
(2)短整量:
类型说明符为shortint或short,所占字节和取值范围均与基本型相同。
(3)长整型:
类型说明符为longint或long,在内存中占4个字节。
(4)无符号型:
类型说明符为unsigned。
无符号型又可与上述三种类型匹配而构成如下几种类型:
无符号基本型:
类型说明符为unsignedint或unsigned。
无符号短整型:
类型说明符为unsignedshort。
无符号长整型:
类型说明符为unsignedlong。
各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。
但由于省去了符号位,故不能表示负数。
有符号整型变量最大表示32767。
无符号整型变量最大表示65535。
011111111111111111111111111111113.2变量表3-2中列出了TurboC中各类整型数据所分配的内存字节数及数的表示范围。
类型说明符数的范围字节数int-3276832767即-215(215-1)2unsignedint065535即0(216-1)2shortint-3276832767即-215(215-1)2unsignedshortint065535即0(216-1)2longint-21474836482147483647即-231(231-1)4unsignedlong04294967295即0(232-1)4表表3-23-2整型数据分类表整型数据分类表3.2变量【例【例3-43-4】整型变量的定义与使用。
#includemain()inta;shortintb;unsignedc;a=32767;b=a+1;c=a+1;printf(%d,%d,%dn,a,b,c);程序运行结果如图3.4所示。
分析:
程序中定义a为整型变量,表示的数据范围是-3276832767,b为短整型变量,表示的数据范围也是-3276832767,c为无符号整型变量,表示的数据范围是065535。
A+1结果是32768,超出变量b的表示范围,出现了数据溢出,在内存中表示为:
因此结果为-32768。
没有超出变量c的表示范围,所以c的输出是32768。
1000000000000000图图3.43.4例例3-43-4运行结果运行结果3.2变量3.2.23.2.2实型变量实型变量1.1.实型变量的分类实型变量的分类实型变量分为单精度、双精度和长双精度三种类型,分别使用关键字float、double和longdouble表示。
表3-3中列出了TurboC中各类实型数据所分配的内存字节数及数的表示范围。
定义的格式如下:
floatx,y;/*定义单精度实型变量x,y*/doublea,b,c;/*定义双精度实型变量a,b,c*/类型说明符比特数(字节数)有效数字数的范围float32(4)6710-371038double64(8)151610-30710308longdouble128(16)181910-4931104932表表3-33-3实型数据分类表实型数据分类表3.2变量2.2.实型数据的舍入误差实型数据的舍入误差由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的。
其中,float型数据的有效位数为7位,double型数据的有效位数为1516位。
如果结果超出了各数据类型的有效位数,超出的部分四舍五入。
【例3-5】浮点数的有效位实例。
#includemain()floatx;x=0.1234567890;printf(%fn,x);程序运行结果如图3.5所示。
分析:
在本例中,x被赋值一个有效位数为11的数字,但由于x为float类型,所以x只能接收7位有效数字,因此小数位最多保留六位,其余部分四舍五入。
图图3.53.5例例3-53-5运行结运行结果果3.2变量3.2.33.2.3字符变量字符变量字符变量用来存储字符,每个字符变量只能存放一个字符。
字符变量的类型说明符是char,如charx,y。
在C语言中,每个字符变量被分配一个字节的内存空间,将一个字符赋给一个变量时,并不是将该字符本身存储到内存中,而是将该字符的ASCII码存储到内存单元中。
如a的十进制ASCII码是97,b的十进制ASCII码是98。
给字符变量x、y赋予a和b值:
x=a;y=b;而x、y对应的内存单元中存放的是97和98的二进制代码:
所以,也可以把它们看成是整型量。
C语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。
在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。
整型量为二字节量,字符量为单字节量,当整型量按字符型量处理时,只有低八位字节参与处理。
a:
01100001b:
011000103.3变量赋初值在程序中常常需要对变量赋初值,以便使用变量。
语言程序中可有多种方法为变量赋初值。
本小节先介绍在作变量定义的同时给变量赋以初值的方法,这种方法称为初始化。
在变量定义中赋初值的一般形式为:
类型说明符变量1=值1,变量2=值2,;例如,intx,y=10;floata=12.345;charch1=A,ch2=a;注意:
在定义中不允许连续赋值,如x=y=z=6是不合法的。
3.4运算符与表达式运算符也称为操作符,它是对程序中的数据进行运算的标志符号,参与运算的数据称为操作数或运算对象。
由运算符和操作数组成的符合语法规则的序列称为表达式,表达式经运算后得到一个结果。
在C语言中,如果运算符的运算对象是一个,就称为“单目运算符”,如“-a”中的“-”;如果运算对象是两个,就称为“双目运算符”,如“a+b”中的“+”;如果运算对象是三个,就称为“三目运算符”,如“ab?
a:
b”中的“?
:
”。
表达式是由常量、变量、函数和运算符组合起来的式子。
一个表达式有一个值及其类型,它们等于计算表达式所得结果的值和类型。
表达式求值按运算符的优先级和结合性规定的顺序进行。
单个的常量、变量、函数可以看作是表达式的特例。
3.4.13.4.1算术运算符与算术表达式算术运算符与算术表达式1.1.算术运算符算术运算符C语言的算术运算符共有7个,对应9种运算,基本运算符如下:
(1)加法运算符“+”:
加法运算符为双目运算符,即应有两个量参与加法运算,如x+y、5+3等。
(2)减法运算符“-”:
减法运算符为双目运算符,但“-”也可作负值运算符,此时为单目运算,如-x、x-5等。
3.4运算符与表达式(3)乘法运算符“*”:
双目运算,如5*9、a*b等。
(4)除法运算符“/”:
双目运算具有左结合性。
参与运算量均为整型时,结果也为整型,舍去小数。
如果运算量中有一个是实型,则结果为双精度实型。
如8/4、12.5/2等。
(5)求余运算符(模运算符)“%”:
双目运算,具有左结合性。
要求参与运算的量均为整型。
求余运算的结果等于两数相除后的余数。
如9%5、x%3等。
2.2.算术运算符的优先级和结合性算术运算符的优先级和结合性C语言的算术运算符具有一般数学运算的特性,具有运算优先级和结合性,如表3-4所示。
优先级运算符结合性1()由内向外2+自左向右-(取负)3*自左向右/%4+自左向右表表3-43-4算术运算符的优先级和结合性算术运算符的优先级和结合性3.4运算符与表达式3.3.自增自减运算符自增自减运算符在C语言中,还有两个很有用的运算符,即增1和减1运算符。
其中,运算符“+”是将变量值自增1,运算符“-”是将变量值自减1。
自增/自减运算符属于单目运算符,只能用于变量自加或自减,不能用于常量。
增1和减1这两个运算符既可以放在操作数之前,也可以放在其后。
如x+,也可以写成+x。
但是这两种写法是有区别的,如果运算符在操作数后面,则先引用该操作数,然后再对其进行加1或减1运算;如果运算符在操作数前面,则在引用该操作数之前,先对其进行加1或减1运算。
归纳如下:
(1)x+:
先引用变量x的值,再将x的值加1。
(2)x-:
先引用变量x的值,再将x的值减1。
(3)+x:
先将x的值加1,再引用变量x。
(4)-x:
先将x的值减1,再引用变量x。
4.4.算术表达式算术表达式算术表达式是由算术运算符和括号连接起来的式子,例如,x+y(x+y)/z*5(a+b+c)/(sqrt(x)+y*sin(x)在C语言的算术表达式中,所有的字符都是在一条水平线上的,没有上标、下标之分;代数式中的乘号运算在算术表达式中用“*”号表示;代数式中使用的圆括号、方括号、大括号,在算术表达式中一律用圆括号,如遇到多重括号,由内向外逐层计算。
3.4运算符与表达式3.4.23.4.2赋值运算符与赋值表达式赋值运算符与赋值表达式1.1.赋值运算符和赋值表达式赋值运算符和赋值表达式简单赋值运算符和表达式:
简单赋值运算符记为“=”。
由“=”连接的式子称为赋值表达式。
其一般形式为:
变量=表达式赋值表达式的功能是将赋值运算符右边表达式的值赋给其左边的变量。
赋值号左边是变量名,右边必须是合法的C语言表达式。
赋值运算符具有右结合性。
例如,a=b=c=5可理解为a=(b=(c=5)。
在其他高级语言中,赋值构成了一个语句,称为赋值语句。
而在C语言中,把“=”定义为运算符,从而组成赋值表达式。
例如,x=(y=3)+(z=8)是合法的。
它的意义是把3赋予x,8赋予z,再把y和z相加的结果赋给x,故x应等于11。
在C语言中,也可以组成赋值语句,按照C语言规定,任何表达式在其未尾加上分号就构成为语句,如x=8;与a=b=c=5;都是赋值语句。
3.4运算符与表达式注意:
(1)赋值运算符的优先级别只高于逗号运算符,比其他任何运算符的优先级别都低,且具有自右向左的结合性。
(2)赋值运算符不同于数学中的“等于号”,这里不是等同的关系,而是进行“赋予”的操作。
(3)赋值表达式x=y的作用是,将变量y所代表的存储单元中的内容赋给变量x所代表的存储单元,x中原有的数据被替换掉,赋值后y变量中的内容保持不变。
(4)赋值运算符的左侧只能是变量,不能是常量或者表达式,如x+y=z是不合法的。
(5)赋值号右侧的表达式也可以是一个赋值表达式,如a=b=7+1,按照运算符的优先级,以上表达式先计算出7+1的值是8;按照赋值运算符自右向左的结合性,将先把8赋给变量b,然后再把变量b的值赋给变量a,而a=7+1=b是不合法的,因为7+1=b是不合法的赋值表达式。
(6)将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式的形式出现在其他语句中,如printf(%dn,a=b);如果b的值为1,则输出a的值也为1。
在一个语句中完成了赋值输出双重功能,这是C语言灵活性的一种表现。
3.4运算符与表达式2.2.类型转换类型转换如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。
具体规定如下:
(1)实型赋予整型,舍去小数部分。
(2)整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。
(3)字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。
(4)整型赋予字符型,只把低八位赋予字符量。
注意:
(1)当赋值号左边的变量为短整型,右边的值为长整型时,短整型变量只能接受长整型数最低位上的两个字节中的数据,高位上的两个字节的数据将丢失。
(2)当赋值号左边的变量为有符号整型,右边的值为无符号整型时,赋值的规则同上。
这时若最高位是1,将按负数处理。
3.4运算符与表达式3.3.复合赋值运算符复合赋值运算符为了简化程序并提高编译效率,C语言允许在赋值运算符“=”之前加其他运算符,以构成复合运算符。
如果在“=”之前加算术运算符,则构成算术复合运算符;如果在“=”之前加位运算符,则构成位复合赋值运算符。
算术复合赋值运算符的一般形式为:
变量双目运算符=表达式它等效于:
变量=变量运算符表达式例如,x+=y;/等价于x=x+yx-=y;/等价于x=x-yx*=y+3;/等价于x=x*(y+3)显然,复合运算符右边的表达式是一个运算整体,不能把它们分开,如不能将“x*=y+3”理解为“x=x*y+3”。
凡是双目运算符,都可以与赋值运算符一起组合成复合赋值运算符。
在C语言中,可以使用的合法复合赋值运算符有:
+=、-=、*=、/=、%=、=、&=、=、|=等。
3.4运算符与表达式3.4.33.4.3逗号运算符与逗号表达式逗号运算符与逗号表达式在C语言中,“,”也是一种运
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 大学 课程 语言程序设计 PPT 课件 第三