55
面面面面面面面面面 - 1 - - 1 - 第第第 C++ 第第第第第第

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

面向对象的程序设计 - 1 -- 1 -

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

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

面向对象的程序设计 - 2 -- 2 -

本章主要内容本章主要内容

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

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

面向对象的程序设计 - 3 -- 3 -

C++ 语言概述C++ 语言概述C++ 语言的产生

C++ 是从 C 语言发展演变而来的,首先是一个更好的 C 引入了类的机制,最初的 C++ 被称为“带类的 C” 1983 年正式取名为 C++ 从 1989 年开始 C++ 语言的标准化工作 于 1994 年制定了 ANSI C++ 标准草案 于 1998 年 11 月被国际标准化组织( ISO )批准为国际标准,成

为目前的 C++ 的产生

C++ 语言的特点 全面兼容 C

它保持了 C 的简洁、高效和接近汇编语言等特点 对 C 的类型系统进行了改革和扩充 C++ 也支持面向过程的程序设计,不是一个纯正的面向对象的语言

支持面向对象的方法

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

面向对象的程序设计 - 4 -- 4 -

C++ 程序实例C++ 程序实例

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

cout << "Hello!" << endl;cout << "Welcome to c++!" << endl;return 0;

}运行结果:Hello!Welcome to c++ !

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

面向对象的程序设计 - 5 -- 5 -

C++ 字符集与词法记号C++ 字符集与词法记号 C++ 字符集

大小写的英文字母: A~ Z, a~ z 数字字符: 0~ 9 特殊字符: ! # % ^ & * _ + = - ~ < > / \ ‘ “ ; .

, : ? ( ) [ ] { }

词法记号 关键字: C++预定义的单词 (P22) 标识符:程序员声明的单词,它命名程序正文中的一些实体 ,例如:函数名,变量名,类名,对象名等。

文字:在程序中直接使用符号表示的数据 操作符:用于实现各种运算的符号 分隔符: () {} , : ; 用于分隔各个词法记号或程序正文 空白符:空格、制表符( TAB键产生的字符)、垂直制表符、换行符、回车符和注释的总称

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

面向对象的程序设计 - 6 -- 6 -

标识符的构成规则标识符的构成规则

以大写字母、小写字母或下划线 (_) 开始。可以由以大写字母、小写字母、下划线 (_) 或数字 0 ~ 9 组成。大写字母和小写字母代表不同的标识符。不能是 C++ 关键字

判断下列哪些是标识符,哪些不是?_No1, No.1, this, 123go, Rectangle, go12, a fool

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

面向对象的程序设计 - 7 -- 7 -

数据类型——常量与变量数据类型——常量与变量#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 8: 第二章  C++ 简单程序设计

面向对象的程序设计 - 8 -- 8 -

数据类型——整型数据数据类型——整型数据#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 字节

整型常量整型变量

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

面向对象的程序设计 - 9 -- 9 -

数据类型——实型数据数据类型——实型数据#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;}

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 型例如: 12.3f

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

面向对象的程序设计 - 10 -- 10 -

数据类型——字符型数据数据类型——字符型数据 字符常量

单引号括起来的一个字符,如: 'a', 'D', '?', '$'

字符变量 用来存放字符常量 例: char c1, c2;

c1 = 'a'; c2 = 'A';

字符数据在内存中的存储形式 以 ASCII 码存储,占 1 字节,用 7 个二进制位, 如果字符变量 c1 的值为‘ a′,c2 的值为’ b′ ,则在变量中存放的是

‘ a′ 的 ASCII 码为 97 ,’ b′ 的 ASCII 码为 98 ,实际上在内存中是以二进制形式存放的,如下页所示。

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

面向对象的程序设计 - 11 -- 11 -

字符数据在内存中的存储形式字符数据在内存中的存储形式

既然字符数据是以 ASCII 码存储的,它的存储形式就与整数的存储形式类似。这样,在 C++ 中字符型数据和整型数据之间就可以通用。一个字符数据可以赋给一个整型变量,反之,一个整型数据也可以赋给一个字符变量。也可以对字符数据进行算术运算,此时相当于对它们的 ASCII 码进行算术运算。

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

面向对象的程序设计 - 12 -- 12 -

例子例子例 1 : 将字符赋给整型变量。#include <iostream>int main( ){ int i,j; //i 和 j 是整型变量 i=′A′; // 将一个字符常量赋给整型变量 i j=′B′; // 将一个字符常量赋给整型变量 j cout<<i<<′ ′<<j<<′ \ n′; // 输出整型变量 i 和 j 的值,′\ n′ 是换行符 return 0;}执行时输出 65 66

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

面向对象的程序设计 - 13 -- 13 -

例子例子例 2 :下面程序的作用是将小写字母转换为大写字母。#include <iostream>int main( ){ char c1,c2; c1=′a′; //‘a’ 的 ASCII 码为 97 ;‘ A’ 的 ASCII 码为65

c2=′b′; c1=c1-32; c2=c2-32; cout<<c1<<′ ′<<c2<<endl; return 0;}运行结果为A B

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

面向对象的程序设计 - 14 -- 14 -

数据类型——字符型数据数据类型——字符型数据 字符串常量

例 :"CHINA"

"a"

编译系统会在字符串最后自动加一个′\ 0′ 作为字符串结束标志。但′\ 0′ 并不是字符串的一部分,它只作为字符串的结束标志。如

cout<<“abc”<<endl ; 输出 3 个字符 abc ,而不包括′\ 0′ 。 注意: ″ a″ 和′ a′ 代表不同的含义,″ a″ 是字符串常量,′ a′

是字符常量。前者占两个字节,后者占 1 个字节。请分析下面的程序片段:

char c; // 定义一个字符变量 c=‘a’; // 正确 c=“a” ; // 错误, c 只能容纳一个字符

C H I N A \0

a \0

a

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

面向对象的程序设计 - 15 -- 15 -

特殊的字符常量——转义符特殊的字符常量——转义符在 C++ 的编译系统,遇到“\”时就会把它认作转义字符的

标志,把它和后的字符一起作为一个转义字符。 (P26 列表 )如果“\”后面的字符不能与“\”组成一个合法的转义字符( 如″\ c″) ,则在编译时显示出错信息。

如果希望将“\”字符也作为字符串中的一个字符,则应写为″ abc \\ n″ ,此时字符串包括 5 个字符,即 a,b,c, \ ,n 。

如果在一个字符串中最后一个字符为“\”,则表示它是续行符,下一行的字符是该字符串的一部分,且在两行字符串间无空格。如:

cout<<″We must study C \ ++ hard!″ ; // 行 1 最后的“\”后面的空格和换行均不起作用 // 行 2 的字符紧连在上一行最后的“\”前面字符之后 则输出 :We must study C++ hard!

cout<<″abc \\\ n″<<endl 运行结果是?要输出 cout<<“USST\n”应该怎么写?

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

面向对象的程序设计 - 16 -- 16 -

数据类型——布尔型数据数据类型——布尔型数据布尔型变量的说明:

例: bool flag;

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

小知识: Bool 这个名称源于英国数学家 George Boole,他是数学逻辑规则的奠基人

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

面向对象的程序设计 - 17 -- 17 -

数据类型 -- 变量初始化数据类型 -- 变量初始化允许在定义变量时对它赋予一个初值,这称为变量初始化。初值可以是常量,也可以是一个有确定值的表达式。如:int a=3

float b=5.78, c=2*sin(2.0) ;char d = 'a';int c(5);

注意:如果对变量未赋初值,则该变量的初值是一个不可预测的值,即该存储单元中当时的内容是不知道的。例如,若未对 a 赋值,执行输出语句

cout<<a<<″ ″<<b<<″ ″<<c<<endl ; 输出结果可能为 1.48544e-38 17.34 1.81858 (各次运行情况可能不同 )

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

面向对象的程序设计 - 18 -- 18 -

数据类型—混合运算时的类型转换数据类型—混合运算时的类型转换不同类型数据进行混合运算时, C++ 编译器会自动进行类型转

换。为了避免不同的数据类型在运算中出现类型问题,应尽量使用

同种类型数据。可以采用强制类型转换:

例如:float c;int a, b;c = float(a) / float(b); 或 c = (float)a / (float)b; 另外:类型转换操作符 < 类型说明符 >( 表达式 )

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

陷阱:除法中的整数1英里 =5280英尺,公路长 15000英尺。total_price=5000*(feet/5280.0);//15000/5280=2.84*5000=14200total_price=5000*(feet/5280);

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

面向对象的程序设计 - 19 -- 19 -

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

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

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

低 高

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

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

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

面向对象的程序设计 - 20 -- 20 -

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

register存放在通用寄存器中。

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

static在内存中是以固定地址存放的,在整个程序运行期间都有效。

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

面向对象的程序设计 - 21 -- 21 -

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

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

% (取余,操作数为整数)优先级与结合性

先乘除,后加减,同级自左至右++, -- (自增、自减)

例: i++; --j;

在 C 和 C++ 中,常在表达式中使用自增 (++) 和自减 (--) 运算符,他们的作用是使变量的值增 1 或减 1 ,如++i (在使用 i 之前,先使 i 的值加 1 ,如果 i 的原值为 3 ,则执行 j=++i 后, j 的值为 4 )i++ ( 在使用 i 之后,使 i 的值加 1 ,如果 i 的原值为 3 ,则执行 j=i++ 后, j 的值为 3 ,然后 i 变为 4)

请思考: i=2,j=3,a=i+++(++j) a 值为多少?

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

面向对象的程序设计 - 22 -- 22 -

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

举例 n=n+5

表达式的类型 等号左边对象的类型

表达式的值 等号左边对象被赋值后的值

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

面向对象的程序设计 - 23 -- 23 -

赋值运算符和赋值表达式—复合的赋值运算符赋值运算符和赋值表达式—复合的赋值运算符有 10种复合运算符:

+=, -=, *=, /=, %=,<<=, >>=, &=, ^=, |=

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

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)

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

面向对象的程序设计 - 24 -- 24 -

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

表达式 1 ,表达式 2…, 表达式 n求解顺序及结果

先求解 1 ,再求解 2..,再求解 n, 最终结果为表达式 n 的值

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

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

面向对象的程序设计 - 25 -- 25 -

关系运算与关系表达式关系运算与关系表达式

关系运算是比较简单的一种逻辑运算,优先次序为: < <= > >= == !=

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

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

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

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

面向对象的程序设计 - 26 -- 26 -

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

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

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

“&&” 的“短路特性”表达式 1 && 表达式 2先求解表达式 1若表达式 1 的值为 false ,则最终结果为 false ,不再求解表达式 2若表达式 1 的结果为 true ,则求解表达式 2 ,以表达式 2 的结果作为

最终结果“||” 也具有类似的特性

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

面向对象的程序设计 - 27 -- 27 -

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

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

执行顺序先求解表达式 1 ,若表达式 1 的值为 true ,则求解表达式 2 ,表达式 2 的值为最终结果若表达式 1 的值为 false ,则求解表达式 3 ,表达式 3 的值为最终结

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

注意:条件运算符优先级高于赋值运算符,低于逻辑运算符表达式 2 、 3 的类型可以不同,条件表达式的最终类型为 2 和 3 中较高的类型。

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

面向对象的程序设计 - 28 -- 28 -

sizeof 运算符sizeof 运算符语法形式

sizeof ( 类型名 )或 sizeof 表达式

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

例:sizeof(short)

sizeof x

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

面向对象的程序设计 - 29 -- 29 -

位运算——按位与位运算——按位与

运算规则将两个运算量的每一个位进行逻辑与操作

举例:计算 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 30: 第二章  C++ 简单程序设计

面向对象的程序设计 - 30 -- 30 -

位运算——按位或位运算——按位或运算规则

将两个运算量的每一个位进行逻辑或操作举例:计算 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 31: 第二章  C++ 简单程序设计

面向对象的程序设计 - 31 -- 31 -

位运算——按位异或位运算——按位异或运算规则

两个操作数进行异或:若对应位相同,则结果该位为 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异或取反) 例如:要使 01111010 低四位翻转:

0 1 1 1 1 0 1 0

(^) 0 0 0 0 1 1 1 1

0 1 1 1 0 1 0 1

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

面向对象的程序设计 - 32 -- 32 -

位运算——按位取反位运算——按位取反

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

例: 025 : 0000000000010101

~025 : 1111111111101010

位运算的运用,请思考:1. a=a^b; b=a^b; a=a^b 的运行结果2. 黑白棋3. 如何判断一个数是 2 的幂

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

面向对象的程序设计 - 33 -- 33 -

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

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

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

面向对象的程序设计 - 34 -- 34 -

运算符优先级运算符优先级

括号+

+ , -- , sizeof

*, /, %+, -==, !=位运算&&||?:赋值运算逗号运算

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

面向对象的程序设计 - 35 -- 35 -

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

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

面向对象的程序设计 - 36 -- 36 -

表达式语句与复合语句表达式语句与复合语句表达式语句格式:

表达式; 注意表达式语句与表达式的区别:

表达式可以包含在其他表达式中,而语句不可。例如: if ((a = b) > 0) t = a;不可写为: if ((a = b;) > 0) t = a;

复合语句即将多个语句用一对大括号包围,便构成一个复合语句,例如:

{sum=sum+i;i++;

}

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

面向对象的程序设计 - 37 -- 37 -

输入与输出输入与输出

向标准输出设备(显示器)输出例: int x; cout << "x=" << x;

从标准输入设备(键盘)输入例: int x1,x2,x3; cin >> x1>>x2>>x3;

小技巧:格式化带小数点的数字,可以在程序上加入以下的“魔法配方”cout.setf(ios::fixed);cout.setf(ios::showpoint);cout.precision(2);

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

面向对象的程序设计 - 38 -- 38 -

算法的基本控制结构算法的基本控制结构

顺序结构

分支结构

循环结构

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

面向对象的程序设计 - 39 -- 39 -

如何解决分支问题 ?如何解决分支问题 ?例 2-2 输入一个年份,判断是否闰年。#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;

}

运行结果: Enter the year: 2000

2000 is a leap year

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

面向对象的程序设计 - 40 -- 40 -

if 语句——三种形式if 语句——三种形式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

陷阱:再该用 == 的时候用成了 =int a=1;if (a==2) a++; 如果是 if (a=2) a++;呢?

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

面向对象的程序设计 - 41 -- 41 -

if 语句——嵌套if 语句——嵌套一般形式

if( ) if( ) 语句 1 else 语句 2else if( ) 语句 3 else 语句 4

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

思考下面程序的运行结果:int a=2; b=3;if (a>1) if (b<2) a+=1;else a+=2;a=?

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

面向对象的程序设计 - 42 -- 42 -

特殊的多分支结构特殊的多分支结构例 2-4 输入一个 0 ~ 6 的整数,转换成星期输出。#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;

}

小提示:别忘了用 break

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

面向对象的程序设计 - 43 -- 43 -

switch 语句switch 语句

43

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

执行顺序以 case 中的常量表达式值为入口标号,由此开始顺序执行。因此,每个 case 分支最后应该加 break 语句。

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

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

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

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

面向对象的程序设计 - 44 -- 44 -

如何有效地完成重复工作如何有效地完成重复工作例 2-5 求自然数 1 ~ 10 之和分析:本题需要用累加算法,累加过程是一个循环过程,可以用while 语句实现。

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

return 0;}

形式 while ( 表达式 ) 语句

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

执行顺序先判断表达式的值,若为

true 时,执行语句。

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

面向对象的程序设计 - 45 -- 45 -

先执行循环体,后判断条件的情况先执行循环体,后判断条件的情况例 2-6 输入一个整数,将各位数字反转后输出。#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; //相当于 n=n/10

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

return 0;}运行结果: Enter the number: 365The number in reverse order is 563

形式 do 语句 while ( 表达式)

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

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

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

面向对象的程序设计 - 46 -- 46 -

for 语句for 语句语法形式

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

例如: for(i=0;i<5;i++){ } for(;;){ } for(i=0,sum=0;i<10;i++){sum+=i;}

循环前先求解

为 true 时执行循环体

每次执行完循环体后求解

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

面向对象的程序设计 - 47 -- 47 -

例 2-8: 输入一个整数,求出它的所有因子。例 2-8: 输入一个整数,求出它的所有因子。#include <iostream>using namespace std;int main() {

int n;

cout << "Enter a positive integer: ";cin >> n;cout << "Number " << n << " Factors ";

for (int k = 1; k <= n; k++) if (n % k == 0) cout << k << " ";

cout << endl; return 0;}

运行结果: Enter a positive integer: 36

Number 36 Factors 1 2 3 4 6 9 12 18 36

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

面向对象的程序设计 - 48 -- 48 -

循环嵌套:例 2-9 编写程序输出以下图案循环嵌套:例 2-9 编写程序输出以下图案#include <iostream>using namespace std;int main() {

const int N = 4;for (int i = 1; i <= N; i++) { // 输出前 4 行图案 for (int j = 1; j <= 8 - 2 * i; j++) cout << ' '; for (int j = 1; j <= 2 * i - 1; j++) cout << '*'; cout << endl;}for (int i = 1; i <= N - 1; i++) {// 输出后 3 行图案 for (int j = 1; j <= 7 - 2 * i ;j++)

cout << '*'; cout << endl;

}return 0;

}

* *** *********************

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

面向对象的程序设计 - 49 -- 49 -

循环结构与选择结构相互嵌套循环结构与选择结构相互嵌套#include <iostream>using namespace std;int main() {

for (int n = 100; n <= 200; n++) { if (n % 3 != 0)

cout << n;}

return 0;}

试比较一下两个程序:for(i=0;i<N;i++){  if(条件满足 ){     doSomething();  else     doOtherthing();}--------------------if(条件满足 ){  for(i=0;i<N;i++)     doSomething();}else{  for(i=0;i<N;i++){    doOtherthing();}

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

面向对象的程序设计 - 50 -- 50 -

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

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

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

例:for(sum=0,i=0;i<5;i++){ if (i==3) break; sum+=i;}for(sum=0,i=0;i<5;i++){ if (i==3) continue; sum+=i;}

嵌套循环中的 break……

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

面向对象的程序设计 - 51 -- 51 -

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

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

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

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

面向对象的程序设计 - 52 -- 52 -

枚举类型— enum枚举类型— enum

只要将需要的变量值一一列举出来,便构成了一个枚举类型。枚举类型的声明形式如下:

enum 枚举类型名 { 变量值列表 };

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

枚举类型应用说明:对枚举元素按常量处理,不能对它们赋值。例如,不能写: SUN = 0;枚举元素具有默认值,它们依次为: 0,1,2,...... 。也可以在声明时另行指定枚举元素的值,如:

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

枚举值可以进行关系运算。整数值不能直接赋给枚举变量,如需要将整数赋值给枚举变量,应进行强制类型转换。

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

面向对象的程序设计 - 53 -- 53 -

结构体——结构的声明结构体——结构的声明结构的概念

结构是由不同数据类型的数据组成的集合体。声明结构类型

struct 结构名 { 数据类型 成员名 1 ; 数据类型 成员名 2 ;

┆ 数据类型 成员名 n ; };

变量说明形式结构名 结构变量名;

注意:结构变量的存储类型概念、它的寿命、可见性及使用范围与普通变量完全一致。结构变量说明在结构类型声明之后,二者也可同时进行。结构变量占内存大小可用 sizeof 运算求出 .

举例:struct Student {//学生信息结构体 int num; //学号 string name; //姓名 char gender; //性别 int age; // 年龄 float score; // 成绩 string addr; //住址};

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

面向对象的程序设计 - 54 -- 54 -

结构体变量的初始化和使用#include <iostream>#include <iomanip>#include <string>using namespace std;struct Student { //学生信息结构体 int num;//学号 string name;//姓名 char gender;//性别 int age;// 年龄} stu = { 97001, "Lin Lin", 'F', 19 };int main() { cout << setw(7) << stu.num << setw(20) << stu.name

<< setw(3) << stu.sex << setw(3) << stu.age; return 0;}

运行结果 : 97001 Lin Lin F 19

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

面向对象的程序设计 - 55 -- 55 -

联合体联合体声明形式:

union 联合名{ 数据类型 成员名 1 ; 数据类型 成员名 2 ; : 数据类型 成员名 n ; };

联合体类型变量说明的语法形式联合名 联合变量名;

引用形式:联合名 . 成员名

例: union UArea { char cData; short sData; long lData;}

UArea cData lDatasData