1.01k likes | 1.25k Views
C++ 语言程序设计. 锦州电大 赵薇茵. 第一章 C++ 语言概述 第二章 基本数据类型与表达式 第三章 C++ 程序的流程控制 第四章 数组 第五章 C++ 函数 第六章 指针、引用和动态空间管理 第七章 结构与联合 第八章 类与对象 第九章 C++ 流. 目录. 目 录. 一、导学内容 1 、 C++ 语言的简史与特点 2 、简单的 C++ 程序 3 、程序的编辑、编译、连接和运行 二、本章重点 简单的 C++ 程序设计 三、学习目标
E N D
C++语言程序设计 锦州电大 赵薇茵
第一章 C++语言概述 第二章 基本数据类型与表达式 第三章 C++程序的流程控制 第四章 数组 第五章 C++函数 第六章 指针、引用和动态空间管理 第七章 结构与联合 第八章 类与对象 第九章 C++流 目录 目 录
一、导学内容 1、C++语言的简史与特点 2、简单的C++程序 3、程序的编辑、编译、连接和运行 二、本章重点 简单的C++程序设计 三、学习目标 能够编写包含键盘输入、计算和显示输出等操作的简单C++程序。 第一章 C++语言概述 第一章 C++语言概述
四、教学方法 面授与答疑 1·1 C++语言的简史与特点 C++源于C语言。设计C语言的最初目的是编写操作系统,由于其简单、灵活的特点,很快被用于编写各种不同类型的程序,从而成为世界上最流行的语言之一。 C++语言是C语言的扩充、改进版本,最初的成果称为“带类的C”,1983年正式取名为C++,它改进了C的不足之处,支持面向对象的程序设计,在改进的同时保持了C的简洁性和高效性。 C++程序的特点 支持面向对象的程序设计 第一章 C++语言概述
1·2 简单的C++程序 一、例题 /*—————————————— 文件名:ch1.cpp ———————————————*/ #include <iostream.h> #include <stdlib.h> void main() { int i,j,k; //说明变量 i=2; j=10; //变量赋值 k=_max(i,j); // _max()为比较函数 cout<<i<<“,”<<j<<“中较大者为”<<k<<endl; //显示结果 } 本程序的执行结果:2,10中较大者为10 第一章 C++语言概述
说明 (1)C++为了与C语言兼容,能识别C语言的注释方式,即一对符号“/*”与“*/”之间的内容,它可以多行。 (2)每个以符号“#”开头的行,称为编译预处理行。如“#include ”称为文件包含预处理命令。 (3)main()表示主函数,第一个C++程序都必须有一个main()函数。它是程序的入口。 (4)C++程序中的标识符大小写是“敏感”的,函数名main全部都由小写字母构成。 (5)在main()函数体中,cout是一个代表标准输出 流设备。输出操作由运算符“<<”来表达,它表示将该运算符右边的数据送到显示设备上。 (6)程序中用双引号括起来的数据“,”等被称为字符串常量,“;”表示一语句的结束。 第一章 C++语言概述
(7)C++中,一个变量必须在声明之后 才能使用,所以程序首先进行变量定义。定义变量,就意味着给变量分配内存空间,用来存放变量值。 (8)k=_max(i,j);是调用_max ()函数求出i 和j中较大者。 (9)cout<<i<<“,”<<j<<“中较大者为”<<k<<endl;中使用 cout在屏幕上显示相应的结果。6个“<<”符号,表示各项内容连续输出,其中i 、 j、 k是变量,直接输出其值; “,”和“中较大者为”是字符串,原样输出;“endl”符号表示输出一个回车符。 二、C++程序的组成 1、预处理命令 C++程序的预处理命令以“#”开头。它提供了三类预处理命令:宏定义命令、文件包含命令和条件编译命令。 第一章 C++语言概述
2、输入和输出 C++程序中总是少不了输入和输出的语句,以实现与程序内部的信息交流。 3、函数 C++的程序是由若干个文件组成的,每个文件又是由若干个函数组成,而且必须有一个并且只能有一个是主函数。 4、语句 语句是组成程序的基本单元。函数是由若干条语句组成的。一条语句结束时要用分号。 5、变量 多数程序都需要说明和使用变量。 第一章 C++语言概述
三、C++程序的书写格式 1、一行一般写一条语句,短语句可以一行写多个;长语句可以一条写多行,分行原则是不能将一单词分开。 2、C++程序书写时要尽量提高可读性。为此,采用适当的缩格书写方式是很重要的。即同一类内容的语句行要对齐。 1·3 程序的编辑、编译、连接和运行 一、编制源程序(假设文件名为file.cpp),既输入、修改程序。 二、编译源程序,生成一个目标文件( file.obj),既目标程序。 三、将用户生成的多个目标代码文件和系统提供的库文件(.lib)中某些代码连接在一起,生成一个可执行程序( file.exe)。 四、最后是执行程序,一般在编译系统下有执行功能,通过选择菜单项便可实现,既运行。 第一章 C++语言概述
y y 编辑源程序 出错? 存盘 编译 n 连接 执行 出错? n 结束 开始 file.cpp file.obj file.exe C++程序的开发过程 第一章 C++语言概述
一、导学内容 1、C++数据类型概述 2、整型数据 3、字符型数据 4、枚举型数据 5、实型数据 6、符号常量与常值变量 7、数值表达式 8、逻辑型数据与逻辑表达式 9、自定义类型修饰符 10、表达式的副作用与表达式语句 第二章 基本数据类型与表达式 第二章 基本数据类型与表达式
二、本章重点 1、各种数据类型及表达式。 2、逻辑型数据类型和逻辑表达式。 三、学习目标 1、能够根据要解决的实际情况选用适当的数据类型。 2、熟练掌握数值表达式的构造方法,能够用表达式完成程序中的数值计算。 3、熟练掌握逻辑表达式的构造方法,能够用逻辑表达式表达各种条件。 4、了解表达式副作用,能够在程序中恰当地运用。 四、教学方法 面授、答疑、上机。 第二章 基本数据类型与表达式
2·1 C++数据类型概述 整型:int short long 字符型:char 实型型:float double 逻辑型:bool 基本数据类型 数据类型 非基本数据类型 第二章 基本数据类型与表达式 数组 指针类 记录类 枚举型:enum 结构:struct 联合:union
一、各种整型数据的基本情况见表面2-1(15) 二、整型常量的表示方法 1、整型常量可以用十进制、八进制、十六进制表示: 例如: 20 //十进制 024 //八进制数以0开头 0x14 //十六进制数以0x开头 2、整型常量可以后跟字母l或L表示long型,跟 u或U表示 unsigned整数(无符号整数): 135 u、8846 U L、5 L、10 l u 2·2整型数据 第二章 基本数据类型与表达式
三、整型变量的定义和初始化 类型修饰符 变量名[=表达式][,变量名 例如:unsigned a; int x,th1=4,th2=8,th3=ff(th2+5); //为一整型函数 int x=6 与 int x; x=6; 等效 2·3 字符型数据 一、字符型的基本情况见表2-2(18) 二、字符常量的表示 1、 字符常量常用单引号括起来,如‘3’、‘B’和‘’分别表示字符3、字符B和空白字符。 2、特殊字符如回车符、换行符等因无法正常显示,所以需要有特殊的方式表示。 【=表达式】 ] 第二章 基本数据类型与表达式
一般以转义字符‘\’开始,后跟不同的字符表示不同的特殊字符,如‘\r’—CR(回车) ‘\t’—HT(横向跳格) ‘\v’—VT(纵向跳格) ‘\n’—LF(换行) 3、以字符‘\0’作为结束标记贩字符序列就是C++的字符串,它称为字符结束符。 字符串常量用双引号括起来的的字符序列表示。 如:“”//空串 “abcd” //一般字符串 “a\n\rb” //带特殊符号的字符串 三、字符型变量 定义:类型修饰符为char,如 char c1,c2=‘A’; 四、字符型与整型的关系 因字符是用代码表示的,而每个代码就是一个整数,因而在表达式求值过程中,所有的字符被转换为与其代码等值的整数,有符号字符被转换为有符号整数,无符号字符转换为无符号整数。 第二章 基本数据类型与表达式
一、枚举类型 枚举类型定义了一些整型符号常量的集合,其说明形式为: enum 枚举名 {标识符1,标识符2, …,标识符n}; 其中,标识符1至标识符n表示一些整型符号常量,它们默认由系统赋予整数值,序列中每个标识符的值比前一个标识符大1,例如: enum Boolean {No,Yes}; // No等于0,Yes等于1 enum Color {Red=-2,Yellow,Green=2,Blue}; 这样有: Red=-2,Yellow-1,Green=2,Blue=3。 2·4 枚举型数据 第二章 基本数据类型与表达式
二、例题: #include <iostream.h> void main() { enum Color {Red,Yellow,Green,Blue}; int n; for (n=Red;n<=Blue;n++) cout <<n<<“”; cout <<endl; } 本程序的执行结果为:0 1 2 3 第二章 基本数据类型与表达式
一、实型 数据的基本情况见表面2-4(P24)。 二、实型常量的表示 1、双精度常量:十进制表示法和科学记数,用科学记数法时,指数部分以E或e开始。 如 3.14159 0.12 1.0E-3 2. 2、单精度常量,在双精度常量基础上加F或f; 3、长双精度常量在双精度常量基础上加L或l; 三、实型变量的定义和初始化 类型标识符分别为 长双精度:long double 双精度: double 单精度:float 如:long double var1=3.14159L; double var2=3.14; 2·5 实型数据 第二章 基本数据类型与表达式
用预处理命令# define定义一个符号来代表某个常量,如: #define PI 3.1416 注意:前面带#的命令都是预处理命令,不是C++语句, 因此不能以分号结尾。 优点:1、提高程序的可读性; 2、提高数据的一致性; 3、提高程序的可维护性。 常值变量的定义是在一般变量的定义前加上保留字const,如: constdoublePI =3.1416; 注意:常值变量在定义时必须初始化,且在程序中不允许改 变这个初始值。 2·6 符号常量与常值变量 第二章 基本数据类型与表达式
数值表达式为整型表达式和实型表达式的统称。数值表达式为整型表达式和实型表达式的统称。 一、算术操作符 +(加)-(减)*(乘)/(除)%(求余) +(正)-(负) 注意:1、/——对于整型和实型具有不同的意义,整型是整除操作,实型是一般意义的除法。 2、%——只用于整数的求余操作 二、位操作符 <<(左移)>>(右移)|(按位或)&(按位与) ^(按位异或)~(按位求反) 位操作只针对整数。 2·7 数值表达式 第二章 基本数据类型与表达式
三、赋值操作符 赋值操作符是=,构成一个赋值表达式。 四、复合赋值操作符 += -= *=/=%= <<=>>=|=&=^= 复合赋值与普通赋值在功能上有严格的的对应关系,即:变量?=表达式 相当于 变量=变量?表达式 五、增1减1操作符 自增(++)、自减(--)运算符为变量的增1和减1提供了紧凑格式:a++ 等价于a=a+1 a–等价于a=a-1 注意:1、自增、自减符号既可位于变量的前面,也可位于变量的后面,在单独作为一个表达式时,++a和a++效果一样,都是将变量a自增1。 2、前缀++表示先将其后面的变量值增1,然后将增1后变量参与表达式运算,后缀++表示将其前面的变量先参与表达式运算,然后变量本身增1。 第二章 基本数据类型与表达式
3、避免++(--)所作用的变量在同一表达式中重复出现,因为这样的表达式含义是不明确的。3、避免++(--)所作用的变量在同一表达式中重复出现,因为这样的表达式含义是不明确的。 六、sizeof操作符 它用于获得一数据或数据类型所占空间的字节数 使用格式为: sizeof (类型修饰符)或sizeof(表达式) 七、操作符的优先级和结合性 当表达式中有多个操作符时,优先级高的操作符先执行。 操作符的结合性分为由左向右和由右向左两种,一元操作符、赋值及复合赋值操作符具有从右到左的结合性,其余操作符具有从左到右的结合性。 有关详细的优先级和结合性参见附录A(P345) 第二章 基本数据类型与表达式
八、类型的自动转换与强制转换 1、隐式类型转换 2、显式类型转换 转换形式:(类型名)表达式 或 类型名(表达式) 无符号长整型unsigned long 无符号 整型(unsigned) 双精度浮点型(double) 长整型(long) 整型(int) 短整型、 字符型 (short,char) 单精度浮 点型(float) 第二章 基本数据类型与表达式
一、逻辑型数据 逻辑型数据只有两个,既true(真)或false(假),分别用值非0(true)或0(false)表示。 二、逻辑表达式 1、无操作符的逻辑表达式—简单逻辑表达式 逻辑常量、逻辑变量和逻辑型函数的调用,是最简单的逻辑表达式。 2、关系操作符和关系表达式 ==(等于)、!=(不等于)、>(大于)<(小于)>=(大于等于)和<=(小于等于) 比较的结果只能是 false或true; 2·8 逻辑型数据与逻辑表达式 第二章 基本数据类型与表达式
3、逻辑操作符和逻辑表达式 逻辑操作符 !(逻辑非)、||(逻辑或)和&&(逻辑与) 逻辑操作的结果只能是true或true E1 false false true true E2 false true false true !E1 true true false false E1||E2 false true true true E1&&E2 false false false true 注意: 结合性:除!以外的逻辑操作符和关系操作符 的结合性, 为“由左向右”; 优先级:! 算术 关系 逻辑 第二章 基本数据类型与表达式
三、复合条件 逻辑符&& 、||均可用于构造复合条件的表达式,其左右两边的操作对象称为子条件。 对于复合条件E1 ||E2,只要子条件E1和E2中有一个值为true,复合条件的值即为true; 对于复合条件E1&&E2,只要子条件E1和E2中有一值为false,复合条件的值即为false。 如果E1和E2互为相反条件,则E1||E2必为true, E1&&E2必为false。 四、相反条件、等价条件、永假条件和永真条件 1、相反条件 关系运算符分为3对: ==与!=、>和<=、<和>= 逻辑非!专门用于构造相反条件 第二章 基本数据类型与表达式
2、等价条件 典型的逻辑表达式的等价形式: !!E E !(x==y) x!=y !(x!=y) x=y !(x>y) x<=y !(x<=y) x>y !(x<y) x>=y !(x>=y) x<y !(E1&&E2) !E1||!E2 !(E1||E2) !E1&&!E2 E1&&E2 E2&&E1 E1||E2 E2||E1 3、永假条件和永真条件 这两种条件已失去了作为“条件”的本意,通常是应当加以避免的。 五、逻辑型与其他数据类型的关系 1、逻辑型数据作为数值数据使用时,false 被转换成整数0,true被转换成整数1; 2、字符型、枚举型、整型或实型数据值作为逻辑值使用时,一切0值被转换成false(假),一切非0值被转换成true(真); 3、指针值作为逻辑值使用时,空指针被转换成false,非空指针被转换成true 。 第二章 基本数据类型与表达式
六、逻辑型数据的应用——条件操作符与条件表达式六、逻辑型数据的应用——条件操作符与条件表达式 条件运算符是C++中惟一具有3个运算元的运算符,其形式为: 表达式1?表达式2:表达式3 它的运算方式为:先计算表达式1的值,如果其值为非0(真),则表达式2的值就是整个表达式的最终结果;否则表达式3的值就是整个表达式的值。 例如: (a>b)?a:b //求两个数中最大的值,决定哪个是最大值 使用了条件运算符。 第二章 基本数据类型与表达式
在C++中可以利用typedef定义自己的变量类型,其形式为:在C++中可以利用typedef定义自己的变量类型,其形式为: typedef 类型修饰符说明; 类型修饰符说明类似于变量说明,吸是变量名用类型名代替了,实际上,这等于定义了一个同义词,这种方式与创建一个新的类型是不同的。例如: typedef int width; //定义了新类型的width,它实际上是整型 typedef char string[10]; //定义了新类型的string,它是字符数组 使用自定义类型和使用系统预定义的类型一样: width n; //等价于int n; string name; //等价于char name[10]; 优点:1、可以更好地表达程序员的意思; 2、简单方便,一些数据类型可以用一个简单的类型标识 符来表示,不用每次都麻烦地写复杂的定义。 2·9 自定义类型修饰符 第二章 基本数据类型与表达式
一、表达式的副作用 对于赋值、复合赋值、前增1、前减1、后增1、后减1这些操作符所作用的对象必须是变量,因此它们也可称为作用于变量的操作。 对于作用于变量的操作,除后增1和后减1以外,还一个特点: 作为操作结果的表达式的值就是所作用的变量所获得的值,即赋值、复合赋值、前增1、前减1操作的结果仍然是变量对象,而且就是那个被作用的变量。 例如: int k=3; cout<<++(k+=2); cout<< ‘’<<k; //输出是6 6 注意:1、作用于变量的操作只能施加于变量对象。 2、当若于个作用于变量的操作施加于同一变量时,除了最后一个外,不得有后增1或后减1的操作。 2·10 表达式的副作用与表达式语句 第二章 基本数据类型与表达式
二、逗号操作符与逗号表达式 用逗号将若干个表达式连起来组成的表达式。该表达式的值是组成逗号表达式的若干个表达式中最后一个表达式的值,类型也是最后一个表达式的类型。逗号表达式计算值的顺序是从左至右逐个表达式分别计算。 例如: x=(i++,j); //x的值与,j相同 注意:逗号操作符的优先级是所有操作符中最低的。 三、表达式副作用的应用——表达式语句 在C++中,任何一个表达式都可以作为一个语句来使用,即表达式语句,在表达式后加上语句结束符(即;)。 常用的表达式有6种: 算术表达式、逻辑表达式、关系表达式、赋值表达式、条件表达式、逗号表达式 第二章 基本数据类型与表达式
一、导学内容 1、流程控制与程序结构 2、条件分支结构 3、循环结构 4、其他流程控制 二、本章重点 If 语句、for 语句、while语句和do…while语句等的应用。 三、学习目标 1、熟练掌握if语句,掌握switch语句,会利用这两种语句进行条件分支结构的程序设计; 2、熟练掌握for语句、while语句和do…while语句,会利用这三种语句进行循环结构的程序设计; 3、掌握break语句和continue语句与上述语句配合使用的方法; 4、了解goto语句的用法。 第三章 C++程序的流程控制 第三章 C++程序的流程控制
四、教学方法 面授、答疑、上机 3·1 流程控制与程序结构 算法的基本控制结构有三种:顺序结构、选择结构和循环结构,为此C++中提供了这三种控制语句。 1、顺序结构 程序中按先后顺序依次执行。 先执行语句1,再执行语句2。 2、条件分支结构 由特定的条件决定执行哪个语句的程序结构。 3、循环结构 由特定的条件决定某个语句重复执行次数的控制方式。 第三章 C++程序的流程控制
P A 语句1 P A 语句2 B A P 选择 图3—2 顺序 图3—1 循环(当型) 图3—3—1 循环(直到型) 图3—3—2 第三章 C++程序的流程控制 false true false true true false • 三种结构的一个共同特点是:只有一个入口和一个出口,程序结构之间的衔接非常简单,一个结构的出口就是另一个结构的入口。
一、 if 语句 在C++中,语句默认都是顺序执行,如果碰到选择或循环语句,顺序执行的规则就要改变。 if 语句用于在程序中有条件地执行某一语句序列,它的基本语法形式为: if (条件表达式)语句1 【else 语句2】 当条件为逻辑表达式时,若条件成立,表达式的值为真(true),否则为假(false);若条件不是一个逻辑表达式,则一切0值将被转换成false ,一切非0值将被转换成true 。 例: #include <iostream.h> //显示用户输入数值的绝对值 void main() { int x; cout << “x=”; cin>>x; if(x<0)cout<<-x<<endl; else cout <<x<<ednl; } 3·2 条件分支结构 第三章 C++程序的流程控制
例一:以下程序判断输入的年份是否为闰年(凡是能被400整除的,或不能被100整除但能被4整除的年份为闰年):例一:以下程序判断输入的年份是否为闰年(凡是能被400整除的,或不能被100整除但能被4整除的年份为闰年): #include <iostream.h> void main() { int year,rem4,rem100,rem400; cout<<“输入年份:”; cin>>year; rem400=year%400; //能否被400整除 rem100=year%100;//能否被4整除但不能被100整除 rem4=year%4; if((rem400==0)||((rem4==0)&&(rem100!=0))) cout<<year<<“是闰年。”<<endl; cout<<year<<“不是闰年。”<<endl; } 第三章 C++程序的流程控制 • 本程序的执行结果: • 输入年份: 2001 • 2001不是闰年
二、 if 语句的嵌套 在嵌套的if 语句中会出现多个“if ”和多个“else”,两者之间的配对关系为:从遇见第一个else开始,“else”总与离它最近的“if ”配对,否则一定要使用括弧{};尽量避免在if语句的else之前嵌套另一个if语句。 例如: ① if(n>0) { if(a>b) z=a; (正确) If(n>0) else z=b; } if(a>b) z=a; ② if(n>0) { else z=b; if(a>b) z=a; (错误) } else z=b; if(n<=0) z=b; else if(a>b) z=a; 第三章 C++程序的流程控制 等效
例二(P55例3.1)输入2个其中最大一个并显示出来。例二(P55例3.1)输入2个其中最大一个并显示出来。 #include <iostream.h> void main() { int i,j; cout<<“请输入2个整数:”; cin>>i>>j; cout<<“2个数中最大的是:”; if(i>=j) cout<<i<<endl; else cout<<j<<endl; } 第三章 C++程序的流程控制 顺序结构 分支结构 说明:比较一次就可以完成。
例三(P55例3.2):输入3个数,找出其中最大一个并显示出来。例三(P55例3.2):输入3个数,找出其中最大一个并显示出来。 #include <iostream.h> void main() { int i,j,k; cout<<“请输入3个整数:”; cin>>i>>j>>k; cout<<“3个数中最大的是:”; If(i>=j) { if(i>=k) cout<<i<<endl; else cout<<k<<endl; } else { if(j>=k) cout<<j<<endl; else cout<<k<<endl; } } 第三章 C++程序的流程控制 说明:需要比较二次
例四(P57例3.4):输入3个数,然后按从大到小的顺序把它们显示出来。例四(P57例3.4):输入3个数,然后按从大到小的顺序把它们显示出来。 #include <iostream.h> void main() { int i,j,k,p; cout<<“请输入3个整数:” cin>>i>>j>>k; if(i<j) {p=i;i=j;j=p;} if(i<k) {p=i;i=k;k=p;} if(j<k) { p=j;j=k;k=p;} cout <<endl<<i<<‘’<<j<<‘’<<k; } 第三章 C++程序的流程控制 说明: 1变量p是一个中间变量; 2、p=i;i=j;j=p;是将i 、 j中的大值放入中i ; 3、 p=i;i=k;k=p;是在保证i 是 i 、 j中的大值基础上,比较i 、 k值中的大小,将大值放入i中。 4、 p=j;j=k;k=p;是在前两项的基础上将j、k中的大值放入j中。
三、 if多分支结构 if …else if语句用于进行多重判断,其语法形式如下: if ( <条件表达式1>) <语句1> else if ( <条件表达式2>) <语句2> …… else if ( <条件表达式n>) <语句n> else <语句n+1> if 、else if、 else 都是关键字, <条件表达式1>、 <条件表达式2>、 ……<条件表达式n>是作为判断条件使用的各种表达式,常用的是关系表达式或逻辑表达式,其他表达式也可以,不要用赋值表达式。<语句1>、<语句2>、<语句n+1>可以是单一语句,也可以是复合语句。 该语句的功能:先计算<条件表达式1>给出的表达式值,如果该值为非0,则执行<语句1>,执行完毕后转到该条件语句后面继续执行其后的语句;如果该值为0,则继续计算<条件表达式2>给出的表达式值,依次类推。如果所有条件中给出的表达式值都为0,则执行最后的else 后面的<语句n+1>,如果没有else ,则什么也不做,转到该条件语句后面的语句继续执行。 第三章 C++程序的流程控制
例五(P61例3.6):以下程序将用户输入的分数转换成等级:A(≥90),B(80~89),C(70~79),D(60~69),E( < 60): #include <iostream.h> void main() { float x; cout<<“分数:”; cin>>x; if(x>=90) cout<<“A”endl; else if(x>=80) cout<<“B”<<endl; else if(x>=70) cout<<“C”<<endl; else if(x>=60) cout<<“D”<<endl; else cout<<“E”<<endl; 第三章 C++程序的流程控制 充分利用条件间的相互排斥关系,使条件表达式非常简洁,多分支结构中的各个条件都应当是相互排斥的,任意时刻顶多有一个条件得以满足,不应当出现既满足这个条件又满足那个条件的情况。
四、switch语句和switch多分支结构 switch语句也称为开关语句,用于有多重选择的场合,测试某一个变量具有多个值时所执行的动作。 switch语句的语法形式为: switch ( <整型常量表达式>) { case <整型常量表达式1>: <语句序列1> case <整型常量表达式2>: <语句序列2> …… case <整型常量表达式n>: <语句序列n> default:<语句n+1> } switch语句的执行顺序是: 首先计算switch 语句<整型常量表达式>的值,然后在case语句中寻找值相等的整型常量表达式,并以此为入口标号,由此开始顺序执行。如果没有找到相等的整型常量表达式,则从“default:”开始执行。 第三章 C++程序的流程控制
使用switch语句应当注意下列问题: (1)整型表达式包括字符型或枚举型表达式。 (2)各常量表达式的值不能相同,但次序不影响执行结果。 (3)每个case 分支可以有多条语句,但不必用{ }。 (4)每个case 语句只是一个入口标号,并不能确定执行的终止点,因此每个case 分支的最后应该加break语句,用来结束整个switch结构,否则会从入口点开始一直执行到switch结构的结束点。 (5)当若干分支需要执行相同操作时,可以使多个case分支共用一组语句。 第三章 C++程序的流程控制
例六、以下程序根据用户选择显示相应计算机语言:例六、以下程序根据用户选择显示相应计算机语言: #include <iostream.h> void main() { enum software {vc=1,vb,vfp}; // software枚举类型数据 int choice; cout<<“1.Visual C++”<<endl; cout<<“2.Visual Basic”<<endl; cout<<“3.Visual Foxpro”<<endl; cout<<“请选择:”; cin>>choice; //输入的值只能是1,2,3,否则输入错误 switch(choice) { case vc:cout<<“你的选择是Visual C++”<<endl; case vb:cout<<“你的选择是Visual Basic”<<endl; case vfp:cout<<“你的选择是Visual Foxpro”<<endl; default:cout<<“输入错误”<<endl; } } 第三章 C++程序的流程控制 本程序的执行结果:1.Visual C++ 2.Visual Basic 3.Visual Foxpro 请选择: 你的选择是Visual Basic
例七(P64例3.8)、输入一个0~100分范围内的一个成绩,显示相应的等级,但要求用switch多分支结构替代原来的if多分支结构。例七(P64例3.8)、输入一个0~100分范围内的一个成绩,显示相应的等级,但要求用switch多分支结构替代原来的if多分支结构。 #include <iostream.h> void main() { float score; cout<<“请输入成绩:”; cin>>score; switch(int(score)/10) //强制类型转换,进行整除操作。 { case 0: // 0~4没有语句序列,则程序从 case 1: case 2: //这些入口点进入后自动往下执行。 case 3: case 4: case 5: cout<<“不及格”<<endl;break; case 6: cout<<“及格”<<endl;break; case 7: cout<<“中”<<endl;break; case 8: cout<<“良”<<endl;break; case 9: case 10: cout<<“优”endl;break; default: cout<<“成绩必须在0~100分之间!”; } } 第三章 C++程序的流程控制
五、课堂练习 1、如果执行if(x>3) cout<<‘A’;else cout<<‘B’;后屏幕上显示的是 B,说明x>3的值是( )。 2、如果x的值为234,y的值为-54,则执行 if(x>0) cout<<‘A’; if(y<-8) cout<<‘B’; 后屏幕上显示的是( )。 3、如果的值为4,y的值为-55,则执行 if(x>0) if(x>10) cout<<‘A’; else cout<<‘B’; else if(y>-20) cout<<‘C’; else cout<<‘D’; 后屏幕上显示的是( )。 4、借助于临时变量t交换x和y两个变量的值,应顺序执行的三个赋值语句是( )、( )和( )。 5、把if(OK) if(READY) y=-1;else y=0; else y=1;中嵌套的 if 语句改为嵌套在外层if语句else之后,更改后的语句( if(!OK)y=1;else if(READY) y=-1; else y=0; )。 第三章 C++程序的流程控制
6、从2个数中挑选出最大的至少需要进行( )次比较,从3个数中挑选出最大的至少需要进行( )次比较,从4个数中挑选出最大的数至少需要进行( )次比较,从n 个数中挑选出最大的至少需要进行( )次比较。 7、执行if(x>100&&x==0) cout<<“ABC”;else cout<<“XYZ”;屏幕上显示的是( )。 8、与 switch(k){ case 1: case 2: case 3:cout<<‘A’;break; case 4: case 5:cout<<‘B’;break; default: cout<<‘C’;break; } 等效的语句是( )。 第三章 C++程序的流程控制
9、与 if(x>=0&&x<=2) cout<<‘X’; else if(x>=20&&x<=22) cout<<‘Y’; else cout<<‘Z’; (其中x是 int型变量)等效的switch语句是( )。 10、(多选)执行 cin>>k; if(k>100) cout<<‘G’; if(k<100) cout<<‘L’; 后,可能出现的情况有( )。 A .显示G B .显示L C .显示GL D .无任何显示 11、(多选)与 y=(x>3?0:1); 等效的 if语句有( )。 A.if(x>3) y=0; else y=1; B.if(!(x<3)) y=0; else y=1; C.if(!(x<=3)) y=1; else y=0; D.if(x<=3) y=1; else y=0; 第三章 C++程序的流程控制