1、目录4.1 循环结构结构的嵌套4.2 循环结构与选择结构的嵌套4.3 其他控制语句4.4 自定义数据类型4.5 深度探索4.6小结1循环嵌套例4-1(教材例2-9)编写程序输出以下图案 *24.1 循环结构结构的嵌套例4-1(教材例2-9)(续)34.1 循环结构结构的嵌套#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*
2、i-1;j+)cout *;cout endl;例4-1(教材例2-9)(续)44.1 循环结构结构的嵌套/输出后3行图案for(int i=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;4.2 循环结构与选择结构的嵌套5#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)读入一系列整数,统计出正
3、整数个数i和负整数个数j,读入0则结束。分析:需要读入一系列整数,但是整数个数不定,要在每次读入之后进行判断,因此使用while循环最为合适。循环控制条件应该是n!=0。由于要判断数的正负并分别进行统计,所以需要在循环内部嵌入选择结构。64.2 循环结构与选择结构的嵌套例4-2(教材例2-10)(续)74.2 循环结构与选择结构的嵌套#include using namespace std;int main()int i=0,j=0,n;cout Enter some integers please(enter 0 to quit):“n;while(n!=0)if(n 0)i+=1;if(n
4、 n;cout Count of positive integers:i endl;cout Count of negative integers:j endl;return 0;4.3 其他控制语句 break语句使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句。不宜用在别处。continue 语句结束本次循环,接着判断是否执行下一次循环。goto 语句goto语句的作用是使程序的执行流程跳转到语句标号所指定的语句。84.4.1 typedef声明 为一个已有的数据类型另外命名 语法形式typedef 已有类型名 新类型名表;例如typedef double Area,Vo
5、lume;typedef int Natural;Natural i1,i2;Area a;Volume v;94.4 自定义数据类型4.4.2 枚举类型enum 只要将需要的变量值一一列举出来,便构成了一个枚举类型。枚举类型的声明形式如下:enum 枚举类型名 变量值列表;例如:enum WeekdaySUN,MON,TUE,WED,THU,FRI,SAT;104.4 自定义数据类型4.4.2 枚举类型enum(续)枚举类型应用说明:对枚举元素按常量处理,不能对它们赋值。例如,不能写:SUN=0;枚举元素具有默认值,它们依次为:0,1,2,.。也可以在声明时另行指定枚举元素的值,如:enum
6、 WeekdaySUN=7,MON=1,TUE,WED,THU,FRI,SAT;枚举值可以进行关系运算。整数值不能直接赋给枚举变量,如需要将整数赋值给枚举变量,应进行强制类型转换。114.4 自定义数据类型例4-3(教材例2-11)设某次体育比赛的结果有四种可能:胜(WIN)、负(LOSE)、平局(TIE)、比赛取消(CANCEL),编写程序顺序输出这四种情况。分析:由于比赛结果只有四种可能,所以可以声明一个枚举类型,声明一个枚举类型的变量来存放比赛结果。124.4自定义数据类型 4.4.2 枚举类型enum例4-3(续)134.4 自定义数据类型 4.4.2 枚举类型enum#include
7、 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 was cancelled endl;else cout The game was played;if(result=WIN)cout and we won!;if(result=LOSE)
8、cout and we lost.;cout endl;return 0;例4-3(教材例2-11)(续)144.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 cancelled4.5.1变量的实现机制 站在目标代码的角度上看问题 变量具有两个重要属性数据类型和变量名 它们都用文字表示,便于人们理解,但不便于CPU识别,因此它们不能出现在目标代码中;下面将讨论它们在目标代码中的表示方式。154
9、.5 深度探索变量名 源代码中,变量依靠变量名来标识;目标代码中,变量依靠地址来标识,每个变量的地址互不相同。164.5 深度探索 4.5.1 变量的实现机制int a,b;int main()a+;b+;return 0;incl 0 x80495f8incl 0 x80495fc地址数据类型 任何数据在内存中都是用二进制串的形式表示的;一串二进制数,只有确定了类型,才有真实的含义。例:10111111,10000000,00000000,00000000 解释为int型:-1,082,130,432 解释为unsigned型:3,212,836,864 解释为float型:-1.0174.
10、5 深度探索 4.5.1 变量的实现机制目标代码体现数据类型的方式 类型的特性蕴含于操作之中;对不同数据类型,源代码中形式上相同的操作,会被转化为目标代码中的不同操作。184.5 深度探索 4.5.1 变量的实现机制int a;short b;char c;int main()a+;b+;c+;return 0;incl 0 x80495f8incw 0 x80495fcincb 0 x80495fe不同的操作变量的声明和定义 变量的声明 将一个标识符声明为变量,告诉编译器这个标识符表示变量,同时还指出了它的数据类型;只有确定了一个变量的数据类型,变量参与的操作才具有完整的意义,编译器才能将该
11、变量参与的表达式翻译为合适的操作。变量的定义 不仅确定了一个标识符表示变量,以及该变量的类型,还确定了变量地址的分配位置。194.5 深度探索 4.5.1 变量的实现机制4.5.2 C+表达式的执行原理 什么是寄存器?CPU内部的存储单元 读写速度非常快 数量很少 IA-32有eax、ebx、ecx、edx、esp、ebp、esi、edi八个通用寄存器 大部分CPU指令都需要读写寄存器。复杂的表达式,分步执行,每条指令只能做一次基本运算,中间结果暂存在寄存器中。204.5 深度探索4.5.2 C+表达式的执行原理(续)214.5 深度探索int a,b,c,d;int e;int main()
12、a=4;b=2;c=1;d=10;e=(a+b)*(c-d);return 0;movl$0 x4,0 x80495d8movl$0 x2,0 x80495dcmovl$0 x1,0 x80495e0movl$0 xa,0 x80495e4把4存入地址0 x80495d8中0 x80495d8:a变量0 x80495dc:b变量0 x80495e0:c变量0 x80495e4:d变量0 x80495e8:e变量4.5.2 C+表达式的执行原理(续)224.5 深度探索int a,b,c,d;int e;int main()a=4;b=2;c=1;d=10;e=(a+b)*(c-d);retur
13、n 0;mov 0 x80495dc,%eax mov 0 x80495d8,%ecx add%eax,%ecx mov 0 x80495e4,%edx mov 0 x80495e0,%eax sub%edx,%eax imul%ecx,%eax mov%eax,0 x80495e8把0 x80495dc地址的值到eax寄存器中0 x80495d8:a变量0 x80495dc:b变量0 x80495e0:c变量0 x80495e4:d变量0 x80495e8:e变量ecxecx+eaxeaxeax-eaxeax(eax*eax)的低32位4.6小结 主要内容 循环结构结构的嵌套、循环结构与选择结构的嵌、其他控制语句、自定义数据类型 达到的目标 掌握C+语言的基本概念和基本语句,能够编写简单的程序段。23