第4讲流程2及复杂数据类型761609689.ppt

上传人:本田雅阁 文档编号:2499039 上传时间:2019-04-04 格式:PPT 页数:24 大小:839.51KB
返回 下载 相关 举报
第4讲流程2及复杂数据类型761609689.ppt_第1页
第1页 / 共24页
第4讲流程2及复杂数据类型761609689.ppt_第2页
第2页 / 共24页
第4讲流程2及复杂数据类型761609689.ppt_第3页
第3页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第4讲流程2及复杂数据类型761609689.ppt》由会员分享,可在线阅读,更多相关《第4讲流程2及复杂数据类型761609689.ppt(24页珍藏版)》请在三一文库上搜索。

1、第四讲流程控制(2)、复杂数据类型,清华大学 郑 莉,教材:C+语言程序设计(第4版)第2章 2.4.42.6,目录,4.1 循环结构结构的嵌套 4.2 循环结构与选择结构的嵌套 4.3 其他控制语句 4.4 自定义数据类型 4.5 深度探索 4.6小结,2,循环嵌套,例4-1 (教材例2-9)编写程序输出以下图案 * * * * * * *,3,4.1 循环结构结构的嵌套,例4-1 (教材例2-9) (续),4,4.1 循环结构结构的嵌套,#include using namespace std; int main() const int N = 4; for (int i = 1; i =

2、 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; ,例4-1 (教材例2-9) (续),5,4.1 循环结构结构的嵌套,/输出后3行图案 for (int i = 1; i = N - 1; i+) for (int j = 1; j = 30; j+) cout ; /在图案左侧空30列 for (int j = 1; j =

3、7 - 2 * i ;j+) cout *; cout endl; return 0; ,4.2 循环结构与选择结构的嵌套,6,#include using namespace std; int main() for (int n = 100; n = 200; n+) if (n % 3 != 0) cout n; return 0; ,举例,例4-2(教材例2-10 ),读入一系列整数,统计出正整数个数i和负整数个数j,读入0则结束。 分析: 需要读入一系列整数,但是整数个数不定,要在每次读入之后进行判断,因此使用while循环最为合适。循环控制条件应该是n!=0。由于要判断数的正负并分别

4、进行统计,所以需要在循环内部嵌入选择结构。,7,4.2 循环结构与选择结构的嵌套,例4-2(教材例2-10 )(续),8,4.2 循环结构与选择结构的嵌套,#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; cout “Count of positive integers: “ i endl; cout “Count of negative integers: “ j endl; return 0; ,4.3 其他控制语句,b

5、reak语句 使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句。不宜用在别处。 continue 语句 结束本次循环,接着判断是否执行下一次循环。 goto 语句 goto语句的作用是使程序的执行流程跳转到语句标号所指定的语句。,9,4.4.1 typedef声明,为一个已有的数据类型另外命名 语法形式 typedef 已有类型名 新类型名表; 例如 typedef double Area, Volume; typedef int Natural; Natural i1, i2; Area a; Volume v;,10,4.4 自定义数据类型,4.4.2 枚举类型enum,

6、只要将需要的变量值一一列举出来,便构成了一个枚举类型。 枚举类型的声明形式如下: enum 枚举类型名 变量值列表; 例如: enum Weekday SUN, MON, TUE, WED, THU, FRI, SAT;,11,4.4 自定义数据类型,4.4.2 枚举类型enum(续),枚举类型应用说明: 对枚举元素按常量处理,不能对它们赋值。例如,不能写:SUN = 0; 枚举元素具有默认值,它们依次为: 0,1,2,。 也可以在声明时另行指定枚举元素的值,如: enum WeekdaySUN=7,MON=1,TUE,WED,THU,FRI,SAT; 枚举值可以进行关系运算。 整数值不能直接

7、赋给枚举变量,如需 要将整数赋值给枚举变量,应进行强 制类型转换。,12,4.4 自定义数据类型,例4-3(教材例2-11),设某次体育比赛的结果有四种可能:胜(WIN)、负(LOSE)、平局(TIE)、比赛取消(CANCEL),编写程序顺序输出这四种情况。 分析:由于比赛结果只有四种可能,所以可以声明一个枚举类型,声明一个枚举类型的变量来存放比赛结果。,13,4.4自定义数据类型 4.4.2 枚举类型enum,例4-3 (续),14,4.4 自定义数据类型 4.4.2 枚举类型enum,#include using namespace std; enum GameResult WIN, LO

8、SE, 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 was cancelled“ endl; else cout “The game was played “; if (result = WIN) cout “and we won!“; if (result = LOSE) co

9、ut “and we lost.“; cout endl; return 0; ,例4-3(教材例2-11)(续),15,4.4 自定义数据类型 4.4.2 枚举类型enum,运行结果 The game was played and we won! The game was played and we lost. The game was played The game was cancelled,4.5.1变量的实现机制,站在目标代码的角度上看问题 变量具有两个重要属性数据类型和变量名 它们都用文字表示,便于人们理解,但不便于CPU识别,因此它们不能出现在目标代码中; 下面将讨论它们在目标代

10、码中的表示方式。,16,4.5 深度探索,变量名,源代码中,变量依靠变量名来标识; 目标代码中,变量依靠地址来标识,每个变量的地址互不相同。,17,4.5 深度探索 4.5.1 变量的实现机制,int a, b; int main() a+; b+; return 0; ,incl 0x80495f8 incl 0x80495fc,数据类型,任何数据在内存中都是用二进制串的形式表示的; 一串二进制数,只有确定了类型,才有真实的含义。 例:10111111,10000000,00000000,00000000 解释为int型:-1,082,130,432 解释为unsigned型:3,212,8

11、36,864 解释为float型:-1.0,18,4.5 深度探索 4.5.1 变量的实现机制,目标代码体现数据类型的方式,类型的特性蕴含于操作之中; 对不同数据类型,源代码中形式上相同的操作,会被转化为目标代码中的不同操作。,19,4.5 深度探索 4.5.1 变量的实现机制,int a; short b; char c; int main() a+; b+; c+; return 0; ,incl 0x80495f8 incw 0x80495fc incb 0x80495fe,变量的声明和定义,变量的声明 将一个标识符声明为变量,告诉编译器这个标识符表示变量,同时还指出了它的数据类型; 只

12、有确定了一个变量的数据类型,变量参与的操作才具有完整的意义,编译器才能将该变量参与的表达式翻译为合适的操作。 变量的定义 不仅确定了一个标识符表示变量,以及该变量的类型,还确定了变量地址的分配位置。,20,4.5 深度探索 4.5.1 变量的实现机制,4.5.2 C+表达式的执行原理,什么是寄存器? CPU内部的存储单元 读写速度非常快 数量很少 IA-32有eax、ebx、ecx、edx、esp、ebp、esi、edi八个通用寄存器 大部分CPU指令都需要读写寄存器。 复杂的表达式,分步执行,每条指令只能做一次基本运算,中间结果暂存在寄存器中。,21,4.5 深度探索,4.5.2 C+表达式

13、的执行原理(续),22,4.5 深度探索,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变量 0x80495dc:b变量 0x80495e0:c变量 0x80495e4:d变量 0x80495e8:e变量,4.5.2 C+表达式的执行原理(续),23,4.5 深度探索,

14、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,%eax mov 0x80495d8,%ecx add %eax,%ecx mov 0x80495e4,%edx mov 0x80495e0,%eax sub %edx,%eax imul %ecx,%eax mov %eax,0x80495e8,0x80495d8:a变量 0x80495dc:b变量 0x80495e0:c变量 0x80495e4:d变量 0x80495e8:e变量,4.6小结,主要内容 循环结构结构的嵌套、循环结构与选择结构的嵌、其他控制语句、自定义数据类型 达到的目标 掌握C+语言的基本概念和基本语句,能够编写简单的程序段。,24,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1