谭浩强C教程课程学习.pptx

上传人:一*** 文档编号:72003413 上传时间:2023-02-08 格式:PPTX 页数:72 大小:536.61KB
返回 下载 相关 举报
谭浩强C教程课程学习.pptx_第1页
第1页 / 共72页
谭浩强C教程课程学习.pptx_第2页
第2页 / 共72页
点击查看更多>>
资源描述

《谭浩强C教程课程学习.pptx》由会员分享,可在线阅读,更多相关《谭浩强C教程课程学习.pptx(72页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、会计学1谭浩强谭浩强C教程教程(jiochng)第一页,共72页。数据类型数据类型(lixng)(lixng)基本类型基本类型(lixng)(lixng)整型整型短整型短整型(short int)(short int)整型整型(int)(int)长整型长整型(long int)(long int)字符型字符型(char)(char)浮点型浮点型单精度型单精度型(float)(float)双精度型双精度型(double)(double)长双精度型长双精度型(long double)(long double)布尔型布尔型(bool)(bool)构造类型构造类型(lixng)(lixng)枚举类型枚

2、举类型(lixng)(enum)(lixng)(enum)数组类型数组类型(lixng)(lixng)结构体类型结构体类型(lixng)(struct)(lixng)(struct)共用体类型共用体类型(lixng)(union)(lixng)(union)类类型类类型(lixng)(class)(lixng)(class)指针类型指针类型(lixng)(lixng)引用类型引用类型(lixng)(lixng)空类型空类型(lixng)(void)(lixng)(void)布尔型就是逻辑型,空类型布尔型就是逻辑型,空类型(lixng)(lixng)就是无值型。就是无值型。第2页/共72页第二页

3、,共72页。C+的数据包括常量与变量,常量与变量都具有类型。由以上这些数据类型还可以构成(guchng)更复杂的数据结构。例如利用指针和结构体类型可以构成(guchng)表、树、栈等复杂的数据结构。C+并没有统一规定各类数据的精度、数值范围和在内存中所占的字节数,各C+编译系统根据自己的情况作出安排。书中表2.1列出了Visual C+数值型和字符型数据的情况。第3页/共72页第三页,共72页。说明:(1)整型数据分为长整型(long int)、一般整型(int)和短整型(short int)。在int前面加long和short分别表示(biosh)长整型和短整型。(2)整型数据的存储方式为按

4、二进制数形式存储,例如十进制整数85的二进制形式为1010101,则在内存中的存储形式如图2.1所示。图2.1第4页/共72页第四页,共72页。(3)在整型符号int和字符型符号char的前面,可以加修饰符signed(表示“有符号”)或unsigned(表示“无符号”)。如果指定为signed,则数值以补码形式存放,存储单元中的最高位(bit)用来表示数值的符号。如果指定为unsigned,则数值没有符号,全部二进制位都用来表示数值本身(bnshn)。例如短整型数据占两个字节,见图2.2。图2.2第5页/共72页第五页,共72页。有符号时,能存储的最大值为215-1,即32767,最小值为-

5、32768。无符号时,能存储的最大值为216-1,即65535,最小值为0。有些数据是没有负值的,可以使用unsigned,它存储正数的范围比用signed时要大一倍。(4)浮点型(又称实型)数据分为单精度(jn d)(float)、双精度(jn d)(double)和长双精度(jn d)(long double)3种,在Visual C+6.0中,对float提供6位有效数字,对double提供15位有效数字,并且float和double的数值范围不同。对float分配4个字节,对double和long double分配8个字节。(5)表中类型标识符一栏中,方括号 包含的部分可以省写,如sh

6、ort和short int等效,unsigned int和unsigned等效。第6页/共72页第六页,共72页。常量的值是不能改变的,一般从其字面(zmin)形式即可判别是否为常量。常量包括两大类,即数值型常量(即常数)和字符型常量。如12,0,-3为整型常量,4.6,-1.23为实型常量,包含在两个单撇号之间的字符为字符常量,如a,x。这种从字面(zmin)形式即可识别的常量称为“字面(zmin)常量”或“直接常量”。2.2 2.2 常量常量常量常量(chngling)(chngling)2.2.1 2.2.1 什么是常量什么是常量什么是常量什么是常量(chngling)(chngling

7、)第7页/共72页第七页,共72页。数值常量就是通常所说的常数(chngsh)。在C+中,数值常量是区分类型的,从字面形式即可识别其类型。1.整型常量(整数)的类型在上一节中已知道:整型数据可分为int,short int,long int以及unsigned int,unsigned short,unsigned long等类别。整型常量也分为以上类别。为什么将数值常量区分为不同的类别呢?因为在进行赋值或函数的参数虚实结合时要求数据类型匹配。那么,一个整型常量怎样从字面上区分为以上的类别呢?2.2.2 2.2.2 数值数值数值数值(shz)(shz)常量常量常量常量第8页/共72页第八页,共

8、72页。(1)一个整数,如果其值在-32768+32767范围内,认为它是short int型,它可以赋值给short int型、int型和long int型变量(binling)。(2)一个整数,如果其值超过了上述范围,而在-2147483648+2147483647范围内,则认为它是long int型,可以将它赋值给一个int或long int型变量(binling)。(3)如果某一计算机系统的C+版本(例如Visual C+)确定int与long int型数据在内存中占据的长度相同,则它们能够表示的数值的范围相同。因此,一个int型的常量也同时是一个long int型常量,可以赋给型或l

9、ong int型变量(binling)。(4)常量无unsigned型。但一个非负值的整数可以赋值给unsigned整型变量(binling),只要它的范围不超过变量(binling)的取值范围即可。第9页/共72页第九页,共72页。一个整型常量可以用3种不同的方式表示:(1)十进制整数。如1357,-432,0等。在一个整型常量后面加一个字母l或L,则认为是long int型常量。例如123L,421L,0L等,这往往用于函数调用中。如果函数的形参为long int,则要求实参也为long int型,此时用123作实参不行,而要用123L作实参。(2)八进制整数。在常数的开头加一个数字0,就

10、表示这是以八进制数形式(xngsh)表示的常数。如020表示这是八进制数20,即(20)8,它相当于十进制数16。(3)十六进制整数。在常数的开头加一个数字0和一个英文字母X(或x),就表示这是以十六进制数形式(xngsh)表示的常数。如0X20表示这是十六进制数20,即(20)16,它相当于十进制数32。第10页/共72页第十页,共72页。2.浮点数的表示方法一个浮点数可以(ky)用两种不同的方式表示:(1)十进制小数形式。如21.456,-7.98等。它一般由整数部分和小数部分组成,可以(ky)省略其中之一(如78.或.06,.0),但不能二者皆省略。C+编译系统把用这种形式表示的浮点数一

11、律按双精度常量处理,在内存中占8个字节。如果在实数的数字之后加字母F或f,表示此数为单精度浮点数,如1234F,-43f,占4个字节。如果加字母L或l,表示此数为长双精度数(long double),在GCC中占12个字节,在Visual C+6.0中占8个字节。第11页/共72页第十一页,共72页。(2)指数形式(即浮点形式)一个浮点数可以写成指数形式,如3.14159可以表示为0.314159101,3.14159100,31.415910-1,314.15910-2等形式。在程序中应表示为:0.314159e1,3.14159e0,31.4159e-1,314.159e-2,用字母e表示

12、其后的数是以10为底的幂,如e12表示1012。其一般形式为数符 数字部分 指数部分上面各数据中的0.314159,3.14159,31.4159,314.159 等就是(jish)其中的数字部分。可以看到:由于指数部分的存在,使得同一个浮点数可以用不同的指数形式来表示,数字部分中小数点的位置是浮动的。例如:第12页/共72页第十二页,共72页。a=0.314159e1;a=0.314159e1;a=3.14159e0;a=3.14159e0;a=31.4159e-1;a=31.4159e-1;a=314.159e-2;a=314.159e-2;以上以上4 4个赋值语句个赋值语句(y(y j)

13、j)中,用了不同形式的浮点数,但其作用是中,用了不同形式的浮点数,但其作用是相同的。相同的。在程序中不论把浮点数写成小数形式还是指数形式,在内存中都在程序中不论把浮点数写成小数形式还是指数形式,在内存中都是以指数形式是以指数形式(即浮点形式即浮点形式)存储的。例如不论在程序中写成存储的。例如不论在程序中写成314.159314.159或或314.159e0314.159e0,31.4159e131.4159e1,3.14159e2,0.314159e33.14159e2,0.314159e3等形式,在等形式,在内存中都是以规范化的指数形式存放,如图内存中都是以规范化的指数形式存放,如图2.32

14、.3所示。所示。图图2.32.3第13页/共72页第十三页,共72页。数字部分必须小于1,同时,小数点后面第一个数字必须是一个非0数字,例如不能是0.0314159。因此(ync)314.159和314.159e0,31.4159e1,3.14159e2,0.314159e3在内存中表示成0.314159103。存储单元分为两部分,一部分用来存放数字部分,一部分用来存放指数部分。为便于理解,在图2.3中是用十进制表示的,实际上在存储单元中是用二进制数来表示小数部分,用2的幂次来表示指数部分的。对于以指数形式表示的数值常量,也都作为双精度常量处理。第14页/共72页第十四页,共72页。1.普通的

15、字符常量用单撇号括起来的一个字符就是字符型常量。如a,#,%,D都是合法的字符常量,在内存中占一个字节。注意:字符常量只能包括一个字符,如AB 是不合法的。字符常量区分大小写字母(zm),如A和a是两个不同的字符常量。撇号()是定界符,而不属于字符常量的一部分。如couta;输出的是一个字母(zm)“a”,而不是3个字符“a”。2.2.3 2.2.3 字符字符字符字符(z f)(z f)常量常量常量常量第15页/共72页第十五页,共72页。2.转义字符(z f)常量除了以上形式的字符(z f)常量外,C+还允许用一种特殊形式的字符(z f)常量,就是以“”开头的字符(z f)序列。例如,n代表

16、一个“换行”符。“coutn;”将输出一个换行,其作用与“coutendl;”相同。这种“控制字符(z f)”,在屏幕上是不能显示的。在程序中也无法用一个一般形式的字符(z f)表示,只能采用特殊形式来表示。常用的以“”开头的特殊字符(z f)见书中表2.2。第16页/共72页第十六页,共72页。3.字符数据(shj)在内存中的存储形式及其使用方法将一个字符常量存放到内存单元时,实际上并不是把该字符本身放到内存单元中去,而是将该字符相应的ASCII代码放到存储单元中。如果字符变量c1的值为a,c2的值为b,则在变量中存放的是a的ASCII码97,b 的ASCII码98,如图2.4(a)所示,实

17、际上在内存中是以二进制形式存放的,如图2.4(b)所示。图2.4第17页/共72页第十七页,共72页。既然既然(jrn)(jrn)字符数据是以字符数据是以ASCIIASCII码存储的,它的存储形式就与码存储的,它的存储形式就与整数的存储形式类似。这样,在整数的存储形式类似。这样,在C+C+中字符型数据和整型数据中字符型数据和整型数据之间就可以通用。一个字符数据可以赋给一个整型变量,反之,之间就可以通用。一个字符数据可以赋给一个整型变量,反之,一个整型数据也可以赋给一个字符变量。也可以对字符数据进一个整型数据也可以赋给一个字符变量。也可以对字符数据进行算术运算,此时相当于对它们的行算术运算,此时

18、相当于对它们的ASCIIASCII码进行算术运算。码进行算术运算。例例2.1 2.1 将字符赋给整型变量。将字符赋给整型变量。#include#include using namespace std;using namespace std;int main()int main()int i,j;/i int i,j;/i和和j j是整型变量是整型变量i=A;/i=A;/将一个字符常量赋给整型变量将一个字符常量赋给整型变量i ij=B;/j=B;/将一个字符常量赋给整型变量将一个字符常量赋给整型变量j jcouti jcouti jn;/n;/输出整型变量输出整型变量i i和和j j的值,的值,

19、n n 是换是换行符行符return 0;return 0;第18页/共72页第十八页,共72页。执行时输出 65 66i和j被指定为整型变量。但在第5和第6行中,将字符A和B分别赋给i和j,它的作用相当于以下两个赋值语句:i65;j66;因为A和B的ASCII码为65和66。在程序的第5和第6行是把65和66直接存放到i和j的内存单元中。因此输出65和66。可以看到:在一定条件下,字符型数据和整型数据是可以通用的。但是应注意(zh y)字符数据只占一个字节,它只能存放0255范围内的整数。第19页/共72页第十九页,共72页。例例2.2 2.2 字符数据与整数字符数据与整数(zhngsh)(

20、zhngsh)进行算术运算。下进行算术运算。下面程序的作用是将小写字母转换为大写字母。面程序的作用是将小写字母转换为大写字母。#include#include using namespace std;using namespace std;int main()int main()char c1,c2;char c1,c2;c1=a;c1=a;c2=b;c2=b;c1=c1-32;c1=c1-32;c2=c2-32;c2=c2-32;coutc1 c2endl;coutc1 c2endl;return 0;return 0;第20页/共72页第二十页,共72页。运行(ynxng)结果为A Ba的

21、ASCII码为97,而A的ASCII码为65,b为98,B为66。从ASCII代码表中可以看到每一个小写字母比它相应的大写字母的ASCII代码大32。C+符数据与数值直接进行算术运算,a-32得到整数65,b-32得到整数66。将65和66存放在c1,c2中,由于c1,c2是字符变量,因此用cout输出c1,c2时,得到字符A和B(A的ASCII码为65,B的ASCII码为66)。第21页/共72页第二十一页,共72页。4.字符串常量用双撇号括起来的部分就是字符串常量,如abc,Hello!,a+b,Liping都是字符串常量。字符串常量abc在内存中占4个字节(而不是3个字节),见图2.5。

22、图2.5编译系统会在字符串最后自动(zdng)加一个0作为字符串结束标志。但0并不是字符串的一部分,它只作为字符串的结束标志。如 coutabcendl;输出3个字符abc,而不包括0。第22页/共72页第二十二页,共72页。注意:a和a代表不同的含义,a是字符串常量,a 是字符常量。前者占两个字节,后者占1个字节。请分析下面(xi mian)的程序片段:char c;/定义一个字符变量c=a;/正确c=a;/错误,c只能容纳一个字符字符串常量要用字符数组来存放,见第5章。请思考:字符串常量abcn包含几个字符?不是5个而是4个字符,其中“n”是一个转义字符。但它在内存中占5个字节(包括一个“

23、0”字符)。编译系统遇到“”时就会把它认作转义字符的标志,把它和其后的字符一起作为一个转义字符。第23页/共72页第二十三页,共72页。如果“”后面的字符不能与“”组成一个合法的转义字符(如c),则在编译(biny)时显示出错信息。如果希望将“”字符也作为字符串中的一个字符,则应写为abcn,此时字符包括5个字符,即a,b,c,n。如果有以下输出语句:coutabcnendl;则会输出:abc,然后换行。同理执行coutI say Thank you!n;的输出是:I say Thank you!如果在一个字符串中最后一个字符为“”,则表示它是续行符,下一行的字符是该字符串的一部分,且在两行字

24、符串间无空格。如第24页/共72页第二十四页,共72页。coutWe must study CcoutWe must study C /本行最后的本行最后的“”后面的空格和换行均不后面的空格和换行均不起作用起作用+hard!+hard!;/本行的字符紧连在上一行最后的本行的字符紧连在上一行最后的“”前面前面(qin(qin mian)mian)字符之后字符之后则输出则输出:We must study C+hard!We must study C+hard!第25页/共72页第二十五页,共72页。为了编程和阅读的方便,在为了编程和阅读的方便,在C+C+程序设计中,常用程序设计中,常用(chn(c

25、hn ynyn)一个符号名代表一个常量,称为符号常量,即以标识符一个符号名代表一个常量,称为符号常量,即以标识符形式出现的常量。形式出现的常量。例例2.3 2.3 符号常量的使用。符号常量的使用。#define PRICE 30 /#define PRICE 30 /注意这不是语句,末尾不要加分注意这不是语句,末尾不要加分号号int main()int main()int num int num,total;total;num=10;num=10;total=num*PRICE;total=num*PRICE;couttotal=totalendl;couttotal=totalendl;re

26、turn 0;return 0;2.2.4 2.2.4 符号符号符号符号(fho)(fho)常量常量常量常量第26页/共72页第二十六页,共72页。程序中用预处理命令#define指定PRICE在本程序单位中代表常量30,此后凡在本程序单位中出现的PRICE都代表30,可以和常量一样进行运算,程序运行结果为 total=300 请注意符号常量虽然有名字,但它不是变量。它的值在其作用域(在本例中为主函数)内是不能改变(gibin)的,也不能被赋值。如用赋值语句“PRICE=40;”给PRICE赋值是错误的。使用符号常量的好处是:(1)含义清楚。(2)在需要改变(gibin)一个常量时能做到“一改

27、全改”。如#define PRICE 35第27页/共72页第二十七页,共72页。其实在前面的例子中已经多次用到了变量(binling)。在程序运行期间其值可以改变的量称为变量(binling)。一个变量(binling)应该有一个名字,并在内存中占据一定的存储单元,在该存储单元中存放变量(binling)的值。请注意区分变量(binling)名和变量(binling)值这两个不同的概念,见图2.6。图2.6 2.3 2.3 变量变量变量变量(binling)(binling)2.3.1 2.3.1 什么是变量什么是变量什么是变量什么是变量(binling)(binling)第28页/共72页

28、第二十八页,共72页。先介绍标识符的概念。和其他高级语言一样(yyng),用来标识变量、符号常量、函数、数组、类型等实体名字的有效字符序列称为标识符(identifier)。简单地说,标识符就是一个名字。变量名是标识符的一种,变量的名字必须遵循标识符的命名规则。C+规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。下面列出的是合法的标识符,也是合法的变量名:sum,average,total,day,month,Student_name,tan,BASIC,li_ling下面是不合法的标识符和变量名:2.3.2 2.3.2 变量名规则变量名规则变量名规则变量名规则

29、(guz)(guz)第29页/共72页第二十九页,共72页。M.D.John,$123,#33,3G64,Ling li,C+,Zhang-ling,U.S.A.注意,在C+中,大写字母和小写字母被认为是两个不同的字符。因此(ync),sum和SUM是两个不同的变量名。一般地,变量名用小写字母表示,与人们日常习惯一致,以增加可读性。应注意变量名不能与C+的关键字、系统函数名和类名相同。在国外软件开发工作中,常习惯在变量前面加一个字母以表示该变量的类型,如iCount表示这是一个整型变量,cSex表示这是一个字符型变量。C+没有规定标识符的长度(字符个数),但各个具体的C编译系统都有自己的规定。

30、有的系统取32个字符,超过的字符不被识别。第30页/共72页第三十页,共72页。在C+语言中,要求对所有用到的变量作强制定义,也就是必须“先定义,后使用”,如例2.2和例2.3那样(nyng)。定义变量的一般形式是 变量类型 变量名表列;变量名表列指的是一个或多个变量名的序列。如float a,b,c,d,e;定义a,b,c,d,e为单精度型变量,注意各变量间以逗号分隔,最后是分号。可以在定义变量时指定它的初值。如 float a=83.5,b,c=64.5,d=81.2,e;/对变量a,c,d指定了初值,b和d未指定初值2.3.3 2.3.3 定义定义定义定义(dngy)(dngy)变量变量

31、变量变量第31页/共72页第三十一页,共72页。C语言要求变量的定义应该放在所有的执行语句之前,而C+则放松(fn sn)了限制,只要求在第一次使用该变量之前进行定义即可。也就是说,它可以出现在语句的中间,如int a;/定义变量a(在使用a之前定义)a=3;/执行语句,对a赋值float b;/定义变量b(在使用b之前定义)b=4.67;/执行语句,对b赋值char c;/定义变量c(在使用c之前定义)c=A;/执行语句,对c赋值C+要求对变量作强制定义的目的是:第32页/共72页第三十二页,共72页。(1)凡未被事先定义的,不作为变量名,这就能保证程序中变量名使用得正确。例如,如果在声明部

32、分写了int student;而在执行语句中错写成statent。如statent=30;在编译时检查出statent未经定义,作为错误处理。输出“变量statent未经声明”的信息,便于用户发现错误,避免变量名使用时出错。(2)每一个变量被指定为一确定类型,在编译时就能为其分配(fnpi)相应的存储单元。如指定和为int型,一般的编译系统对其各分配(fnpi)4个字节,并按整数方式存储数据。第33页/共72页第三十三页,共72页。(3)指定每一变量属于一个特定的类型,这就便于在编译时,据此检查该变量所进行(jnxng)的运算是否合法。例如,整型变量a和b,可以进行(jnxng)求余运算:a%

33、b是“求余”(见24 节),得到a/b的余数。如果将a和b指定为实型变量,则不允许进行(jnxng)“求余”运算,在编译时会给出有关的出错信息。第34页/共72页第三十四页,共72页。允许在定义变量时对它赋予一个初值,这称为变量初始化。初值可以是常量,也可以是一个有确定值的表达式。如float a,b=5.78*3.5,c=2*sin(2.0);表示定义了a,b,c为单精度浮点型变量,对b初始化为5.78*3,对c初始化为2*sin(2.0),在编译连接后,从标准函数库得到正弦函数sin(2.0)的值,因此变量c有确定的初值。变量a未初始化。如果对变量未赋初值,则该变量的初值是一个不可预测的值

34、,即该存储单元中当时的内容是不知道的。例如,若未对a和b赋值,执行(zhxng)输出语句2.3.4 2.3.4 为变量为变量为变量为变量(binling)(binling)赋初值赋初值赋初值赋初值 第35页/共72页第三十五页,共72页。couta b cendl;输出结果可能为1.48544e-38 15 1.81858 (各次运行情况可能不同)初始化不是在编译阶段完成的(只有在第4章中介绍的静态存储变量和外部变量的初始化是在编译阶段完成的),而是在程序运行时执行本函数时赋予初值的,相当于执行一个赋值语句。例如(lr),int a=3;相当于以下两个语句:int a;/指定为整型变量 a=3

35、;/赋值语句,将赋给 第36页/共72页第三十六页,共72页。对多个变量赋予同一初值,必须(bx)分别指定,不能写成float a=b=c=4.5;而应写成 float a=4.5,b=4.5,c=4.5;或float a,b,c=4.5;a=b=c;第37页/共72页第三十七页,共72页。在定义变量时,如果加上关键字const,则变量的值在程序运行期间不能改变,这种变量称为常变量(constant variable)。例如,const int a=3;/用const来声明这种变量的值不能改变,指定其值始终(shzhng)为3在定义常变量时必须同时对它初始化(即指定其值),此后它的值不能再改变

36、。常变量不能出现在赋值号的左边。例如上面一行不能写成const int a;a=3;/常变量不能被赋值可以用表达式对常变量初始化,如2.3.5 2.3.5 常变量常变量常变量常变量(binling)(binling)第38页/共72页第三十八页,共72页。const int b=3+6,c=3*cos(1.5);/bconst int b=3+6,c=3*cos(1.5);/b的值被指定为的值被指定为9 9,c c的值被指定的值被指定为为3*cos(1.5)3*cos(1.5)但应注意,由于使用了系统标准数学函数但应注意,由于使用了系统标准数学函数coscos,必须将包含该函数,必须将包含该函

37、数有关的信息的头文件有关的信息的头文件“cmath”(“cmath”(或或math.h)math.h)包含到本程序单位中来,包含到本程序单位中来,可以在本程序单位的开头加上以下可以在本程序单位的开头加上以下#include#include命令:命令:#include#include 或或#include#include 变量的值应该是可以变化的,怎么值是固定的量也称变量呢?其变量的值应该是可以变化的,怎么值是固定的量也称变量呢?其实,从计算机实现的角度看,变量的特征是存在一个以变量名命实,从计算机实现的角度看,变量的特征是存在一个以变量名命名的存储单元,在一般情况名的存储单元,在一般情况(qn

38、gkung)(qngkung)下,存储单元中的内容是下,存储单元中的内容是可以变化的。对常变量来说,无非在此变量的基础上加上一个限可以变化的。对常变量来说,无非在此变量的基础上加上一个限定:定:存储单元中的值不允许变化。因此常变量又称为只读变量存储单元中的值不允许变化。因此常变量又称为只读变量(read-only-variable)(read-only-variable)。第39页/共72页第三十九页,共72页。请区别用#define命令定义的符号常量(chngling)和用const定义的常变量。符号常量(chngling)只是用一个符号代替一个字符串,在预编译时把所有符号常量(chngli

39、ng)替换为所指定的字符串,它没有类型,在内存中并不存在以符号常量(chngling)命名的存储单元。而常变量具有变量的特征,它具有类型,在内存中存在着以它命名的存储单元,可以用sizeof运算符测出其长度。与一般变量惟一的不同是指定变量的值不能改变。用#define命令定义符号常量(chngling)是C语言所采用的方法,C+把它保留下来是为了和C兼容。C+的程序员一般喜欢用const定义常变量。虽然二者实现的方法不同,但从使用的角度看,都可以认为用了一个标识符代表了一个常量(chngling)。有些书上把用const定义的常变量也称为定义常量(chngling),但读者应该了解它和符号常量

40、(chngling)的区别。第40页/共72页第四十页,共72页。C+的运算符十分丰富,使得C+的运算十分灵活方便。例如把赋值号(=)也作为运算符处理,这样,a=b=c=4就是合法的表达式,这是与其他语言不同的。C+提供(tgng)了以下运算符:(1)算术运算符 +(加)-(减)*(乘)/(除)%(整除求余)+(自加)-(自减)(2)关系运算符(大于)(小于)(等于)(大于或等于)(小于或等于)!(不等于)2.4 2.4 C+C+的运算符的运算符的运算符的运算符第41页/共72页第四十一页,共72页。()逻辑运算符(逻辑与)|(逻辑或)!(逻辑非)()位运算符(按位右移)(按位与)|(按位或)

41、(按位异或)(按位取反)()赋值运算符(及其扩展赋值运算符)()条件运算符(?:)()逗号运算符(,)()指针运算符(*)(9)引用(ynyng)运算符和地址运算符()(10)求字节数运算符()(11)强制类型转换运算符((类型)或类型())第42页/共72页第四十二页,共72页。(12)成员运算符(.)(13)指向成员的运算符(-)(14)下标(xi bio)运算符()(15)其他(如函数调用运算符()在本章中主要介绍算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,其他运算符将在以后各章中陆续介绍。第43页/共72页第四十三页,共72页。(加法运算符,或正值运算符。如

42、3+5,+3)(减法运算符,或负值运算符。如5-2,-3)*(乘法运算符。如3*5)(除法(chf)运算符。如5/3)(模运算符,或称求余运算符,两侧均应为整型数据,如的值为)。2.5 2.5 算术算术算术算术(sunsh)(sunsh)运算符与算术运算符与算术运算符与算术运算符与算术(sunsh)(sunsh)表达表达表达表达式式式式 2.5.1 2.5.1 基本的算术基本的算术基本的算术基本的算术(sunsh)(sunsh)运算符运算符运算符运算符第44页/共72页第四十四页,共72页。需要说明,两个整数相除的结果为整数,如5/3的结果值为1,舍去小数部分。但是,如果除数或被除数中有一个为

43、负值,则舍入的方向是不固定的。例如,-5/3在有的C+系统上得到结果-1,有的C+系统则给出结果-2。多数编译系统采取(ciq)“向零取整”的方法,即5/3的值等于1,-5/3的值等于-1,取整后向零靠拢。如果参加+,-,*,/运算的两个数中有一个数为float型数据,则运算的结果是double型,因为C+在运算时对所有float型数据都按double型数据处理。第45页/共72页第四十五页,共72页。用算术运算符和括号将运算对象(duxing)(也称操作数)连接起来的、符合C+语法规则的式子,称C+算术表达式。运算对象(duxing)包括常量、变量、函数等。例如,下面是一个合法的C+算术表达

44、式:a*b/c-1.5+aC+语言规定了运算符的优先级和结合性。在求解表达式时,先按运算符的优先级别高低次序执行,例如先乘除后加减。如有表达式a-b*c,b的左侧为减号,右侧为乘号,而乘号优先于减号,因此,相当于a-(b*c)。如果在一个运算对象(duxing)两侧的运算符的优先级别相同,如a-b+c,则按规定的“结合方向”处理。2.5.2 2.5.2 算术算术算术算术(sunsh)(sunsh)表达式和运算符的优先级与结合性表达式和运算符的优先级与结合性表达式和运算符的优先级与结合性表达式和运算符的优先级与结合性第46页/共72页第四十六页,共72页。C+规定了各种运算符的结合方向(结合性)

45、,算术运算符的结合方向为“自左至右”,即先左后右,因此b先与减号结合,执行a-b的运算,再执行加c的运算。“自左至右的结合方向”又称“左结合性”,即运算对象(duxing)先与左面的运算符结合。以后可以看到有些运算符的结合方向为“自右至左”,即右结合性(例如赋值运算符)。关于“结合性”的概念在其他一些高级语言中是没有的,是C和C+的特点之一,希望能弄清楚。附录B列出了所有运算符以及它们的优先级别和结合性。第47页/共72页第四十七页,共72页。在表达式中常遇到不同类型数据之间进行运算,如10+a+1.5-8765.1234*b在进行运算时,不同类型的数据要先转换(zhunhun)成同一类型,然

46、后进行运算。转换(zhunhun)的规则按图2.7所示。图2.72.5.3 2.5.3 表达式中各类数值型数据表达式中各类数值型数据表达式中各类数值型数据表达式中各类数值型数据(shj)(shj)间的混合运算间的混合运算间的混合运算间的混合运算第48页/共72页第四十八页,共72页。假设已指定为整型变量(binling),为float变量(binling),为double型变量(binling),为long型,有下面表达式:10+a+i*f-d/e运算次序为:进行10+a的运算,先将转换成整数97,运算结果为107。进行i*f的运算。先将i与f都转换成double型,运算结果为double型。

47、整数107与i*f的积相加。先将整数107转换成双精度数(小数点后加若干个0,即107.00000),结果为double型。将变量(binling)e转换成double型,d/e结果为double型。将10+a+i*f的结果与d/e的商相减,结果为double型。上述的类型转换是由系统自动进行的。第49页/共72页第四十九页,共72页。在C和C+中,常在表达式中使用自增(+)和自减(-)运算符,他们的作用是使变量(binling)的值增1或减1,如+i(在使用i之前,先使i的值加1,如果i的原值为3,则执行j=+i后,j的值为4)-i(在使用i之前,先使i的值减1,如果i的原值为3,则执行j=

48、-i后,j的值为2)i+(在使用i之后,使i的值加1,如果i的原值为3,则执行j=i+后,j的值为3,然后i变为4)i-(在使用i之后,使i的值减1,如果i的原值为3,则执行j=i-后,j的值为3,然后i变为2)2.5.4 2.5.4 自增和自减运算符自增和自减运算符自增和自减运算符自增和自减运算符第50页/共72页第五十页,共72页。+i是先执行ii+1后,再使用i的值;而i+是先使用i的值后,再执行ii+1。正确地使用+和-,可以使程序简洁、清晰、高效(o xio)。请注意:(1)自增运算符(+)和自减运算符(-)只能用于变量,而不能用于常量或表达式。(2)+和-的结合方向是“自右至左”,

49、见附录B。(3)自增运算符(+)和自减运算符(-)使用十分灵活,但在很多情况下可能出现歧义性,产生“意想不到”的副作用。(4)自增(减)运算符在C+程序中是经常见到的,常用于循环语句中,使循环变量自动加1。也用于指针变量,使指针指向下一个地址。第51页/共72页第五十一页,共72页。在表达式中不同类型的数据会自动地转换类型,以进行运算。有时程序编制者还可以利用强制类型转换运算符将一个表达式转换成所需类型。例如:(double)(将a转换成double类型)(int)(x+y)(将x+y的值转换成整型)(float)(5%3)(将5%3的值转换成float型)强制类型转换的一般形式为(类型名)(

50、表达式)注意:如果要进行强制类型转换的对象是一个变量(binling),该变量(binling)可以不用括号括起来。如果要进行强制类型转换的对象是一个包含多项的表达式,则表达式应该用括号括起来。如果写成2.5.5 2.5.5 强制强制强制强制(qingzh)(qingzh)类型转换运算符类型转换运算符类型转换运算符类型转换运算符第52页/共72页第五十二页,共72页。()则只将转换成整型,然后与相加。以上(yshng)强制类型转换的形式是原来C语言使用的形式,C+把它保留了下来,以利于兼容。C+还增加了以下形式:类型名(表达式)如int(x)或 int(x+y)类型名不加括号,而变量或表达式用

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

当前位置:首页 > 管理文献 > 管理工具

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com