第3章基本数据类型与基本运算.ppt

上传人:sccc 文档编号:5635069 上传时间:2023-08-04 格式:PPT 页数:112 大小:998.01KB
返回 下载 相关 举报
第3章基本数据类型与基本运算.ppt_第1页
第1页 / 共112页
第3章基本数据类型与基本运算.ppt_第2页
第2页 / 共112页
第3章基本数据类型与基本运算.ppt_第3页
第3页 / 共112页
第3章基本数据类型与基本运算.ppt_第4页
第4页 / 共112页
第3章基本数据类型与基本运算.ppt_第5页
第5页 / 共112页
点击查看更多>>
资源描述

《第3章基本数据类型与基本运算.ppt》由会员分享,可在线阅读,更多相关《第3章基本数据类型与基本运算.ppt(112页珍藏版)》请在三一办公上搜索。

1、1,第 3章 基本数据类型与基本运算,3.1 简单C+程序 3.2 基本类型及其派生类型3.3 说明语句 3.4 基本运算符,2,3.1.1 求两个数的和与积,#include void main()int a,b,sum,prod;a=3;b=15;sum=a+b;prod=a*b;coutThe sum is sumendl;coutThe prod is prodendl;,3,程序执行后的输出结果为:The sum is 18The prod is 45,4,3.1.2 计算圆面积与周长,#include void main()const float pai=3.14;float ra

2、dius;coutradius;float area=pai*radius*radius;coutnThe area of circle is;coutareaendl;float circum=2*pai*radius;coutThe circum of circle is circumendl;,5,程序执行后的输出结果为:Enter radius:2.5The area of circle is 19.625The circum of circle is 15.7,6,简单实例程序中的语法点,1.main函数是所有C+程序所必须的。最简单的合法C+程序是:main()它没有错误,但什么事

3、都不做。2.以双斜杠(/)开头直到行末的全体(符号)称为注解。注解将被当作空格处理。C+还允许使用第二种注解方式:以有序双符号/*开始(往后),直到第一次遇见有序双符号*/为止的全体(符号)也称为注解。第二种注解方式可以占一行至任意多行。,7,3.程序中涉及的数据,以常量和变量的形式出现,变量的值在程序执行中可以被改变。常量又分为字面常量和有名常量,如3与15等都为字面常量,而通过“const float pai=3.14;”说明的pai则被称为有名常量,它们的值在程序中均不可改变。常量和变量都具有各自的数据类型。C+的四种基本数据类型为:int、float、char、void,它们分别代表整

4、型(int),浮点型(float),字符型(char),以及无值型(void)。,8,程序中用到的所有变量以及有名常量都必须在使用前先说明其数据类型。通过如下格式的语句来说明一批(如n个)变量的数据类型:,.,;变量名由用户任起,但要求满足以下C+标识符的语法:标识符是由字母或下划线开头的后跟0到任意多个字母、数字或下划线所组成的符号串。除变量名外,程序员为有名常量、用户自定义类型、函数及其参数、类、对象等各种成分所起的名字也都必须是一个标识符。,9,4.每个C+程序都是一个符号的序列。C+语言的基本符号由数字(0-9)、大小写英文字母(A-Z,a-z)、以及包括空格在内的特殊符号组成。由符号

5、构成单词,由单词构成语句,由语句构成程序(相当于文章)。特殊符号可充当运算符(如:+-*/=!等)、分割符(如:,;:等)。另外,下划线、空格、句点等也属于特殊符号。,10,5.C+语言的单词主要分为以下五种:关键字(也称保留字,如,int、float、const等),标识符(如,变量名及有名常量名等各种名字),字面常量(如,43、3.14等),运算符(如,+、=、*等),分割符(如,、;等)。每一个C+关键字(保留字)都具有自己特定的使用含义,用户程序中不可再将它们用作自定义标识符。C+预定义的关键字均由小写字母构成,今后将在不同章节陆续用到那些关键字(注意,对于某一个具体的编译实现来说,可

6、能还会再扩充一些不同的关键字,使用时请留意)。请参看书p33的表2.2(其中列出了C+基本关键字)。,11,6.C+语言的基本语句主要分为以下几种:数据说明(定义)语句、赋值语句、表达式语句、流程控制语句、复合语句等。如,语句“int a,b,sum,prod;”为数据说明(定义)语句,它说明a、b、sum及prod为4个int型(整型)变量,程序中可将它们当作4个整型数据来使用。而语句“sum=a+b;”则为赋值语句,负责算出a+b之值并把结果值赋给变量sum。,12,7.数据的输入输出是每个实用程序必不可少的组成部分。“输入”向程序提供要加工的初始数据,而“输出”则将运算结果显示(或保存)

7、到某个指定文件中。C+含有两个特殊文件,一个为标准流对象cin,它代表键盘,是C+的标准输入设备;而另一个为标准流对象cout,它代表屏幕,是C+的标准输出设备。,13,往cout(即屏幕)上输出信息时,通过“插入”运算符“”(也称抽取或输入运算符)来实现,如,语句“cinradius;”的执行将等待用户从键盘输入一个浮点数,而后系统将该数赋值给变量radius。,14,8.字符串常量(简称为字符串)是由双引号括起来的字符序列。双引号为定界符,不属于字符串常量的一部分。虽然字符串中的每个字符在内存中只占1个字节,但整个字符串所占内存的字节数却为字符串的长度加一。是因为系统自动在每个字符串常量的

8、末字符后加上了一个“空字符”(作为结束标志)。系统使用转义字符0来表示“空字符”。注意,字符A在内存占1个字节,而字符串“A”则占2个字节。往cout(即屏幕)上输出字符串常量可以对用户起到提示作用。对字符串的处理通常与字符数组和指针有关。,15,3.2 基本数据类型及其派生类型-,3.2.1 数据类型的概念 3.2.2 基本类型3.2.3 基本类型的派生类型3.2.4 enum类型 3.2.5 定点类型和浮点类型,16,3.2.1 数据类型概念,任何一个程序都可以分为三个部分:数据的输入,数据的加工,数据的输出,所以数据是程序运行的对象和结果,是程序设计的第一要素。,17,类型概念的几个要点

9、是:,(1)每一项数据应唯一地属于某种类型;(2)每一数据类型意味着一个有明确定义的值的集合;(3)同一类型的数据占有相同大小的存储空间;(4)同一类型的数据具有相同的(允许对其施加的)运算操作集。,18,类型的分类(课本p53表3.1),1基本类型 2用户定义类型 3导出类型,19,3.2.2 基本数据类型-,C+预定义了五种最基本的数据类型:整型、浮点型(也称实型)、字符型、Bool型、无值型。整型数据说明符为int;浮点型又分为单精度浮点型float及双精度浮点型double;字符型用char;bool型bool,而无值型使用void。,20,通过基本数据类型能够导出(或派生出)其它的数

10、据类型。程序中用到的所有变量以及有名常量都必须在使用前先说明其数据类型。字面常量由系统自动将其归属于某种数据类型(从其“字面书写格式”区分)。,21,1.int类型,表示整型数据。其值集(取值范围)为:-32768 32767。通常占用两个字节的存储空间(注意,在VC6下,int 等同于long int,占用四个字节的存储空间)。允许对其施加的运算(操作)有:算术运算(+、-、*、/、%等),关系运算(、=、=、!=)及一些其他运算。,22,int类型字面常量的“字面书写格式”为:,(1)十进制整数与数学中的表示完全相同。如:5980,-123,0,32766。组成十进制整数的基本字符为:0,

11、1,.,9(共10个)。(2)八进制整数 以数字0开头的整数为八进制整数。如:017,0321,-0777。组成八进制整数的基本字符为:0,1,.,7(共8个)。(3)十六进制整数 以两个符号0 x(或0X)开头的整数为十六进制整数。如:0 x30,-0 xA9f3,0X777。组成十六进制整数的基本字符为:0,1,.,9,A,B,C,D,E,F(共16个,6个字母也可以小写)。,23,2.float与double类型,表示实型数据。float值集(取值范围)为:-3.4E383.4E38,通常占用四个字节的存储空间。double值集(取值范围)为:-1.7E3081.7E308,通常占用八个

12、字节的存储空间。允许对其施加的运算(操作)有:算术运算(+,-,*,/等),关系运算(,=,=,!=)及一些其他运算。,24,实型数据字面常量的“字面书写格式”为:,(1)一般表示形式(也称定点表示法)与数学中的实数表示法相同。如:45.6,-1279.23,0.5。(2)指数表示形式(也称科学表示法)由尾数部分,字母E或e,后随指数部分构成。如:-592e12,12345.6E-2,0.123456e3。其中后两个数都表示实数123.456。,25,3.char类型,表示字符数据。其值集即为ASCII码集(书P31,表2.1),也即C+使用的全部基本符号。1个字符数据表示1个基本符号,占用一

13、个字节的存储空间。在内存中,字符数据以ASCII码存储,即是说,系统是以整数来表示字符数据的。从而那些可施加于整数的运算(如算术运算及关系运算等)也可施加于字符型数据。,26,char类型字面常量的“字面书写格式”为:,(1)用单引号括起一个基本符号 如:A,a,8,+,?。单引号为定界符,不属于字符型常量的一部分。(2)以反斜杠开头的转义字符-参看书p36 用于将反斜杠后面的一个特定字符或反斜杠后面的三个数字字符转变成另外的意义。表示的仍是一个字符。通常表示那些不可显示的或从键盘无法输入的字符,以及那些被指定为特殊用途的字符。,27,例如:,n-代表一个字符,表示“换行”;t-代表一个字符,

14、表示“制表符”,用于实现横向跳格;-代表一个字符,表示反斜杠字符本身;-代表一个字符,表示单引号;-代表一个字符,表示双引号;ddd-代表一个字符,该字符的ASCII码值为八进制的ddd(其中的d表示0到7的一个数字字符);,28,xhh-代表一个字符,该字符的ASCII码值为十六进制的hh(其中的h表示0到F的一个数字字符)。可知,使用 ddd 或 xhh 的方式是可以表示任一个字符数据的,如,101,x41,和 A均可用来表示字符常量A。转义字符可以出现在字符串常量中,但仍代表一个字符。如,字符串常量 tNankai Universityn中就出现了两个转义字符,该字符串常量共含有19个字

15、符,要占用20个字节的存储空间。,29,下面的程序说明char型与int型所具有的密切关系:,#include void main()char c1=A,c2=t,c3=t,c4=!;/t为水平制表符,与t表示不同的字符 coutc1=c1,int(c1)=int(c1),c1+1=c1+1endl;/int(c1)把char型的c1变为int型 coutc2=c2,int(c2)=int(c2)n;coutc3=c3,int(c3)=int(c3),A+a=A+aendl;coutc4=c4,int(c4)=int(c4),c4+0=c4+0n;/注意,A、a、0的ASCII码依次为65、9

16、7、48,30,输出结果:,c1=A,int(c1)=65,c1+1=66c2=t,int(c2)=116c3=,int(c3)=9,A+a=162c4=!,int(c4)=33,c4+0=81,31,4.bool类型,bool型,仅有两个取值(一个常量值为标识符false,而另一个为标识符true)。其中的false代表逻辑值0(假),而true则代表逻辑值1(真)。,32,5.void类型,void类型称为无值类型,该类型的值集为一空集。void类型是一种较抽象的概念。在C+语言中,没有返回值的函数应被说明为是返回void类型值的函数;而没有参数的函数,其形参表也应被说明为是void。另外

17、,若某指针类型被说明为“void*”,则该指针可指向任一种数据类型。不可用void类型来说明变量。,33,3.2.3 基本类型的派生类型-,基本类型(除void外)经过简单的字长或范围的变更,可形成它们的简单派生类型。派生类型说明符是通过在int、float、double、char前面加上类型修饰符而构成的。类型修饰符包括:signed(有符号)、unsigned(无符号)、short(短)和long(长)。,34,注意(p56表3.2),signed和unsigned只能修饰char和int(意味着浮点型数据总是有符号的)。较常用的简单派生类型有:unsigned char,取值范围为 02

18、55;unsigned int,取值范围为 065535;long int取值范围为-21474836482147483647;unsigned long int 取值范围为 04294967295。,35,省略掉int而进行简写,当被修饰的是int时,允许省略掉int而进行简写,如,“long int”可简写为“long”,“unsigned int”可简写为“unsigned”,“unsigned long int”可简写为“unsigned long”等。,36,3.2.4 enum类型-,enum类型又称枚举类型,它是一种由用户参与定义的类型。其定义格式如下:enum;其中的由用户任起

19、,是一个标识符。由一批构成,各间以逗号分割。而或者是一个标识符,或者以=的格式出现。,37,说明枚举变量,可以缺省。不缺省时意味着在定义枚举类型的同时,又说明了一批枚举变量。缺省时,可通过如下两种方式之一来说明枚举变量:;或:enum;其中的中的每一表项可以是变量名,也可以同时赋初值。,38,例如:,enum color RED,YELLOW=3,BLUE c1=YELLOW,c2;/定义了枚举类型名color;同时又说明了/两个枚举变量c1与c2,且给变量c1赋了初值color a,b=BLUE,c,d=RED;/说明了4个color类型(枚举类型)的变量a,b,c,d,/且给变量b与d赋了

20、初值,39,关于enum类型有以下几点说明:,(1)一个enum类型实际上是int型的一个子集,其每一个枚举值(标识符)都代表着一个int型常量值。(2)n个枚举值(标识符)在定义时全没赋常量值时,它们自左至右分别与整数0,1,.,n-1对应。(3)若第i个枚举值(标识符)在定义时被赋于了整数m,则其未赋常量值的后续枚举值分别与整数m+1,m+2,.对应,直到下一个赋了值的枚举值或结束。(4)使用枚举量的主要优点是:既可增加程序的可读性,又可增加程序数据的安全性。增加程序可读性是显然的。由于枚举量的赋值范围被限定、且被说明的枚举量要进行类型检查,这样无疑会增加程序数据的安全性。,40,enum

21、类型的示意性使用例子:,#include void main()enum color RED,YELLOW=3,BLUE c1=YELLOW,c2;color a,b=BLUE,c,d=RED;coutRED YELLOW BLUEendl;coutc1=c1 b=b d=dendl;,41,输出结果及注意,程序执行后的输出结果为:0 3 4c1=3 b=4 d=0 注意:定义了枚举类型名color。指出类型color的常量值(取值范围)及各常量的大小:RED,YELLOW=3,BLUE。说明color类型的变量c1、c2(还为c1赋了初值)。输出的并非标识符(名字),而是它代表的int型常量

22、值。,42,3.2.5 定点类型和浮点类型-,基本类型及其派生类型可以划分为两大类:整数类型(定点类型)和浮点类型(实数类型)。整数类型包括:bool类型;enum类型;char类型及其派生类型;int类型及其派生类型;它们的值集合都是整数集合的子集。bool型,enum型的值用标识符表示,但输出为整数值 浮点类型包括:float 类型及其派生类型double,long double;它们的值集合都是实数集合的子集。后面介绍的有些运算只允许整数类型(定点类型)参加。,43,3.3 说明语句-,3.3.1 语句3.3.2 常量和变量3.3.3 常量说明3.3.4 变量说明3.3.5 名字空间3.

23、3.6 类型说明,44,3.3.1 语句-,语句是C+程序中的基本功能单元。程序中的任何一个语句都意味着为完成某一任务而进行的某种处理动作。语句可以分为四类:(1)说明语句(2)表达式语句(3)控制语句(4)复合语句和空语句,45,3.3.2 常量和变量,C+程序中的数据可分为常量(constant)与变量(variable)两大类。在程序执行过程中其值不能被改变的数据称为常量,其值可以改变的称为变量。常量又分有名常量和字面常量。有名常量和变量在程序中必须遵循“先声明,后使用”的原则,程序中出现的所有有名常量和变量都必须在使用前由常量说明语句和变量说明语句说明。在程序中说明了一个变量,实际上是

24、做了下面几项工作:赋给该变量一标识符作为其名;指定其类型;在内存中分配给它一片存放空间(其大小由类型决定);通过赋初值或赋值语句给它一个当前值,46,3.3.2 常量说明,const=例子:const int N=2000;预编译宏定义:类似于#include,在编译的时候由编译器自动替换#define N 2000区别:常量是一个分配独立内存空间的不可写的标识,宏只是为了程序员书写方便定义的助记符号,没有独立的存储空间,47,3.3.3 变量说明,变量定义:int size,high,temp=37;变量名表:列出该说明语句所定义的同一类型的变量及其初值,其格式为:变量名表:=,char c

25、h1=e,ch2;,48,1 全局变量和局部变量,全局变量:其说明语句不在任何一个类定义、函数定义和复合语句(程序块)之内的变量。局部变量:其说明语句在某一类定义、函数定义或复合语句之内的变量。全局变量所占用的内存空间在内存的数据区,在程序运行的整个过程中位置保持不变。局部变量占用的空间一般位于为程序运行时设置的临时工作区,以堆栈的形式允许反复占用和释放。,49,2 生存期和作用域量,变量a 的生存期是指从a被说明且分配了内存开始,直到该说明语句失去效力,相应内存被释放为止,称为该变量的生存期。一个全局变量的生存期是指从它被说明(定义点)开始,直到程序结束。一个局部变量的生存期是指从它被说明(

26、定义点)开始,直到包含它的最近的一个程序块的结束。作用域:变量a的作用域是指标识符a可以代表该变量的范围。一般作用域与生存期一致,但由于C+语言允许在不同程序部分为不同的变量取同一名字,因此一个变量名的作用域可能小于其生存期,50,3 变量存储类型,auto 自动 C+系统默认register 寄存器,用于经常调用的变量 static 静态,任何静态变量的生存期将延续到整个程序的终止 extern 外部 存储在另外文件,编译的时候不检查,连结的时候检查,51,3.3.5 名字空间,名字空间(namespace)亦称命名空间,是C+语言的新标准引入的概念,用来解决大型程序中标识符重名的问题。na

27、mespace 使用指令:using namespace 课本p64,52,3.3.6 类型说明,1 typedef typedef int id_number;2用户参与定义的新类型说明3完全由用户定义的数据类型,53,3.4 基本运算符-,3.4.1 运算符与表达式 3.4.2 运算类型与运算符3.4.3 赋值运算3.4.4 算术运算2.2.3 关系运算2.2.4 逻辑运算2.2.6 位运算2.2.7 其它运算,54,3.4.1 运算符与表达式,运算符的使用含义是由系统预定义好的(注意,C+允许用户重定义即重载运算符,从而使它们对某些用户自定义类对象可具有另外的用户自定义运算符含义)。通常

28、情况下,运算符所操作的运算对象均为基本数据类型(或其简单派生类型)的具体数据。通过运算符把运算对象(常量或变量)按照一定的规则连接起来就构成了表达式。表达式的运算结果是一个“值”(它将隶属于与运算对象相关的某种数据类型)。表达式的求值顺序取决于表达式中那些运算符的优先级以及结合性。,55,3.4.2 运算类型和运算符-,C+语言提供的运算符具有不同的优先级与结合性。下面按15个优先级来列出它们(参看书p78的表),并指出它们的结合性。当表达式中出现有不同级别的运算符时,优先级高的(级号小者)优先运算;当表达式中出现有多个相同级别的运算符时,则按其结合性或者从左到右顺序运算,或者从右到左顺序运算

29、。优先级别为2(单目运算)、13(三目运算)、以及14(赋值运算)中的那些运算符的结合性为从右到左,其余所有运算符的结合性都为从左到右。注意,某些运算符是一符多用的,如*及&等,系统可通过程序上下文使用方式中的运算对象个数等来判断出是哪一种使用情况。注:某些C+版本新增了成员指针运算符“.*”以及“-*”。,56,(1)()-:.(2)!+-+-&*sizeof new delete(类型名)(3)*/%(4)+-(5)(6)=(7)=!=(8)&(9)(10)|(11)&(12)|(13)?:(14)=*=/=%=+=-=&=|=(15),57,3.4.3 赋值运算-,1.一般赋值运算 一般

30、赋值运算符为“=”(注意与关系运算符“=”的区别,后者用于比较是否相等)。使用格式:=其中的“”通常是一个变量(也可以是某个等同于变量的表达式,如,赋值表达式或返回引用的函数调用结果等);而“”则是一个一般表达式。,58,使用含义:,将赋值运算符右边的表达式的值计算出来,并赋值给,该值同时又是整个赋值表达式的值。注意,赋值表达式的运算结果为左值,等同于赋值运算符左边的那一分量,从而可进一步被赋值。称能够出现在赋值运算符左边的分量为左值(left value,缩写为lvalue),左值代表着一个可以存放数据的存储空间。如,变量x可以作左值,但常量22以及表达式x+22则都不可作为左值,因为它们都

31、不代表可以存放数据的存储空间。,59,例:,int i=1,j=10,k;i=j+5;(将表达式j+5的值,赋值给变量i,此时变量i的值变为15)。k=i=j+5;(将赋值表达式i=j+5的值,也即变量i的值15,进一步赋值给变量k,使k也等于15)。,60,又例,(j=33)=55;(赋值表达式j=33是左值,等同于左运算分量j,可进一步被赋值,结果将使j的值变为55)。(j=i=66)+;(结果将使i等于66,使j的值变为67。注意,“j=i=66”使j等于66,且该子表达式就等同于变量j,从而可进一步进行“+”运算)。注意,2=j+5以及i+1=55都是错误的赋值表达式,因为赋值号的左端

32、非左值。,61,2.复合赋值运算,C+提供如下10个复合赋值运算符:+=、-=、*=、/=、%=、=、=、&=、|=、=,其中的前5个用于算术运算,而后5个用于位运算。上述10个运算符都为双目运算符,它们的使用格式以及使用含义都可通过下面的使用实例来理解。i+=2 等同于 i=i+2,而 j%=i 等同于 j=j%i。,62,复合赋值运算符的右运算分量,又如,当i=10且j=3时,i*=j-2 与 i*=(j-2)以及 i=i*(j-2)的运算结果都为10。即是说,这3个表达式是等价的。注意,C+认为复合赋值运算符的右运算分量是一个整体,可以理解为编译系统将自动地为右运算分量加上了括号(即是说

33、,i*=j-2 并不等同于 i=i*j-2,否则的话,将使i的值变为28而非10了!)。,63,其它复合赋值运算符,其它复合赋值运算符的作用是类似的,都用于实现:“将与进行指定运算,而后又将结果赋值给”。上述所谓的“指定运算”,是指由复合赋值运算符的赋值号前的符号所规定的运算。,64,3.优先级与结合性,.算术运算符、关系运算符、双目逻辑运算符的优先级均高于赋值运算符;.赋值运算符的结合性是自右向左(如,k=i=j+5等同于k=(i=j+5)。,65,3.4.42 算术运算-,其运算对象的类型可为int、float、char以及它们的简单派生类型。通过算术运算符,可对这些数值类数据进行计算,从

34、而得到仍然是数值类数据的运算结果。算术运算包括:单目的单减(-)、增量(+)和减量(-)运算,以及双目的加(+)、减(-)、乘(*)、除(/)和模(%)运算。,66,1.单目的单减(-),使用格式:-使用含义:相当于用-1乘上运算分量也即随后所跟的的值。例如:-x,-(a+b-2*c),-sqrt(a*a+b+b),67,2.单目的增量(+)和减量(-)运算,增量(+)的使用格式:前缀增量:+后缀增量:+其中的“”必须为int型(包括char型)变量。增量(+)使用含义:令作为运算分量的那一变量值加1。前缀增量+i与后缀增量i+的区别在于:如果+i与i+又作为分量参加其他运算的话,前者是先令i

35、加1然后参加其他运算;而后者则先令i参加其他运算,而后再令i加1。,68,例如:,i+;/结果等价于 i=i+1;+i;/结果等价于 i=i+1;x=i+;/结果等价于 x=i;i=i+1;x=+i;/结果等价于 i=i+1;x=i;,69,减量(-)的使用格式:,前缀减量:-后缀减量:-除将加法改为减法外,减量运算与上述的增量运算完全相同。,70,3.双目的加(+)、减(-)、乘(*)、除(/)和模(%)运算,使用格式:使用含义:相当于进行数学中的加(+)、减(-)、乘(*)、除(/)和取模(%)运算。例如:x+y,x-y,x*y,x/y,x%y。,71,有以下几点注意:,(1)做除法运算时

36、,若参加运算的两个对象都为int类型时,则运算结果(即商)仍为int型数据(甩掉商的小数部分而取整)。如,7/3的结果为2,而7/4的结果则为1。(2)取模运算符主要用于整型数值计算。x%y是要求出x除以y所得的余数。如,7%3的结果为1,而7%4的结果则为3。注意,x%y的值总等于x-y*(x/y)的值。,72,注意系统自动进行的类型转换,(3)若参加运算的两个分量的类型不同时,系统会自动将“短”类型数据转换为等值的“长”类型数据而后再进行运算,而运算结果规定为“长”类型数据。所谓“短”类型数据是指该类型的数据占据的内存空间少而且所表示数据大小的范围也要小。如,char比int要短,而int

37、又比float短等等。如:5/2为2,而5/2.0则为2.5。这是因为int型的5与float型的2.0进行运算时,系统会自动将int型的5转换为等值的float型的5.0后再进行运算,因而结果也必然为float型的2.5了。,73,4.优先级与结合性,.单目算术运算符优先于双目算术运算符;.*、/、%优先于+、-;.同级单目算术运算符的结合性是自右向左(如,-+i等同于-(+i),而-i+等同于-(i+));.同级双目算术运算符的结合性是自左向右(如,3+2-5等同于(3+2)-5,而x*y/z等同于(x*y)/z)。,74,3.4.5 关系运算-,关系运算也称为比较运算,通过关系运算符来实

38、现,通常用来代表满足某种关系的一个条件。,75,1.六种关系运算符,C+提供了六种关系运算,相应的关系运算符为:,=,=,!=。使用格式:其中的“”必须为数值类型或指针类型的表达式。使用含义:判断两个运算分量(可以是表达式)是否满足由关系运算符指定的关系。若满足的话,则得结果值1(相当于bool类型的true);否则的话,得结果值0(相当于bool类型的false)。,76,2.优先级与结合性,.算术运算符优先于关系运算符;.,=优先于=,!=;.,=同级,结合性是自左向右(想一下,“1x2”的结果是否总为1,即true?);.=,!=同级,结合性是自左向右。,77,3.4.6 逻辑运算-,通

39、过逻辑运算符可以将关系表达式或者将具有数值类型或指针类型的一般表达式以及逻辑值连接在一起,进而可用于表达更加复杂的具有某种关系的一个条件。,78,1.三种逻辑运算符,C+提供了三种逻辑运算,相应的逻辑运算符为:!,&,|(分别称为逻辑非,逻辑与,逻辑或运算)。“!”为单目运算符,而“&”和“|”为双目运算符。它们的使用格式分别为:其中的“”必须为数值类型或指针类型的表达式(包括关系表达式)。,79,使用含义:,若所表达的那种具有某种关系的条件为真(即满足)的话,则得结果值1(相当于bool类型的true),否则的话得结果值0(相当于bool类型的false)。另外注意,总认为非0值为真(得结果

40、值1,相当于true),而0值为假(相当于false)。如,!8等同于!1,结果为0;而 0|4 等同于 0|1,得结果1。即是说,其中的非0值8与4都相当于true,得结果值1。含有逻辑运算符的表达式也称为逻辑表达式。,80,!,&,|的运算规则定义如下:,!0 等于 1;!1 等于 0。0 1|1 等于 1。,81,例如:,(86)&(64)的运算结果与 1&1 相同,所得值为1。数学条件“x非负数,并且y大于1或者y小于0”对应的逻辑表达式为:!(x1|y0)注意,上述表达式中的两个括号都不能省略(参看下面的优先级规定)。,82,2.优先级与结合性,.!优先于.双目逻辑运算符的结合性为自

41、左向右。,83,例:,!8 等同于!(!(!8),结果为0;0|0|4 等同于(0|0)|4,结果为1;!a!p&q+1r*r|w!=0 等同于(!p)&(q+1)(r*r)|(w!=0)。,84,3.4.7 位运算-,位运算是一种对运算对象按二进制位进行操作的运算,而且是作用于运算对象的每一个位上(而并不是只对其中的某一个位进行运算)。位运算的运算对象只能是整型数据(包括字符型),且运算结果仍为整型数据。,85,1.位运算符,C+提供如下6个位运算符:(单目,按位求反)、及无符号字符型变量d2,它具有初值44,即二进制的00101100。,86,那么(d1=38=00100110;d2=44

42、=00101100):,d1,87,那么(d1=38=00100110;d2=44=00101100):,d11 的结果将是19(将00100110的每一位都向右移动一个位后得结果00010011);将d1的结果赋值给无符号字符型变量d3,而后按int值输出d3将得结果217(将00100110的每一位都取反后得结果11011001)。,88,执行如下的程序,可对上述结果进行验证,#include void main()unsigned char d1=38,d2=44;cout(d1d2)endl;,89,cout 1=1)int(d3)endl;cout-endl;,90,执行程序后,输出

43、结果如下:,unsigned char d1=38,d2=44;d1=int(d3)=217-,91,注意,(1)之所以d1”时,会产生语法错误!其原因是算符“&”的优先级低于算符“”(被重载的插入运算符“”与移位运算符“”的优先级相同!)。,92,再看另外几个有关输出的例子:,cout22+8*2=22+8*2endl;/ok!输出“22+8*2=38”/算术运算符优先级高于“”,可以不加括号cout2!=3=2!=3;/error!-注意,算符“!=”比算符“”优先级低!cout(2!=3)=(2!=3);/加括号后,ok!coutk=i+=(k=i+)endl;/ok!-赋值算符“=”的

44、优先级低于“”/要将“k=i+”括起来!,93,注意,(3)程序中直接输出d1时所得结果为39,是因为系统认为首位为“1”的数据为负数(系统是按照“反码表示法”来表达数据的)。若将d1的结果赋值给无符号字符型变量d3,而后按int值输出d3将得到结果217。,94,2.优先级与结合性,此6个位运算符分为五个不同的优先级,依次为:(按位求反)、(按位左右移)、双目的按位与、按位异或、按位或的优先级低于关系运算符而高于双目的逻辑运算符,结合性为自左向右。,95,3.4.8 其它运算-,除上述介绍的运算符外,C+还提供许多特别的操作,也统称为运算,且设置运算符。下面介绍其中的三个,分别称为逗号运算,

45、三目运算,以及sizeof字长提取运算。其余的运算只介绍一下相应的运算符含义(或功能),具体使用将在后续章节的适当位置处再分别加以介绍。,96,1.逗号运算,逗号除可以作为标点符号外(如在变量说明处用作分割符),它还可以作为运算符。逗号运算是双目运算,其运算对象为表达式。使用格式如下:,表达式1和表达式2为任意表达式,运算结果值为表达式2的结果值,运算过程为先计算表达式1,然后计算表达式2。,97,例如:,2,5 就为一个最简单的逗号表达式,其运算结果为5。设整型变量a,b的值都为2,则逗号表达式 a+b+1,a*b*2 的结果值就是a*b*2的结果值,等于8。逗号运算符是C+所有运算符中优先

46、级最低的一个。逗号运算符的结合性为自左向右。可知逗号表达式 a=a+2,c=a*b+2,c+2 的运算结果与逗号表达式(a=a+2,c=a*b+2),c+2 相同,都为 c+2 的值。,98,2.三目运算,三目运算也称条件运算,运算符为?:,使用格式为:?:它是唯一需要3个运算对象的运算符,其中的表达式1为数值表达式,是作为条件来看待的,表达式2和表达式3为任意表达式。具体运算过程为:计算表达式1的值,若非0(认为条件成立),则计算表达式2的值并将其作为该三目运算的结果;否则(表达式1的值为0时),则计算表达式3的值并将其作为该三目运算的结果。,99,例如,x0?x:-x 的结果为x的绝对值。

47、而s=(ab)?a:b;等价于条件语句 if(ab)s=a;else s=b;C+中具有最低优先级的3个运算符依次为(从高到低):三目运算符,赋值运算符,逗号运算符。,100,3.sizeof字长提取运算,sizeof字长提取运算也称为字长提取符或长度运算符。它为一目运算,其运算对象可以是一个任何类型的变量或者是一个任何的数据类型(名)。运算结果为那一变量(或类型)所占存储空间的大小(即字节数)。但该运算的使用格式较特殊,类似于函数调用,形式为:sizeof()。另外,当运算对象为变量时,还可省去那对圆括号而简写为 sizeof。,101,例如:,char c;float f;则 sizeof

48、(c)与 sizeof c 以及sizeof(char)的结果都为1。而 sizeof(f)与 sizeof f 以及sizeof(float)的结果值都为4。sizeof(double)的结果值为8。,102,编程序,通过sizeof运算了解系统 对不同类型数据的内存实际分配情况,#include void main()coutNumber of bytes used:n;coutchar:sizeof(char)endl;coutshort:sizeof(short)endl;coutint:sizeof(int)endl;coutlong:sizeof(long)endl;coutuns

49、igned int:sizeof(unsigned int)endl;coutfloat:sizeof(float)endl;coutdouble:sizeof(double)endl;,103,输出结果:,Number of bytes used:char:1short:2int:4long:4unsigned int:4float:4double:8,104,4.其它一些运算符的含义(或功能),(1)第1优先级中的()-:.()-函数调用;-数组分量(或称数组下标);-通过指针访问结构体或类对象的成员(间接成员选择);:-类限定或全局限定;.-访问结构体或类对象的成员(直接成员选择)。,1

50、05,(2)第2优先级中的&*new delete(类型名),(类型名)-强制类型转换,将运算对象的类型强制转换为此处的类型名所指定的类型。以上这些运算符的具体使用实例将在后续章节中介绍。,106,综合示例:,编程序,计算下述各表达式,并将表达式的值以及执行表达式后被改变的那些相关变量的值一并输出。注意,计算每一表达式前,总假定各相关变量的初值为:int i=1,j=2,k=3;char ch=B;double x=1.1;20/3.0+-i(及改变后的变量i)20/3+j+%3+0(及改变了的变量j)x*=i+19(及变量x)k+*j+*i+(及变量i、j、k)+k*+j*+i(及变量i、j

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号