收藏 分享(赏)

C++程序设计简单程序设计.ppt

上传人:hwpkd79526 文档编号:10023647 上传时间:2019-09-29 格式:PPT 页数:89 大小:1.74MB
下载 相关 举报
C++程序设计简单程序设计.ppt_第1页
第1页 / 共89页
C++程序设计简单程序设计.ppt_第2页
第2页 / 共89页
C++程序设计简单程序设计.ppt_第3页
第3页 / 共89页
C++程序设计简单程序设计.ppt_第4页
第4页 / 共89页
C++程序设计简单程序设计.ppt_第5页
第5页 / 共89页
点击查看更多>>
资源描述

1、第二章 C+简单程序设计,河海大学 邰 非,目录,2.1 C+语言概述 2.2 基本数据类型和表达式 2.3 数据的输入与输出 2.4 算法的基本控制结构 2.5 自定义数据类型 2.6 深度探索 2.7 小结,2,2.1.1 C+的产生,C+是从C语言发展演变而来的,首先是一个更好的C 引入了类的机制,最初的C+被称为“带类的C” 1983年正式取名为C+ 从1989年开始C+语言的标准化工作 于1994年制定了ANSI C+标准草案 于1998年11月被国际标准化组织(ISO)批准为国际标准,成为目前的C+,3,2.1 C+语言概述,于2003年制定了 C+第二版 于2011年C+11标准

2、推出,4,2.1 C+语言概述,2.1.2 C+的特点,兼容C 它保持了C的简洁、高效和接近汇编语言等特点 对C的类型系统进行了改革和扩充,比C更加安全 C+也支持面向过程的程序设计,不是一个纯正的面向对象的语言 支持面向对象的方法,5,2.1 C+语言概述,2.1.3 C+程序实例例2-1,6,2.1 C+语言概述,/2_1.cpp #include using namespace std; int main() cout “Hello!“ endl;cout “Welcome to c+!“ endl;return 0; 运行结果: Hello! Welcome to c+!,2.1.4

3、C+字符集,大小写的英文字母:AZ,az 数字字符:09 特殊字符:! # % . , : ? ( ) ,7,2.1 C+语言概述,2.1.5词法记号,关键字 C+预定义的单词 标识符 程序员声明的单词,它命名程序正文中的一些实体 文字 在程序中直接使用符号表示的数据 操作符 用于实现各种运算的符号 分隔符 () , : ; 用于分隔各个词法记号或程序正文 空白符 空格、制表符(TAB键产生的字符)、垂直制表符、换行符、回车符和注释的总称,8,2.1 C+语言概述,标识符的构成规则,以大写字母、小写字母或下划线(_)开始。 可以由以大写字母、小写字母、下划线(_)或数字09组成。 大写字母和小

4、写字母代表不同的标识符。,9,2.1 C+语言概述 2.1.5 词法记号,2.2.1 基本数据类型,10,2.2 基本数据类型和表达式,2.2.2 常量,所谓常量是指在程序运行的整个过程中其值始终不可改变的量,也就是直接使用符号(文字)表示的值。例如:12,3.5,A都是常量。,11,2.2 基本数据类型和表达式,整数常量,以文字形式出现的整数,包括正整数、负整数和零。 十进制形式:若干个09的数字 符号加若干个09的数字,但数字部分不能以0开头,正数前边的正号可以省略。 八进制形式:0开头,若干个07的数字 十六进制形式:0x 开头,若干个09的数字及AF的字母(大小写均可) 由于八进制和十

5、六进制形式的整型常量一般用来表示无符号整数,所以前面不应带正负号。 后缀字母L(或l)表示长整型,后缀字母U(或u)表示无符号型,也可同时后缀L和U(大小写无关)。,12,2.2 基本数据类型和表达式表达式 2.2.2 常量,实数常量,以文字形式出现的实数。 一般形式: 例如,12.5,-12.5等。 指数形式: 例如,0.345E+2,-34.4E-3 字母E可以大写或小写。 整数部分和小数部分可以省略其一 实数常量缺省为double型,如果后缀F(或f)可以使其成为float型,例如:12.3f。,13,2.2 基本数据类型和表达式表达式 2.2.2 常量,整数和实数类型常量举例,14,2

6、.2 基本数据类型和表达式表达式 2.2.2 常量,#include using namespace std; int main() const int PRICE = 30;int num, total;float v, r, h;num = 10;total = num * PRICE;cout total endl;r = 2.5;h = 3.2;v = 3.14159 * r * r * h;cout v endl;return 0; ,字符常量,字符常量 单引号括起来的一个字符, 如:a, D, ?, $ C+转义字符列表,15,2.2 基本数据类型和表达式 2.2.2 常量,字符串

7、常量,字符常量 双引号括起来的一个或多个字符, 如:”hello, Wrold!” 系统在未尾自动添加0作尾标识,16,2.2 基本数据类型和表达式 2.2.2 常量,布尔常量,布尔常量 true与false表示,17,2.2 基本数据类型和表达式 2.2.2 常量,2.2.3 变量,变量的声明和定义 声明语句形式如下: 数据类型 变量名1, 变量名2, ., 变量名n; 在定义一个变量的同时,也可以给它赋以初值 例如: int a = 3; 变量的存储类型 auto:采用堆栈方式分配内存空间,属于暂时性存储,其存储空间可以被若干变量多次覆盖使用。 register:存放在通用寄存器中。 ex

8、tern:在所有函数和程序段中都可引用。 static:在内存中是以固定地址存放的,在整个程序运行期间都有效。,18,2.2 基本数据类型和表达式,2.2.4 符号常量,符号常量在声明时一定要赋初值,而在程序中间不能改变其值。 const 数据类型说明符 常量名=常量值; 或:数据类型说明符 const 常量名=常量值;例: const float PI = 3.1415926;,19,2.2 基本数据类型和表达式,算术运算符与算术表达式,基本算术运算符+ - * /(若整数相除,结果取整)%(取余,操作数为整数) 优先级与结合性 先乘除,后加减,同级自左至右 +, -(自增、自减) 例:i+

9、; -j;,20,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,赋值运算符和赋值表达式 简单的赋值运算符“=“,举例 n = n + 5 表达式的类型 赋值运算符左边对象的类型 表达式的值 赋值运算符左边对象被赋值后的值,21,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,赋值运算符和赋值表达式 复合的赋值运算符,有10种复合运算符: +=, -=, *=, /=, %=, =, &=, =, |= 例 a += 3 等价于 a = a + 3 x *= y + 8 等价于 x = x * (y + 8),22,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,

10、赋值运算符和赋值表达式 赋值表达式举例,a = 5 表达式值为5 a = b = c = 5 表达式值为5,a,b,c均为5 a = 5 + (c = 6) 表达式值为11,a为11,c为6 a = (b = 4) + (c = 6)表达式值为10,a为10,b为4,c为6 a = (b = 10) / (c = 2) 表达式值为5,a为5,b为10,c为2 a += a -= a * a 相当于 a = a + (a = a - a * a),23,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,逗号运算和逗号表达式,格式 表达式1,表达式2 求解顺序及结果 先求解1,再求解2,最

11、终结果为表达式2的值 例 a = 3 * 5 , a * 4 最终结果为60,24,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,关系运算与关系表达式,关系运算是比较简单的一种逻辑运算,优先次序为: = = !=优先级相同(高) 优先级相同(低)关系表达式是一种最简单的逻辑表达式 其结果类型为 bool,值只能为 true 或 false。 例如:a b,c = a + b,x + y = 3,25,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,逻辑运算与逻辑表达式,逻辑运算符 !(非) &(与) |(或) 优先次序: 高 低 逻辑表达式 例如:(a b) & (x y

12、) 其结果类型为 bool,值只能为 true 或 false,26,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,逻辑运算与逻辑表达式(续),“&” 的“短路特性” 表达式1 & 表达式2 先求解表达式1 若表达式1的值为false,则最终结果为false,不再求解表达式2 若表达式1的结果为true,则求解表达式2,以表达式2的结果作为最终结果 “|”也具有类似的特性,27,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,条件运算符与条件表达式,一般形式 表达式1?表达式2:表达式3 表达式1 必须是 bool 类型 执行顺序 先求解表达式1, 若表达式1的值为tru

13、e,则求解表达式2,表达式2的值为最终结果 若表达式1的值为false,则求解表达式3,表达式3的值为最终结果 例: x = a b ? a : b;,28,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,条件运算符与条件表达式(续),注意: 条件运算符优先级高于赋值运算符,低于逻辑运算符 表达式2、3的类型可以不同,条件表达式的最终类型为 2 和 3 中较高的类型。 例: x = a b ? a : b;,29,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,sizeof 运算符,语法形式 sizeof (类型名) 或 sizeof 表达式 结果值: “类型名”所指定的类

14、型或“表达式”的结果类型所占的字节数。 例: sizeof(short) sizeof x,30,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,位运算按位与(&),运算规则 将两个运算量的每一个位进行逻辑与操作 举例:计算 3 ,31,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,位运算按位或(|),运算规则 将两个运算量的每一个位进行逻辑或操作 举例:计算 3 | 53: 0 0 0 0 0 0 1 15:(|) 0 0 0 0 0 1 0 1 3 | 5: 0 0 0 0 0 1 1 1 用途: 将某些位置1,其他位不变。 例如:将 int 型变量 a 的低字节置

15、1 : a = a | 0xff;,32,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,位运算按位异或(),运算规则 两个操作数进行异或: 若对应位相同,则结果该位为 0, 若对应位不同,则结果该位为 1, 举例:计算 071052071: 0 0 1 1 1 0 0 1052: () 0 0 1 0 1 0 1 0071052 : 0 0 0 1 0 0 1 1,33,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,位运算按位异或()(续),用途: 使特定位翻转(与0异或保持原值,与1异或取反)例如:要使 01111010 低四位翻转:0 1 1 1 1 0 1 0()

16、 0 0 0 0 1 1 1 10 1 1 1 0 1 0 1,34,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,位运算取反(),单目运算符,对一个二进制数按位取反。 例: 025:0000000000010101025:1111111111101010,35,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,位运算移位,左移运算() 右移后, 低位:舍弃 高位:无符号数:补0有符号数:补“符号位”或补0,36,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,运算符优先级,() +,-,sizeof *, /, % +, - =, != 位运算 & | ?: 赋

17、值运算 逗号运算,37,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,低,高,混合运算时数据类型的转换 隐含转换,一些二元运算符(算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符)要求两个操作数的类型一致。 在算术运算和关系运算中如果参与运算的操作数类型不一致,编译系统会自动对数据进行转换(即隐含转换),基本原则是将低类型数据转换为高类型数据。 char,short,int,unsigned,long,unsigned long,float,double 低 高,38,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,混合运算时数据类型的转换 隐含转换(续),当参与

18、运算的操作数必须是bool型时,如果操作数是其它类型,编译系统会自动将非0数据转换为true,0转换为false。 位运算的操作数必须是整数,当二元位运算的操作数是不同类型的整数时,也会自动进行类型转换。 赋值运算要求左值与右值的类型相同,若类型不同,编译系统会自动将右值转换为左值的类型。,39,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,混合运算时数据类型的转换 显式转换,语法形式(3种): 类型说明符(表达式) (类型说明符)表达式 类型转换操作符(表达式) 类型转换操作符可以是: const_cast、dynamic_cast、 reinterpret_cast、stati

19、c_cast 显式类型转换的作用是将表达式的结果类型转换为类型说明符所指定的类型。 例:int(z), (int)z, static_cast(z) 三种完全等价,40,2.2 基本数据类型和表达式 2.2.5 运算符与表达式,2.2.6 语句,空语句 声明语句 表达式语句 选择语句 循环语句 跳转语句 复合语句 标号语句,41,2.2 基本数据类型和表达式,表达式语句,格式: 表达式; 举例 赋值表达式语句 a = b; 插入/提取运算表达式语句 cout y;,42,2.2 基本数据类型和表达式 2.2.6 语句,复合语句,将多个语句用一对大括号包围,便构成一个复合语句 例如 sum=su

20、m+i;i+; ,43,2.2 基本数据类型和表达式 2.2.6 语句,2.3.1 I/O流,在C+中,将数据从一个对象到另一个对象的流动抽象为“流”。流在使用前要被建立,使用后要被删除。 从流中获取数据的操作称为提取操作,向流中添加数据的操作称为插入操作。 数据的输入与输出是通过I/O流来实现的,cin和cout是预定义的流类对象。cin用来处理标准输入,即键盘输入。cout用来处理标准输出,即屏幕输出。,44,2.3 数据的输入和输出,2.3.2 预定义的插入符和提取符,“ 表达式 表达式. 在输入语句中,提取符可以连续写多个,每个后面跟一个表达式,该表达式通常是用于存放输入值的变量。例如

21、: int a, b; cin a b;,45,2.3 数据的输入和输出,2.3.3 简单的I/O格式控制,46,2.3 数据的输入和输出,常用的I/O流类库操纵符,例:cout setw(5) setprecision(3) 3.1415;,/2_2.cpp #include using namespace std; int main() int year;bool isLeapYear;cout year;isLeapYear = (year % 4 = 0 ,47,2.4 算法的基本控制结构,例2-2输入一个年份,判断是否闰年,2.4.1 用if语句实现选择结构,If语句的语法形式,if

22、 (表达式) 语句 例:if (x y) cout y) cout x;else cout y; if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 else 语句 n,48,2.4 算法的基本控制结构 2.4.1用if语句实现选择结构,2.4.2 多重选择结构嵌套的if结构,49,2.4 算法的基本控制结构,#include using namespace std; int main() int x, y;cout x y;if (x != y)if (x y)cout y“ endl;elsecout “x y“ endl;elsecou

23、t “x = y“ endl;return 0; ,例2-3:输入两个整数,比较两个数的大小。,例2-3(续),50,2.4 算法的基本控制结构 2.4.2 多重选择结构,运行结果1: Enter x and y:5 8 x y,嵌套的if结构(续),语法形式 if( )if( ) 语句 1else 语句 2 elseif( ) 语句 3else 语句 4 注意 语句 1、2、3、4 可以是复合语句,每层的 if 与 else 配对,或用 来确定层次关系。,51,2.4 算法的基本控制结构 2.4.2 多重选择结构,switch语句,例2-4: 输入一个06的整数,转换成星期输出。,52,2.

24、4 算法的基本控制结构 2.4.2 多重选择结构,53,2.4 算法的基本控制结构 2.4.2 多重选择结构,#include using namespace std; int main() int day;cin day;switch (day) case 0: cout “Sunday“ endl; break;case 1: cout “Monday“ endl; break;case 2: cout “Tuesday“ endl; break;case 3: cout “Wednesday“ endl; break;case 4: cout “Thursday“ endl; break

25、;case 5: cout “Friday“ endl; break;case 6: cout “Saturday“ endl; break;default:cout“Day out of range Sunday Saturday“ endl;break;return 0; ,例2-4(续),switch语句(续),54,2.4 算法的基本控制结构 2.4.2 多重选择结构,一般形式 switch (表达式) case 常量表达式 1:语句1case 常量表达式 2:语句2case 常量表达式 n:语句ndefault : 语句n+1,执行顺序 以case中的常量表达式值为入口标号,由此开始

26、顺序执行。因此,每个case分支最后应该加break语句。,switch语句(续),case分支可包含多个语句,且不用 。 表达式、判断值都是int型或char型。 若干分支执行内容相同可共用一组语句。,55,2.4 算法的基本控制结构 2.4.2 多重选择结构,2.4.3 循环结构 while语句,56,2.4 算法的基本控制结构 2.4.3 循环结构,例2-5 求自然数110之和分析:本题需要用累加算法,累加过程是一个循环过程,可以用while语句实现。,例2-5(续),57,2.4 算法的基本控制结构 2.4.3 循环结构,#include using namespace std; in

27、t main() int i = 1, sum = 0;while (i = 10) sum += i; /相当于sum = sum + i;i+;cout “sum = “ sum endl;return 0; ,运行结果: sum = 55,while语句(续),58,2.4 算法的基本控制结构 2.4.3 循环结构,形式 while (表达式) 语句,执行顺序先判断表达式的值,若为 true 时,执行语句。,do-while 语句,59,2.4 算法的基本控制结构 2.4.3 循环结构,#include using namespace std; int main() int n, rig

28、ht_digit, newnum = 0; cout n;cout “The number in reverse order is “;do right_digit = n % 10;cout right_digit;n /= 10; /相当于n=n/10 while (n != 0);cout endl;return 0; ,例2-6:输入一个数,将各位数字翻转后输出,例2-6(续),60,2.4 算法的基本控制结构 2.4.3 循环结构,运行结果: Enter the number: 365 The number in reverse order is 563,do-while 语句(续)

29、,61,2.4 算法的基本控制结构 2.4.3 循环结构,一般形式 do 语句 while (表达式),执行顺序 先执行循环体语句,后判断条件。 表达式为 true 时,继续执行循环体 与while语句的比较: while 语句执行顺序 先判断表达式的值,为true时,再执行语句,例2-7用do-while语句编程,求自然数110之和,/2_7.cpp #include using namespace std; int main() int i = 1, sum = 0;do sum += i;i+; while (i = 10);cout “sum = “ sum endl;return 0

30、; ,62,2.4 算法的基本控制结构 2.4.3 循环结构,对比下面的程序,63,2.4 算法的基本控制结构 2.4.3 循环结构,程序1: #include using namespace std; int main() int i, sum = 0;cin i;while (i = 10) sum += i;i+;cout “sum= “ sum endl;return 0; ,程序2: #include using namespace std; int main() int i, sum = 0;cin i;do sum += i;i+; while (i = 10);cout “su

31、m=“ sum endl;return 0; ,for语句,例2-8:输入一个整数,求出它的所有因子。,64,2.4 算法的基本控制结构 2.4.3 循环结构,例2-8 (续),65,2.4 算法的基本控制结构 2.4.3 循环结构,#include using namespace std; int main() int n;cout n;cout “Number “ n “ Factors “;for (int k = 1; k = n; k+)if (n % k = 0)cout k “ “;cout endl;return 0; ,例2-8 (续),66,2.4 算法的基本控制结构 2.

32、4.3 循环结构,运行结果1: Enter a positive integer: 36 Number 36 Factors 1 2 3 4 6 9 12 18 36 运行结果2: Enter a positive integer: 7 Number 7 Factors 1 7,for语句(续),67,2.4 算法的基本控制结构 2.4.3 循环结构,语法形式 for (初始语句;表达式1;表达式2) 语句,循环嵌套,例2-9 编写程序输出以下图案*,68,2.4 算法的基本控制结构 2.4.4 循环结构与选择结构的嵌套,例2-9 (续),69,2.4 算法的基本控制结构 2.4.4 循环结构

33、与选择结构的嵌套,#include using namespace std;int main() const int N = 4;for (int i = 1; i = N; i+) /输出前4行图案for (int j = 1; j = 30; j+)cout ; /在图案左侧空30列for (int j = 1; j = 8 - 2 * i; j+)cout ;for (int j = 1; j = 2 * i - 1; j+)cout *;cout endl;,例2-9 (续),70,2.4 算法的基本控制结构 2.4.4 循环结构与选择结构的嵌套,/输出后3行图案for (int i

34、= 1; i = N - 1; i+) for (int j = 1; j = 30; j+)cout ; /在图案左侧空30列for (int j = 1; j = 7 - 2 * i ;j+)cout *;cout endl;return 0; ,2.4.4 循环结构与选择结构的嵌套,71,2.4 算法的基本控制结构,#include using namespace std; int main() for (int n = 100; n = 200; n+) if (n % 3 != 0)cout n;return 0; ,举例,例2-10,读入一系列整数,统计出正整数个数i和负整数个数j

35、,读入0则结束。 分析: 需要读入一系列整数,但是整数个数不定,要在每次读入之后进行判断,因此使用while循环最为合适。循环控制条件应该是n!=0。由于要判断数的正负并分别进行统计,所以需要在循环内部嵌入选择结构。,72,2.4 算法的基本控制结构 2.4.4 循环结构与选择结构的嵌套,例2-10 (续),73,2.4 算法的基本控制结构 2.4.4 循环结构与选择结构的嵌套,#include using namespace std;int main() int i = 0, j = 0, n;cout n;while (n != 0) if (n 0) i += 1;if (n n;cou

36、t “Count of positive integers: “ i endl;cout “Count of negative integers: “ j endl;return 0; ,2.4.5 其他控制语句,break语句 使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句。不宜用在别处。 continue 语句 结束本次循环,接着判断是否执行下一次循环。 goto 语句 goto语句的作用是使程序的执行流程跳转到语句标号所指定的语句。,74,2.4 算法的基本控制结构,2.5.1 typedef声明,为一个已有的数据类型另外命名 语法形式 typedef 已有类型名 新

37、类型名表; 例如 typedef double Area, Volume; typedef int Natural; Natural i1, i2; Area a; Volume v;,75,2.5 自定义数据类型,2.5.2 枚举类型enum,只要将需要的变量值一一列举出来,便构成了一个枚举类型。 枚举类型的声明形式如下: enum 枚举类型名 变量值列表; 例如: enum Weekday SUN, MON, TUE, WED, THU, FRI, SAT;,76,2.5 自定义数据类型,2.5.2 枚举类型enum(续),枚举类型应用说明: 对枚举元素按常量处理,不能对它们赋值。例如,不

38、能写:SUN = 0; 枚举元素具有默认值,它们依次为: 0,1,2,。 也可以在声明时另行指定枚举元素的值,如: enum WeekdaySUN=7,MON=1,TUE,WED,THU,FRI,SAT; 枚举值可以进行关系运算。 整数值不能直接赋给枚举变量,如需 要将整数赋值给枚举变量,应进行强 制类型转换。,77,2.5 自定义数据类型,例2-11,设某次体育比赛的结果有四种可能:胜(WIN)、负(LOSE)、平局(TIE)、比赛取消(CANCEL),编写程序顺序输出这四种情况。 分析:由于比赛结果只有四种可能,所以可以声明一个枚举类型,声明一个枚举类型的变量来存放比赛结果。,78,2.5

39、 自定义数据类型 2.5.2 枚举类型enum,例2-11 (续),79,2.5 自定义数据类型 2.5.2 枚举类型enum,#include using namespace std; enum GameResult WIN, LOSE, TIE, CANCEL; int main() GameResult result;enum GameResult omit = CANCEL;for (int count = WIN; count = CANCEL; count+) result = GameResult(count);if (result = omit) cout “The game

40、was cancelled“ endl;else cout “The game was played “;if (result = WIN)cout “and we won!“;if (result = LOSE)cout “and we lost.“;cout endl;return 0; ,例2-11(续),80,2.5 自定义数据类型 2.5.2 枚举类型enum,运行结果The game was played and we won!The game was played and we lost.The game was playedThe game was cancelled,2.6.

41、1变量的实现机制,站在目标代码的角度上看问题 变量具有两个重要属性数据类型和变量名 它们都用文字表示,便于人们理解,但不便于CPU识别,因此它们不能出现在目标代码中; 下面将讨论它们在目标代码中的表示方式。,81,2.6 深度探索,变量名,源代码中,变量依靠变量名来标识; 目标代码中,变量依靠地址来标识,每个变量的地址互不相同。,82,2.6 深度探索 2.6.1 变量的实现机制,int a, b; int main() a+;b+;return 0; ,incl 0x80495f8 incl 0x80495fc,数据类型,任何数据在内存中都是用二进制串的形式表示的; 一串二进制数,只有确定了

42、类型,才有真实的含义。 例:10111111,10000000,00000000,00000000 解释为int型:-1,082,130,432 解释为unsigned型:3,212,836,864 解释为float型:-1.0,83,2.6 深度探索 2.6.1 变量的实现机制,目标代码体现数据类型的方式,类型的特性蕴含于操作之中; 对不同数据类型,源代码中形式上相同的操作,会被转化为目标代码中的不同操作。,84,2.6 深度探索 2.6.1 变量的实现机制,int a; short b; char c; int main() a+;b+;c+;return 0; ,incl 0x80495

43、f8 incw 0x80495fc incb 0x80495fe,变量的声明和定义,变量的声明 将一个标识符声明为变量,告诉编译器这个标识符表示变量,同时还指出了它的数据类型; 只有确定了一个变量的数据类型,变量参与的操作才具有完整的意义,编译器才能将该变量参与的表达式翻译为合适的操作。 变量的定义 不仅确定了一个标识符表示变量,以及该变量的类型,还确定了变量地址的分配位置。,85,2.6 深度探索 2.6.1 变量的实现机制,2.6.2 C+表达式的执行原理,什么是寄存器? CPU内部的存储单元 读写速度非常快 数量很少 IA-32有eax、ebx、ecx、edx、esp、ebp、esi、e

44、di八个通用寄存器 大部分CPU指令都需要读写寄存器。 复杂的表达式,分步执行,每条指令只能做一次基本运算,中间结果暂存在寄存器中。,86,2.6 深度探索,2.6.2 C+表达式的执行原理(续),87,2.6 深度探索,int a, b, c, d; int e; int main() a = 4;b = 2;c = 1;d = 10;e = (a + b) * (c - d);return 0; ,movl $0x4,0x80495d8 movl $0x2,0x80495dc movl $0x1,0x80495e0 movl $0xa,0x80495e4,0x80495d8:a变量 0x8

45、0495dc:b变量 0x80495e0:c变量 0x80495e4:d变量 0x80495e8:e变量,2.6.2 C+表达式的执行原理(续),88,2.6 深度探索,int a, b, c, d; int e; int main() a = 4;b = 2;c = 1;d = 10;e = (a + b) * (c - d);return 0; ,mov 0x80495dc,%eaxmov 0x80495d8,%ecxadd %eax,%ecxmov 0x80495e4,%edxmov 0x80495e0,%eaxsub %edx,%eaximul %ecx,%eaxmov %eax,0x80495e8,0x80495d8:a变量 0x80495dc:b变量 0x80495e0:c变量 0x80495e4:d变量 0x80495e8:e变量,2.7 小结,主要内容 C+语言概述、基本数据类型和表达式、数据的输入与输出、算法的基本控制结构、自定义数据类型 达到的目标 掌握C+语言的基本概念和基本语句,能够编写简单的程序段。,89,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报