Upload
josephine-taylor
View
170
Download
0
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
面向对象的程序设计 - 1 -- 1 -
第二章 C++简单程序设计第二章 C++简单程序设计
面向对象的程序设计 - 2 -- 2 -
本章主要内容本章主要内容
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++ 也支持面向过程的程序设计,不是一个纯正的面向对象的语言
支持面向对象的方法
面向对象的程序设计 - 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++ !
面向对象的程序设计 - 5 -- 5 -
C++ 字符集与词法记号C++ 字符集与词法记号 C++ 字符集
大小写的英文字母: A~ Z, a~ z 数字字符: 0~ 9 特殊字符: ! # % ^ & * _ + = - ~ < > / \ ‘ “ ; .
, : ? ( ) [ ] { }
词法记号 关键字: C++预定义的单词 (P22) 标识符:程序员声明的单词,它命名程序正文中的一些实体 ,例如:函数名,变量名,类名,对象名等。
文字:在程序中直接使用符号表示的数据 操作符:用于实现各种运算的符号 分隔符: () {} , : ; 用于分隔各个词法记号或程序正文 空白符:空格、制表符( TAB键产生的字符)、垂直制表符、换行符、回车符和注释的总称
面向对象的程序设计 - 6 -- 6 -
标识符的构成规则标识符的构成规则
以大写字母、小写字母或下划线 (_) 开始。可以由以大写字母、小写字母、下划线 (_) 或数字 0 ~ 9 组成。大写字母和小写字母代表不同的标识符。不能是 C++ 关键字
判断下列哪些是标识符,哪些不是?_No1, No.1, this, 123go, Rectangle, go12, a fool
面向对象的程序设计 - 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;}
符号常量
常量变量先声明后使用
变量
面向对象的程序设计 - 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 字节
整型常量整型变量
面向对象的程序设计 - 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
面向对象的程序设计 - 10 -- 10 -
数据类型——字符型数据数据类型——字符型数据 字符常量
单引号括起来的一个字符,如: 'a', 'D', '?', '$'
字符变量 用来存放字符常量 例: char c1, c2;
c1 = 'a'; c2 = 'A';
字符数据在内存中的存储形式 以 ASCII 码存储,占 1 字节,用 7 个二进制位, 如果字符变量 c1 的值为‘ a′,c2 的值为’ b′ ,则在变量中存放的是
‘ a′ 的 ASCII 码为 97 ,’ b′ 的 ASCII 码为 98 ,实际上在内存中是以二进制形式存放的,如下页所示。
面向对象的程序设计 - 11 -- 11 -
字符数据在内存中的存储形式字符数据在内存中的存储形式
既然字符数据是以 ASCII 码存储的,它的存储形式就与整数的存储形式类似。这样,在 C++ 中字符型数据和整型数据之间就可以通用。一个字符数据可以赋给一个整型变量,反之,一个整型数据也可以赋给一个字符变量。也可以对字符数据进行算术运算,此时相当于对它们的 ASCII 码进行算术运算。
面向对象的程序设计 - 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
面向对象的程序设计 - 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
面向对象的程序设计 - 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
面向对象的程序设计 - 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”应该怎么写?
面向对象的程序设计 - 16 -- 16 -
数据类型——布尔型数据数据类型——布尔型数据布尔型变量的说明:
例: bool flag;
布尔型数据的取值:只有 false 和 true 两个值
小知识: Bool 这个名称源于英国数学家 George Boole,他是数学逻辑规则的奠基人
面向对象的程序设计 - 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 (各次运行情况可能不同 )
面向对象的程序设计 - 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);
面向对象的程序设计 - 19 -- 19 -
混合运算时数据类型的转换 ——隐含转换混合运算时数据类型的转换 ——隐含转换
一些二元运算符(算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符)要求两个操作数的类型一致。
在算术运算和关系运算中如果参与运算的操作数类型不一致,编译系统会自动对数据进行转换(即隐含转换),基本原则是将低类型数据转换为高类型数据。char,short,int,unsigned,long,unsigned long,float,double
低 高
当参与运算的操作数必须是 bool 型时,如果操作数是其它类型,编译系统会自动将非 0 数据转换为 true , 0 转换为 false 。
赋值运算要求左值与右值的类型相同,若类型不同,编译系统会自动将右值转换为左值的类型。
面向对象的程序设计 - 20 -- 20 -
变量的存储类型变量的存储类型auto属于一时性存储,其存储空间可以被若干变量多次覆盖使用。
register存放在通用寄存器中。
extern在所有函数和程序段中都可引用。
static在内存中是以固定地址存放的,在整个程序运行期间都有效。
面向对象的程序设计 - 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 值为多少?
面向对象的程序设计 - 22 -- 22 -
赋值运算符和赋值表达式 简单的赋值运算符 "="赋值运算符和赋值表达式 简单的赋值运算符 "="
举例 n=n+5
表达式的类型 等号左边对象的类型
表达式的值 等号左边对象被赋值后的值
面向对象的程序设计 - 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)
面向对象的程序设计 - 24 -- 24 -
逗号运算和逗号表达式逗号运算和逗号表达式格式
表达式 1 ,表达式 2…, 表达式 n求解顺序及结果
先求解 1 ,再求解 2..,再求解 n, 最终结果为表达式 n 的值
例a = 3 * 5 , a * 4 最终结果为 60
面向对象的程序设计 - 25 -- 25 -
关系运算与关系表达式关系运算与关系表达式
关系运算是比较简单的一种逻辑运算,优先次序为: < <= > >= == !=
优先级相同(高) 优先级相同(低)
关系表达式是一种最简单的逻辑表达式其结果类型为 bool ,值只能为 true 或 false 。
例如: a > b , c <= a + b , x + y == 3
面向对象的程序设计 - 26 -- 26 -
逻辑运算与逻辑表达式逻辑运算与逻辑表达式逻辑运算符
!(非 ) &&( 与 ) ||( 或 )优先次序: 高 → 低
逻辑表达式 例如: (a > b) && (x > y) 其结果类型为 bool ,值只能为 true 或 false
“&&” 的“短路特性”表达式 1 && 表达式 2先求解表达式 1若表达式 1 的值为 false ,则最终结果为 false ,不再求解表达式 2若表达式 1 的结果为 true ,则求解表达式 2 ,以表达式 2 的结果作为
最终结果“||” 也具有类似的特性
面向对象的程序设计 - 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 中较高的类型。
面向对象的程序设计 - 28 -- 28 -
sizeof 运算符sizeof 运算符语法形式
sizeof ( 类型名 )或 sizeof 表达式
结果值:“类型名”所指定的类型或“表达式”的结果类型所占的字节数。
例:sizeof(short)
sizeof x
面向对象的程序设计 - 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;
面向对象的程序设计 - 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;
面向对象的程序设计 - 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
面向对象的程序设计 - 32 -- 32 -
位运算——按位取反位运算——按位取反
单目运算符,对一个二进制数按位取反。
例: 025 : 0000000000010101
~025 : 1111111111101010
位运算的运用,请思考:1. a=a^b; b=a^b; a=a^b 的运行结果2. 黑白棋3. 如何判断一个数是 2 的幂
面向对象的程序设计 - 33 -- 33 -
位运算——移位位运算——移位左移运算( << )左移后,低位补 0 ,高位舍弃。
右移运算( >> )右移后,低位:舍弃高位:无符号数:补 0 有符号数:补“符号位”
面向对象的程序设计 - 34 -- 34 -
运算符优先级运算符优先级
括号+
+ , -- , sizeof
*, /, %+, -==, !=位运算&&||?:赋值运算逗号运算
低
高
面向对象的程序设计 - 35 -- 35 -
语句语句 空语句 声明语句 表达式语句 选择语句 循环语句 跳转语句 复合语句 标号语句
面向对象的程序设计 - 36 -- 36 -
表达式语句与复合语句表达式语句与复合语句表达式语句格式:
表达式; 注意表达式语句与表达式的区别:
表达式可以包含在其他表达式中,而语句不可。例如: if ((a = b) > 0) t = a;不可写为: if ((a = b;) > 0) t = a;
复合语句即将多个语句用一对大括号包围,便构成一个复合语句,例如:
{sum=sum+i;i++;
}
面向对象的程序设计 - 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);
面向对象的程序设计 - 38 -- 38 -
算法的基本控制结构算法的基本控制结构
顺序结构
分支结构
循环结构
面向对象的程序设计 - 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
面向对象的程序设计 - 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++;呢?
面向对象的程序设计 - 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=?
面向对象的程序设计 - 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
面向对象的程序设计 - 43 -- 43 -
switch 语句switch 语句
43
一般形式switch ( 表达式 ) { case 常量表达式 1 :语句 1 case 常量表达式 2 :语句 2 ┆ case 常量表达式 n :语句 n default : 语句 n+1 }
执行顺序以 case 中的常量表达式值为入口标号,由此开始顺序执行。因此,每个 case 分支最后应该加 break 语句。
每个常量表达式的值不能相同,次序不影响执行结果。
可以是多个语句,但不必用 { } 。
可以是整型、字符型、枚举型
面向对象的程序设计 - 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 时,执行语句。
面向对象的程序设计 - 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 时,继续执行循环体
面向对象的程序设计 - 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 时执行循环体
每次执行完循环体后求解
面向对象的程序设计 - 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
面向对象的程序设计 - 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;
}
* *** *********************
面向对象的程序设计 - 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();}
面向对象的程序设计 - 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……
面向对象的程序设计 - 51 -- 51 -
typedef 语句typedef 语句为一个已有的数据类型另外命名语法形式
typedef 已有类型名 新类型名表 ;
例如typedef double Area, Volume;typedef int Natural;Natural i1, i2;Area a;Volume v;
面向对象的程序设计 - 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};
枚举值可以进行关系运算。整数值不能直接赋给枚举变量,如需要将整数赋值给枚举变量,应进行强制类型转换。
面向对象的程序设计 - 53 -- 53 -
结构体——结构的声明结构体——结构的声明结构的概念
结构是由不同数据类型的数据组成的集合体。声明结构类型
struct 结构名 { 数据类型 成员名 1 ; 数据类型 成员名 2 ;
┆ 数据类型 成员名 n ; };
变量说明形式结构名 结构变量名;
注意:结构变量的存储类型概念、它的寿命、可见性及使用范围与普通变量完全一致。结构变量说明在结构类型声明之后,二者也可同时进行。结构变量占内存大小可用 sizeof 运算求出 .
举例:struct Student {//学生信息结构体 int num; //学号 string name; //姓名 char gender; //性别 int age; // 年龄 float score; // 成绩 string addr; //住址};
面向对象的程序设计 - 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
面向对象的程序设计 - 55 -- 55 -
联合体联合体声明形式:
union 联合名{ 数据类型 成员名 1 ; 数据类型 成员名 2 ; : 数据类型 成员名 n ; };
联合体类型变量说明的语法形式联合名 联合变量名;
引用形式:联合名 . 成员名
例: union UArea { char cData; short sData; long lData;}
UArea cData lDatasData