[计算机软件及应用]《c语言程序设计与数据结构》第2章 数据类型、运算符与表达式_第1页
[计算机软件及应用]《c语言程序设计与数据结构》第2章 数据类型、运算符与表达式_第2页
[计算机软件及应用]《c语言程序设计与数据结构》第2章 数据类型、运算符与表达式_第3页
[计算机软件及应用]《c语言程序设计与数据结构》第2章 数据类型、运算符与表达式_第4页
[计算机软件及应用]《c语言程序设计与数据结构》第2章 数据类型、运算符与表达式_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计与数据结构,C语言程序设计与数据结构,第二章 数据类型、运算符与表达式,学习重点:数据类型的种类;常量与变量的区别及表式形式;运算符的优先级及结合性;各种数据类型之间的相互转换。,C语言程序设计与数据结构,2.1 语言的数据类型,在各种程序设计中几乎都要使用和处理数据,程序设计的过程就是对数据加工的过程。一种语言支持的数据类型越丰富,它的功能就越强,应用范围就越广。对于程序中的数据,编译程序会为其分配一块内存空间存放;数据的改变其实就是指存储空间中内容的改变。但分配多大的内存空间来容纳这个数据合适呢?这可由数据的类型决定;另外对于数据的变化范围也可由数据类型来体现。数据类型将决定一个数据所占的内存数、数据的到值范围及可对数据进行的各种操作 。 C语言提供了丰富的数据类型,不仅能表达并处理诸如整数、实数、字符等基本类型的数据,还可以组织并处理复杂的数据结构(如链表、队列、树等)。在语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。,C语言程序设计与数据结构,2.2常量与变量,2.2.1 标识符 指用来标识变量名、符号常量名、函数名、数组名和文件名等的有效字符序列,简单说,标识符就是一个名字。C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。下面的标识符都是合法的: sum, mouth, PI, s123, area, name_1 下面的标识符都是不合法的: 45D, ab, day-1, m.m 标识符的命名规则:(1)不能与关健字相同。C语言规定了一批标识符,它们都有其固定的含义,不能另作它用,如:int、float、if、else、break、printf、define等。(2)标识符区分大小写。如:area和Area系统认为是两个不同的标识符。 (3)程序中使用的标识符应注意做到“见名知意”。命名时尽量选取具有相关含义的英文单词或汉语拼音,如:number2、area 、name等,以增加程序的可读性。,C语言程序设计与数据结构,2.2.2 常量C语言中的数据有常量和变量之分,它们都属于2.1节中所列出的数据类型。在程序运行过程中,其值不发生变化的量称为常量。根据表示形式的不同,常量又可分为直接常量和符号常量。1. 直接常量直接常量又称为字面常量,就是人们通常所说的常数,单从字面形式即可判断出数据属于哪一种数据类型。例如:很容易判断出456是整型常量,4.6是实型常量,b是字符型常量等等,本章后面几个小节中还要详讲。【例2.1】下列程序运行后的输出结果为 。main( ) char m; m=B+32; /*这里的B是直接常量*/ printf(“%c”,m); 运行结果为:a,C语言程序设计与数据结构,2. 符号常量符号常量是指用标识符来代表一个常量,即标识符形式的常量。在程序中的使用方式如下:#define 标识符 常量数据如:#define PI 3.1415926这样,在程序中凡是出现的大写字母PI,计算机会全部将它替换为3.1415926。习惯上,符号常量名采用大写,变量名用小写,以示区别。但符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。采用符号常量的优点如下:(1)含义清楚。在定义符号常量时尽量做到“见名知意”,如在程序中看到符号常量PRICE就可知道它代表一个价格数据。(2)在需要改变一个常量时能做到“一改全改”。在程序中多次用到某商品价格,可用PRICE代表;当价格需调整时,若用符号常量PRICE代表价格,则只需改动一处即可。,C语言程序设计与数据结构,【例2.2】 输入一个半径值,分别计算其圆面积。#define PI 3.1415926 /*定义一个符号常量PI*/main( )double r,s; /*定义实型变量r,s */printf(“Input radius: ”);scanf(“%f”, 运行结果为:Input a radius: 3 s=28.274333,C语言程序设计与数据结构,2.2.3变量变量是指在程序执行过程中其值可以改变的量。每个变量都有一个名字,称为变量名;每个变量在计算机内存中都占据一定的存储单元,存储单元中存放的数据称作变量值。请注意区分变量名和变量值这两个不同的概念。变量名实际上是一个符号地址,对应着存储单元的编号;而变量值则是存储单元里存放的具体数据。变量名是用户自己指定的,如float b中的b就是用户指定的变量名,变量名的命名规则应遵守标识符的命名规则。事实上,程序中通过变量名使用该变量,实际上就是对它的值的使用。 1. 变量的声明C语言规定在程序中用到的每一个变量都应该先定义后使用。变量的声明也称为变量的定义,通过声明确定变量中存放的数据属于哪一种数据类型。这样做的优点是:(1) 正确使用变量名。凡事先未被定义的名字,不能作为变量名,这就保证了程序中变量名的一致性。例如,在程序的数据定义部分用语句float area; 定义了变量area,而在以后的语句中如果错写成了srea=3.14*r*r; 在编译时就会提示srea没有定义,很容易就能发现错误所在。,C语言程序设计与数据结构,(2) 合理使用内存。不同类型的数据所占的存储单元数量是不同的,每一个变量根据实际需要被声明为一确定类型之后,在编译时就能获得相应数量的存储单元。(3) 能够进行合法运算。一种数据类型对应着一组允许的操作。如实数不能进行求余运算,字符串不能进行乘除等。通过变量的声明定义了类型以后,如果不小心在程序语句中含有非法运算,编译系统会提示错误信息。声明变量的语句形式为: 数据类型 变量名1,变量名2,;例如: int count; float r,area;2、变量的初始化变量的初始化是指在声明变量的同时就给它赋一个初值。C语言允许对变量进行初始化,变量初始化的语句形式是:变量类型 变量名1=初值1,变量名2=初值2,; 如:int count=1, xh=1; 也可以只给被定义的变量中的一部分赋初值,如:float r=4.5 ,n,y=7; /*r的初值为4.5,y的初值为7 */ 用赋初值的方法使变量在一开始就得到一个初值,使程序简练,提高了程序的可读性 。,C语言程序设计与数据结构,、 变量赋值变量的赋值是指把一个数据传送到系统给变量分配的存储单元中存放。在定义一个变量时,系统自动根据变量类型为其分配存储空间;但是当此变量在定义时没有初始化,其变量值就是一个无法预料、没有意义的值。所以,通常都要给变量赋一个有意义的值。C语言中的赋值操作由赋值运算符“=”来完成,一般形式为: 变量=表达式;例如:x=100; y=x+5; 说明:(1) “=”在C语言中是赋值符号,不是等于号。C语言中的等于号是用双等号“= =”表示。(2)程序中可多次给同一个变量赋值。多次赋值后,变量中存放的是最后一次所赋的那个数。(3) 赋值运算符左侧只能是变量名,不能是常量或表达式。如:x+y=c是不合法的赋值表达式。(4) 赋值运算是把“=”号右边表达式的值赋给“=”号左边的变量。因此,象a=a+1这样的在数学中认为是不成立的表达式,在C语言中却是认可的,它表示将a原来的值加上1之后再赋给a。(5) 允许辗转赋值。即允许一个表达式中包含多个“=”号。例如: int x,y,z; x=y=z=1;是先把1赋给变量z,再把z的值即1赋给变量y,最后将y的值即1赋给变量x。3,C语言程序设计与数据结构,2.3 整数类型,2.3.1 整型常量整型常量也叫整常数。在C语言中可以用下面三种形式表示:1. 十进制整数。十进制整常数没有前缀,其数码为09。如:25,-103,0等。2. 八进制整数。八进制整常数以0作为八进制数的前缀,数码取值为07。如:041表示八进制的41,即等于十进制的33;-017表示八进制的-17,即等于十进制的-15。3. 十六进制数。十六进制整常数以0X或0x的前缀,其数码取值为09,AF或af。如0x64表示十六进制的64,即等于十进制的100;-0x1c表示十六进制的-1c,即等于十进制的-28。在程序中是根据前缀来区分各种进制整数的,因此在书写常数时不要把前缀弄错以免造成结果不正确。对于上述整数的表示,若在数据的末尾加后缀字母l或L,则称为长整数。如25L,0xd3l等。长整数所能表示的数的范围更大 。,C语言程序设计与数据结构,2.3.2 整型变量整型变量可分为:基本型:类型说明符为int,在内存中占2个字节。短整量:类型说明符为short int或short,所占字节和取值范围均与基本型相同。长整型:类型说明符为long int或long,在内存中占4个字节。例如: int a,b,c; (a,b,c为整型变量) long x,y; (x,y为长整型变量)在书写变量定义时,应注意以下几点:(1)允许在一个类型说明符后,定义多个相同类型的变量。各变量名之间用逗号间隔;类型说明符与变量名之间至少用一个空格间隔。(2)最后一个变量名之后必须以“;”号结尾。(3)变量定义必须放在变量使用之前。一般放在函数体的开头部分。C语言对不同类型的数据分配不同长度的存储空间并按二进制进行存储。因此,不同类型的数据所能表示的取值范围不同。在内存中存储数据时,一般把最高位当作符号位,该位为0表示正数,为1表示负数;计算机在判断一个数的正负时,就是根据最高位进行的。,C语言程序设计与数据结构,通常short型和int型数据都占2字节(即16位二进制)的存储空间,所以其取值范围为-215+215-1,即十进制的-32768+32767。如果超出这个范围,可采用long型(长整型)。long型数据占4字节(即32位二进制)的存储空间,所以其取值范围为-231+231-1,即十进制的-2147483648+2147483647。 C语言还允许使用无符号整数(unsigned),这时,最高位不再是符号位,而视为数据位,即该数在存储单元中的全部二进制位都是数本身,而不包括符号。与有着同样长度的有符号(signed)数相比,所能表示的最大值增加了一倍。但由于省去了符号位,故不能表示负数。 与整数的分类相似,无符号数又分为无符号整数(unsigned int)、无符号短整数(unsigned short)以及无符号长整数(unsigned long)。对于无符号整数和无符号长整数,相应的取值范围分别是:065535,04294967295 。,C语言程序设计与数据结构,2.4 实数类型,2.4.1 实型常量实型常量又称为实数。在语言中,实数只采用十进制表示,它有二种形式:十进制小数形式或十进制指数形式。1. 十进制小数形式。它由数字和小数点组成。如:0.618, 0.0,456.13等。小数点是必须有的,即使我们给定的实数没有小数点,计算机也会自动加上小数点的。2. 十进制指数形式。由十进制数,加阶码标志“e”或“E”及阶码组成。其一般形式为:a E n(a为十进制数,n为十进制整数,其值大小为 a*10n)如:2.1E5 (等于2.1*105)3.7E-2 (等于3.7*10-2)【例2.3】以下符合C语言语法的实型常量是( )。 A)1.2E0.5 B)3.1415E C).5E-3 D)E15正确答案为: C,C语言程序设计与数据结构,2.4.2 实型变量 C语言中的实型变量分为单精度和双精度两类,分别用类型名float和double进行定义;且只能表示有符号的十进制数。在内存中单精度型数据占4个字节(32位)内存空间,其数值范围为3.4E-383.4E+38,只能提供七位有效数字。双精度型数据占8 个字节(64位)内存空间,其数值范围为1.7E-3081.7E+308,可提供16位有效数字。小数部分占的位数愈多,数的有效数字愈多,精度愈高。而实型常数不分单、双精度类型,都按双精度double型处理 。,C语言程序设计与数据结构,2.5 字符类型,字符型数据包括字符常量和字符变量。2.5.1 字符型常量字符常量是用单引号括起来的单个字符。例如:a、b、=、+、7都是合法的字符常量。在语言中,字符常量有以下特点:(1)字符常量只能用单引号括起来,不能用双引号或其它括号。(2)字符常量只能是单个字符,不能是字符串。(3)字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如5和5 是不同的。5是字符常量,不能参与运算。(4)单撇号只起到字符常量定界符的作用,它本身并非字符常量的一部分,当输出一个字符常量时不输出单撇号。除了以上形式的字符常量外,C语言还允许使用一种以”开头的特殊形式的字符常量。这种字符常量称为转义字符。为转义字符是一种特殊的字符常量,以反斜线开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在前面各例题printf函数的格式串中用到的“n”就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。,C语言程序设计与数据结构,例如,因为单撇号本身不能作为字符常量,即char x=; 是错误的。应该写成:char x=;这样就能够把单撇号作为字符常量赋给字符变量x。常用的以反斜杠开头的转义字符如表2-1所示。 表2-1 常用转义字符,C语言程序设计与数据结构,【例2.4】转义字符的使用。main() int a,b,c; a=5; b=6; c=7; printf(“ ab ctderfn”);顺便指出,用双引号括起来的字符序列称为字符串常量,如“I like C program.”,“a”等。注意a和“a”是不同的。例如char x=a;是正确的,而char x=“a”;则是错误的。原因是在存储字符串“a”时,不但存储字符a还要存储字符0,这是C系统自动添加进去的。字符常量和字符串常量之间主要有以下区别:(1)字符常量由单引号括起来,字符串常量由双引号括起来。(2)字符常量只能是单个字符,字符串常量则可以含一个或多个字符。(3)字符常量占一个字节的内存空间;字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符0 (ASCII码为0)。这是字符串结束的标志。有关字符串的知识在后面的数组部分还要详细讲解。,C语言程序设计与数据结构,2.5.2 字符型变量字符型变量用来存放字符常量,即存放单个字符。字符型变量的定义形式如下:char 变量名1,变量名2,;如char c1,c2;表示c1和c2为字符型变量,都可以存放一个字符,可以用赋值语句对c1、c2 赋值。如:c1=A;c2=B; 字符型数据在在内存中占1个字节(即8位二进制位)的存储空间,所以其取值范围为-27+27-1,即十进制的-128+127。字符型数据也分为有符号和无符号。对于无符号数,相应的取值范围是:0255。每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中。C语言中的字符一律以其ASCII码的形式存储在内存单元中。ASCII码是以7位二进制的编码表示一个字符,允许范围为0127,第8位补零。如字符A的ASCII码为65,相对应的二进制数为1000001,在内存中存为:,C语言程序设计与数据结构,字符数据在内存中以ASCII码形式存储,所以可以把字符数据看成是整型量。语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。【例2.5】向字符变量赋以整数。 main() char j , m; j=88; m=89; printf(%c,%cnj,m); printf(%d,%dn,j,m); 程序的输出结果为: X,Y 88,89 本程序中定义a,b为字符型,但在赋值语句中赋以整型值。从结果看,a,b值的输出形式取决于printf函数格式串中的格式符,当格式符为“c”时,对应输出的变量值为字符,当格式符为“d”时,对应输出的变量值为整数 。,C语言程序设计与数据结构,语言允许字符变量参与数值运算,即用字符数据的ASCII 码值参与运算。由于大小写字母的ASCII 码相差32,因此通过运算可以把小写字母换成大写字母,也可以将大写字母转为小写字母。【例2.6】 大写字母转换为小写字母。main( ) char a1,a2; a1=X; a2=Y;a1=a1+32;a2=a2+32;printf(“%c,%c”,a1,a2);程序的输出结果为: x, y,C语言程序设计与数据结构,2.6 运算符与表达式,所谓运算是按照某种规则对数据进行计算。运算符是用来表示数据操作的符号。C语言提供了丰富的运算符,如算术运算符、关系运算符、逻辑运算符、赋值运算符、条件运算符、逗号运算符、指针运算符、强制类型转换运算符等等。本节主要介绍算术运算符、赋值运算符、自加自减运算符和强制类型转换运算符等,其它运算符的使用在后续章节中将陆续介绍。 表达式是用运算符将常量、变量、函数等连接起来的式子。本节重点介绍C语言中算术表达式、赋值表达式、自加自减表达式的功能、结合方向以及优先级 。,C语言程序设计与数据结构,2.6.1 算术运算符和算术表达式1. 算术运算符C语言提供的算术运算符及功能如下: + 加法运算符。如:21.4+18 - 减法运算符。如::6-3 * 乘法运算符。如:14*1.9。 / 除法运算符。如:5/3。注意:两个整型数相除,结果商仍为整数,其中只要有一个实数,结果即为实型。如23/5的结果为4,直接舍去小数部分;而13/7.0的结果为1.857143。所以对除法运算要特别注意数据类型。 % 模运算符或取余运算符。运算时要求%的两侧必须为整型数据。如23%15,12%9都是正确的;而33%2.5,18.0%7.0都是错误的表示。以上运算符进行运算时需要两个运算对象,所以称它们为双目运算符。另外,+和-也可用作单目运算符,出现在运算量的左边,称为正值或负值运算符。如:-67,+78.4。【例2.7】 C语言中下列运算对象必须是整型的运算符是( )。 A) % B)/ C)+ D)= 正确答案为:A,C语言程序设计与数据结构,C语言规定了运算符的优先级和结合方向。其中算术运算符和圆括号的优先级高低次序如下:()、+、-、*、/、%、+、- (由高向低)以上所列的运算符中,单目运算符“-”和“-”是同级别的,“*、/、%”是同级别的,“+、-”是同级别的。单目运算符“-”和“-”的结合性是从右到左,其余运算符的结合性都是从左到右。2. 算术表达式用算术运算符和括号将数据对象(如常量、变量、函数等)连接起来的式子,称为算术表达式。以下是算术表达式的例子:a+c(b*2)c(x+r)*8-(a+b)7sin(x)+sin(y) 表达式的运算按照运算符的结合方向和优先级进行。在表达式求值时,先按运算符的优先级执行,优先级高的先执行,例如先乘除、后加减。优先级相同的则按照C语言规定的结合方向(从左向右或从右向左)进行。如果想让优先级低的先进行运算,可以使用小括号“( )”,小括号具有最高的优先级。,C语言程序设计与数据结构,262赋值运算符和赋值表达式1.简单的赋值运算符和赋值表达式简单赋值运算符记为“=”,由“= ”连接的式子称为赋值表达式。其一般形式为:变量=表达式例如: x=a+4 y=sin(a)+x赋值表达式的功能是计算右边表达式的值,然后把值赋给左边的变量。对于初学者来说,只要记住赋值号左边必须是变量名,不能为常量或表达式,右边必须是C语言中合法的表达式。 说明:(1)赋值运算符的优先级只高于逗号运算符,比其它运算符的优先级都低。如:b=2+7/3,则变量b中存放的数值为4。(2)(2)赋值运算符的左边只能是变量,不能是常量或表达式。如:a+b=7不合法。(3)(3)赋值运算符不同于数学中的“等于号”。如:n=n+1是一个合法的赋值表达式,其使用是取变量n中的值加1后再放入到变量n中存放。 (4)赋值运算符右边的表达式也可以是一个赋值表达式。如:b=c=7*2 。,C语言程序设计与数据结构,【例2.8】以下选项中非法的表达式是( )。A)0=x100 B) I=j=0 C) n=n+1 D) x+1=y*3正确答案为:D2.复合的赋值运算符和表达式在赋值运算符“=”之前加上其它双目运算符可以构成复合赋值符。其中与算术运算有关的复合运算符为: +=、- =、*=、=、%= (注意:两个符号之间不能有空格)。构成复合赋值表达式的一般形式为:变量名 双目运算符=表达式它等效于:变量=变量 运算符 表达式例如: a+=5 等价于a=a+5 x*=y+7 等价于x=x*(y+7)可以看出,复合的赋值运算符只是一种简化了的书写方式,其结合方向与赋值运算符一样,为“自右向左”。例如表达式: c=b*=a+3;相当于b=b*(a+3);c=b;两个表达式。另外,复合赋值运算符的优先级与赋值运算符属于同一级别。【例2.9】若有语句int=5; 则执行语句 a+=a*=10; 后 ,a 的值是_100_ 。,C语言程序设计与数据结构,2.6.3 自加自减运算符与表达式 1、自加、自减运算符自加运算符与自减运算符是C语言所特有的,主要用于给一个变量加1或减1。自加运算符记为:“+”,其功能是使变量的值自增1。自减运算符记为:“-”,其功能是使变量值自减1。自加自减运算符均为单目运算,都具有右结合性,可有以下几种形式:+i i自增1后,再参与其它运算。i + i参与运算后,i的值再自增1。- i i自减1后再参与其它运算。i - i参与运算后,i的值再自减1。其中i+和i- -称为后缀形式,+i和- -i称为前缀形式。说明:(1) 自加自减运算符只能用于变量的运算,而不能用于常量或表达式。如: 6+、- -2、(x+y)+都是不合法的。(2(2)当i+和+i作为独立的语句时,两者并无区别,都等价于i=i+1。 同理,当i- -和- -i作为独立的语句时,两者也无区别,都等价于i=i-1。(3) 当i+和+i不是以单独的语句出现时(例如出现在表达式中),两者有着本质的区别。i+是i先参与运算后,i的值再自增1;而+i是i先自加1,然后再参与运算。,C语言程序设计与数据结构,【例 2.10】设有 int x=11; 则表达式 (x+*1 /3) 的值是_ 。 (A)3 (B) 4 (C) 11 (D)12正确答案为:A2逗号运算符和逗号表达式 语言提供了一种特殊的运算符,逗号运算符“,”。逗号运算符的结合方向是“从左向右”,它的优先级是所有运算符中最低的。用逗号运算符连接起来的表达式称为逗号表达式,它的一般形式为:表达式1,表达式2,表达式n;其求值过程是从左到右分别求各个表达式的值

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论