《c程序设计基础》第二章-基本数据类型与表达式.ppt

上传人:小飞机 文档编号:5896074 上传时间:2023-08-31 格式:PPT 页数:152 大小:2.06MB
返回 下载 相关 举报
《c程序设计基础》第二章-基本数据类型与表达式.ppt_第1页
第1页 / 共152页
《c程序设计基础》第二章-基本数据类型与表达式.ppt_第2页
第2页 / 共152页
《c程序设计基础》第二章-基本数据类型与表达式.ppt_第3页
第3页 / 共152页
《c程序设计基础》第二章-基本数据类型与表达式.ppt_第4页
第4页 / 共152页
《c程序设计基础》第二章-基本数据类型与表达式.ppt_第5页
第5页 / 共152页
点击查看更多>>
资源描述

《《c程序设计基础》第二章-基本数据类型与表达式.ppt》由会员分享,可在线阅读,更多相关《《c程序设计基础》第二章-基本数据类型与表达式.ppt(152页珍藏版)》请在三一办公上搜索。

1、C+程序设计基础,第2章 基本数据类型与表达式北京邮电大学信通院方莉,2,程序中最基本的元素是数据类型,根据数据类型可以为变量或常量分配内存空间,将变量、常量和运算符结合在一起组成表达式,进行复杂的运算和处理。,第2章 基本数据类型与表达式,3,主要内容如何定义和使用变量和常量?如何使用表达式?如何使用输入和输出流?如何使用string类型处理字符串?,第2章 基本数据类型与表达式,4,第2章 基本数据类型与表达式,5,2.1 词法记号和标识符,1、C+字符集2、C+关键字3、标识符4、分隔符5、空白,6,2.1 词法记号和标识符,1、C+字符集英文字母:AZ,az数字字符:09特殊字符:+-

2、*/%=!#.,()空格,7,2.1 词法记号和标识符,2、C+关键字1)什么是关键字?预先定义好的标识符,C+编译器对其进行特殊处理。auto,bool,break,case,catch,char,class,const,continue,default,delete,do,.,while(P11-12)2)如何识别关键字?使用VC+6.0(VC2005)的编辑环境时,缺省是蓝色的字符即为关键字。,8,2.1 词法记号和标识符,3、标识符 标识符是程序员声明的单词,它命名程序正文中的一些实体,如函数名、变量名、类名、对象名等。C+标识符的构成规则如下:,1、不能是C+的关键字;2、第一个字符

3、必须是大写、小写字母或下划线;3、不包含空格和“+、-、;”等特殊字符;4、为方便输入,长度一般不超过31个字符。,9,2.1 词法记号和标识符,例如:合法的标识符:apple、_Student、_123、No1、max_num 不合法的标识符:51job、max num、-abc,C+的表示符是大小写敏感的,即abcABC。,10,2.1 词法记号和标识符,4、分隔符 分隔符用于分隔程序中的正文,在C+中使用下列字符作为分隔符:(),:;这些分隔符不表示实际的操作,仅用于构造程序。比如“;”,用来作为一句完整语句的结束。,11,2.1 词法记号和标识符,5、空白 在C+语句中经常出现空白(制

4、表符、空格、空行)等,通常都忽略不计。例如:x=a+b;也可写成:x=a+b;或 x=a+b;,合法但不直观,缺乏可读性使用空格要适当,12,第2章 基本数据类型与表达式,13,2.2 基本数据类型,什么是数据类型?数据是程序处理的对象,根据数据本身的特点进行分类,从而形成不同的数据类型。例如:数学中有自然数、整数、实数不同类型的数据有不同的表示和处理方法,具有不同运算规则。,14,2.2 基本数据类型,基本数据类型整型:int 字符型:char、wchar_t实型:float、double 逻辑型:bool,15,2.2 基本数据类型,自定义数据类型数组:type 指针:type*引用:ty

5、pe&空类型:void结构:struct联合:union枚举:enum类:class,16,2.2 基本数据类型,修饰符 在C+中描述为了更加准确的描述数据类型,提供了4个关键字用来修饰基本数据类型:1、长型 long 2、短型 short 3、有符号 signed 4、无符号 unsigned,17,1、short:仅用来修饰int,称为短整型,占2字节内存,也可直接简写为short;2、long:仅修饰int和double,因为在不同的编译环境中使用long修饰的数据所占内存不同,这里列出的是在VC+6.0(vc2005)的环境下的。3、unsigned:用来修饰char、short和in

6、t,表示该数据类型为无符号数。4、signed:用来修饰char、short和int,表示该数据类型为有符号数,为缺省设置。,2.2 基本数据类型,18,2.2 基本数据类型,数据类型与内存空间不同的数据类型,加上不同的修饰符就具有了不同的特点,在内存中占用的空间也不同,因而其所能表示的数值范围也不尽相同。内存单元的单位是字节,因此用来表示数据类型的长度的单位也是字节。,19,2.2 基本数据类型,注意 特定数据类型在内存中占用的内存因机器的不同而不同。整型int的长度等于机器的字长:16位机:int=2字节;32位机:int=4字节。但是short和long表示的数据长度是固定的,任何支持标

7、准C+的编译器都是如此,因而如果需要编写可移植性好的程序,应将整型声明为short或long。,20,2.2 基本数据类型,21,2.2 基本数据类型,22,例2.1:输出数据类型的长度,例题 编写一个程序,输出基本数据类型char,int,float,double,bool的长度,即所占字节数。提示:使用sizeof(数据类型)能够获取不同数据类型的长度。,23,/例2-1:输出基本数据类型的长度#include using namespace std;void main()coutchar:sizeof(char)字节n;coutint:sizeof(int)字节n;coutfloat:s

8、izeof(float)字节n;coutdouble:sizeof(double)字节n;coutbool:sizeof(bool)字节n;,例2.1:输出数据类型的长度,在32位机上运行结果 char:1字节 int:4字节 float:4字节 double:8字节 bool:1字节,24,第2章 基本数据类型与表达式,25,2.3 变量和常量,概述 程序所处理的数据不仅分为不同的数据类型,而且每种类型的数据还分为变量和常量。程序在运行中就是通过这些变量和常量来操作数据的。什么是变量?在C+中,变量是存储信息的地方。变量的实质是内存中的一个地址空间,在这个地址空间中可以进行数据的存储和读取。

9、,26,变量定义的格式,变量定义的格式:数据类型 变量名1,变量名2,变量名n;例如:定义各种类型的变量 int num;float f;char ch;short s;double area,length;,27,变量定义的格式,定义变量的实质 例如:int num;系统根据所指定的数据类型int,从地址xxxxxxxH开始,为变量num分配4个字节单元。变量num的取值范围为2312311。,28,变量定义的格式,定义变量的实质 例如 int num;编程时,可以直接使用变量名num对存储在该内存空间的数据,也就是变量值进行存取。变量名和地址xxxxxxxH之间的对应关系由系统来管理。,2

10、9,变量定义的格式,说明在创建或定义变量时,需要指明该变量的数据类型和名称。数据类型:决定变量的存储方式和可以进行的操作;变量名称:用来区分不同的变量。例如:short int s;double area,length;,变量一旦被定义,则系统自动为其分配应占的内存。,30,变量定义的格式,说明在C+程序中使用变量,必须“先定义或声明,后使用”,而且只能定义一次。变量定义语句的位置,C+中没有要求,放在第一次使用该变量之前的任何位置均可以。,建议:把变量定义语句放在首次使用它的地方,这样可以提高程序的可读性。,31,变量名称的定义,变量名称的定义遵循标识符定义的规则,实际上变量名称就是一种标识

11、符。常用的命名约定有三种:1、Unix环境常用的命名法 my_age、num_of_student 2、驼峰式命名法 myAge、numOfStudent 3、匈牙利标记法 iMyCar、ipMyCar,32,给变量赋值,赋值 使用赋值运算符“=”可以将一个值赋给变量。先定义后赋值,定义同时初始化 例如:unsigned short age;age=18;或者 unsigned short age=18;,33,给变量赋值,可以一次定义多个相同数据类型的变量,也可以一次为多个变量初始化:char ch1=a,ch2=b;int height=10,width=6,area;,特性:变量可以被多

12、次赋值,但每次赋值后,原值都会被新值覆盖。,34,例2.2:赋值运算符的使用,#include using namespace std;void main()int myAge=18;coutmyAge=myAgeendl;myAge=20;coutmyAge=myAgeendl;,运行结果:myAge=18myAge=20,35,2.3 变量,typedef 为已有的数据类型定义一个同义词,或者叫做别名。例如:typedef unsigned int UINT;关键字 数据类型 新类型名(别名赋值)UINT i;,注意:使用typedef定义同义词时并不分配内存空间。,36,2.3 常量,严

13、格来说,常量又分成符号常量和常数。符号常量:代表一个固定不变值的名字;常数:程序中使用的具体的数据。,37,2.3 常量,符号常量 C+中提供了一个关键字const,用来区分常量和变量。由于常量代表一个固定的值,并且该值在程序运行过程中不能够被改变,所以要求常量在定义的时候必须进行初始化。例如:const float PI=3.1415;关键字 数据类型 常量名=初始值;,38,2.3 常量,define关键字 在C语言中使用预编译指令#define也能够定义常量。例如:#define PI 3.1415927 关键字 常量名 值,该语句属于预编译指令,不属于C+语句,因而行尾不需要使用分号。

14、并且由于C+是向下兼容的,因而C语言的程序能够在C+的编译器下顺利运行。但是在C+编程中,建议使用const替代#define定义常量。,39,2.3 常量,编程时使用符号常量可以增强程序的可读性可以增强程序的可维护性,40,整型常数,整型常数:多进制 十进制数:100(有符号)八进制数:0123(0-7),无符号整型数,(123)8=83 十六进制数:0 x123(0-9,A-F),无符号整型数,(123)16=291用 U或 u表示无符号整型,如65535U。用 L或 l表示长整型,如123L。默认的是int型。,41,实型常数,实型常数 小数形式 例如:0.123、23.12 指数形式:

15、aEb=a10b 例如:123e5或123E5=123105实常数默认为double型可用后缀 F(f)表示实数常数为float型。可用后缀 L(l)表示实数常数为long double型。,注意:b必须是十进制整数,a可以是十进制整数或者小数形式的实数,并且数字a和b都不可以省略,42,字符常数,字符常数 1、用单引号扩起来的一个字符,例如:a、?。2、转义字符 以开头的字符序列,代表特殊的意义。例如:n、t、”换行 制表符 双引号(P18),43,字符形式 ASCII码 含义a0 x07bell(响铃)n0 x0A换行r0 x0D回车t0 x09制表符v0 x0B垂直跳格b0 x08Bac

16、kspace0 x5C0 x22双引号0 x27单引号 ooo 1-3位8进数 xhh 1-2位16进数,字符常数,44,例2.3:打印特殊字符,#include using namespace std;void main()cout输出字母:aaendl;cout输出字母:nn;,运行结果:输出字母:a(蜂鸣器响一声)输出字母:n(换行),45,2.3 常量,反斜杠还可以和八进制数或十六进制结合起来表示相应的ASCII码。表示形式如下:ooo:13位八进制数 xhh:12位十六进制数在十六进制的ASCII码表中,字母az的ASCII值是61H7AH,因此也可以使用如下两句代码替代例2.3中的

17、输出,达到同样的结果。cout输出字母:x61x07endl;cout输出字母:x6Ex0A;,46,2.3 常量,字符数据的存储 char ch1=a,ch2=97;原因:在内存中,字符数据以ASCII码存储,即以整数表示,所以,C+中字符数据和整数可以相互赋值。,47,例2.4:字符数据和整型数据的转换,#include using namespace std;void main()int n=a;char ch=97;cout输出内容:nendl;cout输出内容:chendl;,运行结果:输出内容:97 输出内容:a,注意:变量在输出时,根据其本身的数据类型进行输出。,48,字符串,字

18、符串常量 由一对双引号括起来的字符序列,例如:“how do you do?”“hello world!”,49,字符串,字符和字符串的区别 1、字符常量和字符串常量是不同的,字符串常量以0结尾。例如:字符串Hello在内存中的形式:2、“a”不等于a,“a”占2个字节,a占1个字节,a 0,a,50,字符串,字符串变量 char a20=“Hello worldn”;char b5=“a”;char c=a;思考字符串“x07Operatingtsystem”显示结果如何?字符串“abn”在内存中占几个字节?,51,2.3 常量,逻辑常数 逻辑型常数只有两个:false(假)和true(真)

19、。在显示器上显示为0和1。,52,第2章 基本数据类型与表达式,53,2.4 运算符和表达式,1、表达式2、语句和块3、运算符 赋值运算符、算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符、逗号运算符,54,2.4 运算符和表达式,表达式变量、常量是存放数据的地方,那么在C+语言中这些数据是如何处理和计算的呢?在C+语言中将变量、常量和运算符有机结合在一起组成的就是表达式,利用表达式C+可以进行复杂的运算和处理。,55,例如:3.2/简单表达式,值为3.22+3/常量表达式,值为5a/简单表达式,值为变量a的值x=(a+b)*c;/较为复杂的表达式 表达式是可以嵌套的,比如y=x=a+

20、b,该表达式先将a和b进行相加,然后将结果赋值给x,再将x=a+b的值赋给y。,2.4 运算符和表达式,56,2.4 运算符和表达式,表达式定义:表达式是运算符、操作数和标点符号组成的序列。运算符:+-*/等 操作数:变量、常量、数组等 标点符号:空格、回车等,表达式总能返回一个值作为表达式的结果。,57,2.4 运算符和表达式,语句和块C+中所有的操作运算都通过表达式来实现。由表达式和结尾的“;”组成一个C+语句;多条C+语句通过大括号括起来,组成一个块语句,例如:int temp=x;x=y;y=temp;一般来说属于同一个逻辑关系的多条语句组成块语句。,58,运算符,运算符具有优先级和结

21、合性:优先级:级别高的先运算,级别低的后运算。例如:*/高于+-结合性:自左向右结合还是自右向左结合。例如:1+2+3,+自左向右结合。,59,2.4 运算符和表达式,60,2.4 运算符和表达式,运算符 根据运算符对操作数的要求不同,分成:一元运算符:仅需要一个操作数的运算符,例如+等 二元运算符:需要两个操作数的运算符,例如:+、-、*、/等,形如“操作数1 运算符 操作数2”三元运算符:需要三个操作数的运算符,只有条件运算符“?:”。,61,运算符,运算符赋值运算符算术运算符关系运算符逻辑运算符位运算符条件运算符逗号运算符,62,2.4 运算符和表达式,赋值运算符 1、赋值运算符就是“=

22、”例如:float f=3.15 2、左值:可以合法的放在“=”左边的操作数 右值:可以合法的放在“=”右边的操作数 常量都是右值,所以不能够放在“=”的左边被赋值;变量既是左值又是右值,可以放在任何位置。,注意:并不是所有的操作数都可以作为左值。符号常量就不能作左值;带运算符的表达式一般也不能作为左值。,63,2.4 运算符和表达式,赋值运算符例如:float x,y;const float PI=3.14;x=3.5;/正确 3.5=x;/有语法错误 y=x;/正确 y+2=x-10;/语法错误PI=x;/语法错误,64,运算符,运算符赋值运算符算术运算符关系运算符逻辑运算符位运算符条件运

23、算符逗号运算符,65,2.4 运算符和表达式,算术运算符 C+提供的算术运算符包括“+,-,*,/,%,+,-”1、二元运算符:+(加),-(减),*,/,%2、一元运算符:+(正号),-(负号),+,-,66,2.4 运算符和表达式,算术运算符 注意:1、“/”根据操作数不同,运算规律也不同:整型数为整除运算:例如5/2=2;浮点数为通常意义的除法:即5.0/2.0=2.5。2、“%”取余数运算符,只能对整型数进行操作,不允许对浮点数进行操作。,67,2.4 运算符和表达式,/例2-5“/”和“%”运算符的使用。#include using namespace std;void main()

24、int a=-4,b=3;couta=a b=bendl;couta/b=a/bendl;cout(float)a/b=(float)a/bendl;couta%b=a%bendl;coutb%a=b%aendl;,运行结果:a=-4 b=3 a/b=-1(float)a/b=-1.33333 a%b=-1 b%a=3,68,2.4 运算符和表达式,算术运算符 C+中提供了两个特殊的运算符:+,-表示将操作数加减1。+、-运算符根据操作数的位置不同,又称为前置(+i)和后置(i+)1、前置(+i):先自身加1,然后再将加1的值作为(+i)表达式的值;2、后置(i+):将i作为(i+)表达式的值

25、,然后自身再加1。,69,例2.6:自增运算符的使用,#include using namespace std;void main()int i=1;couti=iendl;couti+:i+endl;couti=iendl;cout+i:+iendl;couti=iendl;,运行结果:i=1i+:1i=2+i:3i=3,70,2.4 运算符和表达式,算术运算符 在C+中可以将算术运算符和赋值运算符结合在一起进行运算,因此C+还提供5种复合的赋值运算符:+=,-=,*=,/=和%=。例如:x+=y 相当于 x=x+y x-=y相当于 x=x-y x*=y相当于 x=x*y x/=y相当于 x

26、=x/y x%=y相当于 x=x%y,71,2.4 运算符和表达式,算术运算符优先级由高到低依次为:1、+(正号),-(负号),+,-2、*,/,%3、+、-4、=、+=、-=、*=、/=、%=,72,例2.7 算术运算符和赋值运算符结合,#include using namespace std;void main()int x=2,y=3;x*=y+8;coutxendl;,运行结果:22原因:x*=y+8 等价于 x=x*(y+8),73,2.4 运算符和表达式,注意在进行算术运算时,很可能出现溢出,溢出是指在给一个变量赋值时超出了其数据类型表示的范围。溢出不会引起编译错误的,但运行结果会

27、出现偏差。例如:short int i=40000;(2字节:-215215即:-3276832767)cout(k=i+j)endl;,输出结果:-25536,74,补码,补码:在计算机系统中,数值一律用补码来表示(存储);主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。正数的补码与原码相同;负数的补码是反码加1;,75,补码,补码:,76,原码,原码:原码、反码、补码都是有符号定点数的表示方法。原码表示,简单直观,乘除运算方便,加减运算比较复杂,要分别考虑符号位和数值位。一个有符号定点数

28、的最高位为符号位,0是正,1是负。原码就是这个数本身的二进制形式。以下都以8位整数为例,例如 0000001 就是+1 1000001 就是-1,77,反码,反码:正数的反码、补码和其原码相同。负数的反码是其原码除符号位外其他位取反。例如:-7的反码:,78,补码,正数的补码:与原码相同。例如,+9的补码是00001001。负数的补码:负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。即:负数的补码是反码加1;例如,-7的补码是11111001。,79,补码,补码如何化为原码:符号位为0,正数,补码与原码相同;符号位为1,负数,除符号位外,其余各位取反加1;,80,2.4 运算符和表

29、达式,short int i=40000:2字节,16bits40000=215+212+211+210+26按补码表示,化为整数为:-(214+213+29+28+27+26)=-25536,81,2.4 运算符和表达式,运算符赋值运算符算术运算符关系运算符逻辑运算符位运算符条件运算符逗号运算符,82,2.4 运算符和表达式,关系运算符 关系运算符有=、!=、=、=、=、2、=、!=由关系运算符将两个表达式连接起来,就是关系表达式;关系表达式的结果类型为bool,值只能为true或false,屏幕显示为1或0。,83,例如,int a=1,b=2,c=3;cout=b)b=ca+5;cout

30、dendl;,结果true,输出为1,结果false,输出为0,结果true,输出为1,结果true,输出为1,结果false,输出为0,84,2.4 运算符和表达式,运算符赋值运算符算术运算符关系运算符逻辑运算符位运算符条件运算符逗号运算符,85,2.4 运算符和表达式,逻辑运算符 逻辑运算符有三种:这些运算符的优先级由高到低依次为:1、!2、&3、|除了逻辑非,逻辑运算的级别低于关系运算。逻辑表达式的结果类型也为bool,值只能为true或false,屏幕显示为1或0。,86,2.4 运算符和表达式,注意 如果多个表达式用,运行结果:2,87,2.4 运算符和表达式,运算符赋值运算符算术运

31、算符关系运算符逻辑运算符位运算符条件运算符逗号运算符,88,2.4 运算符和表达式,位运算符 一般高级语言:byte,C语言:bit C+语言中提供了六个位运算符:,89,2.4 运算符和表达式,按位与(&)按位“与”操作的作用是将两个操作数对应的每一位分别进行逻辑与操作。例如:计算3&5 3:0 0 0 0 0 0 1 1 5:0 0 0 0 0 1 0 1 3&5:0 0 0 0 0 0 0 1,90,2.4 运算符和表达式,按位与(&)使用按位与(&)操作可以将操作数中的若干位置0(其他位不变),或者取操作数中的若干指定位。例如:将char a的最低位置0:,a=a,91,2.4 运算符

32、和表达式,按位或(|)按位“或”操作的作用是将两个操作数对应的每一位分别进行逻辑或操作。例如:计算3|5 3:0 0 0 0 0 0 1 1 5:0 0 0 0 0 1 0 1 3|5:0 0 0 0 0 1 1 1,92,2.4 运算符和表达式,按位与(,93,2.4 运算符和表达式,按位异或()按位异或操作的作用是将两个操作数对应的每一位分别进行异或操作。运算规则:11=0,00=0,10=01=1 例如:计算35 3:0 0 0 0 0 0 1 1 5:0 0 0 0 0 1 0 1 3 5:0 0 0 0 0 1 1 0,94,2.4 运算符和表达式,例如:如何使8位二进制数01111

33、010的后四位翻转?,可以将该二进制数与00001111进行异或操作:0 1 1 1 1 0 1 0()0 0 0 0 1 1 1 1 0 1 1 1 0 1 0 1,如果某位和0异或,结果是该位的原值,如果某位和1异或,则结果与该位原来的值相反。,使用按位异或()操作可以将操作数中的若干位反转。,95,2.4 运算符和表达式,按位取反()按位取反是一个一元运算符,它的作用是将两个操作数对应的每一位分别进行取反操作。具体运算规则:1=0,0=1。例如:计算5 5:0 0 0 0 0 1 0 1 5:1 1 1 1 1 0 1 0,使用位运算实现掩码运算 掩码:其实就是一个位模式。表示从一个字中

34、选出一组位。例如:掩码0 xFF表示一个字的低位字节。掩码0 xFFFFFF00,它表示一个字(32位)除了最低字节外的其他高位字节。掩码0 xFF也可表示一个字除了最低字节外的其他高位字节。,2.4 运算符和表达式,位运算应用举例 例:2-7 设主机A的IP地址为IPa,子网掩码设置为MASKa,主机B的IP地址为IPb,子网掩码设置为MASKb。(1)当主机A向主机B发送IP包时,如何判断主机B是否与自己在同一子网中?(2)当主机A和主机B通信时,两主机又如何确认对方和自己在同一子网中?,2.4 运算符和表达式,位运算应用举例例2-7解:(1)(IPaIPb)&MASKa=0 或(IPa&

35、MASKa)=(IPb&MASKa)(2)(IPa&MASKa)=(IPb&MASKb)或(IPa&MASKa)(IPb&MASKb)=0,2.4 运算符和表达式,99,2.4 运算符和表达式,左移:按照指定的位数将一个二进制数值向右移动,右移后,移出的低位舍弃。如果是无符号数则高位补0,如果是有符号数则高位补符号位或0,在VC+6.0(VC2005)环境下高位补符号位。,100,例子,char a=-8;a=a2;couta=(int)aendl;,a=-2,101,例子,char a=2;a=a1;couta=(int)aendl;,a=4,102,2.4 运算符和表达式,位运算符 在C+

36、中可以将位运算符和赋值运算符结合在一起进行运算,因此C+还提供另外5种运算符&=,|=,=,=。例如:x&=y 相当于 x=x&y x|=y 相当于x=x|y x=y 相当于x=xy x=y 相当于x=xy,103,2.4 运算符和表达式,位运算符这些位运算符的优先级由高到低依次为:1、2、3、&4、5、|6、&=,|=,=,=,104,2.4 运算符和表达式,运算符赋值运算符算术运算符关系运算符逻辑运算符位运算符条件运算符逗号运算符,105,2.4 运算符和表达式,条件运算符条件运算符语法格式为:表达式1?(表达式2):(表达式3);运算的结果是:如果表达式1的值为真,则返回表达式2的值,否

37、则返回表达式3的值。例1:x=ay?x:y)endl;,结果为:1,106,2.4 运算符和表达式,运算符赋值运算符算术运算符关系运算符逻辑运算符位运算符条件运算符逗号运算符,107,2.4 运算符和表达式,逗号运算符 逗号表达式的语法格式为:表达式1,表达式2,表达式n;C+顺序计算表达式1,表达式2,表达式n的值,并将最后一次计算的结果作为逗号表达式的结果。例如:int a,b,c;a=1,b=2,c=a+b;,结果:3,108,例子,int a,b,c,d;d=(a=1,b=2,c=a+b,a+b+c);coutdendl;,结果:6,109,2.4 运算符和表达式,数据类型转换 当表达

38、式中出现多种数据类型的混合运算时,往往需要进行类型转换。表达式中的类型转换分成两种:1、隐式类型转换 2、强制类型转换。,110,2.4 运算符和表达式,隐式类型转换各种二元运算符在进行运算时都要求两个操作数的数据类型一致。如果类型不一致,则系统自动对数据进行转换(隐式类型转换)。转换的基本原则:将精度较低、范围较小的类型转换成精度较高、范围较大的类型。charshort int long float double,隐式类型转换例2-8 数据类型的自动转换。include using namespace std;void main()char ch=a;int i=100;double d=1

39、23.09;coutch+iendl;/自动转换为int型 coutch+i+dendl;/自动转换为double型,运行结果:197 320.09,提示:在转换过程中不会造成数据精度的丢失。,-111-,2.4 运算符和表达式,112,2.4 运算符和表达式,隐式类型转换对于同一种精度的无符号数和有符号数,在进行算术运算中,有符号数向着无符号数方向进行隐式类型转换:signed unsigned。例如:int a=100;unsigned int i=99;cout(i-a)endl;,-1补码为十六进制的FFFFFFFF232-1=4294967295结果为:4294967295,113,

40、2.4 运算符和表达式,隐式类型转换 逻辑运算符要求参与运算的操作数为bool类型,如果是其他类型,则系统自动将其转换成bool类型,转换规则:0为false,非0为true。赋值运算符要求“=”左右两边的操作数数据类型相同,如果类型不一致,则自动将右边的操作数类型向着左边的操作数类型转换。例如:int i=3.15;coutiendl;,运行结果:3,114,2.4 运算符和表达式,强制类型转换 强制类型转换通过是类型说明符和括号来实现的显式转换,其语法格式为:(数据类型名)表达式 或 数据类型名(表达式)例如:int i=97;cout(char)iendl;float f=3.75;co

41、ut(int)fendl;,运行结果:a3,C风格的强制类型转换 语法格式为:(数据类型名)表达式 或 数据类型名(表达式)例如:int i=97;cout(char)iendl;float f=3.75;cout(int)fendl;,2.4 运算符和表达式,C+的强制类型转换符 语法格式为:static_cast(表达式)例如:int i=97;cout(i)(f)endl;,2.4 运算符和表达式,强制类型转换 几点说明:如果强制由高精度的数据类型转换至低精度的数据类型,数据精度将受到损失,从这个意义上说,强制类型转换是一种不安全的类型转换。基本数据类型之间的强制转换都是允许的,但当遇到

42、不允许的类型转换时,用C风格的类型转换,编译时不会报错;而用static_cast,在编译时就会报错。,建议:在C+编程时要用static_cast进行强制类型转换。,2.4 运算符和表达式,118,第2章 基本数据类型与表达式,119,2.5 基本输入输出,在iostream库中包含有一个标准输入流对象cin和一个标准输出流对象cout,分别用来实现从键盘读取数据,以及将数据在屏幕输出。定义文件流对象,实现文件的读写操作。1、cin:从键盘读取数据 2、cout:将数据在屏幕输出 3、I/O流的格式控制 4、文件的输入输出,120,1、标准输入流cin cin负责从键盘读取数据,使用提取操作

43、符“”就可以将键盘键入的数据读入到变量中。语法格式为:cin变量1变量2变量n;例如:int a,b;char ch;cinabch;,2.5 基本输入输出,例2-9:计算从键盘输入的若干个整数的和。#includeusing namespace std;void main()int sum=0,value;while(cinvalue)/如果能从cin提取数值,sum+=value;/则cin的值为真,执行循环 coutsum is:sumendl;,运行结果:1 2 3 4 5 z/键盘输入 sumis:15,2023/8/31,-121-,北京邮电大学信息与通信工程学院,2.5 基本输入

44、输出,122,2、标准输出流cout cout负责将变量或常量中的数据输出到屏幕,使用插入操作符“”就可以将变量或常量的数据显示在屏幕上。例如:coutHello world!n;cout能够自动识别“”后面的数据类型并进行显示,并且可以从左到右一次显示多个变量。,2.5 基本输入输出,123,例子,#include using namespace std;void main()int a,b;char ch;coutabch;couta=a b=b ch=chendl;,请按顺序输入2个整数和1字符:12 23 aa=12 b=23 ch=a,124,3、IO流的格式控制 库文件 ioman

45、ip:(manipulator)常用控制符:setfill(c)设置填充字符 setw(n)设置域宽为n,2.5 基本输入输出,125,设置输出宽度和填充字符 setw(n)设置域宽,即设置“”符号后面的数据占用的屏幕宽度。setfill(c)设置填充字符,即“”符号后面的数据长度小于域宽时,使用什么字符进行填充。,2.5 基本输入输出,126,setw(n)和setfill(c),例1:coutsetw(8)asetw(8)b endl;输出结果:例2:coutsetfill(*)setw(5)aendl;输出结果:,_ _ _ _ _ _ _a_ _ _ _ _ _ _b,*a,127,#

46、include#include using namespace std;void main()coutsetfill(*)setw(2)n setw(3)n setw(4)n setw(5)n setw(6)n setw(7)n setw(8)n;,*,2.5 基本输入输出,128,2.5 I/O流控制,注意1 除了setw()控制符外,其他控制符一旦设置,则对其后的所有输入输出产生影响。而setw()控制符只对其后输出的第一个数据有效,对其他数据没有影响,所以如下代码:coutsetw(8)abendl;输出结果:,_ _ _ _ _ _ _ab,129,2.5 I/O流控制,注意2 set

47、w()的默认为setw(0),意思是按实际输出。如果输出的数值占用的宽度超过setw(int n)设置的宽度,则按实际宽度输出。例如:float f=0.12345;coutsetw(3)fendl;,0.12345,130,2.5 I/O流控制,3、I/O流的格式控制 C+默认输出浮点数的有效位为6位,那么要想控制输出的数据的长度,该如何呢?比如:float f=3.1234567;如何让显示结果为3.12?C+提供了setprecision(int n)可以控制显示浮点数的有效位。,131,#include#include using namespace std;void main()fl

48、oat f=17/7.0;coutfendl;coutsetprecision(0)fendl;coutsetprecision(1)fendl;coutsetprecision(2)fendl;coutsetprecision(3)fendl;coutsetprecision(6)fendl;coutsetprecision(8)fendl;,2.428572.4284722.42.432.428572.4285715,2.5 I/O流控制,132,2.5 I/O流控制,3、I/O流的格式控制 如何控制小数的位数?setiosflags(ios:fixed)控制符是用定点方式表示浮点数,将s

49、etprecision(int n)和setiosflags(ios:fixed)结合,可以使用setprecision(int n)控制小数点右边小数的个数。当设置为定点格式时,若不设置精度则显示6位有效小数。,133,#include#include using namespace std;void main()float f=17/7.0;coutsetiosflags(ios:fixed);coutsetprecision(0)fendl;coutsetprecision(2)fendl;coutsetprecision(3)fendl;coutsetprecision(4)fendl

50、;,22.432.4292.4286,2.5 I/O流控制,2.42857,134,2.5 I/O流控制,3、I/O流的格式控制 如何控制指数表示的小数个数?setiosflags(ios:scientific)控制符使用指数方式显示浮点数,将setprecision(int n)和setiosflags(ios:scientific)结合,可以使用setprecision(int n)控制指数表示法的小数位数。用科学记数格式显示实数时,e前面总是带有一位整数的实数。在没有设置精度时,显示6位有效的小数位。,135,#include#include using namespace std;vo

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号