版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第1章 C+基础知识 程序设计语言是人类在计算机上解决实际问题的 一种工具。当一个求解问题能够用数学模型表达 时,人们会考虑用某种程序设计语言将该问题的 数学模型表示成计算机可以接受的程序形式,再 由计算机自动处理这个程序,生成人们所需要的 结果。 1.1 程序设计语言的基本概念 1. 面向过程的结构化程序设计语言 2. 面向对象的程序设计语言有两类:一类 是完全面向对象的语言,另一类是兼顾面 向过程和面向对象的混合式语言。C+语 言就是后一种形式的典型代表。 1.2 C+程序的基本结构 1.2.1 C+程序结构 一般来说,C+程序的结构包含声明区、函数区两 个部分,在任何一个区内都可以随时插
2、入程序的注 释。 【例1.1】从键盘输入圆的半径,求圆的面积。 程序代码如下: /*ex1_1.cpp* #include using namespace std; #define PI 3.14159 float sum(float x); void main() float r,s; coutr; s=sum(r); coutr=r s= sendl; float sum(float x) return PI*x*x; 1声明区 声明区在函数之外。程序的声明区可能需要编写: (1)包含文件,如例1.1中的#include ; (2)宏定义,如例1.1中的#define PI 3.14159
3、; (3)函数声明,如例1.1中的float sum(float x); (4)条件编译; (5)全局变量声明; (6)结构体等的定义; (7)类的定义。 2函数区 一个程序由一个主函数main()和多个(可以是0个 )其他函数组成。每个函数都是由函数声明部分与 函数体部分组成。程序的执行从main()函数开始。函 数声明部分包括函数返回值类型、函数名、函数的 形式参数。 函数体部分是用一对花括号 括起来的完成该函数 所表达的功能的语句的集合。语句可以是数据描述 语句或数据操作语句。 任何一种程序设计语言可用下面的模型描述: 一种程序设计语言的模型与人类的自然语言模型 是一致的,都遵守这种模型
4、。读者可以借鉴人类 自然语言的学习方法来学习某种程序设计语言。 1.2.2 C+程序的书写格式 C+程序的书写格式比较灵活,书写程序时可以任 意换行,一行内可以书写多条语句,一条语句可以 书写在多行上,只要每条语句以分号(;)结束即 可。也因为如此,所以C+程序可读性差,为了提 高程序的可读性,C+程序的书写格式有如下约定: (1)C+程序中,每行一般书写一条语句;语句 较短时,多条语句可书写在一行内。语句较长时, 一条语句可写在多行上。 (2)C+程序中,每条语句以分号结束,表示一 条语句的结束,但函数说明行和声明区的多数语句 后不用分号。语句前面没有标号,只有goto语句的 转向目标语句前
5、加标号。 (3)C+程序中,使用向右缩进方法表达程序中 的层次结构,如花括号 内的函数体、循环语句的 循环体、if语句的if体和else体一般都向右缩进几个 字符。花括号是函数体或复合语句的定界符。 (4)C+程序中,可使用多行注释或单行注释以 增强程序的可读性。多行注释以“/*”开始,以“*/”结 束,占据多行。单行注释以“/”开始,占据一行。 1.3 一个应用程序的开发过程 1.3.1 Visual C+ 6.0开发环境 采用Visual C+ 6.0开发环境 ;这是一个集编辑、 编译、链接、调试运行于一体的集成环境,即在一 个程序的控制下可以分步或一次性地完成编辑、编 译、链接、调试运行
6、工作。 1.3.2 一个应用程序的开发过程 1启动Visual C+ 6.0开发环境 2创建工程项目 3打开项目文件 4创建C+源程序文件并添加到项目文件中 5编译、链接与运行程序 在上页图中单击“Compile”按钮进行编译,单击 “Build”按钮进行编译与链接(在没有编译的情况 下),单击“Execute Program”按钮进行编译、 链接和运行(在没有编译、链接的情况下)。 例1.1程序所建立的项目的运行结果如下: 1.4 C+的词法规则 一个程序包含两个方面的主要内容:数据描述和数据 操作。数据是操作的对象,数据的存储方式决定于该 数据的数据类型,描述数据就是定义数据的类型。数 据
7、类型的定义表现在常量、变量等的定义之中,而常 量、变量又是一种程序设计语言的基本单词。除了常 量、变量之外,一种程序设计语言还有标识符、运算 符、关键字、分隔符等基本单词,这些单词的构成 (书写规则)都必须遵守该语言的词法规则。 本节介绍的就是C+中各种单词的构词规则。 请读者结合前面的语言模型图学习本节内容 并思考本节内容属于语言模型图的哪个环节。 由一种语言提供的字符集中的字符构造的单 词必须遵守该语言的词法规则。在一种语言 中,单词涉及标识符、关键字、运算符、常 量、变量、注释符、分隔符等。C+也不例 外。本节只讨论C+中的基本词法规则。 1.4.1 C+的字符集组成 C+的字符集包括如
8、下字符: (1)26个小写字母:az。 (2)26个大写字母:AZ。 (3)10个数字:09。 (4)标点和特殊字符:+ - * / , : ; ? ” | ! # % ),主要用于for语句的 for关键字后的圆括号内,作分隔符;冒号(:),用来 标识语句标号和开关语句,常用于switch的case关键 字后。 1.5 C+基本数据类型 表1-2 C+基本数据类型 基本型(int) 短整型(short) 长整型(long) 无符号整型(unsigned int) 无符号短整型(unsigned short int) 无符号长整型(unsigned long int) 有符号整型(signed
9、 int) 有符号短整型(signed short int) 有符号长整型(signed long int) 字符型(char) 单精度浮点型(float) 双精度浮点型(double) 长双精度浮点型(long double) 4 2 4 4 2 4 4 2 4 1 4 8 8 -2 147 483 6482 147 483 647 -32 76832 767 -2 147 483 6482 147 483 647 04 294 967 295 065 535 04 294 967 295 -2 147 483 6482 147 483 647 -32 76832 767 -2 147 48
10、3 6482 147 483 647 0255 -3.410383.41038 -1.7103081.710308 -1.7103081.710308 数 据 类 型字节数数据表达范围 1.6 常量与变量 常量与变量是C+中最基本的数据描述形式。本节 只介绍常量和变量的基本概念,包括5种常量和基 本数据类型的变量。关于构造类型的变量将在后 续章节中介绍。 1.6.1 常量 常量是在程序中不改变的量。C+程序中有4种常 量:整型常量、浮点型常量、字符常量和字符串 常量。 1整型常量 C+程序中,整型常量和浮点常量统称数值常量。 整型常量有三种形式:十进制、八进制和十六进制。 十进制常量的写法就是
11、算术表达方式,如12、345都 是合法的十进制常量。 八进制常量在数值前要加上一个零(0),如011、 077都是合法的八进制常量。 十六进制常量的写法是在数值前加上一个零(0)和 一个字母X(大小写均可),如0X11、0 xF都是合法 的十六进制常量,分别等于十进制数17和15。 2浮点型常量 浮点型常量又称实数型常量。分为十进制数形式和指 数形式两种表示方法。 (1)十进制数形式的浮点型常量的书写格式: . 其中小数点不能省略。如1.2345、1.0、1.、.12345均 是合法的浮点型常量。 (2)指数形式的浮点型常量的书写格式: .E 其中,指数形式表示符“E”大小写均可。 .部分允许
12、不含小数点的,或含小数点的, 必须是整数。如12E-3、0.1E2、.12345E6、0E0等 均是合法的。 【例例1.2】浮点型常量的运用。浮点型常量的运用。 程序代码如下:程序代码如下: /*ex1_2.cpp* #include #include using namespace std; void main() int x=77; float a; double b; long double c; a=88.12300000000000000000f; b=-1.69901234567890123456789e308; c=-1.69901234567890123456789e308;
13、coutx=xendl; couta=setprecision(7)aendl; couta=setiosflags(ios:scientific)aendl; coutsetprecision(20)b=b; couttc=cendl; 程序的运行结果如下: 3字符常量 字符常量是一个用单引号括起来的字符。单引号是 字符常量的定界符,单引号本身表示成。在 C+中,字符常量具有整数值,其值是该字符的 ASCII码。一个字符常量可以与整数进行加减运算。 下面的程序给出了字符与整数进行加减运算的实例。 【例例1.3】字符常量的运用。字符常量的运用。 程序代码如下:程序代码如下: /*ex1_3.c
14、pp* #include #include Using namespace std; void main() char a,b,c,d; a=A; b=B; c=a+3; d=; coutatbtcendl; couthexint(a)tint(b)tint(c)endl; coutdendl; 程序的运行结果如下: ABD 414244 4字符串常量 字符串常量是用双引号括起来的若干个字符组成的 字符序列。双引号是字符串常量的定界符,双引号 本身表示成“”。“”是一个空字符串,空字符串 中没有任何有效字符,只有一个字符串结束符。在 C+程序中,任何一个字符串常量都有一个结束符, 该结束符是A
15、SCII码值为0的空字符,表示为0。 字符常量与字符串常量是不同的,表现在: (1)表示形式不同。前者用单引号括起来,后者用双引号括 起来。 (2)存放它们的对象不同。前者存放在字符变量中,后者存 放在字符数组或字符指针指定的位置。如,char c=A, s5=ABCD; (3)存放字符串常量时要加一个结束符,而存放字符常量则 不需要。所以A与“A”不同。且其占用的内存空间也不同, A占1个字节;“A”占2个字节,前一字节存放字符A,后 一字节存放结束符。 (4)对它们进行的运算也不同。字符与字符、字符与整数间 可作加减运算;而字符串只能作连接运算。 【例例1.4】字符串常量的运用。字符串常量
16、的运用。 程序代码如下:程序代码如下: /*ex1_4.cpp* #include using namespace std; void main() char s180,s280; couts1s2; couts1ts2endl; 程序的运行结果如下: 5符号常量 符号常量是一个用来替代常量(前面讨论的4种常 量)的标识符。这个标识符当然叫符号常量。 (1)增强程序的可读性。标识符可以定义得有意 义,如用PI表示圆周率。 (2)书写简单,不易出错。有的常量直接书写很 长,容易出错,如圆周率3.141 592 6用PI代之,既 简单又不容易出错。 (3)修改程序方便。 例如: #define P
17、I 3.1415926 #define SIZE 100 1.6.2 变量 变量是在程序中可以改变的量,变量有名字、类 型和值三个要素。变量的类型包括存储类和数据 类型两个方面。某个变量的值被改变后,将一直 保持到下一次被改变。 1变量的定义 变量在使用前必须定义。格式如下: ; 例如:int a,b,c; a、b、c为整型变量;缺省存储类,要看是定义 在函数体内还是函数体外来确定是自动类还是外 部类; static double x,y10; x、y是静态双精度变量,y是数组 2变量的数据类型 变量的基本数据类型有:整型、浮点型和字符型。 变量的构造数据类型称自定义类型。它由若干个数 据类型
18、相同或不相同的变量所构成的类型。如数组、 结构体、共用体、类都是构造数据类型。 3变量的存储类 变量的存储类定义变量的有效性范围,即作用域。 C+中有4类:自动存储类(auto)、寄存器存储类 (register)、静态存储类(static)和外部存储类 (extern)。 (1)自动存储类 某一变量定义成自动存储类后,其作用域在定义 它的函数体或分程序内,自动存储类变量只能定 义在函数体或分程序内。变量的生存期在作用域 内,即执行完定义它的函数后,该变量即被释放。 这类变量的安全性最好,在不同的函数中可以定 义相同名字的变量,互不影响。在函数体内定义 自动存储类变量时可以省去说明符auto。
19、前面程 序中定义的变量都省去了存储类说明符auto,它 们都是自动存储类变量。 (2)寄存器存储类 寄存器存储类的变量与自动存储类的变量有相同的 作用域和生存期。定义这类变量必须加存储类说明 符register,并且只能定义在函数体或分程序内。 这类变量有可能被存放在CPU的空闲通用寄存器中, 当CPU中没有空闲通用寄存器时,当作自动存储类 变量。一旦变量存入CPU的寄存器中,则变量的访 问效率将大大提高,这是因为访问内存比访问CPU 寄存器花的时间长得多。 (3)静态存储类 静态存储类分为内部静态存储类和外部静态存储类。 内部静态存储类变量定义在函数体或分程序内,其 作用域在定义它(们)的函
20、数体或分程序内。而外 部静态存储类变量定义在函数体或分程序外,其作 用域在定义它(们)的文件内,可见两者的作用域 是不同的。 内部静态存储类和外部静态存储类变量有相同的生 存期,都被存放在内存的静态区域,静态变量在程 序结束时才释放内存。 要定义静态存储类变量,必须加存储类说明符static。 (4)外部存储类 外部存储类变量的作用域是整个程序,包含该程 序的各个文件。生存期是整个程序,在程序结束 时才释放内存。 表1-2 各种存储类特性的比较 存 储 类 别 自动类 寄存器类 内部静态类 外部静态类 静态类 外部类 或分程序内 在定义它的文件内 程序的各个文件 程序结束 前有效 离开定义体
21、即消失存取速度快 安全性好 在定义它的函数体 安全性差 同自动类 作 用 域生 存 期其 他 外部存储类变量可以定义在函数体内、外,定义 在函数体外时可以不加存储类说明符,但在说明 一个外部存储类变量时,必须加存储类说明符 extern。有如下两种情况要在引用外部存储类变 量前,对其进行说明。 在一个文件中,在定义前引用外部存储类变量 必须说明。 在多个文件的程序中,在一个文件中定义,在 另一个文件中引用,引用前要说明。 【例例1.5】定义在前、引用在后的外部存储类变量(输出结果与定义在前、引用在后的外部存储类变量(输出结果与 例例1.4类似)。类似)。 程序代码如下:程序代码如下: /*ex
22、1_5.cpp* #include using namespace std; char s180, s280; void main() couts1s2; couts1ts2endl; 【例1.6】定义在后、引用在前的外部存储类变量(输出结果与例1.4类似)。 程序代码如下: /*ex1_6.cpp* #include using namespace std; void main() extern char s180, s280;/说明外部存储类变量说明外部存储类变量 couts1s2; couts1ts2endl; char s180, s280; 4变量的值 变量的值是变量三要素之一。可以
23、在定义变量时对变 量赋初值(变量初始化),也可以在引用变量时通过 其他方法(赋值表达式、cin、scanf函数等)对变量 赋值。 变量初始化格式: =,=,; 如果外部类和静态类变量不进行初始化,那么它 们由编译程序赋以“零值”(数值型变量赋数值0, 字符型变量赋空字符)。如果自动类和寄存器类 变量不进行初始化,那么它们不具有有意义的值, 必须通过赋值后才能引用。 外部类和静态类变量初始化是在编译时给定的。 即在第一次执行定义或说明时给定,以后进入所 定义的函数体或分程序不再赋初值。而自动类和 寄存器类变量的初始化是在每次进入函数体或分 程序时重新定义初值。 可见,变量有定义和引用两个方面。变
24、量的定义涉及变量名 称、存储类和数据类型。引用即使用,通常先定义,后使用。 例1.6是特例,但在使用前必须说明。引用一个变量,其值 是否有意义是一个重要的问题。如在一个函数内定义内部静 态存储类的变量,离开这个函数后,虽然变量仍然存在,但 它的值可能无效了,所以不能引用。 下面是一些合法的定义: int a=1,b=2,c=3; static char xyz=A,buffer10=Hello; double a5=1.12345,2.23456,3.34567,4.45678,5.56789 float s=1+2+3; 关于在引用变量时通过赋值表达式、cin、scanf函数 等方式对变量赋
25、值,在前面的实例中已大量使用。值 得一提的是赋值表达式,在下面的程序段中: int a; a=12; “a=12”是一个赋值表达式。C+允许表达式当作语句使用,其后要加分号, 所以“a=12;”是赋值表达式语句。“a=12”这个表达式有双重意义:表达 式“a=12”具有12的值,另外表达式“a=12”的副作用使变量a具有12的值。 给变量赋值正是利用了这种副作用。这是C+与其他高级程序设计语言不 同的地方,其他语言称“a=12”是赋值语句。 1.7 运算符与表达式 C+的表达式包括算术表达式、关系表达式、逻辑 表达式、赋值表达式、条件表达式和逗号表达式。 C+的类型转换包含隐含转换和强制转换两
26、种方法。 任何表达式后加“;”构成表达式语句。 1.7.1 算术运算符与算术表达式 1算术运算符 算术运算符有: (1)单目运算符:-(取负)、+(增1)、-(减1)。 (2)双目运算符:+(加)、-(减)、*(乘)、/(除)、%(取余)。 单目运算符的优先级高于双目运算符的优先级,双 目运算符中的 *、/、% 的优先级高于 +、- 的优先 级。 +(增1)运算可写在变量前或变量后,分别称作 前缀运算和后缀运算。如果定义一个变量i,前缀 运算记为:+i,后缀运算记为:i+。这样形成了 前缀运算表达式+i和后缀运算表达式i+,在C+ 中,两个表达式都对变量i进行增1运算,这是此两 类表达式的副作
27、用。但把两个表达式分别赋给变量 a和b时,则a和b取不同的结果(见例1.7和例1.8)。 【例例1.7】前缀前缀,后缀运算表达式的运用。后缀运算表达式的运用。 程序代码如下:程序代码如下: /*ex1_7.cpp* #include using namespace std; void main() int i=10, a, b, j=i+10, x, y;/初值初值 可以是包含有值的变量的表达式可以是包含有值的变量的表达式 a=+i; couta=ati=iendl;/注意注意 本行语句与下行语句的位置本行语句与下行语句的位置 b=i+; coutb=bti=iendl; x=-j; cout
28、x=xtj=jendl; y=j-; couty=ytj=jendl; 程序的运行结果如下程序的运行结果如下: 取余运算只能用于两个整型数的运算。功能是求两个整型数相除的余取余运算只能用于两个整型数的运算。功能是求两个整型数相除的余 数。用下面的公式:余数数。用下面的公式:余数=被除数被除数-商商 除数除数 注意:注意:5%-3=2,而,而-5%3=-2。 【例例1.8】取余运算。取余运算。 程序代码如下:程序代码如下: /*ex1_8.cpp* #include using namespace std; void main() int a,b; a=5%-3; b=-5%3; couta=a
29、tb=b(大于) =(大于等于) 0时,表达式“x+yx”是永 真的。但在用计算机语言判断关系表达式 “x+yx”时,可能会得出不真的结论。这种情况 往往出现在x和y两个数差别很大,一个很大,另 一个则小到了语言表达精度以下,以致这个很小 的数对相加结果不产生影响。 【例1.9】关系表达式的运用。 程序代码如下: /*ex1_9.cpp* #define EPS 1.0E-16 #include using namespace std; void main() double x, y; bool z; x=5.0; y=EPS; z=x+yx; coutx=xty=ytz=zendl; 程序的
30、运行结果如下程序的运行结果如下: 1.7.3 逻辑运算符与逻辑表达式 1逻辑运算符 在C+中,逻辑运算符有以下几种: !:逻辑求反(又称逻辑非,单目运算符) void main() int a, b, c, d; bool e; a=5; b=0; c=!b; d=a e=a|b; coutatbtctdte:右移位运算符 :左移位运算符 都是双目运算符,优先级相同,高于逻辑位运算符优 先级。移位运算符左边是要移位的操作数,右边是要 移位的位数。移位运算表达式写为: 或: 右移位操作是将操作数化成二进制数,将操作数右 移指定位数,移出的二进制位丢弃,左边补0或符号 位(根据编译决定)。 左移位
31、操作是将操作数化成二进制数,将操作数左 移指定位数,移出的二进制位丢弃,右边补0。 【例例1.11】逻辑位运算和移位运算。逻辑位运算和移位运算。 程序代码如下:程序代码如下: /*ex1_11.cpp* #include using namespace std; void main() int a, b; a=13; b=8; couta=ata=aendl; couta coutab=(ab)endl; couta|b=(a|b)endl; cout2=2)endl; couta2=(a2)endl; cout2=2)endl; 程序的运行结果如下: 1.7.5 赋值运算符与赋值表达式 1赋
32、值运算符 赋值运算符有11种,均为双目运算符,优先级仅高于 逗号运算符,结合性是从右至左。11种赋值运算符中 有1个基本赋值运算符,10个复合赋值运算符,分别 为: (1)=:基本赋值运算符 (2)+=:加赋值运算符 (3)-=:减赋值运算符 (4)*=:乘赋值运算符 (5)/=:除赋值运算符 (6)%=:取余赋值运算符 (7)”,即: =; 赋值表达式执行的结果使赋值表达式本身具有一个值, 就是赋值运算符(=)右边表达式的值。还有一个副 作用:使赋值运算符(=)左边的变量具有右边表达 式的值。前面的所有实例中出现的赋值表达式正是利 用这种副作用对变量赋值。可以通过下面的实例理解 赋值表达式具
33、有值这一概念。 【例例1.12】赋值表达式的值及其副作用。赋值表达式的值及其副作用。 程序代码如下:程序代码如下: /*ex1_12.cpp* #include using namespace std; void main() int c=1, a, b; coutc=cendl; a=b=c=10; couta=atb=btc=c ta=b=c=10=(a=b=c=10)endl; couta+=2=(a+=2)endl; a+=a; couta=aendl; 程序的运行结果如下程序的运行结果如下: 其他复合赋值运算符组成复合赋值表达式的形式类似基本赋值表达式,表达形式如 下: += 等价于
34、 =+ -= 等价于 =- *= 等价于 =* /= 等价于 =/ %= 等价于 =% a=b=c=1; 表达式a=b=c=1使3个变量均拥有值1。由于赋值运算 符的结合性是从右至左,所以变量c和表达式c=1先 拥有值1,然后变量b和表达式b=c=1拥有值1,最后 才是变量a和表达式a=b=c=1拥有值1。 (2)使用赋值表达式多用来改变变量的值,赋值表达 式本身的值用得少。在赋值表达式中,赋值运算符左边 的变量称左值,右边的表达式称右值。计算时,先计算 右值,再转换其类型为与左值相同的类型,将右值赋给 左值,同时赋值表达式具有右值的值。右值类型转换过 程是自动完成的,但转换时有数据精度损失。
35、 1.7.6 三目运算符与三目条件表达式 在C+中只有一个三目运算符?:,三目条件表达式格 式如下: ?: 先计算,当非0时,三目条件表 达式取的值,否则取的值。三 目条件表达式的功能可以解释成一个简单的条件语句 (参见第2章)。 三目运算符 ?: 的结合性是从右至左。 【例例1.13】三目条件表达式的运用。三目条件表达式的运用。 程序代码如下:程序代码如下: /*ex1_13.cpp* #include using namespace std; void main() int a=1,b=2,c=3; coutab?a:b = (ab?a:b)endl; coutb?b-:+a = b?b-
36、:+a)endl; coutb?+a:+b = b?+a:+b)endl; coutb?a:bc?b:c = b?a:bc?b:c)endl; 程序的运行结果如下: ab?b-:+a = 2 c+=ab?+a:+b = 6 ab?a:bc?b:c = 6 程序中有4个cout语句,第1个cout语句输出三目条件表达式的 值,显然是1。 在第2个cout语句中,三目条件表达式的值取+a的值,结果 是2。因为ab为0,b-并没有执行,故b的值仍然是2。第2个 cout语句已修改了变量a的值,使a=2。 在第3个cout语句中,由于三目运算符的优先级高于赋值运算 符,所以先计算三目条件表达式ab?+
37、a:+b,由于ab为0, 所以三目条件表达式取+b的值,结果是3;再计算赋值表达 式c+=3,结果是6。此行cout语句修改了b、c两变量的值,使 b=3、c=6。 在第4个cout语句中,由于三目运算符是从右结合的,所以先 计算bc?b:c,结果为6;再计算ab?a:6,结果为6。 1.7.7 逗号运算符与逗号表达式 逗号在C+中可以作为分隔符或运算符。 逗号运算符为双目运算符,它的优先级最低,结合性 是从左至右。逗号运算符用来连接两个或两个以上的 表达式,形成逗号表达式。 计算逗号表达式时,从左至右依次计算各个表达式, 逗号表达式的值取最后一个表达式的值。多用在for循 环语句的for关键
38、字后的圆括号内,圆括号内由分号分 隔的表达式可以是逗号表达式。 注意例1.15中倒数第二行的输出结果。 【例例1.14】逗号表达式的运用。逗号表达式的运用。 程序代码如下:程序代码如下: /*ex1_14.cpp* #include using namespace std; void main() int a=1, b=2, c=3; couta=atb=btc=cendl; c=(a=10, b=a*2, b*2); couta=atb=btc=cendl; couta,b,c,c*3= (a,b,c,c*3):用于结构体、共用体变量。 (4)sizeof:计算一数据类型或一表达式占用内存的
39、字节数。 例如, sizeof(int) 或 sizeof() (5)强制类型:作用于一表达式,使表达式的类型强制性转 换为指定类型。例如, (int)(a+b+1.234567) C+的优先级和结合性比较复杂,通过下面的总结,可以记住: 除最高级和最低级外,其他运算符的优先级是“一二三赋值”。 最高级是圆括号、下标、点、箭头;最低级是逗号。“一二三赋 值”分别指单目、双目、三目、赋值运算符,它们的优先级也是 按此顺序。这样分出了6大类优先级。在双目运算符中,有10 级,顺序是:算术(除求负值运算外分2级)、移位、关系 (分2级)、逻辑位(除按位取反运算外分3级)、逻辑(除逻 辑非运算外分2级
40、)。 单目、三目、赋值运算符的结合性是从右至左,其他运算符的 结合性是从左至右。 【例例1.15】运算符的优先级和结合性。运算符的优先级和结合性。 程序代码如下:程序代码如下: /*ex1_15.cpp* #include using namespace std; void main() int x,y,z; x=!-5+312; y=x-(-1); coutx=xty=yendl; z=xy?x-y?x:y:x*y; coutsizeof(int)=sizeof(int) tsizeof(z)=sizeof(z)endl; coutx=xty=ytz=z2;的计算顺序是:第一步先 计算单目运算,单目运算有两个: !和-,按从右至左的 结合性,先计算-5,再计算 !(-5),结果为0;第二步计算 算术运算0+31;第三步计算右移运算,结果为7,即x=7。 语句y=x-(-1);中间有三个-,前两个是减1单目运算,后 一个是算术减运算。计算顺序是:第一步计算x-,使x=6, 这是减1表达式的副作用,并不计算在y=x-(-1);语句中, 所以语句y=x-(-1);变为y=7-(-1),结果使y=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年高职(水利工程施工技术)水利工程质量检测阶段测试题及答案
- 2026八年级上《实数》考点真题精讲
- 室内设计职业规划
- 中国高血压临床实践指南总结2026
- 新能源车市场:破局与创新-洞察市场趋势迎接营销挑战
- 冶金安全员职业发展指南
- 合肥新站就业指导
- 英语写作进阶之路-打造初中生英语写作新境界
- 构筑学生心理防线-教师角色下的心理问题防控
- 2026三年级上《分数的初步认识》知识闯关游戏
- FZT 60045-2014 汽车内饰用纺织材料 雾化性能试验方法
- 2023年全国中学生数学奥林匹克暨2023年全国,高中数学联合竞赛试题及答案(A卷)
- 检验科新员工岗前培训
- 第9章 语义分割
- 福建省厦门市地图矢量PPT模板
- 浙江省温州市2023年中考科学真题(附答案)
- 大学英语四级翻译课件
- 2021年公安机关人民警察基本级执法资格考试试卷(含答案)
- 2023年马克思主义基本原理概论课后习题答案修订版
- 幼儿园年中班主题方案《常见的用具》
- 《煤矿电工学》第七章采区供电设备选择及其计算课件
评论
0/150
提交评论