85
第第第 C++ 第第第第第第 C++ 语语语语语语

第二章 C++ 简单程序设计

  • Upload
    lalasa

  • View
    78

  • Download
    5

Embed Size (px)

DESCRIPTION

第二章 C++ 简单程序设计. C++ 语言程序设计. 本章主要内容. C++ 语言概述 基本数据类型和表达式 数据的输入与输出 算法的基本控制结构 自定义数据类型. C++ 语言的产生. C++ 语言概述. C++ 是从 C 语言发展演变而来的,首先是一个更好的 C 引入了类的机制,最初的 C++ 被称为“带类的 C” 1983 年正式取名为 C++ 从 1989 年开始 C++ 语言的标准化工作 于 1994 年制定了 ANSI C++ 标准草案 于 1998 年 11 月被国际标准化组织( ISO )批准为国际标准,成为目前的 C++. - PowerPoint PPT Presentation

Citation preview

Page 1: 第二章  C++ 简单程序设计

第二章 C++简单程序设计

C++语言程序设计

Page 2: 第二章  C++ 简单程序设计

2

本章主要内容

C++ 语言概述基本数据类型和表达式数据的输入与输出算法的基本控制结构自定义数据类型

Page 3: 第二章  C++ 简单程序设计

3

C++ 语言的产生 C++ 是从 C 语言发展演变而来的,首先是

一个更好的 C 引入了类的机制,最初的 C++ 被称为“带

类的 C” 1983 年正式取名为 C++ 从 1989 年开始 C++ 语言的标准化工作 于 1994 年制定了 ANSI C++ 标准草案 于 1998 年 11 月被国际标准化组织( IS

O )批准为国际标准,成为目前的 C++

C++

语言概述

Page 4: 第二章  C++ 简单程序设计

4

C++ 的特点全面兼容 C

– 它保持了 C 的简洁、高效和接近汇编语言等特点

– 对 C 的类型系统进行了改革和扩充– C++ 也支持面向过程的程序设计,不是

一个纯正的面向对象的语言支持面向对象的方法

C++

语言概述

Page 5: 第二章  C++ 简单程序设计

5

C++ 程序实例//2_1.cpp#include <iostream>using namespace std;int main(){ cout<<"Hello!\n"; cout<<"Welcome to c++!\n";}

C++

语言概述

Page 6: 第二章  C++ 简单程序设计

6

C++ 字符集大小写的英文字母: A ~ Z , a ~ z数字字符: 0 ~ 9特殊字符:

! # % ^ & *_ + = - ~ <> / \ ‘ “ ;. , : ? ( )[ ] { }

C++

语言概述

Page 7: 第二章  C++ 简单程序设计

7

词法记号 关键字 C++ 预定义的单词 标识符 程序员声明的单词,它命名程序正文

中的一些实体 文字 在程序中直接使用符号表示的数据 操作符 用于实现各种运算的符号 分隔符 () {} , : ;

用于分隔各个词法记号或程序正文 空白符 空格、制表符( TAB 键产生的字

符)、垂直制表符、换行符、回车符和注释的总称

C++

语言概述

Page 8: 第二章  C++ 简单程序设计

8

标识符的构成规则

以大写字母、小写字母或下划线 (_)

开始。可以由以大写字母、小写字母、下划

线 (_) 或数字 0 ~ 9 组成。大写字母和小写字母代表不同的标识

符。

C++

语言概述

Page 9: 第二章  C++ 简单程序设计

9

案例 2.1 简单的 C++ 程序

#include <iostream> // 包含头文件using namespace std; // 打开命名空间 stdint main(void) // 主函数,程序入口{ // 块作用域开始

int age; // 声明一个变量 age= 20; // 赋值语句 cout<<"The age is:\n"; // 输出一个字符串 cout<<age<<endl; // 输出变量中的值

return 0; // 主函数返回 0} // 块作用域结束

C++

语言概述

Page 10: 第二章  C++ 简单程序设计

案例 2.1 简单的 C++ 程序 (续 )

思考与提示:1. #include <iostream> 指示编译器在对程序

进行预处理时,将文件 iostream 中的代码嵌入到程序中该指令所在的地方,其中 #include 被称为预编译指令。

2. “using namespace” 是针对命名空间的指令,关于命名空间的详细介绍请参照第10 章。

10

C++

语言概述

Page 11: 第二章  C++ 简单程序设计

11

数据类型数据类型 ————常量与变量常量与变量

#include <iostream>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;}

常量常量

变量变量

变量先声明后使用变量先声明后使用 符号常量符号常量

基本数据类型和表达式

Page 12: 第二章  C++ 简单程序设计

12

#include <iostream>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;}

数据类型数据类型 ————整型数据整型数据

shortunsigned short 2 字节intunsigned int 4 字节longunsigned long 4 字节

shortunsigned short 2 字节intunsigned int 4 字节longunsigned long 4 字节

整型变量声明整型变量声明

基本数据类型和表达式

整型变量整型变量

整型常量整型常量

Page 13: 第二章  C++ 简单程序设计

13

数据类型数据类型 ——整数数据及取值范围整数数据及取值范围

类型类型 说明符 说明符 位数位数 数值范围数值范围短整短整 shortshort 1616 -32768-32768 ~~

3276732767基本 基本 intint 32 32 -2-23131 ~~ (2(23131-1)-1)长整长整 longlong 3232 -2-23131 ~~ (2(23131-1)-1)无符号无符号

unsigned shortunsigned short 1616 00 ~~ 65535 65535 unsigned [int]unsigned [int] 3232 00 ~~ (2(23232-1)-1)unsigned longunsigned long 3232 00 ~~ (2(23232-1)-1)

基本数据类型和表达式

Page 14: 第二章  C++ 简单程序设计

案例 2.2 输出“ 50000”

案例解析:– 本案演示 C++ 语言中符号整数和无符号整

数的取值范围的差别。语法要点:无符号整数 unsigned short 取值范围为 0~65535 ,而符号整数 short ( signed short )取值范围为 -32768~32767 。如果超出数值类型取值范围,则会出现数值溢出。

运行调试

14

Page 15: 第二章  C++ 简单程序设计

15

#include <iostream>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.5f; h = 3.2; v = 3.14159 * r * r * h; cout << v << endl; return 0;}

数据类型数据类型 ————实数数据实数数据

实型常量实型常量

float 4 字节 3.4×10±38

7 位有效数字double 8 字节 1.7×10±308

15 位有效数字long double 8 字节 1.7×10±308

15 位有效数字

float 4 字节 3.4×10±38

7 位有效数字double 8 字节 1.7×10±308

15 位有效数字long double 8 字节 1.7×10±308

15 位有效数字

实型变量实型变量•默认为 double 型•后缀 F (或 f )为 float 型•后缀 L (或 l )为 long double型

•默认为 double 型•后缀 F (或 f )为 float 型•后缀 L (或 l )为 long double型

基本数据类型和表达式

Page 16: 第二章  C++ 简单程序设计

16

数据类型数据类型 ————字符数据(一)字符数据(一)

字符常量– 单引号括起来的一个字符,

如: 'a', 'D', '?', '$' 字符变量

– 用来存放字符常量例: char c1, c2; c1 = 'a'; c2 = 'A';

字符数据在内存中的存储形式– 以 ASCII 码存储,占 1 字节,用 7 个二进制位

基本数据类型和表达式

Page 17: 第二章  C++ 简单程序设计

17

字符数据的使用方法– 字符数据和整型数据之间可以运算。– 字符数据与整型数据可以互相赋值。

字符串常量例 :"CHINA"

"a" 'a'

所以: char c; c="a";

C H I N A \0C H I N A \0

a \0a \0

aa

Page 17

数据类型数据类型 ————字符型数据(二)字符型数据(二)基

本数据类型和表达式

Page 18: 第二章  C++ 简单程序设计

案例 2.5 输出不可显示字符——转义字符序列

案例解析:– 本例要求运用转义字符序列在屏幕上输出

水平制表符、退格符,并设发出叭声。– 语法要点:有一些字符是不可显示的字符

,也无法通过键盘输入,例如响铃、警告声音、换行、制表符、回车等等。这样的字符常量通过转义字符表示。

18

Page 19: 第二章  C++ 简单程序设计

案例 2.5 输出不可显示字符——转义字符序列(续)

思考与提示:– 在字符串常量中使用转义序列是要注意

防止出现二义性。 cout << "\x7Error\n";原意是先使计算机的喇叭响一声,然后显示“ Error“ 字符,但是实际执行结果是在屏幕上显示: ~rror ,而且没有喇叭声。这是由于编译器将 7 和 E 连在了一起,将它们解释成 \x7E ,而十六进制的7E 正好是字符 ~ 的 ASCII 码值。为此可以使用空格隔开的方法解决。

19

Page 20: 第二章  C++ 简单程序设计

20

数据类型数据类型 ————布尔型数据

布尔型变量的说明:例: bool flag;

布尔型数据的取值:只有 false 和 true 两个值

基本数据类型和表达式

Page 21: 第二章  C++ 简单程序设计

21

数据类型数据类型 ————变量初始化变量初始化

例: int a = 3; double f = 3.56; char c = 'a'; int c(5);

Page 21

基本数据类型和表达式

Page 22: 第二章  C++ 简单程序设计

22

变量的存储类型auto

– 属于一时性存储,其存储空间可以被若干变量多次覆盖使用。

register– 存放在通用寄存器中。

extern– 在所有函数和程序段中都可引用。

static– 在内存中是以固定地址存放的,在整个

程序运行期间都有效。

基本数据类型和表达式

Page 23: 第二章  C++ 简单程序设计

23

算术运算符与算术表达式算术运算符与算术表达式 基本算术运算符

+ - * /(若整数相除,结果取整 )

% (取余,操作数为整数)

优先级与结合性先乘除,后加减,同级自左至右

++, -- (自增、自减)例: i++; --j;

案例 2.7 (反面案例:不要这样写程序)Page 23

基本数据类型和表达式

Page 24: 第二章  C++ 简单程序设计

24

赋值运算符和赋值表达式赋值运算符和赋值表达式 简单的赋值运算符简单的赋值运算符 "=""="

举例n = n + 5

表达式的类型赋值运算符左边对象的类型

表达式的值赋值运算符左边对象被赋值后的值

Page 24

基本数据类型和表达式

Page 25: 第二章  C++ 简单程序设计

25

赋值运算符和赋值表达式赋值运算符和赋值表达式 复合的赋值运算符复合的赋值运算符

有 10 种复合运算符:+=, -=, *=, /=, %=,<<=, >>=, &=, ^=, |=

例a += 3 等价于 a = a + 3x *= y + 8 等价于 x = x * (y + 8)

基本数据类型和表达式

Page 26: 第二章  C++ 简单程序设计

26

逗号运算和逗号表达式逗号运算和逗号表达式

格式表达式 1 ,表达式 2

求解顺序及结果先求解 1 ,再求解 2 ,最终结果为表达式 2 的值

例a = 3 * 5 , a * 4 最终结果为 60

Page 26

基本数据类型和表达式

Page 27: 第二章  C++ 简单程序设计

27

关系运算与关系表达式 关系运算是比较简单的一种逻辑运算,优先

次序为: < <= > >= == !=

优先级相同(高) 优先级相同(低)

关系表达式是一种最简单的逻辑表达式其结果类型为 bool ,值只能为 true 或 false 。

例如: a > b , c <= a + b , x + y == 3

基本数据类型和表达式

Page 28: 第二章  C++ 简单程序设计

28

逻辑运算与逻辑表达式逻辑运算与逻辑表达式逻辑运算符

!( 非 ) &&( 与 ) ||( 或 )优先次序: 高 → 低

逻辑表达式 例如: (a > b) && (x > y) 其结果类型为 bool ,值只能为 true 或 false

基本数据类型和表达式

Page 29: 第二章  C++ 简单程序设计

29

逻辑运算与逻辑表达式逻辑运算与逻辑表达式““&&&&”” 的的““短路特性短路特性””

表达式表达式 1 && 1 && 表达式表达式 22– 先求解表达式先求解表达式 11– 若表达式若表达式 11 的值为的值为 falsefalse ,则最终结果,则最终结果

为为 falsefalse ,,不再求解表达式不再求解表达式 22– 若表达式若表达式 11 的结果为的结果为 truetrue ,则求解表达,则求解表达

式式 22 ,以表达式,以表达式 22 的结果作为最终结果的结果作为最终结果““||||”” 也具有类似的特性也具有类似的特性

基本数据类型和表达式

Page 30: 第二章  C++ 简单程序设计

30

条件运算符与条件表达式条件运算符与条件表达式一般形式

表达式 1 ?表达式 2 :表达式 3表达式 1 必须是 bool 类型

执行顺序– 先求解表达式 1 ,– 若表达式 1 的值为 true ,则求解表达式

2 ,表达式 2 的值为最终结果– 若表达式 1 的值为 false ,则求解表达式3 ,表达式 3 的值为最终结果

例: x = a > b ? a : b;

基本数据类型和表达式

Page 31: 第二章  C++ 简单程序设计

31

条件运算符与条件表达式条件运算符与条件表达式注意:

– 条件运算符优先级高于赋值运算符,低于逻辑运算符

– 表达式 2 、 3 的类型可以不同,条件表达式的最终类型为 2 和 3 中较高的类型。

例: x = a > b ? a : b;

基本数据类型和表达式

Page 32: 第二章  C++ 简单程序设计

32

sizeof 运算符 语法形式

sizeof ( 类型名 )或 sizeof 表达式

结果值:“类型名”所指定的类型或“表达式”的结果类型所占的字节数。

例:sizeof(short)

sizeof x

基本数据类型和表达式

Page 33: 第二章  C++ 简单程序设计

位运算符按位与(按位与( && ))按位或(按位或( || ))按位异或(按位异或( ^̂ ))按位取反按位取反 (~)(~)移位移位

33

Page 34: 第二章  C++ 简单程序设计

34

位运算位运算————按位与(按位与( && ))运算规则

– 将两个运算量的每一个位进行逻辑与操作举例:计算 3 & 5

3 : 0 0 0 0 0 0 1 1 5 : (&) 0 0 0 0 0 1 0 13 & 5: 0 0 0 0 0 0 0 1

用途:– 将某一位置 0 ,其他位不变。例如:

将 char 型变量 a的最低位置 0: a = a & 0xfe;

– 取指定位。例如:有 char c; int a; 取出 a的低字节,置于 c中: c=a & 0xff;

基本数据类型和表达式

Page 35: 第二章  C++ 简单程序设计

35

位运算位运算————按位或(按位或( || ))运算规则

– 将两个运算量的每一个位进行逻辑或操作举例:计算 3 | 5

3 : 0 0 0 0 0 0 1 1 5 : (|) 0 0 0 0 0 1 0 13 | 5: 0 0 0 0 0 1 1 1

用途:– 将某些位置 1 ,其他位不变。

例如:将 int 型变量 a 的低字节置 1 : a = a | 0xff;

基本数据类型和表达式

Page 36: 第二章  C++ 简单程序设计

36

位运算位运算————按位异或(按位异或( ^̂ ))运算规则

– 两个操作数进行异或:若对应位相同,则结果该位为 0 ,若对应位不同,则结果该位为 1 ,

举例:计算 071^052 071: 0 0 1 1 1 0 0 1 052 : (^) 0 0 1 0 1 0 1 0 071^052 : 0 0 0 1 0 0 1 1用途:使特定位翻转(与 0 异或保持原

值,与 1 异或取反)

基本数据类型和表达式

Page 37: 第二章  C++ 简单程序设计

37

位运算位运算————取反取反 (~)(~)

单目运算符,对一个二进制数按位取反。

例: 025 : 0000000000010101

~025 : 1111111111101010

基本数据类型和表达式

Page 38: 第二章  C++ 简单程序设计

38

位运算位运算————移位移位

左移运算( << )左移后,低位补 0 ,高位舍弃。

右移运算( >> )右移后,低位:舍弃高位:无符号数:补 0 有符号数:补“符号位”

基本数据类型和表达式

Page 39: 第二章  C++ 简单程序设计

39

运算符优先级()++ , -- , sizeof*, /, %+, -==, !=位运算&&||?:赋值运算逗号运算 低

基本数据类型和表达式

Page 40: 第二章  C++ 简单程序设计

40

混合运算时数据类型的转换 ——隐含转换

一些二元运算符(算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符)要求两个操作数的类型一致。

在算术运算和关系运算中如果参与运算的操作数类型不一致,编译系统会自动对数据进行转换(即隐含转换),基本原则是将低类型数据转换为高类型数据。char,short,int,unsigned,long,unsigned long,float,double

低 高

基本数据类型和表达式

Page 41: 第二章  C++ 简单程序设计

41

混合运算时数据类型的转换 ——隐含转换

当参与运算的操作数必须是 bool 型时,如果操作数是其它类型,编译系统会自动将非 0 数据转换为true , 0转换为 false 。

位运算的操作数必须是整数,当二元位运算的操作数是不同类型的整数时,也会自动进行类型转换,

赋值运算要求左值与右值的类型相同,若类型不同,编译系统会自动将右值转换为左值的类型。

基本数据类型和表达式

Page 42: 第二章  C++ 简单程序设计

42

混合运算时数据类型的转换 ——显式转换

语法形式( 3 种):– 类型说明符 (表达式 )– (类型说明符 )表达式– 类型转换操作符 < 类型说明符 >( 表达式 )

类型转换操作符可以是:const_cast 、 dynamic_cast 、reinterpret_cast 、 static_cast

显式类型转换的作用是将表达式的结果类型转换为类型说明符所指定的类型。– 例: int(z), (int)z, static_cast<int>(z)三种完全等价

基本数据类型和表达式

Page 43: 第二章  C++ 简单程序设计

案例 2.15 数值溢出问题语法要点

– 在数学上,有很多数据类型的值域是无限的。但是在计算机中,受字节数的限制,任何数据类型的范围都是有限的。因此,当数值变得过大时,计算机会出现数值溢出的错误。

43

Page 44: 第二章  C++ 简单程序设计

案例 2.16 浮点数的比较语法要点:

– 浮点数在计算机中是以近似之存储的,比如 8 有时会存储为 7.9999999... 或8.00...001 。另外还有运算时的四舍五入带来的问题,比如 1/7 会被存储为0.142857 ,但是这个数实际上并不等于1/7 ,此种情况下,如果进行相等关系判断,则会出现逻辑错,这在数值计算中是十分严重的错误。

44

Page 45: 第二章  C++ 简单程序设计

45

语句 空语句 声明语句 表达式语句 复合语句选择语句循环语句跳转语句 标号语句

Page 46: 第二章  C++ 简单程序设计

46

表达式语句表达式语句格式:

表达式;举例

–赋值表达式语句a = b;–插入 /提取运算表达式语句 cout << x; cin >> y;

Page 47: 第二章  C++ 简单程序设计

47

复合语句将多个语句用一对大括号包围,便构

成一个复合语句例如

{sum=sum+i;i++;

}

Page 48: 第二章  C++ 简单程序设计

48

插入数据

数据的输入输出

数据的输入输出是通过 I/O 流实现

对象 对象

数据流

提取数据

Page 49: 第二章  C++ 简单程序设计

49

数据输出cout<<exp1<<exp2<<……;

cout :预定义的流对象

标准输出(屏幕输出)

<< 预定义的插入操作符,实现屏幕输出

Page 50: 第二章  C++ 简单程序设计

50

cin >> 左值表达式 >> 左值表达式…… ;

cin :预定义的流对象

标准输入(键盘输入)

>> 预定义的提取操作符,实现数据提取

数据输入

Page 51: 第二章  C++ 简单程序设计

51

数据输入如:如:

int a,b; cout << " 请输入两个值: " << endl; cin >>a>>b; cout << " 已输入的 a 、 b 的值是 \t" <<a <<"\t" <<b;

Page 52: 第二章  C++ 简单程序设计

52

简单的 I/O 格式控制

操作符操作符 功能含义功能含义dec 十进制表示hex 十六进制oct 八进制ws 提取空白字符endl 插入换行符、刷新流ends 插入空字符

setprecision(int) 设置浮点数的有效数字个数setw(int) 设置宽度

常用的 I/O流操作符

Page 53: 第二章  C++ 简单程序设计

53

使用 dec 、 oct 、 hex 操作符实现十进制、八进制和十六进制的格式化形式输出

#include <iostream.h>void main(){ int a=100; cout << a << " 的十进制: " <<dec<<a; cout << "\n 八进制: " <<oct<<a; cout << "\n 十六进制: " <<hex<<a;}

简单的 I/O 格式控制

Page 54: 第二章  C++ 简单程序设计

54

设置输出宽度

#include <iostream.h>#include "iomanip.h"void main(){ int a=100; cout << setw(10) <<a<<endl; cout << setw(6) <<a<<endl; cout << setw(3) <<a<<endl;}

简单的 I/O 格式控制

Page 55: 第二章  C++ 简单程序设计

55

设置格式化输出精度

#include <iostream.h>#include "iomanip.h"void main(){ double a=123.456789; cout << a<<endl; cout << setprecision(10)<<a<<endl; cout << setprecision(6) <<a<<endl; cout << setprecision(4) <<a<<endl; cout << setprecision(2) <<a<<endl;}

简单的 I/O 格式控制

Page 56: 第二章  C++ 简单程序设计

56

• 顺序结构• 分支结构• 循环结构

算法的基本控制结构

Page 57: 第二章  C++ 简单程序设计

57

如何解决分支问题 ?

例 2-2输入一个年份,判断是否闰年。

算法的基本控制结构

Page 58: 第二章  C++ 简单程序设计

#include <iostream>using namespace std;int main() {

int year; bool IsLeapYear;

cout << "Enter the year: "; cin >> year;

IsLeapYear = ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));

if (IsLeapYear) cout << year << " is a leap year“ << endl;else cout << year << " is not a leap year“ <<endl;return 0;

}58

Page 59: 第二章  C++ 简单程序设计

运行结果:

Enter the year: 20002000 is a leap year

59

Page 60: 第二章  C++ 简单程序设计

60

if ( 表达式 ) 语句例: if (x > y) cout << x;

if ( 表达式 ) 语句 1 else 语句 2例: if (x > y) cout << x; else cout << y;

if ( 表达式 1) 语句 1else if ( 表达式 2) 语句 2else if ( 表达式 3) 语句 3 …else 语句 n

if if 语句语句 ————三种形式三种形式算

法的基本控制结构

Page 61: 第二章  C++ 简单程序设计

if if 语句语句 ————案例案例

【案例 2.22 “】 赋值运算符”不同于“相等关系运算符

【案例 2.23 】 布尔表达式引发的逻辑错误

61

算法的基本控制结构

Page 62: 第二章  C++ 简单程序设计

62

如何解决多分支问题 ?

例 2-3 输入两个整数,比较两个数的大小。

算法的基本控制结构

Page 63: 第二章  C++ 简单程序设计

#include<iostream>using namespace std;int main() {

int x, y;cout << "Enter x and y:";cin >> x >> y;if (x != y)

if (x > y)cout << "x > y" << endl;

elsecout << "x < y" << endl;

elsecout << "x = y" << endl;

return 0;}

63

Page 64: 第二章  C++ 简单程序设计

运行结果 1 :Enter x and y:5 8x < y运行结果 2 :Enter x and y:8 8x = y运行结果 3 :Enter x and y:12 8x > y

64

Page 65: 第二章  C++ 简单程序设计

65

语法形式if( ) if( ) 语句 1 else 语句 2else if( ) 语句 3 else 语句 4

注意语句 1 、 2 、 3 、 4 可以是复合语句,每层的 if 与 else 配对,或用 { } 来确定层次关系。

if if 语句语句 ————嵌套嵌套算

法的基本控制结构

Page 66: 第二章  C++ 简单程序设计

66

特殊的多分支结构

例 2-4输入一个 0 ~ 6 的整数,转换成星期输出。

算法的基本控制结构

Page 67: 第二章  C++ 简单程序设计

#include <iostream>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; case 5: cout << "Friday" << endl; break; case 6: cout << "Saturday" << endl; break; default: cout << "Day out of range Sunday .. Saturday" << endl; break;

}return 0;

} 67

Page 68: 第二章  C++ 简单程序设计

68

语法形式switch ( 表达式 ) { case 常量表达式 1 :语句 1 case 常量表达式 2 :语句 2 ┆ case 常量表达式 n:语句 n default : 语句 n+1 }

switch switch 语句语句

执行顺序•以 case 中的常量表达式值为入口标号,由此开始顺序执行。因此,每个 case 分支最后应该加 break 语句。•若干分支执行内容相同可共用一组语句。

每个常量表达式的值不能相同,次序不影响执行结果。

可以是多个语句,但不必用 { } 。

可以是整数型、字符型、枚举型

算法的基本控制结构

Page 69: 第二章  C++ 简单程序设计

69

如何有效地完成重复工作

例 2-5求自然数 1 ~ 10之和分析:本题需要用累加算法,累加过

程是一个反复执行相同操作过程,每次执行时操作数不同。

算法的基本控制结构

Page 70: 第二章  C++ 简单程序设计

#include <iostream>using namespace std;int main() { int i = 1, sum = 0; while (i <= 10) { sum += i; i++; } cout << "sum = " << sum <<

endl;return 0;

}运行结果:sum = 55

70

Page 71: 第二章  C++ 简单程序设计

71

while while 语句语句

形式while ( 表达式 ) 语句

可以是复合语句,其中必须含有改变条件表达式值的语句。

执行顺序先判断表达式的值,若为 true 时,执行语句。

算法的基本控制结构

Page 72: 第二章  C++ 简单程序设计

72

先执行循环体,后判断条件的情况

例 2-6 输入一个整数,将各位数字反转后

输出。

算法的基本控制结构

Page 73: 第二章  C++ 简单程序设计

#include <iostream>using namespace std;int main() {

int n, right_digit, newnum = 0; cout << "Enter the number: ";cin >> n;

cout << "The number in reverse order is ";do {

right_digit = n % 10;cout << right_digit;n /= 10;

} while (n != 0); cout << endl;

return 0;}

73

Page 74: 第二章  C++ 简单程序设计

运行结果:

Enter the number: 365The number in reverse order is

563

74

Page 75: 第二章  C++ 简单程序设计

75

do-while do-while 语句语句语法形式

do 语句while ( 表达式 )

可以是复合语句,其中必须含有改变条件表达式值的语句。

执行顺序先执行循环体语句,后判断条件。表达式为 true 时,继续执行循环体

与 while 语句的比较:–while 语句执行顺序 先判断表达式的值,为 true 时,再执行语句

算法的基本控制结构

Page 76: 第二章  C++ 简单程序设计

对比下列程序: 程序 1 :#include <iostream>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 <iostream>using namespace std;int main() { int i, sum = 0; cin >> i; do { sum += i; i++; } while (i <= 10); cout << "sum=" << sum << endl; return 0;}

76

Page 77: 第二章  C++ 简单程序设计

77

for for 语句语句

语法形式

for (初始语句;表达式 1 ;表达式 2) 语句

【例 2-8 】

循环前先求解为 true 时执行循环体

每次执行完循环体后求解

算法的基本控制结构

Page 78: 第二章  C++ 简单程序设计

78

for for 语句语句for 语句中表达式 1, 表达式 2 , 表达式 3 类

型任意,都可省略,但分号;不可省,表达式 2 省略时,不判断循环条件,也就是认为表达式 2 始终为真

三个表达式可都省略 : for(; ;)表达式 1 , 3 也可以是逗号表达式【案例 2.32 】 计算两个整数的余数——多

个循环控制变量

算法的基本控制结构

Page 79: 第二章  C++ 简单程序设计

79

循环结构嵌套循环结构嵌套1 、可互相嵌套 ,层数不限2 、外层循环可包含两个以上内循环 ,但不

能相互交叉3 、嵌套循环的执行流程——外循环一次

,内循环一个周期嵌套循环的跳转禁止:从外层跳入内层跳入同层的另一循环向上跳转

算法的基本控制结构

Page 80: 第二章  C++ 简单程序设计

80

break break 和 和 continue continue 语句语句 break 语句

使程序从循环体和 switch 语句内跳出,继续执行逻辑上的下一条语句。不宜用在别处。

【案例 2.33 】 中止无限循环—— break 语句

continue 语句结束本次循环,接着判断是否执行下一次循环。

【案例 2.35 】 输出 1-20之间的偶数——continue 语句

算法的基本控制结构

Page 81: 第二章  C++ 简单程序设计

81

编写 检验一个正整数 n 是否为素数的程序 #include <iostream.h> void main() { int n,i; cout<<“ 请输入一个正整数: "; cin>>n; for(i=2;i<n;i++) if(n%i==0) {cout<<n<<“ 不是个素数!! \n";break;} if(i==n) cout<<n<<“ 是个素数!! \n"; }

算法的基本控制结构

Page 82: 第二章  C++ 简单程序设计

82

typedef 语句为一个已有的数据类型另外命名语法形式

typedef 已有类型名 新类型名表 ;例如

typedef double Area, Volume;typedef int Natural;Natural i1, i2;Area a;Volume v;

自定义数据类型

Page 83: 第二章  C++ 简单程序设计

83

枚举类型— enum

只要将需要的变量值一一列举出来,便构成了一个枚举类型。

枚举类型的声明形式如下:enum 枚举类型名 { 变量值列表 };

例如:enum Weekday{SUN, MON, TUE, WED, THU, FRI,

SAT};

自定义数据类型

Page 84: 第二章  C++ 简单程序设计

84

枚举类型— enum枚举类型应用说明:

– 对枚举元素按常量处理,不能对它们赋值。例如,不能写: SUN = 0;

– 枚举元素具有默认值,它们依次为: 0,1,2,...... 。– 也可以在声明时另行指定枚举元素的值,如:

enum Weekday{SUN=7,MON=1,TUE,WED,THU,FRI,SAT};

– 枚举值可以进行关系运算。– 整数值不能直接赋给枚举变量,如需

要将整数赋值给枚举变量,应进行显式类型转换。

自定义数据类型

Page 85: 第二章  C++ 简单程序设计

案例演示【案例 2.40 “】 剪刀,石头,布”游

戏——枚举类型

85