101
C++ 语语语语语语 C++ C++ 语语语语语语 语语语语语语 语语语语 语语语

C++ 语言程序设计

Embed Size (px)

DESCRIPTION

C++ 语言程序设计. 锦州电大 赵薇茵. 第一章 C++ 语言概述 第二章 基本数据类型与表达式 第三章 C++ 程序的流程控制 第四章 数组 第五章 C++ 函数 第六章 指针、引用和动态空间管理 第七章 结构与联合 第八章 类与对象 第九章 C++ 流. 目录. 目 录. 一、导学内容 1 、 C++ 语言的简史与特点 2 、简单的 C++ 程序 3 、程序的编辑、编译、连接和运行 二、本章重点 简单的 C++ 程序设计 三、学习目标 - PowerPoint PPT Presentation

Citation preview

Page 1: C++ 语言程序设计

C++ 语言程序设计

C++C++ 语言程序设计语言程序设计C++C++ 语言程序设计语言程序设计

锦州电大 赵薇茵

Page 2: C++ 语言程序设计

C++ 语言程序设计

目录目录 第一章 C++语言概述 第二章 基本数据类型与表达式 第三章 C++程序的流程控制 第四章 数组第四章 数组 第五章 第五章 C++C++ 函数函数 第六章 指针、引用和动态空间管理第六章 指针、引用和动态空间管理 第七章 结构与联合第七章 结构与联合 第八章 类与对象第八章 类与对象 第九章 第九章 C++C++ 流流

Page 3: C++ 语言程序设计

C++ 语言程序设计

第一章 第一章 C++C++ 语言概述语言概述

一、导学内容一、导学内容 11 、、 C++C++ 语言的简史与特点语言的简史与特点 2、简单的C++程序 3、程序的编辑、编译、连接和运行 二、本章重点二、本章重点 简单的简单的 C++C++ 程序设计程序设计 三、学习目标三、学习目标 能够编写包含键盘输入、计算和显示输出等操能够编写包含键盘输入、计算和显示输出等操

作的简单作的简单 C++C++ 程序。程序。

第一章 C++

语言概述

Page 4: C++ 语言程序设计

C++ 语言程序设计

四、教学方法四、教学方法 面授与答疑面授与答疑

1·1 C++1·1 C++ 语言的简史与特点语言的简史与特点 C++C++ 源于源于 CC 语言。设计语言。设计 CC 语言的最初目的是编写语言的最初目的是编写

操作系统,由于其简单、灵活的特点,很快被用于编操作系统,由于其简单、灵活的特点,很快被用于编写各种不同类型的程序,从而成为世界上最流行的语写各种不同类型的程序,从而成为世界上最流行的语言之一。言之一。

C++C++ 语言是语言是 CC 语言的扩充、改进版本,最初的成语言的扩充、改进版本,最初的成果称为“带类的果称为“带类的 C”C” ,, 19831983 年正式取名为年正式取名为 C++C++ ,它改,它改进了进了 CC 的不足之处,支持面向对象的程序设计,在改的不足之处,支持面向对象的程序设计,在改进的同时保持了进的同时保持了 CC 的简洁性和高效性。的简洁性和高效性。

C++C++ 程序的特点程序的特点 支持面向对象的程序设计支持面向对象的程序设计

第一章 C++

语言概述

Page 5: C++ 语言程序设计

C++ 语言程序设计

1·2 1·2 简单的简单的 C++C++ 程序程序 一、例题一、例题 /*——————————————/*—————————————— 文件名:文件名: ch1.cppch1.cpp ——————————————————————————————*/*/ #include <iostream.h>#include <iostream.h> #include <stdlib.h>#include <stdlib.h> void main()void main() { int i,j,k; //{ int i,j,k; // 说明变量说明变量 i=2; j=10; //i=2; j=10; // 变量赋值变量赋值 k=_max(i,j); // _max()k=_max(i,j); // _max() 为比较函数为比较函数 cout<<i<<“,”<<j<<“cout<<i<<“,”<<j<<“ 中较大者为”中较大者为” <<k<<endl; //<<k<<endl; // 显示结果显示结果 }} 本程序的本程序的执行结果执行结果:: 22 ,, 1010 中较大者为中较大者为 1010

第一章 C++

语言概述

Page 6: C++ 语言程序设计

C++ 语言程序设计

说明说明 (( 11 )) C++C++ 为了与为了与 CC 语言兼容,能识别语言兼容,能识别 CC 语言的注释方式,即语言的注释方式,即

一对符号“一对符号“ /*”/*” 与“与“ */”*/” 之间的内容,它可以多行。之间的内容,它可以多行。 (( 22 )每个以符号“)每个以符号“ #”#” 开头的行,称为编译预处理行。如“开头的行,称为编译预处理行。如“ #inc#inc

lude ”lude ” 称为文件包含预处理命令。称为文件包含预处理命令。 (( 33 )) main()main() 表示主函数,第一个表示主函数,第一个 C++C++ 程序都必须有一个程序都必须有一个 main()main()

函数。它是程序的入口。函数。它是程序的入口。 (( 44 )) C++C++ 程序中的标识符大小写是“敏感”的,函数名程序中的标识符大小写是“敏感”的,函数名 mainmain

全部都由小写字母构成。全部都由小写字母构成。 (( 55 )在)在 main()main() 函数体中,函数体中, coutcout 是一个代表标准输出 流设备。是一个代表标准输出 流设备。

输出操作由运算符“输出操作由运算符“ <<”<<” 来表达,它表示将该运算符右边的数据来表达,它表示将该运算符右边的数据送到显示设备上。送到显示设备上。

(( 66 )程序中用双引号括起来的数据“)程序中用双引号括起来的数据“ ,”,” 等被称为字符串常量,等被称为字符串常量,“;”表示一语句的结束。“;”表示一语句的结束。

第一章 C++

语言概

Page 7: C++ 语言程序设计

C++ 语言程序设计 (( 77 )) C++C++ 中,一个变量必须在声明之后 才能使用,所以程序首中,一个变量必须在声明之后 才能使用,所以程序首

先进行变量定义。定义变量,就意味着给变量分配内存空间,用先进行变量定义。定义变量,就意味着给变量分配内存空间,用来存放变量值。来存放变量值。

(( 88 )) k=_max(i,j);k=_max(i,j); 是调用是调用 _max ()_max () 函数求出函数求出 i i 和和 jj 中较大者。中较大者。 (( 99 )) cout<<i<<“,”<<j<<“cout<<i<<“,”<<j<<“ 中较大者为”中较大者为” <<k<<endl;<<k<<endl; 中使用 中使用 coutcout

在屏幕上显示相应的结果。在屏幕上显示相应的结果。 66 个“个“ <<”<<” 符号,表示各项内容连续符号,表示各项内容连续输出,其中输出,其中 i i 、 、 jj 、 、 kk 是变量,直接输出其值; “是变量,直接输出其值; “ ,”,” 和“中较和“中较大者为”是字符串,原样输出;“大者为”是字符串,原样输出;“ endl”endl” 符号表示输出一个回车符号表示输出一个回车符。符。

二、二、 C++C++ 程序的组成程序的组成 11 、预处理命令、预处理命令 C++C++ 程序的预处理命令以“程序的预处理命令以“ #”#” 开头。它提供了三类预处理命开头。它提供了三类预处理命

令:宏定义命令、文件包含命令和条件编译命令。令:宏定义命令、文件包含命令和条件编译命令。

第一章 C++

语言概

Page 8: C++ 语言程序设计

C++ 语言程序设计

22 、输入和输出、输入和输出 C++C++ 程序中总是少不了输入和输出的语句,以实程序中总是少不了输入和输出的语句,以实现与程序内部的信息交流。现与程序内部的信息交流。

33 、函数、函数 C++C++ 的程序是由若干个文件组成的,每个文件又是的程序是由若干个文件组成的,每个文件又是

由若干个函数组成,而且必须有一个并且只能有一个由若干个函数组成,而且必须有一个并且只能有一个是主函数。是主函数。

44 、语句、语句 语句是组成程序的基本单元。函数是由若干条语句语句是组成程序的基本单元。函数是由若干条语句

组成的。一条语句结束时要用分号。组成的。一条语句结束时要用分号。 55 、变量、变量 多数程序都需要说明和使用变量。多数程序都需要说明和使用变量。

第一章 C++

语言概

Page 9: C++ 语言程序设计

C++ 语言程序设计

三、三、 C++C++ 程序的书写格式程序的书写格式 11 、一行一般写一条语句,短语句可以一行写多个;长语句可以、一行一般写一条语句,短语句可以一行写多个;长语句可以

一条写多行,分行原则是不能将一单词分开。一条写多行,分行原则是不能将一单词分开。 22 、、 C++C++ 程序书写时要尽量提高可读性。为此,采用适当的缩格程序书写时要尽量提高可读性。为此,采用适当的缩格书写方式是很重要的。即同一类内容的语句行要对齐。书写方式是很重要的。即同一类内容的语句行要对齐。

1·3 1·3 程序的编辑、编译、连接和运行程序的编辑、编译、连接和运行 一、编制源程序(假设文件名为一、编制源程序(假设文件名为 file.cppfile.cpp ),既输入、修改程序。),既输入、修改程序。 二、编译源程序,生成一个目标文件( 二、编译源程序,生成一个目标文件( file.objfile.obj ),既),既目标程序目标程序。。 三、将用户生成的多个目标代码文件和系统提供的库文件(三、将用户生成的多个目标代码文件和系统提供的库文件( .li.li

bb )中某些代码连接在一起,生成一个)中某些代码连接在一起,生成一个可执行程序可执行程序( ( file.exefile.exe )。)。 四、最后是执行程序,一般在编译系统下有执行功能,通过选择四、最后是执行程序,一般在编译系统下有执行功能,通过选择菜单项便可实现,既菜单项便可实现,既运行运行。。

第一章 C++

语言概述

Page 10: C++ 语言程序设计

C++ 语言程序设计

开始编辑源程

序存盘 编译 出

错?

出错?

连接 执行 结束

file.cpp file.obj file.exe

yy

n n

C++ 程序的开发过程第一章 C++

语言概

Page 11: C++ 语言程序设计

C++ 语言程序设计

第二章 基本数据类型与表达式第二章 基本数据类型与表达式 一、导学内容一、导学内容 11 、、 C++C++ 数据类型概述数据类型概述 22 、整型数据、整型数据 33 、字符型数据、字符型数据 44 、枚举型数据、枚举型数据 55 、实型数据、实型数据 66 、符号常量与常值变量、符号常量与常值变量 77 、数值表达式、数值表达式 88 、逻辑型数据与逻辑表达式、逻辑型数据与逻辑表达式 99 、自定义类型修饰符、自定义类型修饰符 1010 、表达式的副作用与表达式语句、表达式的副作用与表达式语句

第二章

基本数据类型与表达式

Page 12: C++ 语言程序设计

C++ 语言程序设计

二、本章重点二、本章重点 11 、各种数据类型及表达式。、各种数据类型及表达式。 22 、逻辑型数据类型和逻辑表达式。、逻辑型数据类型和逻辑表达式。 三、学习目标三、学习目标 11 、能够根据要解决的实际情况选用适当的数据类型。、能够根据要解决的实际情况选用适当的数据类型。 22 、熟练掌握数值表达式的构造方法,能够用表达式完、熟练掌握数值表达式的构造方法,能够用表达式完

成程序中的数值计算。成程序中的数值计算。 33 、熟练掌握逻辑表达式的构造方法,能够用逻辑表达、熟练掌握逻辑表达式的构造方法,能够用逻辑表达

式表达各种条件。式表达各种条件。 44 、了解表达式副作用,能够在程序中恰当地运用。、了解表达式副作用,能够在程序中恰当地运用。 四、教学方法四、教学方法 面授、答疑、上机。面授、答疑、上机。

第二章

基本数据类型与表达式

Page 13: C++ 语言程序设计

C++ 语言程序设计 2·1 C++2·1 C++ 数据类型概述数据类型概述

数组数组

指针类指针类

记录类记录类

枚举型:枚举型: enumenum

数据类型数据类型

基本数据类型基本数据类型

整型:整型: int short longint short long

字符型:字符型: charchar

实型型:实型型: float doublefloat double

逻辑型:逻辑型: boolbool

非基本数据类型非基本数据类型 结构:结构: structstruct

联合:联合: unionunion

第二章

基本数据类型与表达式

Page 14: C++ 语言程序设计

C++ 语言程序设计

2·22·2 整型数据整型数据 一、各种整型数据的基本情况见表面一、各种整型数据的基本情况见表面 2-12-1 (( 1515 )) 二、整型常量的表示方法二、整型常量的表示方法 11 、整型常量可以用十进制、八进制、十六进制表示:、整型常量可以用十进制、八进制、十六进制表示: 例如: 例如: 20 //20 // 十进制十进制 024 //024 // 八进制数以八进制数以 00 开头开头 0x14 //0x14 // 十六进制数以十六进制数以 0x0x 开头开头 22 、整型常量可以后跟字母、整型常量可以后跟字母 ll 或或 LL 表示表示 longlong 型,跟 型,跟 uu或或 UU 表示 表示 unsignedunsigned 整数(无符号整数):整数(无符号整数):

135 u135 u 、、 8846 U L8846 U L 、、 5 L5 L 、、 10 l u10 l u

第二章

基本数据类型与表达式

Page 15: C++ 语言程序设计

C++ 语言程序设计 三、整型变量的定义和初始化三、整型变量的定义和初始化 类型修饰符 变量名类型修饰符 变量名 [=[=表达式表达式 ][][ ,变量名 ,变量名 例如:例如: unsigned a;unsigned a; int x,th1=4,th2=8,th3=ff(th2+5); //int x,th1=4,th2=8,th3=ff(th2+5); //为一整型函数为一整型函数 int x=6 int x=6 与 与 int x; x=6; int x; x=6; 等效等效

2·3 字符型数据 一、字符型的基本情况见表一、字符型的基本情况见表 2-22-2 (( 1818 )) 二、字符常量的表示二、字符常量的表示 11 、 字符常量常用单引号括起来,如‘、 字符常量常用单引号括起来,如‘ 3’3’ 、‘、‘ B’B’ 和和‘ ’分别表示字符‘ ’分别表示字符 33 、字符、字符 BB 和空白字符。和空白字符。

22 、特殊字符如回车符、换行符等因无法正常显示,、特殊字符如回车符、换行符等因无法正常显示,所以需要有特殊的方式表示。所以需要有特殊的方式表示。

【 == 表达式表达式】 ]]第二章

基本数据类型与表达式

Page 16: C++ 语言程序设计

C++ 语言程序设计

一般以转义字符‘一般以转义字符‘ \’\’ 开始,后跟不同的字符表示不同的特殊字符,开始,后跟不同的字符表示不同的特殊字符,如‘如‘ \r’—CR\r’—CR (回车) ‘(回车) ‘ \t’—HT\t’—HT (横向跳格) ‘(横向跳格) ‘ \v’—VT\v’—VT (纵(纵向跳格) ‘向跳格) ‘ \n’—LF\n’—LF (换行)(换行)

33 、以字符‘、以字符‘ \0’\0’ 作为结束标记贩字符序列就是作为结束标记贩字符序列就是 C++C++ 的字符串,的字符串,它称为字符结束符。它称为字符结束符。

字符串常量用双引号括起来的的字符序列表示。字符串常量用双引号括起来的的字符序列表示。 如:“” 如:“” //// 空串空串 “ “abcd” //abcd” // 一般字符串一般字符串 “ “a\n\rb” //a\n\rb” // 带特殊符号的字符串带特殊符号的字符串 三、字符型变量三、字符型变量 定义:类型修饰符为定义:类型修饰符为 charchar ,如 ,如 char c1char c1 ,, c2=‘A’c2=‘A’ ;; 四、字符型与整型的关系四、字符型与整型的关系 因字符是用代码表示的,而每个代码就是一个整数,因而在因字符是用代码表示的,而每个代码就是一个整数,因而在

表达式求值过程中,所有的字符被转换为与其代码等值的整数,表达式求值过程中,所有的字符被转换为与其代码等值的整数,有符号字符被转换为有符号整数,无符号字符转换为无符号整数。有符号字符被转换为有符号整数,无符号字符转换为无符号整数。

第二章

基本数据类型与表达式

Page 17: C++ 语言程序设计

C++ 语言程序设计

2·4 2·4 枚举型数据枚举型数据 一、枚举类型一、枚举类型 枚举类型定义了一些整型符号常量的集合,其说明形式为:枚举类型定义了一些整型符号常量的集合,其说明形式为: enum enum 枚举名 枚举名 {{ 标识符标识符 11 ,标识符,标识符 22 , …,标识符, …,标识符

n}n} ;; 其中,标识符其中,标识符 11至标识符至标识符 nn 表示一些整型符号常量,它们表示一些整型符号常量,它们默认由系统赋予整数值,序列中每个标识符的值比前一个默认由系统赋予整数值,序列中每个标识符的值比前一个标识符大标识符大 11 ,例如:,例如:

enum Boolean {No,Yes}; // Noenum Boolean {No,Yes}; // No 等于等于 00 ,, YesYes 等于等于 11 enum Color {Red=-2,Yellow,Green=2,Blue}; enum Color {Red=-2,Yellow,Green=2,Blue}; 这样有: 这样有: Red=-2,Yellow-1,Green=2,Blue=3Red=-2,Yellow-1,Green=2,Blue=3 。。

第二章

基本数据类型与表达式

Page 18: C++ 语言程序设计

C++ 语言程序设计

二、例题:二、例题: #include <iostream.h>#include <iostream.h> void main()void main() { enum Color {Red,Yellow,Green,Blue};{ enum Color {Red,Yellow,Green,Blue}; int n;int n; for (n=Red;n<=Blue;n++)for (n=Red;n<=Blue;n++) cout <<n<<“ ”;cout <<n<<“ ”; cout <<endl;cout <<endl; }} 本程序的执行结果为:本程序的执行结果为: 0 1 2 30 1 2 3

第二章

基本数据类型与表达式

Page 19: C++ 语言程序设计

C++ 语言程序设计

2·5 2·5 实型数据实型数据 一、实型 数据的基本情况见表面一、实型 数据的基本情况见表面 2-42-4 (( P24P24 )。)。 二、实型常量的表示二、实型常量的表示 11 、双精度常量:十进制表示法和科学记数,用科学记数法时,、双精度常量:十进制表示法和科学记数,用科学记数法时,

指数部分以指数部分以 EE或或 ee 开始。开始。 如 如 3.14159 0.12 1.0E-3 2.3.14159 0.12 1.0E-3 2. 22 、单精度常量,在双精度常量基础上加、单精度常量,在双精度常量基础上加 FF 或或 ff ;; 3、长双精度常量在双精度常量基础上加L或3、长双精度常量在双精度常量基础上加L或 ll ;; 三、实型变量的定义和初始化三、实型变量的定义和初始化 类型标识符分别为类型标识符分别为  长双精度: 长双精度: long doublelong double   双精度:   双精度: doubledouble 单精度:单精度: floatfloat 如:如: long double var1=3.14159L; double long double var1=3.14159L; double      var2=3.14; var2=3.14;     

第二章

基本数据类型与表达式

Page 20: C++ 语言程序设计

C++ 语言程序设计

2·6 2·6 符号常量与常值变量符号常量与常值变量 用预处理命令# 用预处理命令# definedefine 定义一个符号来代表某个常量,定义一个符号来代表某个常量,

如:如: #define PI 3.1416#define PI 3.1416 注意:注意:前面带#的命令都是预处理命令,不是C++语句,前面带#的命令都是预处理命令,不是C++语句,   因此不能以分号结尾。   因此不能以分号结尾。

优点:1、提高程序的可读性;优点:1、提高程序的可读性;    2、提高数据的一致性;   2、提高数据的一致性;    3、提高程序的可维护性。   3、提高程序的可维护性。 常值变量的定义是在一般变量的定义前加上保留字常值变量的定义是在一般变量的定义前加上保留字 constconst ,,

如:  如:  constconst     doubledouble   PI PI == 3.14163.1416 ;; 注意:注意:常值变量在定义时必须初始化 ,且在程序中不允许常值变量在定义时必须初始化 ,且在程序中不允许

改   变这个初始值。改   变这个初始值。

第二章

基本数据类型与表达式

Page 21: C++ 语言程序设计

C++ 语言程序设计

2·72·7 数值表达式 数值表达式 数值表达式为整型表达式和实型表达式的统称。数值表达式为整型表达式和实型表达式的统称。 一、算术操作符一、算术操作符  +(加)-(减)*(乘)/(除)%(求余) +(加)-(减)*(乘)/(除)%(求余)  +(正)-(负) +(正)-(负) 注意:1、/——对于整型和实型具有不同的意义,注意:1、/——对于整型和实型具有不同的意义,整型是整除操作,实型是一般意义的除法。整型是整除操作,实型是一般意义的除法。

   2、%——只用于整数的求余操作   2、%——只用于整数的求余操作 二、位操作符二、位操作符    <<<< (左移)(左移) >>>> (右移)(右移) || (按位或)(按位或) && (按位(按位

与)与)    ^̂ (按位异或)(按位异或) ~~ (按位求反)(按位求反)  位操作只针对整数。 位操作只针对整数。

第二章

基本数据类型与表达式

Page 22: C++ 语言程序设计

C++ 语言程序设计 三、赋值操作符三、赋值操作符 赋值操作符是=,构成一个赋值表达式。赋值操作符是=,构成一个赋值表达式。 四、复合赋值操作符四、复合赋值操作符 += +=    -=-=    *=*=    /=/=    %= %=    <<=<<=    >>=>>=   |=|=    &=&=    ^= ^= 复合赋值与普通赋值在功能上有严格的的对应关系,即:变量?=复合赋值与普通赋值在功能上有严格的的对应关系,即:变量?=

表达式 相当于 变量=变量?表达式表达式 相当于 变量=变量?表达式 五、增五、增 11减减 11 操作符操作符 自增(自增( ++++ )、自减()、自减( ---- )运算符为变量的增)运算符为变量的增 11 和减和减 11提供了紧提供了紧凑格式:凑格式: a++ a++ 等价于等价于 a=a+1 a– a=a+1 a– 等价于等价于 a=a-1a=a-1

注意:注意: 11 、自增、自减符号既可位于变量的前面,也可位于变量的、自增、自减符号既可位于变量的前面,也可位于变量的后面,在单独作为一个表达式时,后面,在单独作为一个表达式时, ++++aa 和和 a++a++ 效果一样,都效果一样,都是将变量是将变量 aa自增自增 11 。。

22 、前缀、前缀 ++++ 表示先将其后面的变量值增表示先将其后面的变量值增 11 ,然后,然后将增将增 11 后变量参与表达式运算,后缀后变量参与表达式运算,后缀 ++++ 表示将其前面表示将其前面的变量先参与表达式运算,然后变量本身增的变量先参与表达式运算,然后变量本身增 11 。。

  

第二章

基本数据类型与表达式

Page 23: C++ 语言程序设计

C++ 语言程序设计 33 、避免、避免 ++++ (( ---- )所作用的变量在同一表达式中重复)所作用的变量在同一表达式中重复

出现,因为这样的表达式含义是不明确的。出现,因为这样的表达式含义是不明确的。 六、六、 sizeofsizeof 操作符操作符 它用于获得一数据或数据类型所占空间的字节数它用于获得一数据或数据类型所占空间的字节数 使用格式为:使用格式为: sizeof sizeof (类型修饰符)或(类型修饰符)或 sizeofsizeof (表达式)(表达式) 七、操作符的优先级和结合性七、操作符的优先级和结合性 当表达式中有多个操作符时,优先级高的操作符先当表达式中有多个操作符时,优先级高的操作符先

执行。执行。 操作符的结合性分为由左向右和由右向左两种,一操作符的结合性分为由左向右和由右向左两种,一元操作符、赋值及复合赋值操作符具有从右到左的结元操作符、赋值及复合赋值操作符具有从右到左的结合性,其余操作符具有从左到右的结合性。合性,其余操作符具有从左到右的结合性。

有关详细的优先级和结合性参见附录有关详细的优先级和结合性参见附录 AA (( P345P345 ))

第二章

基本数据类型与表达式

Page 24: C++ 语言程序设计

C++ 语言程序设计

八、类型的自动转换与强制转换八、类型的自动转换与强制转换 11 、隐式类型转换、隐式类型转换

22 、显式类型转换、显式类型转换 转换形式:(类型名)表达式 或 类型名(表达式)转换形式:(类型名)表达式 或 类型名(表达式)

整型整型(int)(int)

无符号 无符号 整型 整型 (uns(unsigned)igned)

长整型长整型(long)(long)

无符号长无符号长整型整型 unsiunsigned longgned long

双精度浮双精度浮点型点型 (dou(double)ble)

单精度浮单精度浮

点型点型 (floa(float)t)

短整型、短整型、

字符型 字符型 (short,cha(short,char)r)

第二章

基本数据类型与表达式

Page 25: C++ 语言程序设计

C++ 语言程序设计

2·8 2·8 逻辑型数据与逻辑表达式逻辑型数据与逻辑表达式 一、逻辑型数据一、逻辑型数据 逻辑型数据只有两个,既逻辑型数据只有两个,既 truetrue (真)或(真)或 falsefalse (假),(假),

分别用值非分别用值非 0(true)0(true) 或或 0(false)0(false) 表示。表示。 二、逻辑表达式二、逻辑表达式 11 、无操作符的逻辑表达式—简单逻辑表达式、无操作符的逻辑表达式—简单逻辑表达式 逻辑常量、逻辑变量和逻辑型函数的调用,是最简逻辑常量、逻辑变量和逻辑型函数的调用,是最简

单的逻辑表达式。单的逻辑表达式。 22 、关系操作符和关系表达式、关系操作符和关系表达式 ==== (等于)、!(等于)、! == (不等于)、(不等于)、 >> (大于)(大于) << (小(小

于)于) >=>= (大于等于)和(大于等于)和 <=<= (小于等于)(小于等于) 比较的结果只能是 比较的结果只能是 falsefalse或或 truetrue ;;

第二章

基本数据类型与表达式

Page 26: C++ 语言程序设计

C++ 语言程序设计 33 、逻辑操作符和逻辑表达式、逻辑操作符和逻辑表达式 逻辑操作符 逻辑操作符 !(!( 逻辑非逻辑非 )) 、、 ||(||( 逻辑或逻辑或 )) 和和 &&(&&(逻辑与逻辑与 )) 逻辑操作的结果只能是逻辑操作的结果只能是 truetrue或或 true true E1 false false true trueE1 false false true true E2 false true false true E2 false true false true !E1 true true false false !E1 true true false false E1||E2 false true true true E1||E2 false true true true E1&&E2 false false false true E1&&E2 false false false true 注意:注意: 结合性:除!以外的逻辑操作符和关系操作符结合性:除!以外的逻辑操作符和关系操作符 的结合性, 为“由左向右”;的结合性, 为“由左向右”; 优先级:! 算术 关系 逻辑优先级:! 算术 关系 逻辑

第二章

基本数据类型与表达式

Page 27: C++ 语言程序设计

C++ 语言程序设计 三、复合条件三、复合条件 逻辑符逻辑符 && && 、、 ||||均可用于构造复合条件的表达式,均可用于构造复合条件的表达式,

其左右两边的操作对象称为子条件。其左右两边的操作对象称为子条件。 对于复合条件对于复合条件 E1 ||E2E1 ||E2 ,只要子条件,只要子条件 E1E1 和和 E2E2 中有中有

一个值为一个值为 truetrue ,复合条件的值即为,复合条件的值即为 truetrue ;; 对于复合条件对于复合条件 E1&&E2E1&&E2 ,只要子条件,只要子条件 E1E1 和和 E2E2 中有中有

一值为一值为 falsefalse ,复合条件的值即为,复合条件的值即为 falsefalse 。 。 如果如果 E1E1 和和 E2E2互为相反条件,则互为相反条件,则 E1||E2E1||E2 必为必为 truetrue ,,

E1&&E2E1&&E2 必为必为 falsefalse 。 。 四、相反条件、等价条件、永假条件和永真条件四、相反条件、等价条件、永假条件和永真条件 11 、相反条件、相反条件 关系运算符分为关系运算符分为 33 对: 对: ==== 与!与! == 、、 >> 和和 <=<= 、、 << 和和

>=>= 逻辑非!专门用于构造相反条件逻辑非!专门用于构造相反条件

第二章

基本数据类型与表达式

Page 28: C++ 语言程序设计

C++ 语言程序设计 22 、等价条件、等价条件 典型的逻辑表达式的等价形式:典型的逻辑表达式的等价形式: !!E E !(x==y) x!=y!!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 !(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) !E1||!E2 !(E1||E2) !E1&&!E2 E1&&E2 E2&&E1 E1||E2 E2||E1E1&&E2 E2&&E1 E1||E2 E2||E1 33 、永假条件和永真条件、永假条件和永真条件 这两种条件已失去了作为“条件”的本意,通常是应当加以避免的。这两种条件已失去了作为“条件”的本意,通常是应当加以避免的。 五、逻辑型与其他数据类型的关系五、逻辑型与其他数据类型的关系 11 、逻辑型数据作为数值数据使用时,、逻辑型数据作为数值数据使用时, false false 被转换成整数被转换成整数 00 ,, truetrue 被转换成被转换成整数整数 11 ;;

22 、字符型、枚举型、整型或实型数据值作为逻辑值使用时,一切、字符型、枚举型、整型或实型数据值作为逻辑值使用时,一切 00 值被转换值被转换成成 falsefalse (假),一切非(假),一切非 00 值被转换成值被转换成 truetrue (真);(真);

33 、指针值作为逻辑值使用时,空指针被转换成、指针值作为逻辑值使用时,空指针被转换成 falsefalse ,非空指针被转换成,非空指针被转换成 true true 。。

第二章

基本数据类型与表达式

Page 29: C++ 语言程序设计

C++ 语言程序设计

六、逻辑型数据的应用——条件操作符与条件表达式六、逻辑型数据的应用——条件操作符与条件表达式 条件运算符是条件运算符是 C++C++ 中惟一具有中惟一具有 33 个运算元的运算符,其形式为:个运算元的运算符,其形式为: 表达式表达式 11 ?表达式?表达式 22 :表达式:表达式 33 它的运算方式为:先计算表达式它的运算方式为:先计算表达式 11 的值,如果其值为非的值,如果其值为非 00 (真),(真),则表达式则表达式 22 的值就是整个表达式的最终结果;否则表达式的值就是整个表达式的最终结果;否则表达式 33 的值的值就是整个表达式的值。就是整个表达式的值。

例如: 例如: (a>b)?a:b //(a>b)?a:b // 求两个数中最大的值,决定哪个是最大值求两个数中最大的值,决定哪个是最大值 使用了条件运算符。使用了条件运算符。

第二章

基本数据类型与表达式

Page 30: C++ 语言程序设计

C++ 语言程序设计

2·9 2·9 自定义类型修饰符自定义类型修饰符 在在 C++C++ 中可以利用中可以利用 typedeftypedef 定义自己的变量类型,其形式为:定义自己的变量类型,其形式为: typedef typedef 类型修饰符说明;类型修饰符说明; 类型修饰符说明类似于变量说明,吸是变量名用类型名代替了,实类型修饰符说明类似于变量说明,吸是变量名用类型名代替了,实际上,这等于定义了一个同义词,这种方式与创建一个新的类型是际上,这等于定义了一个同义词,这种方式与创建一个新的类型是不同的。例如:不同的。例如:

typedef int width; //typedef int width; // 定义了新类型的定义了新类型的 widthwidth ,它实际上是整型,它实际上是整型 typedef char string[10]; //typedef char string[10]; // 定义了新类型的定义了新类型的 stringstring ,它是字符数组,它是字符数组 使用自定义类型和使用系统预定义的类型一样:使用自定义类型和使用系统预定义的类型一样: width n; /width n; /// 等价于等价于 int nint n ;; string name; //string name; // 等价于等价于 char name[10]char name[10] ;; 优点:优点: 11 、可以更好地表达程序员的意思;、可以更好地表达程序员的意思; 22 、简单方便,一些数据类型可以用一个简单的类型标识 、简单方便,一些数据类型可以用一个简单的类型标识

符来表示,不用每次都麻烦地写复杂的定义。符来表示,不用每次都麻烦地写复杂的定义。

第二章

基本数据类型与表达式

Page 31: C++ 语言程序设计

C++ 语言程序设计

2·10 2·10 表达式的副作用与表达式语句表达式的副作用与表达式语句 一、表达式的副作用一、表达式的副作用 对于赋值、复合赋值、前增对于赋值、复合赋值、前增 11 、前减、前减 11 、后增、后增 11 、后减、后减 11 这些操这些操

作符所作用的对象必须是变量,因此它们也可称为作用于变量的作符所作用的对象必须是变量,因此它们也可称为作用于变量的操作。操作。

对于作用于变量的操作,除后增对于作用于变量的操作,除后增 11 和后减和后减 11 以外,还一个特点:以外,还一个特点: 作为操作结果的表达式的值就是所作用的变量所获得的值,即赋作为操作结果的表达式的值就是所作用的变量所获得的值,即赋

值、复合赋值、前增值、复合赋值、前增 11 、前减、前减 11 操作的结果仍然是变量对象,而操作的结果仍然是变量对象,而且就是那个被作用的变量。且就是那个被作用的变量。

例如: 例如: int k=3;int k=3; cout<<++(k+=2);cout<<++(k+=2); cout<< ‘ ’<<k; //cout<< ‘ ’<<k; // 输出是输出是 6 66 6 注意:注意: 11 、作用于变量的操作只能施加于变量对象。、作用于变量的操作只能施加于变量对象。 22 、当若于个作用于变量的操作施加于同一变量时,除了、当若于个作用于变量的操作施加于同一变量时,除了

最后一个外,不得有后增最后一个外,不得有后增 11 或后减或后减 11 的操作。的操作。

第二章

基本数据类型与表达式

Page 32: C++ 语言程序设计

C++ 语言程序设计 二、逗号操作符与逗号表达式二、逗号操作符与逗号表达式 用逗号将若干个表达式连起来组成的表达式。该表达式的值是组用逗号将若干个表达式连起来组成的表达式。该表达式的值是组

成逗号表达式的若干个表达式中最后一个表达式的值,类型也是成逗号表达式的若干个表达式中最后一个表达式的值,类型也是最后一个表达式的类型。逗号表达式计算值的顺序是从左至右逐最后一个表达式的类型。逗号表达式计算值的顺序是从左至右逐个表达式分别计算。个表达式分别计算。

例如: 例如: x=(i++,j); //xx=(i++,j); //x 的值与的值与 ,j,j相同相同 注意:注意:逗号操作符的优先级是所有操作符中最低的。逗号操作符的优先级是所有操作符中最低的。 三、表达式副作用的应用——表达式语句三、表达式副作用的应用——表达式语句 在在 C++C++ 中,任何一个表达式都可以作为一个语句来使用,即表达中,任何一个表达式都可以作为一个语句来使用,即表达

式语句,在表达式后加上语句结束符(即;)。式语句,在表达式后加上语句结束符(即;)。 常用的表达式有常用的表达式有 66 种:种: 算术表达式、逻辑表达式、关系表达式、赋值表达式、条件表达算术表达式、逻辑表达式、关系表达式、赋值表达式、条件表达

式、逗号表达式式、逗号表达式

第二章

基本数据类型与表达式

Page 33: C++ 语言程序设计

C++ 语言程序设计

第三章 第三章 C++C++ 程序的流程控制程序的流程控制 一、导学内容一、导学内容 11 、流程控制与程序结构、流程控制与程序结构 2、条件分支结构 3、循环结构 44 、其他流程控制、其他流程控制 二、本章重点二、本章重点 If If 语句、语句、 for for 语句、语句、 whilewhile 语句和语句和 do…whiledo…while 语句等的应用。语句等的应用。 三、学习目标三、学习目标 11 、熟练掌握、熟练掌握 ifif 语句语句 ,,掌握掌握 switchswitch 语句语句 ,, 会利用这两种语句进行会利用这两种语句进行条件分支结构的程序设计;条件分支结构的程序设计;

22 、熟练掌握、熟练掌握 forfor 语句、语句、 whilewhile 语句和语句和 do…whiledo…while 语句,会利用这语句,会利用这三种语句进行循环结构的程序设计;三种语句进行循环结构的程序设计;

33 、掌握、掌握 breakbreak 语句和语句和 continuecontinue 语句与上述语句配合使用的方法;语句与上述语句配合使用的方法; 44 、了解、了解 gotogoto 语句的用法。语句的用法。

第三章 C

++

程序的流程控

Page 34: C++ 语言程序设计

C++ 语言程序设计

四、教学方法四、教学方法 面授、答疑、上机面授、答疑、上机

3·1 3·1 流程控制与程序结构流程控制与程序结构 算法的基本控制结构有三种:顺序结构、选择结构和循环结构,算法的基本控制结构有三种:顺序结构、选择结构和循环结构,

为此为此 C++C++ 中提供了这三种控制语句。中提供了这三种控制语句。 11 、顺序结构、顺序结构 程序中按先后顺序依次执行。程序中按先后顺序依次执行。 先执行语句先执行语句 11 ,再执行语句,再执行语句 22 。。 22 、条件分支结构、条件分支结构 由特定的条件决定执行哪个语句的程序结构。由特定的条件决定执行哪个语句的程序结构。 33 、循环结构、循环结构 由特定的条件决定某个语句重复执行次数的控制方式。由特定的条件决定某个语句重复执行次数的控制方式。

第三章 C

++

程序的流程控制

Page 35: C++ 语言程序设计

C++ 语言程序设计

A B

P

选择

图 3—2

A

P

循环(当型)

图 3—3—1

A

P

循环(直到型)

图 3—3—2

三种结构的一个共同特点是:只有一个入口和一个出口,程三种结构的一个共同特点是:只有一个入口和一个出口,程序结构之间的衔接非常简单,一个结构的出口就是另一个结构序结构之间的衔接非常简单,一个结构的出口就是另一个结构的入口。的入口。

语句1

语句2

顺序

图 3—1

第三章 C

++

程序的流程控制

true

false

true

false

true false

Page 36: C++ 语言程序设计

C++ 语言程序设计

3·2 3·2 条件分支结构条件分支结构 一、 一、 if if 语句语句 在在 C++C++ 中,语句默认都是顺序执行,如果碰到选择或循环语句,顺序中,语句默认都是顺序执行,如果碰到选择或循环语句,顺序

执行的规则就要改变。执行的规则就要改变。 if if 语句用于在程序中有条件地执行某一语句序列,它的基本语法形式语句用于在程序中有条件地执行某一语句序列,它的基本语法形式

为: 为: if if (条件表达式)语句(条件表达式)语句 1 1 【 else else 语句语句 22 】 当条件为逻辑表达式时,若条件成立,表达式的值为真(当条件为逻辑表达式时,若条件成立,表达式的值为真( truetrue),否),否则为假(则为假( falsefalse);若条件不是一个逻辑表达式,则一切);若条件不是一个逻辑表达式,则一切 00 值将被转值将被转换成换成 false false ,一切非,一切非 00 值将被转换成值将被转换成 true true 。。

例:例: #include <iostream.h> //#include <iostream.h> //显示用户输入数值的绝对值 void main()void main() { int x;{ int x; cout << “x=”; cin>>x;cout << “x=”; cin>>x; if(x<0)cout<<-x<<endl;if(x<0)cout<<-x<<endl; else cout <<x<<ednl;else cout <<x<<ednl; }}

第三章 C

++

程序的流程控制

Page 37: C++ 语言程序设计

C++ 语言程序设计

例一例一::以下程序判断输入的年份是否为闰年(凡是能被以下程序判断输入的年份是否为闰年(凡是能被 400400 整整除的,或不能被除的,或不能被 100100 整除但能被整除但能被 44 整除的年份为闰年):整除的年份为闰年):

#include <iostream.h>#include <iostream.h> void main()void main() { int year,rem4,rem100,rem400; cout<<“{ int year,rem4,rem100,rem400; cout<<“ 输入年份:”输入年份:” ; ;

cin>>year; cin>>year; rem400=year%400; //rem400=year%400; // 能否被能否被 400400 整除 整除 rem100=year%100;//rem100=year%100;//

能否被能否被 44 整除但不能被整除但不能被 100100 整除整除 rem4=year%4;rem4=year%4; if((rem400==0)||((rem4==0)&&(rem100!=0)))if((rem400==0)||((rem4==0)&&(rem100!=0))) cout<<year<<“cout<<year<<“ 是闰年。”是闰年。” <<endl;<<endl; cout<<year<<“cout<<year<<“ 不是闰年。”不是闰年。” <<endl;<<endl; }}

第三章 C

++

程序的流程控制

本程序的执行结果:

输入年份: 输入年份: 2001200120012001 不是闰年不是闰年

Page 38: C++ 语言程序设计

C++ 语言程序设计

二、 二、 if if 语句的嵌套语句的嵌套 在嵌套的在嵌套的 if if 语句中会出现多个“语句中会出现多个“ if ”if ” 和多个“和多个“ else”else” ,两者之间,两者之间

的配对关系为:从遇见第一个的配对关系为:从遇见第一个 elseelse 开始,“开始,“ else”else” 总与离它最总与离它最近的“近的“ if ”if ” 配对,否则一定要使用括弧配对,否则一定要使用括弧 {}{} ;尽量避免在;尽量避免在 ifif 语句的语句的elseelse 之前嵌套另一个之前嵌套另一个 ifif 语句。语句。

例如: ① 例如: ① if(n>0) {if(n>0) { if(a>b) z=a; if(a>b) z=a; (正确)(正确) If(n>0) else z=b; }If(n>0) else z=b; } if(a>b) z=a; if(n>0) {②if(a>b) z=a; if(n>0) {② else z=b; if(a>b) z=a; else z=b; if(a>b) z=a; (错误)(错误) }} else z=b;else z=b; if(n<=0) z=b;if(n<=0) z=b; else if(a>b) z=a;else if(a>b) z=a;

等效

第三章 C

++

程序的流程控制

Page 39: C++ 语言程序设计

C++ 语言程序设计 例二例二(( P55P55 例例 3.13.1 )输入)输入 22 个其中最大一个并显示出来。个其中最大一个并显示出来。 #include <iostream.h>#include <iostream.h> void main()void main() { int i,j;{ int i,j; cout<<“cout<<“ 请输入请输入 22 个整数:”个整数:” ;; cin>>i>>j; cin>>i>>j; cout<<“2cout<<“2 个数中最大的是:”个数中最大的是:” ;; if(i>=j)if(i>=j) cout<<i<<endl;cout<<i<<endl; elseelse cout<<j<<endl;cout<<j<<endl; }}

顺序结构顺序结构

分支结构分支结构

第三章 C

++

程序的流程控制

说明:比较一次就可以完成。

Page 40: C++ 语言程序设计

C++ 语言程序设计 例三例三(( P55P55 例例 3.23.2 ):输入):输入 33 个数,找出其中最大一个并显示出来。个数,找出其中最大一个并显示出来。 #include <iostream.h>#include <iostream.h> void main()void main() { int i,j,k;{ int i,j,k; cout<<“cout<<“ 请输入请输入 33 个整数:”个整数:” ;; cin>>i>>j>>k;cin>>i>>j>>k; cout<<“3cout<<“3 个数中最大的是:”个数中最大的是:” ;; If(i>=j) {If(i>=j) { if(i>=k)if(i>=k) cout<<i<<endl;cout<<i<<endl; else cout<<k<<endl;else cout<<k<<endl; } } else { else { if(j>=k) cout<<j<<endl;if(j>=k) cout<<j<<endl; else cout<<k<<endl; else cout<<k<<endl; }} }}

第三章 C

++

程序的流程控制

说明:需要比较二次

Page 41: C++ 语言程序设计

C++ 语言程序设计 例四例四(( P57P57 例例 3.43.4 ):输入):输入 33 个数,然后按从大到小的顺序把个数,然后按从大到小的顺序把

它们显示出来。它们显示出来。 #include <iostream.h>#include <iostream.h> void main()void main() { int i,j,k,p;{ int i,j,k,p; cout<<“cout<<“ 请输入请输入 33 个整数个整数 :”:” cin>>i>>j>>k;cin>>i>>j>>k; if(i<j) {p=i;i=j;j=p;} if(i<j) {p=i;i=j;j=p;} if(i<k) {p=i;i=k;k=p;}if(i<k) {p=i;i=k;k=p;} if(j<k) { p=j;j=k;k=p;} if(j<k) { p=j;j=k;k=p;} cout <<endl<<i<<‘ ’<<j<<‘ ’<<k;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 中。

Page 42: C++ 语言程序设计

C++ 语言程序设计 三、 三、 ifif 多分支结构 多分支结构 if …else ifif …else if 语句用于进行多重判断,其语法形式如下:语句用于进行多重判断,其语法形式如下: if if ( ( << 条件表达式条件表达式 1>1> ) ) << 语句语句 1>1> else if else if ( ( << 条件表达式条件表达式 2>2> ) ) << 语句语句 2>2> …… …… else if else if ( ( << 条件表达式条件表达式 n>n> ) ) << 语句语句 n>n> else <else < 语句语句 n+1>n+1> if if 、、 else ifelse if 、 、 else else 都是关键字, 都是关键字, << 条件表达式条件表达式 1>1> 、 、 << 条件条件

表达式表达式 2>2> 、 ……、 …… << 条件表达式条件表达式 n>n> 是作为判断条件使用的各种是作为判断条件使用的各种表达式,常用的是表达式,常用的是关系表达式或逻辑表达式,其他表达式也可以,,其他表达式也可以,不要用赋值表达式。不要用赋值表达式。 << 语句语句 1>1> 、、 << 语句语句 2>2> 、、 << 语句语句 n+1>n+1> 可以可以是单一语句,也可以是复合语句。是单一语句,也可以是复合语句。

该语句的功能:先计算:先计算 << 条件表达式条件表达式 1>1> 给出的表达式值,如果给出的表达式值,如果该值为非该值为非 00 ,则执行,则执行 << 语句语句 1>1> ,执行完毕后转到该条件语句后,执行完毕后转到该条件语句后面继续执行其后的语句;如果该值为面继续执行其后的语句;如果该值为 00 ,则继续计算,则继续计算 << 条件表达条件表达式式 2>2> 给出的表达式值,依次类推。如果所有条件中给出的表达给出的表达式值,依次类推。如果所有条件中给出的表达式值都为式值都为 00 ,则执行最后的,则执行最后的 else else 后面的后面的 << 语句语句 n+1>n+1> ,如果没有,如果没有else else ,则什么也不做,转到该条件语句后面的语句继续执行。,则什么也不做,转到该条件语句后面的语句继续执行。

第三章 C

++

程序的流程控制

Page 43: C++ 语言程序设计

C++ 语言程序设计

例五例五(( P61P61 例例 3.63.6 ):以下程序将用户输入的分数转换成等级:):以下程序将用户输入的分数转换成等级:AA (≥(≥ 9090 ),), BB (( 80~8980~89 ),), CC (( 70~7970~79 ),), DD (( 60~6960~69 ),),EE ( ( < 60< 60 ):):

#include <iostream.h>#include <iostream.h> void main()void main() { float x;{ float x; cout<<“cout<<“ 分数分数 :”;:”; cin>>x;cin>>x; if(x>=90) cout<<“A”endl;if(x>=90) cout<<“A”endl; else if(x>=80) cout<<“B”<<endl;else if(x>=80) cout<<“B”<<endl; else if(x>=70) cout<<“C”<<endl;else if(x>=70) cout<<“C”<<endl; else if(x>=60) cout<<“D”<<endl;else if(x>=60) cout<<“D”<<endl; else cout<<“E”<<endl;else cout<<“E”<<endl;

第三章 C

++

程序的流程控制

充分利用条件间的相互排斥

关系,使条件表达式非常简洁,

多分支结构中的各个条件都应当

是相互排斥的,任意时刻顶多有

一个条件得以满足,不应当出现

既满足这个条件又满足那个条件

的情况。

Page 44: C++ 语言程序设计

C++ 语言程序设计 四、四、 switchswitch 语句和语句和 switchswitch 多分支结构多分支结构 switchswitch 语句也称为开关语句,用于有多重选择的场合,测试某语句也称为开关语句,用于有多重选择的场合,测试某

一个变量具有多个值时所执行的动作。一个变量具有多个值时所执行的动作。 switchswitch 语句的语法形式为:语句的语法形式为: switch switch ( ( << 整型常量表达式整型常量表达式 >> )) { case <{ case < 整型常量表达式整型常量表达式 1>: <1>: < 语句序列语句序列 1>1> case <case < 整型常量表达式整型常量表达式 2>: <2>: < 语句序列语句序列 2>2> …… …… case <case < 整型常量表达式整型常量表达式 n>: <n>: < 语句序列语句序列 n>n> default:<default:< 语句语句 n+1>n+1> }} switchswitch 语句的执行顺序是:语句的执行顺序是: 首先计算首先计算 switch switch 语句语句 << 整型常量表达式整型常量表达式 >> 的值,然后在的值,然后在 cascas

ee 语句中寻找值相等的整型常量表达式,并以此为入口标号,由语句中寻找值相等的整型常量表达式,并以此为入口标号,由此开始顺序执行。如果没有找到相等的整型常量表达式,则从此开始顺序执行。如果没有找到相等的整型常量表达式,则从““ default:”default:” 开始执行。开始执行。

第三章 C

++

程序的流程控制

Page 45: C++ 语言程序设计

C++ 语言程序设计 使用使用 switchswitch 语句应当注意下列问题:语句应当注意下列问题: (( 11 )整型表达式包括字符型或枚举型表达式。)整型表达式包括字符型或枚举型表达式。 (( 22 )各常量表达式的值不能相同,但次序不影响执行结果。)各常量表达式的值不能相同,但次序不影响执行结果。 (( 33 )每个)每个 case case 分支可以有多条语句,但不必用分支可以有多条语句,但不必用 { }{ } 。。 (( 44 )每个)每个 case case 语句只是一个入口标号,并不能确定执行的终语句只是一个入口标号,并不能确定执行的终

止点,因此每个止点,因此每个 case case 分支的最后应该加分支的最后应该加 breakbreak 语句,用来结束语句,用来结束整个整个 switchswitch 结构,否则会从入口点开始一直执行到结构,否则会从入口点开始一直执行到 switchswitch 结构结构的结束点。的结束点。

(5)(5) 当若干分支需要执行相同操作时,可以使多个当若干分支需要执行相同操作时,可以使多个 casecase 分支共分支共用一组语句。用一组语句。

第三章 C

++

程序的流程控制

Page 46: C++ 语言程序设计

C++ 语言程序设计

例六、例六、以下程序根据用户选择显示相应计算机语言:以下程序根据用户选择显示相应计算机语言: #include <iostream.h>#include <iostream.h> void main()void main() { enum software {vc=1,vb,vfp}; { enum software {vc=1,vb,vfp}; // software枚举类型数据 int choice;int choice; cout<<“1.Visual C++”<<endl;cout<<“1.Visual C++”<<endl; cout<<“2.Visual Basic”<<endl;cout<<“2.Visual Basic”<<endl; cout<<“3.Visual Foxpro”<<endl;cout<<“3.Visual Foxpro”<<endl; cout<<“cout<<“ 请选择请选择 :”;:”; cin>>choice; cin>>choice; // 输入的值只能是 1 , 2 , 3 ,否则输入错误 switch(choice)switch(choice) { case vc:cout<<“{ case vc:cout<<“ 你的选择是你的选择是 Visual C++”<<endl;Visual C++”<<endl; case vb:cout<<“case vb:cout<<“ 你的选择是你的选择是 Visual Basic”<<endl;Visual Basic”<<endl; case vfp:cout<<“case vfp:cout<<“ 你的选择是你的选择是 Visual Foxpro”<<endl;Visual Foxpro”<<endl; default:cout<<“default:cout<<“ 输入错误”输入错误” <<endl;<<endl; }} }}

第三章 C

++

程序的流程控制

本程序的执行结果: 1.Vis1.Visual C++ual C++

2.Visual Basic2.Visual Basic

3.Visual Foxpro3.Visual Foxpro

请选择请选择 ::

你的选择是你的选择是 Visual BasicVisual Basic

Page 47: C++ 语言程序设计

C++ 语言程序设计 例七例七(( P64P64 例例 3.83.8 )、输入一个)、输入一个 0~1000~100 分范围内的一个成绩,显示相应的等分范围内的一个成绩,显示相应的等级,但要求用级,但要求用 switchswitch 多分支结构替代原来的多分支结构替代原来的 ifif 多分支结构。多分支结构。

#include <iostream.h>#include <iostream.h> void main()void main() { float score;{ float score; cout<<“cout<<“ 请输入成绩:”请输入成绩:” ;; cin>>score;cin>>score; switch(int(score)/10) //switch(int(score)/10) // 强制类型转换,进行整除操作。强制类型转换,进行整除操作。 { case 0: // 0~4{ case 0: // 0~4 没有语句序列,则程序从 没有语句序列,则程序从 case 1: case 2: //case 1: case 2: // 这些入口点进入后自动往下执行。 这些入口点进入后自动往下执行。 case 3: case 4:case 3: case 4: case 5: cout<<“case 5: cout<<“ 不及格”不及格” <<endl;break;<<endl;break; case 6: cout<<“case 6: cout<<“及格”及格” <<endl;break;<<endl;break; case 7: cout<<“case 7: cout<<“ 中”中” <<endl;break;<<endl;break; case 8: cout<<“case 8: cout<<“ 良”良” <<endl;break;<<endl;break; case 9: case 9: case 10: cout<<“case 10: cout<<“优”优” endl;break;endl;break; default: cout<<“default: cout<<“ 成绩必须在成绩必须在 0~1000~100 分之间!”分之间!” ;; }} }}

第三章 C

++

程序的流程控制

Page 48: C++ 语言程序设计

C++ 语言程序设计 五、课堂练习五、课堂练习 11 、如果执行、如果执行 if(x>3) cout<<‘A’;else cout<<‘B’;if(x>3) cout<<‘A’;else cout<<‘B’; 后屏幕上显示的是 后屏幕上显示的是 BB ,,

说明说明 x>3x>3 的值是( )。的值是( )。 22 、如果、如果 xx 的值为的值为 234234 ,, yy 的值为的值为 -54-54 ,则执行,则执行 if(x>0) cout<<‘A’;if(x>0) cout<<‘A’; if(y<-8) cout<<‘B’;if(y<-8) cout<<‘B’; 后屏幕上显示的是( )。后屏幕上显示的是( )。 33 、如果的值为、如果的值为 44 ,, yy 的值为的值为 -55-55 ,则执行,则执行 if(x>0)if(x>0) if(x>10) cout<<‘A’;if(x>10) cout<<‘A’; else cout<<‘B’;else cout<<‘B’; else if(y>-20) cout<<‘C’;else if(y>-20) cout<<‘C’; else cout<<‘D’;else cout<<‘D’; 后屏幕上显示的是( )。后屏幕上显示的是( )。 44 、借助于临时变量、借助于临时变量 tt交换交换 xx 和和 yy两个变量的值,应顺序执行的三个赋值两个变量的值,应顺序执行的三个赋值

语句是( )、( )和( )。语句是( )、( )和( )。 55 、把、把 if(OK) if(READY) y=-1;else y=0; else y=1;if(OK) if(READY) y=-1;else y=0; else y=1; 中嵌套的 中嵌套的 if if 语句改为语句改为

嵌套在外层嵌套在外层 ifif 语句语句 elseelse 之后,更改后的语句( 之后,更改后的语句( if(!OK)y=1;elseif(!OK)y=1;else if(READY) y=-1; else y=0; if(READY) y=-1; else y=0; )。)。

第三章 C

++

程序的流程控制

Page 49: C++ 语言程序设计

C++ 语言程序设计 66 、从、从 22 个数中挑选出最大的至少需要进行( )次比较,从个数中挑选出最大的至少需要进行( )次比较,从 33

个数中挑选出最大的至少需要进行( )次比较,从个数中挑选出最大的至少需要进行( )次比较,从 44 个数中挑个数中挑选出最大的数至少需要进行( )次比较,从选出最大的数至少需要进行( )次比较,从 n n 个数中挑选出最个数中挑选出最大的至少需要进行( )次比较。大的至少需要进行( )次比较。

77 、执行、执行 if(x>100&&x==0) cout<<“ABC”;else cout<<“XYZ”;if(x>100&&x==0) cout<<“ABC”;else cout<<“XYZ”; 屏幕屏幕上显示的是( )。上显示的是( )。

88 、与 、与 switch(k){switch(k){ case 1:case 1: case 2:case 2: case 3:cout<<‘A’;break;case 3:cout<<‘A’;break; case 4:case 4: case 5:cout<<‘B’;break;case 5:cout<<‘B’;break; default: cout<<‘C’;break;default: cout<<‘C’;break; }} 等效的语句是( )。等效的语句是( )。

第三章 C

++

程序的流程控制

Page 50: C++ 语言程序设计

C++ 语言程序设计 99 、与、与 if(x>=0&&x<=2) cout<<‘X’;if(x>=0&&x<=2) cout<<‘X’; else if(x>=20&&x<=22) cout<<‘Y’;else if(x>=20&&x<=22) cout<<‘Y’; else cout<<‘Z’;else cout<<‘Z’; (其中(其中 xx 是 是 intint 型变量型变量 )) 等效的等效的 switchswitch 语句是( )。语句是( )。 1010 、(多选)执行 、(多选)执行 cin>>k;cin>>k; if(k>100) cout<<‘G’;if(k>100) cout<<‘G’; if(k<100) cout<<‘L’;if(k<100) cout<<‘L’; 后,可能出现的情况有( )。后,可能出现的情况有( )。 A .A . 显示显示 G B .G B . 显示显示 L C .L C . 显示显示 GL D .GL D .无任何显示无任何显示 1111 、(多选)与 、(多选)与 y=(x>3?0:1); y=(x>3?0:1); 等效的 等效的 ifif 语句有( )。语句有( )。 A.if(x>3) y=0; else y=1;A.if(x>3) y=0; else y=1; B.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;C.if(!(x<=3)) y=1; else y=0; D.if(x<=3) y=1; else y=0;D.if(x<=3) y=1; else y=0;

第三章 C

++

程序的流程控制

Page 51: C++ 语言程序设计

C++ 语言程序设计 12.12. (多选)与 (多选)与 if(x>1)if(y>2) x+=y; else x-=y;if(x>1)if(y>2) x+=y; else x-=y; 等效的语句有( )。等效的语句有( )。 A.if(x>1&&y>2) x+=y;else x-=y;A.if(x>1&&y>2) x+=y;else x-=y; B.if(x>1)if(y<=2) x-=y; else x+=y;B.if(x>1)if(y<=2) x-=y; else x+=y; C.if(x>1) x=(y>=2?x-y:x+y);C.if(x>1) x=(y>=2?x-y:x+y); D.if(y>2)if(x>1) x-=y; else x+=y;D.if(y>2)if(x>1) x-=y; else x+=y; 13 .13 . (多选)执行(多选)执行 cin>>k;cin>>k; switcth(k) {switcth(k) { case 1:cout<<‘G’;case 1:cout<<‘G’; case 2:cout<<‘L’;case 2:cout<<‘L’; }} 后,可能出现的情况有( )。后,可能出现的情况有( )。 A .A . 显示显示 G B .G B . 显示显示 L C .L C . 显示显示 GL D .GL D .无任何显示无任何显示

第三章 C

++

程序的流程控制

Page 52: C++ 语言程序设计

C++ 语言程序设计

3·3 3·3 循环结构循环结构 一、 for 循环 for for 语句通常用于预先知道循环次数的情况,其一般形式为:语句通常用于预先知道循环次数的情况,其一般形式为: forfor (( << 表达式表达式 1 >1 > ; ; << 表达式表达式 2 >2 > ; ; << 表达式表达式 3 > 3 > ) ) << 语句 语句 >> (( 11 )说明:)说明: 11 、 、 << 表达式表达式 1>1> 可以是一个定义语句或表达式语句,一般用可以是一个定义语句或表达式语句,一般用

于对一组变量进行初始化或 赋值。于对一组变量进行初始化或 赋值。 22 、 、 << 表达式表达式 2 >2 > 用于控制循环,当它的值为用于控制循环,当它的值为 truetrue (非(非 00 )时,循环会继)时,循环会继续下去,而它一旦为 续下去,而它一旦为 falsefalse ,则终止循环。,则终止循环。

33 、 、 << 表达式表达式 3 >3 > 在每次循环执行完成后执行,一般用于改变控制循环的变在每次循环执行完成后执行,一般用于改变控制循环的变量。量。

44 、 、 << 语句 语句 >> 在在 << 表达式表达式 2 >2 > 为为 truetrue 时执行。时执行。 55 、、 forfor 循环的执行过程为:循环的执行过程为: 执行执行 << 表达式表达式 1>1> ;; 计算计算 << 表达式表达式 2 >2 > 的值;的值; 如果如果 << 表达式表达式 2 >2 > 的值为的值为 truetrue ,先执行后面的,先执行后面的 << 语句 语句 >> ,再执行,再执行 << 表达式表达式 3 >3 > ,然后转向步骤,然后转向步骤②② ; ; 如果 如果 << 表达式表达式 2 >2 > 的值为的值为 falsefalse ,则结束循环。,则结束循环。 此种循环为当型循环,它有可能一次循环体也 不执行就跳出。

①①②②③③

表达式表达式 11

表达式3

循环体 表达式2

Y

N

第三章 C

++

程序的流程控制

Page 53: C++ 语言程序设计

C++ 语言程序设计

例八、例八、求求 5050 以内的自然数之和。以内的自然数之和。

#include “iostream.h”#include “iostream.h”

void main()void main()

{ int i,sum=0;{ int i,sum=0;

for(i=0; i<=50; i++)for(i=0; i<=50; i++)

sum+=i;sum+=i;

cout<<“sum=”<<sum<<endl;cout<<“sum=”<<sum<<endl;

}}

(( 22 )关于)关于 forfor 循环的几种用法循环的几种用法

for( i=0;i<50;i++) sum+=i;此为 典型的 for 循环语句,表达式1 为给变量 i 初值为 0 、表达式 2 控制变量 i 的终值为50 、表达式 3确定变量 i 的步长为 1 ,此时的变量 i 称为循环变量。

第三章 C

++

程序的流程控制

Page 54: C++ 语言程序设计

C++ 语言程序设计

11 、、 for(i=1,sum=0; i<=50;sum+=i++); forfor 循环的语句是循环的语句是空语句,因而最后一个分号是必须要有,另外,因而最后一个分号是必须要有,另外 ss

um+=i++um+=i++ 不可修改为不可修改为 sum+=++isum+=++i ,否则结果就不正确。,否则结果就不正确。 22 、、 i=1;sum=0; for(; i<=50;sum+=i++); 省略表达式省略表达式 11 ,但需要在进入循环前,但需要在进入循环前给循环变量赋初值,表达式,表达式

11 后边的分号不能省略。后边的分号不能省略。 33 、 、 for(i=1,sum=0; i<=50;)sum+=i++; 省略表达式省略表达式 33 ,但需要在循环体语句中,但需要在循环体语句中改变循环变量的值。。 44 、 、 i=1;sum=0; for(; i<=50;)sum+=i++; 省略表达式省略表达式 11 和表达式和表达式 33 ,等同于,等同于 while(I<=50)……while(I<=50)…… ,此时用,此时用 ww

hilehile 语句更好一些,如果要用语句更好一些,如果要用 forfor 语句,需要在进入循环前语句,需要在进入循环前给变量赋初值,在循环体语句中,在循环体语句中改变循环变量的增减值。。

第三章 C

++

程序的流程控制

以上题为例,使用多种形式来以上题为例,使用多种形式来

表示的表示的 forfor 循环语句:循环语句:

for(i=0; i<=50; i++)

sum+=i;

Page 55: C++ 语言程序设计

C++ 语言程序设计

5 5 、 、 for(i=1,sum=0; ; ++i) { sum+=i; if(i>=50) break; } 省略表达式省略表达式 22 ,但需要在语句中给出,但需要在语句中给出结束循环的条件,其中,其中 breabrea

kk 语句用于结束循环,从循环体内跳出到循环体外。语句用于结束循环,从循环体内跳出到循环体外。 6 6 、 、 i=1;sum=0; for(;;) { sum+=i++; if(i>50) break; } 省略表达式省略表达式 11 、表达式、表达式 22 、表达式、表达式 33 ,成为一个无条件循环,因,成为一个无条件循环,因

而构成无限循环,如果不在循环体中用而构成无限循环,如果不在循环体中用 break;break; 强制退出,将形成强制退出,将形成死循环,这是不允许的,因此必须在循环体语句中死循环,这是不允许的,因此必须在循环体语句中给出结束循环的条件。。

第三章 C

++

程序的流程控制

for(i=0; i<=50; i++)

sum+=i;

Page 56: C++ 语言程序设计

C++ 语言程序设计 例九例九(( P68P68 例例 3.93.9 )、输入)、输入 1010 个数,计算并显示它们的合计。个数,计算并显示它们的合计。 #include <iostream.h>#include <iostream.h> void main()void main() { double x,s=0;{ double x,s=0; cout<<“cout<<“ 请输入请输入 1010 个数:”个数:” <<endl;<<endl; for(int i=0; i<10; i++)for(int i=0; i<10; i++) { cin>>x;{ cin>>x; s+=x;s+=x; }} cout<<“cout<<“ 合计:”合计:” <<s<<endl;<<s<<endl; } }

显示结果: 请输入请输入 1010 个数:个数: 1 2 3 4 5 6 7 8 9 101 2 3 4 5 6 7 8 9 10 合计:合计: 5555

第三章 C

++

程序的流程控制

说明:

1 、定义的两个实型 x,s , x 为所需输入的变量, s 为计算其累加合的变量,其值必须初始化 。

2 、循环变量 i 在括号中定义,它的作用域仅限于 for 语句中。

3 、循环体为一复合语句。

Page 57: C++ 语言程序设计

C++ 语言程序设计 例十例十(( P69P69 例例 3.103.10 )显示输出如下所示的三角形:)显示输出如下所示的三角形: #include <iostream.h>#include <iostream.h> void main()void main() { for(int i { for(int i =0=0 ; i<6; i++); i<6; i++) {{ cout<<endl;cout<<endl; int j;int j; for(j=0;j<5-i;j++) cout<<‘ ’; for(j=0;j<i+i+1;j++) cout<<‘*’; }} }}

第三章 C

++

程序的流程控制

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

说明:1、 for(inti; i<6; i++)按图形要求循环六次;

2、 cout<<endl;换行,为新的一行做准备;

3、 for(j=0;j<5-i;j+) cout<<‘ ’;按图形要

求每一行输出相应的空格,根据 i 值来定;

4、 for(j=0;j<i+i+1;j++) cout<<‘*’;按图形要求每一行输出相应的“*”,也是根据 i 值来定;

5、 j<i+i+1 可改为 j<2 *i+1;

6、该循环为双重循环。

有两个内循环

Page 58: C++ 语言程序设计

C++ 语言程序设计 例十一例十一(( p70p70 例例 3.113.11 )显示输出)显示输出 9999 乘法表。乘法表。 ## include <iomanip.h>include <iomanip.h> void main()void main() { cout<<endl<<setw(4)<<“|”;{ cout<<endl<<setw(4)<<“|”; int i;int i; for(i=1; i<10; i++) cout<<setw(3)<<i;for(i=1; i<10; i++) cout<<setw(3)<<i; cout<<endl<<“---+--------------------------------”;cout<<endl<<“---+--------------------------------”; for(i=1; i<10; i++)for(i=1; i<10; i++) { cout<<endl<<setw(3)<<i<<“|”;{ cout<<endl<<setw(3)<<i<<“|”; for(int j=1;j<10;j++) cout<<setw(3)<<i*j;for(int j=1;j<10;j++) cout<<setw(3)<<i*j; }} }}

第三章 C

++

程序的流程控制

说明: 1 、 <iomanip.h> 为头文件, setw 操作符的功能是为下一个要输出的数据设置输出宽度,宽度由其中的数字给出,它只对一个数据有效,如 cout<<1<<setw(8)<<2<<3; 输出效果为 1 23 。

2 、上下左右的空格及数据要对齐,最好上机操作调试一下。

1 2 3 4 5 6 7 8 9

1 1 2 3 4 5 6 7 8 9

2 2 4 6 8 10 12 14 16 18

3 3 6 9 12 15 18 21 24 27

4 4 8 12 16 20 24 28 32 36

5 5 10 15 20 25 30 35 40 45

6 6 12 18 24 30 36 42 48 49

7 7 14 21 28 35 42 49 56 63

8 8 16 24 32 40 48 56 64 72

9 9 18 27 36 45 54 63 72 81

Page 59: C++ 语言程序设计

C++ 语言程序设计 例十二例十二、以下程序显示、以下程序显示 ASCIIASCII码为码为 30~7130~71 的字符:的字符: #include <iomanip.h>#include <iomanip.h> void main()void main() { int i,n=0;{ int i,n=0; for(i=30; i<=71; i++)for(i=30; i<=71; i++) { if(n%10==0){ if(n%10==0) cout<<endl;cout<<endl; cout<<setw(3)<<i<<“:”<<(char) i<<“ ”;cout<<setw(3)<<i<<“:”<<(char) i<<“ ”; n++;n++; }} cout<<endl;cout<<endl; }} 显示结果:

第三章 C

++

程序的流程控制

32: 33:! 34:“ 35:# 36:$ 37:% 38:& 39:‘ 40:( 41:)

42:* 43:+ 44:, 45:- 46:. 47:/ 48:0 49:1 50:2 51:3

52:4 53:5 54:6 55:7 56:8 57:9 58:: 59:; 60:< 61:=

62:> 63:? 64:@ 65:A 66:B 67:C 68:D 69:E 70:F 71:G

Page 60: C++ 语言程序设计

C++ 语言程序设计 二、 while 循环 whilewhile 语句的一般形式为:语句的一般形式为: whilewhile (( <<条件表达式 条件表达式 >> )) << 语句 语句 >> ;; 当当 <<条件表达式 条件表达式 >> 的运算结果为的运算结果为 truetrue 时,则重复执行时,则重复执行 << 语句 语句 >> 。每执行一。每执行一次次 << 语句 语句 >> 后,就会重新计算一次后,就会重新计算一次 <<条件表达式 条件表达式 >> ,当该表达式的值为,当该表达式的值为 falsefalse时,循环结束。时,循环结束。

whilewhile 语句所构成的循环为先判断后执行,属当型循环,用语句所构成的循环为先判断后执行,属当型循环,用 forfor 语句实现的循语句实现的循环均可用环均可用 whilewhile 语句实现。语句实现。

例十三例十三、将用户输入的整数反向显示出来:、将用户输入的整数反向显示出来: #include “iostream.h”#include “iostream.h” void main()void main() { int digit,num;{ int digit,num; cout<<“cout<<“ 输入一个整数:”输入一个整数:” ; cin>>num;; cin>>num; cout<<“cout<<“反向显示结果:”反向显示结果:” ;; while(num!=0)while(num!=0) { digit=num%10; //{ digit=num%10; // 依次求个位、十位、…上的数字 num=num/10; //num=num/10; // 依次保留所剩位数 cout<<digit; }cout<<digit; } cout<<endl;cout<<endl; }}

第三章 C

++

程序的流程控制 循环体循环条件

truetrue

falsefalse

输入一个整数: 123456

反向显示结果: 654321

执行结果:

Page 61: C++ 语言程序设计

C++ 语言程序设计 例十四例十四(( P71P71 例例 3.123.12 )、求数列)、求数列 1/21/2 、、 3/43/4 、、 5/85/8 、、 7/167/16 、、 9/329/32

…… 的所有大于等于的所有大于等于 0.000 0010.000 001 的数据项之和,显示输出计算的结果。的数据项之和,显示输出计算的结果。 分析:该数列的通项公式可写为分析:该数列的通项公式可写为 aai+1i+1=(n=(nii+2)/2d+2)/2dii ,分子,分子 nnii 从从 11 开始,开始,

分母分母 ddii 从从 22 开始开始 #include “iostream.h”#include “iostream.h” void main()void main() { int n=1,d=2;{ int n=1,d=2; double s=0.0,s0;double s=0.0,s0; while((s0=double(n)/d)>=0.000001)while((s0=double(n)/d)>=0.000001) { s+=s0;{ s+=s0; n+=2;n+=2; d+=d;d+=d; }} cout<<s;cout<<s; }}

第三章 C

++

程序的流程控制

说明:

1 、变量 s 保存累加结果;

2 、变量 s0 用于计算每一单项值,即 n/d ;

3 、 double(n) 是将 n强制转换为 double 型;

Page 62: C++ 语言程序设计

C++ 语言程序设计 注意:注意: 11 、对于有关数列的问题,如果是求数列前若干项之和,则应量、对于有关数列的问题,如果是求数列前若干项之和,则应量采用递推方法解决;但如果总是是求第某项的值之类的问题,由采用递推方法解决;但如果总是是求第某项的值之类的问题,由于不涉及其他项,因此用通项公式解决为好。于不涉及其他项,因此用通项公式解决为好。

22 、一般地说,乘除运算比加减运算费时,乘方开方运算比乘除、一般地说,乘除运算比加减运算费时,乘方开方运算比乘除运算费时,因此程序设计时若能避免使用或减少使用相对费时的运算费时,因此程序设计时若能避免使用或减少使用相对费时的运算,如把运算,如把 2*a2*a 替换为替换为 a+aa+a ,把,把 pow(a,2)pow(a,2) 替为替为 a*aa*a 等,是有益等,是有益于提高程序的运行效率的。于提高程序的运行效率的。

33 、用于保存累加结果的变量须初始化 为、用于保存累加结果的变量须初始化 为 00 ,用于保存累乘结果,用于保存累乘结果的变量须初始化 为的变量须初始化 为 11 。。

第三章 C

++

程序的流程控制

Page 63: C++ 语言程序设计

C++ 语言程序设计

例十五例十五(( P74P74 例例 3.143.14 )、已知)、已知 sinx=x/1-x3/3!+x5/5!-x7/7!+…sinx=x/1-x3/3!+x5/5!-x7/7!+……… ,设计一程序,输入,通过累加所有绝对值大于等于,设计一程序,输入,通过累加所有绝对值大于等于 0.000000.0000011 的项来计算的值,显示计算结果并对照显示调用标准函数的计的项来计算的值,显示计算结果并对照显示调用标准函数的计算结果。算结果。

分析:由于是求前若干项的和的问题,以递推方法解决为好,递分析:由于是求前若干项的和的问题,以递推方法解决为好,递推的分析过程见下表:推的分析过程见下表:

分子为前一项乘分子为前一项乘 (-x(-x22)) ,分母为前一项乘,分母为前一项乘 (2*i-2)*(2*i-1)(2*i-2)*(2*i-1) ,它们称,它们称为递推公式:为递推公式:

序号 分子 (n) 分母 (d)

1 x 1!

2 x*(-x2)=-x3 1!*2*3=3!

3 (-x3)*(-x2)=x5 3!*4*5=5!

4 x5*(-x2)=-x7 5!*6*7=7!

… … …

i ni di

i+1 ni*(-x2) di*(2*i-2)*(2*i-1)

第三章 C

++

程序的流程控制

Page 64: C++ 语言程序设计

C++ 语言程序设计 #include <iostream.h>#include <iostream.h> #include <math.h>#include <math.h>

void main()void main() { double x;{ double x; cout<<“cout<<“ 请输入一个弧度值:”请输入一个弧度值:” ;; cin>>x;cin>>x; const double dPI=2*3.1415926; if(x>0.0) while(x>dPI) x-=dPI; else while(x<-dPI) x+=dPI; double i=1.0,n=x,k=1.0,s=0,s0;double i=1.0,n=x,k=1.0,s=0,s0; while(fabs(s0=n/d)>=0.000001)while(fabs(s0=n/d)>=0.000001) { s+=s0;{ s+=s0; i++;i++; n*=(-x*x);n*=(-x*x); d*=(i+i-2)*(i+i-1);d*=(i+i-2)*(i+i-1); }} cout<<s<<endl<<sin(n);cout<<s<<endl<<sin(n); }}

说明: 1 、 fabs 是求绝对值的标准函数;

2 、 sin 是求正弦值的标准函数;

3 、 fabs 、 sin两个函数均包含在头文件 math.h 之中;

4 、 sin 是以 2∏ 为周期的函数,如果输入的弧度值的绝对值大于 2∏ ,则减去 2∏从理论上讲不会影响函数的值,而对于程序中的算法,累加同样多项数的精度却提高了。

第三章 C

++

程序的流程控制

Page 65: C++ 语言程序设计

C++ 语言程序设计

三、 do……while 语句 do……whiledo……while 语句的一般形式为:语句的一般形式为: dodo << 语句 语句 >> whilewhile ( ( << 条件表达式 条件表达式 >> );); dodo 语句每一次循环执行一次语句每一次循环执行一次 << 语句 语句 >> ,然后计算条件表达式是,然后计算条件表达式是否为否为 truetrue ,如果是,则继续执行循环,否则结束循环。与,如果是,则继续执行循环,否则结束循环。与 whilewhile语句不同的是,语句不同的是, dodo 循环中的循环中的 << 语句 语句 >> 至少会执行一次,而至少会执行一次,而 whilewhile语句当条件第一次就不满足时,语句一次也不会被执行。它属于语句当条件第一次就不满足时,语句一次也不会被执行。它属于直到型循环。直到型循环。

注意注意::在条件表达式之后,必须有分号“;”结尾。

第三章 C

++

程序的流程控制

Page 66: C++ 语言程序设计

C++ 语言程序设计

例十六例十六、、采用采用 dodo 语句语句将用户输入的整数反向显示出来(例十三):将用户输入的整数反向显示出来(例十三):

#include<iostream.h>#include<iostream.h> void main() void main()

{ int digit,num;{ int digit,num;

cout<<“cout<<“ 输入一个整数:”输入一个整数:” ;;

dodo

{ digit=num%10;{ digit=num%10;

num=num/10;num=num/10;

cout<<digit;cout<<digit;

} while(num!=0); } while(num!=0);

cout<<endl; cout<<endl;

} }

说明:

1 、循环体至少执行一次;

2 、条件表达式为 true(即非 0 )时执行循环体;为 false (即为 0 )就跳出循环。

第三章 C

++

程序的流程控制

Page 67: C++ 语言程序设计

C++ 语言程序设计 四、循环结构的特殊控制 11 、、 breakbreak 语句语句 breakbreak 语句将使程序从当前的循环语句( 语句将使程序从当前的循环语句( dodo 、、 whilewhile 和和 forfor ))或或 switcthswitcth 语句内跳出来,接着执行其后面的语句。 语句内跳出来,接着执行其后面的语句。 breakbreak 语句语句的执行通常是有条件的。的执行通常是有条件的。

22 、 、 continuecontinue 语句语句 continuecontinue 语句也用于循环语句,它类似于语句也用于循环语句,它类似于 breakbreak ,但它不是结束,但它不是结束

循环,而是结束循环语句的当前一次循环,接着执行下一次循环。循环,而是结束循环语句的当前一次循环,接着执行下一次循环。在在 whilewhile 和和 dodo 循环结构中,执行控制权转至对循环结构中,执行控制权转至对 << 条件表达式 条件表达式 >>的判断,在的判断,在 forfor 结构中,转去执行结构中,转去执行 << 表达式表达式 2 >2 > 。。

33 、、 gotogoto 语句语句 gotogoto 语句可以跳出循环和语句可以跳出循环和 switcthswitcth 语句。语句。 gotogoto 语句无条件转移程语句无条件转移程

序的执行控制,它总是与一标号相匹配,其形式为: 序的执行控制,它总是与一标号相匹配,其形式为: goto goto 标号:标号: 标号是一个用户自定义的标识符,它可以处于标号是一个用户自定义的标识符,它可以处于 gotogoto 语句的前面,语句的前面,也可以处于其后面,但是标号必须与也可以处于其后面,但是标号必须与 gotogoto 语句处于同一个函数中。语句处于同一个函数中。定义标号时,由一个标识符后面跟一冒号组成。 定义标号时,由一个标识符后面跟一冒号组成。

第三章 C

++

程序的流程控制

Page 68: C++ 语言程序设计

C++ 语言程序设计 例十七例十七(( P77P77 例例 316316 )、设计一函数)、设计一函数 AA ,它根据给出的圆的半,它根据给出的圆的半

径,计算圆的面积。条件:径,计算圆的面积。条件: 11 、允许反复地输入半径、计算并显、允许反复地输入半径、计算并显示圆面积,直到输入的半径是示圆面积,直到输入的半径是 00 时为止(输入时为止(输入 00 半径是终止程序半径是终止程序运行的信号);运行的信号); 22 、对输入的半径进行检查,若发现是负数将提、对输入的半径进行检查,若发现是负数将提示操作者重新输入。示操作者重新输入。

#include<iostream.h>

#define PI 3.1416

double Area(double r)

{ return PI*r*r; }

void main()

{ double radius,area;

while(true){

cout<<endl<<“ 请输入

圆的半径” ;

cin>>radius;

if(radius= =0.0)break;

if(radius<0.0){

cout<<endl<<“ 输入错误:

半径不能为负!” ;

continue;

}

area=Area(radius);

cout<<endl<<“ 圆的面积:”

<<area;

}

}

说明:

1 、 while(true)条件表达式始终 为真,因此将反复执行循环体;

2 、 if(radius= =0.0)break 以输入半径 0 作为终止条件,跳出整个循环体。

3 、由 if(radius<0.0)提示若半径为负则需重新输入半径, continue确定不再执行后面的循环体语句。

第三章 C

++

程序的流程控制

Page 69: C++ 语言程序设计

C++ 语言程序设计 四、自检自测四、自检自测 (p78)(p78) 11 、执行、执行 for(int i=0; i<28; i++) cout<<‘*’;for(int i=0; i<28; i++) cout<<‘*’; 将输出( )将输出( )

个个 ** 号。号。 22 、执行、执行 for(int i=20; i>=0; i--) cout<<‘*’;for(int i=20; i>=0; i--) cout<<‘*’; 将输出( )将输出( )

个个 ** 号。号。 33 、与 、与 int i=10;int i=10; while(i<100){ cout<<‘P’; i++; }while(i<100){ cout<<‘P’; i++; } 这两个语句相当的语句是( )。这两个语句相当的语句是( )。 44 、与、与 for(i=0; i<10; i++) cout<<i;for(i=0; i<10; i++) cout<<i; 等价的等价的 whilewhile 循环是循环是 ( )。( )。 55 、、与与 i=20;while(i>0) cout<<i--;i=20;while(i>0) cout<<i--; 等价的等价的 forfor 循环是( 循环是(

)。 )。 五、课后作业(五、课后作业( P82P82 )) 3-13-1 、 、 11 、、 44 、、 88 、、 1111 、、 1212 、、 1414 、、 3-23-2 、、 3-43-4 、、 3-3-

99 、、 3-123-12

第三章 C

++

程序的流程控制

Page 70: C++ 语言程序设计

C++ 语言程序设计

第四章 数组 一、导学内容一、导学内容 11 、一维数组、一维数组 22 、多维数组、多维数组 33 、字符数组与字符串、字符数组与字符串 二、本章重点二、本章重点 一维数组和字符串一维数组和字符串 三、学习目标三、学习目标 11 、掌握定义一维数组和二维数组方法以及在定义时设定初值的、掌握定义一维数组和二维数组方法以及在定义时设定初值的

方法;方法; 22 、掌握数组操作的基本技巧并能用来解决实际问题;、掌握数组操作的基本技巧并能用来解决实际问题; 33 、掌握字符串处理,熟悉常用的字符串算是函数。、掌握字符串处理,熟悉常用的字符串算是函数。 四、教学方法四、教学方法 面授、答疑、上机、电子教案面授、答疑、上机、电子教案

第四章

数组

Page 71: C++ 语言程序设计

C++ 语言程序设计

4·1 4·1 一维数组一维数组 在在 C++C++ 中,数组是属于非基本数据类型。在程序设计中,经常使中,数组是属于非基本数据类型。在程序设计中,经常使

用数组,以提高程序的可读性和灵活性。用数组,以提高程序的可读性和灵活性。 数组是可以通过下标访问的同类型数据元素的集合。数组的每个数组是可以通过下标访问的同类型数据元素的集合。数组的每个元素相当于一个简单变量。元素相当于一个简单变量。

一、数组的说明 和其他变量一样,在使用数组之前需要对数组进行说明。数组和其他变量一样,在使用数组之前需要对数组进行说明。数组

分为一维数组、二维数组和多维数组,我们通常把二维数组称为分为一维数组、二维数组和多维数组,我们通常把二维数组称为矩阵,三维以上的数组称为多维数组。矩阵,三维以上的数组称为多维数组。

一维数组的说明格式:一维数组的说明格式: << 类型类型 > <> < 数组名数组名 >[<>[< 常量表达式常量表达式 >]>] ;; 其中, 其中, << 常量表达式常量表达式 > > 表示一维数组中存储的元素个数。表示一维数组中存储的元素个数。 例如: 例如: int a[10];int a[10]; 数组是程序设计语言中常用的数据结构之一,当若干数据具有相数组是程序设计语言中常用的数据结构之一,当若干数据具有相

同的数据类型并互相有一定关系时,把它们组织成数组非常有效。同的数据类型并互相有一定关系时,把它们组织成数组非常有效。

第四章

数组

Page 72: C++ 语言程序设计

C++ 语言程序设计 二、数组初始化 数组可在定义时初始化 ,其格式为:数组可在定义时初始化 ,其格式为: << 类型类型 > <> < 数组名数组名 >[<>[< 常量表达式常量表达式 >]={>]={ 值值 11 ,值,值 22 ,…,值,…,值 N}N} ;; 初始化 值的个数可以小于或等于数组定义的元素个数,但不可以多初始化 值的个数可以小于或等于数组定义的元素个数,但不可以多

于元素个数。不足部分的数组元素系统自动以零值填充。在显式初于元素个数。不足部分的数组元素系统自动以零值填充。在显式初始化 时,可以不写数组范围,这时系统自动计算数组元素个数(等始化 时,可以不写数组范围,这时系统自动计算数组元素个数(等于初始化 值的个数)。于初始化 值的个数)。

int a[3]={1,2,3}; // int a[3]={1,2,3}; // 初始化 三个数组元素初始化 三个数组元素 int a[10]={4,5}; // int a[10]={4,5}; // 只初始化前两 个元素,其他元素等于只初始化前两 个元素,其他元素等于 00 int a[]={1,2,3,4}; // int a[]={1,2,3,4}; // 数组大小由初始化 值个数确定,因数组大小由初始化 值个数确定,因 而数组大小为而数组大小为 44 对数组中某一个元素是通过数组名加下标访问的,如对数组中某一个元素是通过数组名加下标访问的,如 a[0]a[0] 是数组的是数组的

第一个元素,第一个元素, a[1]a[1] 是数组的第二个元素,是数组的第二个元素, a[9]a[9] 是数组的最后一个元是数组的最后一个元素。注意,数组的下标是从素。注意,数组的下标是从 00 开始,因而一个具有开始,因而一个具有 nn 个元素的数组个元素的数组 aa ,,其有效元素为其有效元素为 a[0]a[0] 至至 a[n-1]a[n-1] 。。

k=a[1]; // k=a[1]; // 取指定数组元素的值取指定数组元素的值 a[2]=67; // a[2]=67; // 向指定数组元素赋值向指定数组元素赋值 cout=<<a[2+2]; //cout=<<a[2+2]; // 下标可以是任意的表达式下标可以是任意的表达式

第四章

数组

Page 73: C++ 语言程序设计

C++ 语言程序设计 例一例一(( P89P89 例例 4.14.1 )输入若干个整数,然后按输入的相反顺序)输入若干个整数,然后按输入的相反顺序

显示这些数据。显示这些数据。 #include “iostream.h”#include “iostream.h” #define SIZE 8 #define SIZE 8 void main()void main() { int data[SIZE];{ int data[SIZE]; cout<<endl<<“cout<<endl<<“ 请输入”请输入” <<SIZE<<“<<SIZE<<“ 个整数:”个整数:” ;; int i;int i; for(i=0; i<SIZE; i++) cin>>data[i];for(i=0; i<SIZE; i++) cin>>data[i]; cout<<endl;cout<<endl; for(i=SIZE-1; i>=0; i--) cout<<data[i]<<‘ ’;for(i=SIZE-1; i>=0; i--) cout<<data[i]<<‘ ’;

}}

说明:

1 、 #define SIZE 8 用符号常量来定义数组的大小,可提高数组的通用性和可重用性;

2 、 for(i=0; i<SIZE; i++) cin>>data[i]; 正序输入;

3 、 for(i=SIZE-1; i>=0; i--) cout<<data[i]<<‘ ’;反序输出。

第四章

数组

Page 74: C++ 语言程序设计

C++ 语言程序设计

例二例二(( P89P89 例例 4.24.2 )、将数组中最小的数成为数组的首元素。)、将数组中最小的数成为数组的首元素。 #include <iostream.h>#include <iostream.h> #define SIZE 5#define SIZE 5 void main()void main() { int data[SIZE];{ int data[SIZE]; coit<<endl<<“coit<<endl<<“ 请输入”请输入” <<SIZE<<“<<SIZE<<“ 个整数:”个整数:” ;; int m;int m; for(m=0;m<SIZE;m++) cin>>data[m];for(m=0;m<SIZE;m++) cin>>data[m]; int j=0;int j=0; for(int i=1;i<SIZE;i++) //①for(int i=1;i<SIZE;i++) //① if(data[i]< data[j]if(data[i]< data[j] ) ) j=i;j=i; if(j>0) { //②if(j>0) { //② int k=data[0];int k=data[0]; data[0]=data[j];data[0]=data[j]; data[j]=k; }data[j]=k; } cout<<endl; //③cout<<endl; //③ for(m=0;m<SIZE;m++) cout<<data[m]<<‘ ’;for(m=0;m<SIZE;m++) cout<<data[m]<<‘ ’; }}

说明:若数组为 89 ,45 , 78 , 23 , 56这五个数:

1 、 j 为数组元素序号,先后为 0 , 1 , 3 ,在寻找最小元素的序号;

2 、若 j 不为零,则将该最小元素与首元素调换。

3 、调换后输出

第四章

数组

Page 75: C++ 语言程序设计

C++ 语言程序设计 例三(例三( P91P91 例例 4.34.3 )、用选择法对数组元素从小到大排序。)、用选择法对数组元素从小到大排序。 分析:先从数组元素中找出最小的,通过交换使其成为首元素;分析:先从数组元素中找出最小的,通过交换使其成为首元素; 再从再从 N-1N-1 个元素中找出最小的,同样通过交换使其成为个元素中找出最小的,同样通过交换使其成为    N   N -- 1元素中的首元素;1元素中的首元素;    通过如此反复比较、交换,从而达到排序的目的。   通过如此反复比较、交换,从而达到排序的目的。 #include “ iostream.h”#include “ iostream.h” void main()void main() { int data[]={45,78,65,90,23};{ int data[]={45,78,65,90,23}; #define SIZE (sizeof(data)/sizeof(data[0]))#define SIZE (sizeof(data)/sizeof(data[0])) int m;int m; cout<<endl<<“cout<<endl<<“ 排序前:”排序前:” ;; for(m=0;m<SIZE;m++)for(m=0;m<SIZE;m++) cout<<data[m]<<‘ ’ ;cout<<data[m]<<‘ ’ ;

说明: sizeof(data)/sizeof(data[0]) 是计算数组所占的字节数及单个元素所占的字节数,两者相除得数组的个数;

第四章

数组

Page 76: C++ 语言程序设计

C++ 语言程序设计

for(m=0;m<SIZE-1;m++)for(m=0;m<SIZE-1;m++) {{ int j=m; for(int i=m+1; i<SIZE; i++) if(data[i]<data[j]) j=i; // 保持 j始终 为元素值最小的下标序号 if(j>m)if(j>m) {{ int k=data[m];int k=data[m]; data[m]=data[j];data[m]=data[j]; data[j]=k;data[j]=k; }} }} cout<<endl<<“cout<<endl<<“ 排序后:” 排序后:”  for(m=0;m<SIZE;m++) for(m=0;m<SIZE;m++) cout<<data[m]<<‘ ’;cout<<data[m]<<‘ ’; }}

初始状态: 45,90,65,78,23

当m=0 时: 23 , 90 , 65 , 78 ,45

当m=1 时: 23 , 45 , 65 , 78 ,90

当m=2 时: 23 , 45 , 65 , 78 ,90

当m=3 时: 23 , 45 , 65 , 78 ,90

第四章

数组

Page 77: C++ 语言程序设计

C++ 语言程序设计 例四(例四( P93P93 例例 4.44.4 )、显示输出)、显示输出 100100 以内的所有质数。以内的所有质数。 #include <iostream.h>#include <iostream.h> #define SIZE 100#define SIZE 100 void main()void main() { bool p[SIZE];{ bool p[SIZE]; cout<<SIZE<< “cout<<SIZE<< “ 以内的质数有:以内的质数有: 2” ;2” ; int i;int i; for(i=3; i<SIZE; i+=2) p[i]=true;for(i=3; i<SIZE; i+=2) p[i]=true; for(i=3; i<SIZE; i+=2)for(i=3; i<SIZE; i+=2) if(p[i])if(p[i]) { cout<<‘ ’ <<i;{ cout<<‘ ’ <<i; for(int j=i+i+i;j<SIZE;j+=i+i) for(int j=i+i+i;j<SIZE;j+=i+i) p[j]=false;p[j]=false; }} } }

第四章

数组

Page 78: C++ 语言程序设计

C++ 语言程序设计 例五、求例五、求 3~1003~100 以内的素数。以内的素数。 #include <iostream.h>#include <iostream.h> void main()void main() { int i,j,b,n=1;{ int i,j,b,n=1; for(i=3; i<=100; i+=2)for(i=3; i<=100; i+=2) { b=1;{ b=1; for(j=2;j<i;j++)for(j=2;j<i;j++) if(i%j==0) b=0;if(i%j==0) b=0; if(b==1)if(b==1) { cout<<i<<‘ ’;{ cout<<i<<‘ ’; n++;n++; if(n%10==0)if(n%10==0) cout<<endl;cout<<endl; }} }} cout<<endl;cout<<endl; }}

第四章

数组

Page 79: C++ 语言程序设计

C++ 语言程序设计 三、自检自测 11 、已知数组、已知数组 aa 定义为定义为 int a[5]={3,6,9};int a[5]={3,6,9}; ,则,则 aa 的各元素的值分别的各元素的值分别

是( ),最小下标是( ),最大下标是( )。是( ),最小下标是( ),最大下标是( )。 22 、已知数组、已知数组 cc 定义为定义为 long c[100]={0};long c[100]={0}; ,则,则 cc 的元素个数是( 的元素个数是(

)、最小下标是( ),最大下标是( )。 )、最小下标是( ),最大下标是( )。 33 、要定义一个、要定义一个 int int 型一维数组型一维数组 artart ,并使其各元素具有初值,并使其各元素具有初值 89,-89,-

23,0,0,023,0,0,0 ,正确的定义语句有( )。,正确的定义语句有( )。 AA 、、 int art[5]={89,-23}; Bint art[5]={89,-23}; B 、、 int art[]={89,-23};int art[]={89,-23}; CC 、 、 int art[5]={89,-23,0,0,0}; Dint art[5]={89,-23,0,0,0}; D 、、 int art[]={89,-23,0,0,0};int art[]={89,-23,0,0,0}; 44 、已知数组、已知数组 TT 为一有为一有 1010 个单元的整型数组,下面的语句试图求个单元的整型数组,下面的语句试图求

出这出这 1010 个单元的合计值,并用保存这个值;请补充完整下面的个单元的合计值,并用保存这个值;请补充完整下面的语句:语句:

int s=int s= for(int j=0; ; ) ;for(int j=0; ; ) ;

第四章

数组

Page 80: C++ 语言程序设计

C++ 语言程序设计

4·2 4·2 多维数组 多维数组 维数大于维数大于 11 的均称为多维数组,而二维数组是最简单的一种。的均称为多维数组,而二维数组是最简单的一种。 我们这一节仅讨论二维数组的情况。我们这一节仅讨论二维数组的情况。 二维数组也称为矩阵,需要两个下标才能标识某个元素的位置,二维数组也称为矩阵,需要两个下标才能标识某个元素的位置,

二维数组经常用来表示按行和按列格式存放信息的数值表。二维数组经常用来表示按行和按列格式存放信息的数值表。 一、二维数组的说明 二维数组的说明与一维数组的说明相似,只是必须指定两个常二维数组的说明与一维数组的说明相似,只是必须指定两个常

量表达式。其格式如下:量表达式。其格式如下: << 类型类型 > <> < 数组名数组名 >[<>[< 常量表达式常量表达式 1>] [<1>] [< 常量表达式常量表达式 2>]2>] 其中: 其中: << 常量表达式常量表达式 1>1> 表示二维数组的行数;表示二维数组的行数; << 常量表达式常量表达式 2>2> 表示二维数组的列数;表示二维数组的列数; 二维数组的元素在内存中通常是按先行后列的顺序排列的。二维数组的元素在内存中通常是按先行后列的顺序排列的。 如如 P130 P130 页图页图 7-47-4 所示。所示。 通过下标来访问指定的数组元素值通过下标来访问指定的数组元素值

第四章

数组

Page 81: C++ 语言程序设计

C++ 语言程序设计

二、二维数组的初始化 二维数组初始化 的方式有三种:二维数组初始化 的方式有三种: 11 、按行赋值、按行赋值 int a[2][3]={{1,2,3},{4,5,6}}; int a[2][3]={{1,2,3},{4,5,6}}; 22 、按行给部分元素赋值、按行给部分元素赋值 int b[2][3]={{1,2},{4,5}}; b[0][2]=0,b[1][2]=0int b[2][3]={{1,2},{4,5}}; b[0][2]=0,b[1][2]=0 33 、按顺序依次给各元素赋值、按顺序依次给各元素赋值 int c[2][3]={1,2,3,4}; c[1][1]=0,c[1][2]=0int c[2][3]={1,2,3,4}; c[1][1]=0,c[1][2]=0 44 、省略第一维大小、省略第一维大小 如果对全部元素都赋初值,则定义数组时对第一维的大小可以如果对全部元素都赋初值,则定义数组时对第一维的大小可以

忽略,但第二维的大小不能省略,编译器会根据总个数分配空间。忽略,但第二维的大小不能省略,编译器会根据总个数分配空间。 如:如: int a[][3]={1,2,3,4,5,6,7,8,9};int a[][3]={1,2,3,4,5,6,7,8,9}; 与 与 int a[3][3]={1,2,3,4,5,6,7,8,9}; int a[3][3]={1,2,3,4,5,6,7,8,9}; 是等价的。是等价的。

第四章

数组

Page 82: C++ 语言程序设计

C++ 语言程序设计

例六(例六( P96P96 例例 4545 )、输入一个)、输入一个 5*55*5 的整数矩阵,然后将之转置的整数矩阵,然后将之转置并显示这个转置后的矩阵。并显示这个转置后的矩阵。

转置即为行列对换,原第一行变为第一列,而第一列变为第转置即为行列对换,原第一行变为第一列,而第一列变为第一行。一行。

如: 如: 1 2 3 1 4 71 2 3 1 4 7 4 5 6 2 5 84 5 6 2 5 8 7 8 9 3 6 97 8 9 3 6 9

#include <iomanip.h>#include <iomanip.h> #define SIZE 5#define SIZE 5 void main()void main() { int data[SIZE][SIZE], i, j;{ int data[SIZE][SIZE], i, j; for(i=0; i<SIZE; i++)for(i=0; i<SIZE; i++) for(j=0;j< SIZE;j++)for(j=0;j< SIZE;j++) cin>>data[i][j];cin>>data[i][j];

转置后 分析:主对角线上的元素不动,其它元素,以主对角线为轴,对称元素对调。

第四章

数组

Page 83: C++ 语言程序设计

C++ 语言程序设计

for(i=0; i< SIZE-1; i++)for(i=0; i< SIZE-1; i++) for(j=i+1;j< SIZE;j++)for(j=i+1;j< SIZE;j++) { int d=data[i][j];{ int d=data[i][j]; data[i][j]=data[j][i];data[i][j]=data[j][i]; data[j][i]=d;data[j][i]=d; }} for(i=0; i< SIZE; i++)for(i=0; i< SIZE; i++) { cout<<endl;{ cout<<endl; for(j=0;j< SIZE;j++)for(j=0;j< SIZE;j++) cout<<setw(8)<<data[i][j];cout<<setw(8)<<data[i][j]; }} }}

说明:

1 、以主对角线为轴,将其对称两元素对调,即 data[i][j] 与 data[j][i] 的元素值对换, d 为中间变量。

2 、由于用到了 setw(8) 个函数,因此应有头文件 <iomanip.h> ,它是设置输出宽度。

第四章

数组

Page 84: C++ 语言程序设计

C++ 语言程序设计 例七(例七( P97P97 例例 4.64.6 )、 定义一个)、 定义一个 2525 行行 2525 列的数组,并将其左列的数组,并将其左

上三角部分(包括对角线)的元素置为上三角部分(包括对角线)的元素置为 11 ,其余元素置为,其余元素置为 00 ,然,然后显示输出这个数组。后显示输出这个数组。

#include <iomanip.h>#include <iomanip.h> #define SIZE 25#define SIZE 25 void main()void main() { int data[SIZE][SIZE]={0};{ int data[SIZE][SIZE]={0}; int i,j;int i,j; for(i=0; i< SIZE; i++)for(i=0; i< SIZE; i++) for(j=0;j< SIZE-i;j++) data[i][j]=1;for(j=0;j< SIZE-i;j++) data[i][j]=1; for(i=0; i< SIZE; i++)for(i=0; i< SIZE; i++) { cout<<endl;{ cout<<endl; for(j=0;j< SIZE;j++)for(j=0;j< SIZE;j++) cout<<setw(2)<<data[i][j];cout<<setw(2)<<data[i][j]; }} } }

1 1 1 1

1 1 1 0

1 1 0 0

1 0 0 0

第四章

数组

Page 85: C++ 语言程序设计

C++ 语言程序设计

三、自检自测 11 、已知数组、已知数组 e e 定义为定义为 int e[][4]={{1,2,3,4},{5,6,7,8}};int e[][4]={{1,2,3,4},{5,6,7,8}}; ,则,则 ee 是一是一

个( )行( )列的二维数组,总共有( )个元素,最大行下标个( )行( )列的二维数组,总共有( )个元素,最大行下标是( ),最小列下标是( ),其首行的各元素的值分别是( 是( ),最小列下标是( ),其首行的各元素的值分别是( )。 )。

22 、已知数组、已知数组 f f 定义为定义为 double f[][3]={{1,2},{5},{6,7,8}};double f[][3]={{1,2},{5},{6,7,8}}; ,则,则 f f 是是一个( )行( )列的二维数组,总共有( )个元素,其按一个( )行( )列的二维数组,总共有( )个元素,其按行列出的各元素的值是( )。行列出的各元素的值是( )。

33 、下面的语句显示输出、下面的语句显示输出 66 行行 66 列数组列数组 h h 的主对角线上的所有元的主对角线上的所有元素,请补充完整:素,请补充完整:

for(int i= ; i< ; )cout<< <<‘ ’;for(int i= ; i< ; )cout<< <<‘ ’; 44 、下面的语句按行输出、下面的语句按行输出 55 行行 33 列数组列数组 m m 的所有元素,请补充完的所有元素,请补充完整:整:

for(int i= ; i< ;){cout<<endl;for(int i= ; i< ;){cout<<endl; for( ; ;j++) cout<< <<‘ ’;}for( ; ;j++) cout<< <<‘ ’;}

第四章

数组

Page 86: C++ 语言程序设计

C++ 语言程序设计

4·3 4·3 字符数组与字符串字符数组与字符串 一、一维字符数组与字符串 由字符构成的有序集合称为字符型数组,在内存中都是以字由字符构成的有序集合称为字符型数组,在内存中都是以字

符的符的 ASCIIASCII码存储的,所以字符型数组和普通数组没有什么本质码存储的,所以字符型数组和普通数组没有什么本质的差别,都是数据的有序集合。的差别,都是数据的有序集合。

11 、命名规则和普通数组相同,方括号中的数字表示该字符数组、命名规则和普通数组相同,方括号中的数字表示该字符数组有有 33 个元素(即字符)。个元素(即字符)。

22 、在使用之前对字符型数组需进行说明,说明和初始化 同时进、在使用之前对字符型数组需进行说明,说明和初始化 同时进行。行。

char str[4]={65,66,67,0};char str[4]={65,66,67,0}; chat str[4]={‘A’,‘B’,’c’,‘\0’};chat str[4]={‘A’,‘B’,’c’,‘\0’}; char str[4]=“ABC”;char str[4]=“ABC”; char str[]=“ABC”;char str[]=“ABC”; 33 、字符型数组的元素就是字符串常量中字符常量,字符常量在、字符型数组的元素就是字符串常量中字符常量,字符常量在

内存中的地址按字符串中字符的顺序依次排列,第一个字符常量内存中的地址按字符串中字符的顺序依次排列,第一个字符常量的地址就是字符数组的首地址。的地址就是字符数组的首地址。

第四章

数组

Page 87: C++ 语言程序设计

C++ 语言程序设计 对已作为字符串变量的一维数组,一般就不再使用下标,而是直接通过数对已作为字符串变量的一维数组,一般就不再使用下标,而是直接通过数

组名访问其中的字符串,如:组名访问其中的字符串,如: cout<<str<<endl;cout<<str<<endl; 二、二维数组与字符串 二维字符数组作为一维字符串数组使用,如:二维字符数组作为一维字符串数组使用,如: char WD[][4]={“Sun”,“Mon”,“Tue”,“Wed”,“Thu”,“Sat”};char WD[][4]={“Sun”,“Mon”,“Tue”,“Wed”,“Thu”,“Sat”}; 二维字符数组可当作一维字符数组使用,像通常的一维数组那样通过下标二维字符数组可当作一维字符数组使用,像通常的一维数组那样通过下标

访问数组中指定的字符串,如:访问数组中指定的字符串,如: cout<<WD[4]; cout<<WD[4]; 输出结果:输出结果: ThuThu 三、字符串的主要操作 通常是通过调用系统提供的字符串处理函数来实现。通常是通过调用系统提供的字符串处理函数来实现。 11 、字符串输出、字符串输出 调用格式: 调用格式: cout<<cout<< 字符串字符串 功 能: 显示输出字符串。功 能: 显示输出字符串。 22 、字符串输入、字符串输入 调用格式调用格式 11 : : cin>>cin>> 字符串变量字符串变量 功 能:输入一个无空白字符的字符串。以空白字符为结束标志。功 能:输入一个无空白字符的字符串。以空白字符为结束标志。 char s1[50],s2[50];char s1[50],s2[50]; cin>>s1>>s2;cin>>s1>>s2;

第四章

数组

Page 88: C++ 语言程序设计

C++ 语言程序设计 调用格式调用格式 22 : : cin.getline(cin.getline( 字符串变量,变量大小字符串变量,变量大小 )) 功能:从键盘输入一个以功能:从键盘输入一个以 EnterEnter 键(即回车键)标志结束的字符串。键(即回车键)标志结束的字符串。 变量大小即为字符数组的元素个数,以此限制输入字符串的最大长度。变量大小即为字符数组的元素个数,以此限制输入字符串的最大长度。 如:如: char s[83];char s[83]; cin.getline(s,83);cin.getline(s,83); 例八(例八( P104P104 例行例行 88 )、输入一字符串,将其中所有的小写字母换为大)、输入一字符串,将其中所有的小写字母换为大

写字母,大写字母换为小写字母,然后显示转换后的字符串。写字母,大写字母换为小写字母,然后显示转换后的字符串。 #include <iostream.h>#include <iostream.h>

#include <ctype.h>#include <ctype.h> void main()void main() { char s[81];{ char s[81]; cin.getline(s,81);cin.getline(s,81); for(int i=0;s[i]; i++)for(int i=0;s[i]; i++) s[i]=(islower(s[i])?toupper(s[i]):tolower(s[i]));s[i]=(islower(s[i])?toupper(s[i]):tolower(s[i])); cout<<s<<endl;cout<<s<<endl; }}

第四章

数组 说明:

1 、 toupper(s[i]) 函数为将小写字符转换为大写字符;

2 、 tolower(s[i]) 函数为将大写字符转换为小写字符;

3 、 islower(s[i]) 函数为判断一个字符是否为小写。

Page 89: C++ 语言程序设计

C++ 语言程序设计 例九(例九( P104P104 例例 4949 )、按行输入字符串,从中摘出词并建立词表。当词)、按行输入字符串,从中摘出词并建立词表。当词

表中的词满表中的词满 2020 个或发现名为个或发现名为 OUITOUIT 的词时,显示输出词表,程序结束。的词时,显示输出词表,程序结束。 要求:词表中不得有重复的词,每个词的长度不超过要求:词表中不得有重复的词,每个词的长度不超过 1010 。。 #include <iostream.h>#include <iostream.h> #include <string.h>#include <string.h> void main()void main() { char s[11],dict[20][11];{ char s[11],dict[20][11]; int i=0,j;int i=0,j; while(i<20)while(i<20) { cin>>s;{ cin>>s; for(j=0;j<i;j++)for(j=0;j<i;j++) if(!strcmp(s,dict[j])) break;if(!strcmp(s,dict[j])) break; if(j==i) strcpy(dict[i],s);if(j==i) strcpy(dict[i],s); i++;i++; }} }} for(j=0;j<i;j++) cout<<dict[j]<<endl;for(j=0;j<i;j++) cout<<dict[j]<<endl; }}

第四章

数组

说明:

1 、 strcmp(s,dict[j])函数为两个字符串比较,若相等,结束循环;

2 、 strcpy(dict[i],s)函数为两字符串复制;

3 、 <string.h> 为字符库函数的头文件。

Page 90: C++ 语言程序设计

C++ 语言程序设计 四、自检自测四、自检自测 11 、执行语句序列、执行语句序列 char str1[]=“ABCD”,str2[10]=“XYZ”;char str1[]=“ABCD”,str2[10]=“XYZ”; for(int I=0;str2[I+1]=str1[I];I++);for(int I=0;str2[I+1]=str1[I];I++); 后,数组中的字符串是( )。后,数组中的字符串是( )。 22 、执行语句序列、执行语句序列 char s1[10]=“abcdef”,s2[20]=“inter”;char s1[10]=“abcdef”,s2[20]=“inter”; cin>>s1;cin>>s1; int k=0,j=0;int k=0,j=0; while(s2[k]) k++;while(s2[k]) k++; while(s2[k++]=s1[j++]);while(s2[k++]=s1[j++]); 时,若键盘输入的是时,若键盘输入的是 netnet ,则,则 s1s1 中的字符串是( ),中的字符串是( ), s2s2 中的中的

字符串是( )。字符串是( )。 33 、已知、已知 s1,s2,s3s1,s2,s3 是三个有足够元素个数的字符串变量,利用标是三个有足够元素个数的字符串变量,利用标

准函数并借助于准函数并借助于 s3s3 ,可以交换,可以交换 s1s1 和和 s2s2 中的字符串;实现这一中的字符串;实现这一交换过程的语句序列是( )。交换过程的语句序列是( )。

第四章

数组

Page 91: C++ 语言程序设计

C++ 语言程序设计

44 、(单选)要使字符串变量、(单选)要使字符串变量 strstr 具有初值“具有初值“ ABCDEFGH”ABCDEFGH” ,正,正确的定义语句是( )。确的定义语句是( )。

A. char str[8]={‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’};A. char str[8]={‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’}; B. char str[8]=“ABCDEFGH”;B. char str[8]=“ABCDEFGH”; C. char str[]={‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’};C. char str[]={‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’}; D. char str[]=“ABCDEFGH”;D. char str[]=“ABCDEFGH”; 55 、(多选)要使字符串数组、(多选)要使字符串数组 STRSTR 含有“含有“ ABCD”ABCD” ,“,“ EFG”EFG” 和和

““ xy”xy” 三个字符串,正确的定义语句有( )。三个字符串,正确的定义语句有( )。 A. char STR[][4]={“ABCD”, “EFG”,“xy”};A. char STR[][4]={“ABCD”, “EFG”,“xy”}; B. char STR[][5]={“ABCD”, “EFG”, “xy”};B. char STR[][5]={“ABCD”, “EFG”, “xy”}; C. char STR[][6]={“ABCD”, “EFG”, “xy”};C. char STR[][6]={“ABCD”, “EFG”, “xy”}; D char STR[][7]={{‘A’, ‘B’, ‘C’, ‘D’, ‘\0’}, “EFG”, “xy”};D char STR[][7]={{‘A’, ‘B’, ‘C’, ‘D’, ‘\0’}, “EFG”, “xy”};

第四章

数组

Page 92: C++ 语言程序设计

C++ 语言程序设计

Page 93: C++ 语言程序设计

C++ 语言程序设计

Page 94: C++ 语言程序设计

C++ 语言程序设计

Page 95: C++ 语言程序设计

C++ 语言程序设计

Page 96: C++ 语言程序设计

C++ 语言程序设计

Page 97: C++ 语言程序设计

C++ 语言程序设计

Page 98: C++ 语言程序设计

C++ 语言程序设计

Page 99: C++ 语言程序设计

C++ 语言程序设计

Page 100: C++ 语言程序设计

C++ 语言程序设计

Page 101: C++ 语言程序设计

C++ 语言程序设计