第 1章 C++简单程序设计第 1章 C++简单程序设计
1.1 C++语言概述
1.2 基本数据类型和表达式
1.3 数据的输入与输出
1.4 程序的基本控制结构第 1章 C++简单程序设计
1.1 C++语言概述
1.1.1 从 C到 C++
C++语言是从 C语言发展演变而来的,因此在介绍
C++语言之前,我们首先介绍一下 C语言。 C语言最初是美国贝尔实验室的戴尼斯 ·M·利奇( Dennis,M,
Ritchie)在 B语言基础上开发出来的,并于 1972年在一台 PDP- 11计算机上实现了最初的 C语言。目前,比较流行的 C语言版本基本上都是以 ANSI C为基础的。
第 1章 C++简单程序设计
C语言具有以下优点:
① 语言简洁灵活 。
② 运算符和数据结构丰富,具有结构化控制语句,
程序执行效率高 。
③ 与高级语言相比,具有可以直接访问物理地址,
能进行位运算的优点 。
④ 与汇编语言相比,又具有良好的可读性和可移植性 。
第 1章 C++简单程序设计尽管如此,C语言毕竟是一个面向过程的编程语言,因此与其它面向过程的编程语言一样,已经不能满足运用面向对象方法开发软件的需要 。 C++语言便是在 C语言基础上为支持面向对象的程序设计而研制的一个通用的程序设计语言,它是在 1980年由贝尔实验室的 Bjarne Stroustrup博士创建的 。 C++包含了整个 C,
C是建立 C++的基础 。 C++包括 C的全部特征,属性和优点,同时,C++添加了对面向对象编程的完全支持 。
第 1章 C++简单程序设计
1.1.2 一个简单的 C++程序现在,我们来看一个简单的程序实例 。 例 1-1是一个面向过程的程序,我们只是通过这个程序看一看,
计算机程序是个什么样子,人们如何通过程序来控制计算机的操作 。
【 例 1-1】 一个简单的 C++程序例题 。
#include<iostream.h>
void main(void)
{
cout<<"hello!\n";
cout<<"I am a student.\n";
}
第 1章 C++简单程序设计这里 main是主函数名,函数体用一对大括号括住 。
C++程序由函数构成 。 在 C++程序中,必须有且只能有一个名为 main( )的函数,因为程序总是从 main( )开始执行的 。 main( )函数之前的 void表示 main( )函数没有返回值 ( 关于函数的返回值将在第 2章介绍 ) 。 程序由语句组成,每条语句由分号,;,作为结束符 。 cout是一个输出流对象,它是 C++系统预定义的对象,其中包含了许多有用的输出功能 。 输出操作由操作符,<<”来表达,其功能是将紧随其后的双引号中的字符串输出到标准输出设备 ( 显示器 ) 上 。 在第 9章中将对输出流做详细介绍,在这里,读者只要知道这段程序可以实现在显示器上输出第 1章 C++简单程序设计
hello!
I am a student.
就可以了 。
程序中的
# include < iostream.h>
的作用是在编译之前,将文件 iostream.h中的代码嵌入到程序中该指令所在的地方 。 作为程序的一部分,
iostream.h文件中声明了程序所需要的输入和输出操作的有关信息 。 cout和,<<”操作的有关信息就是在该文件中声明的 。 由于这类文件常被嵌入在程序的开始处,
所以称之为头文件 。 在 C++程序中如果使用了系统中提供的一些功能,就必须嵌入相关的头文件 。
第 1章 C++简单程序设计当我们编写完程序文本后,要将它存储为后缀为,cpp的文件,此文件称为 C++源文件,再经过编译系统的编译,连接后,最后产生出后缀为,exe的可执行文件 。 通过以上程序可以看出,C++的程序结构由编译预处理,程序主体和注释组成,其特点如下:
① 每个以符号,#,开头的行,称为编译预处理语句 。 编译预处理是 C++组织程序的工具 。 有关#
include语句的作用及其使用方法,将在第 5章进行详细介绍 。
第 1章 C++简单程序设计
② 一个 C++程序可以由一个或多个函数组成 。 任何一个完整的 C++程序,都必须包含一个且只能包含一个名为 main( )的函数,程序总是从 main( )函数开始执行,而不管 main( )函数处于程序的什么位置 。
③ 函数体应由,{}”括起来 。 函数体一般包括变量的定义部分和执行部分 。 所有的变量要先定义后使用 。
④ 注释是程序员为读者写的说明,是提高程序可读性的一种手段。一般可将注释分为两种:序言注释和注解注释。前者用于程序开头,说明程序或文件的名称、用途、编写时间、编写人以及输入、输出等,
后者用于程序难懂的地方。
第 1章 C++简单程序设计
C++的注释为,//”之后的内容,直到换行 。 注释仅供阅读程序使用,是程序的可选部分 。 在生成可执行程序之前,C++忽略注释,并把每个注释都视为一个空格 。 另外,C++还兼容了 C语言的注释 。
⑤ 每个语句和数据定义的后面都要有一个分号 。
这一点初学者尤其要注意 。
⑥ main函数名和关键字 ( 如 void,int,float等 )
都是小写字母构成 。 C++程序中的标识符是大小写
,敏感,的,所以,在书写标识符的时候要注意其大小写 。
第 1章 C++简单程序设计
1.1.3 字符集
C++语言的字符集由下述字符构成,
① 英文字母,A~ Z,a~ z
② 数字字符,0~ 9
③ 特殊字符:空格 ! # % ^ &
* _( 下划线 ) + =,-
~ < > / \? 〝 ;,
( ) { } [ ]
第 1章 C++简单程序设计
1.1.4 词法记号词法 (语句 )记号是构成语句的最小单元,这里我们介绍 C++的标识符,关键字,文字,运算符,分隔符和空白符 。
1,标识符标识符是程序员声明的字符序列,它命名程序正文中的一些实体,如函数名,变量名,类名,对象名等 。 C++标识符的构成规则如下:
第 1章 C++简单程序设计
① 以大写字母,小写字母或下划线 (_)开始 。
② 可以由大写字母,小写字母,下划线 (_)或数字
0~ 9组成 。
③ 大写字母和小写字母代表不同的标识符 。
④ 不能是 C++关键字 。
例如,Richad,red_line,_Nol都是合法的标识符,
而 No.1,1st则是不合法的标识符 。
在标识符的命名中要特别注意,C++是大小写敏感的,即大写和小写字母被认为是不同的字母 。 例如,
标识符 something,Something,SOMETHING,
SomeThing都被视为不同的名字 。
第 1章 C++简单程序设计
2,关键字关键字是 C++预定义好的标识符,这些标识符对 C++
编译系统有着特殊的含义 。 如例 1-1中的 void,后面将逐步介绍到的数据定义语句 int,float,long及 double等等,
它们都是 C++的关键字 。
3,文字文字是在程序中直接使用符号表示的数据,包括数字,字符,字符串和布尔文字 。 在本章 1.2节中将详细介绍各种文字 。
4,操作符 (运算符 )
操作符是用于实现各种运算的符号,例如+,-,
*,/等 。 在本章 1.2节及后续章节中将详细介绍各种操作符 。
第 1章 C++简单程序设计
5,分隔符分隔符用于分隔各个词法记号或程序正文 。 C++的分隔符如下:
( ) {},,;
这些分隔符不表示任何实际的操作,仅用于构造程序 。 例如,,{ }”用于分隔函数体,,;,作为语句的分隔符,其它分隔符的具体用法会在以后相应的章节中介绍 。
6,空白符在程序编译时的词法分析阶段将程序正文分解为词法记号和空白。空白是空格、制表符 (TAB键产生的字符 )、换行符 (Enter键所产生的字符 )和注释的总称。
第 1章 C++简单程序设计空白符用于指示词法记号的开始和结束位置,但除了这一功能之外,其余的空白将被忽略 。 因此,C++程序可以不必严格地按行书写,凡是可以出现空格的地方,
都可以出现换行 。 例如:
int j;

int j;
或与
int
j;
第 1章 C++简单程序设计是等价的 。 但是尽管如此,我们在书写程序时,
仍要力求清晰,易读 。 因为一个程序不仅要让机器执行,还要让人阅读的同时便于修改,维护 。
第 1章 C++简单程序设计
1.2 基本数据类型和表达式程序处理的对象是数据 。 数据有许多种类,例如数值数据,文字数据,图像数据以及声音数据等,但其中最基本也是最常用的是数值数据和文字数据 。
无论什么数据,在对其进行处理时都要先存放在内存中。显然,不同类型的数据在内存中的存放格式也不相同,甚至同一类数据,为了处理方便,也可以使用不同的存储格式。例如,数值数据其存储格式又可以分为整型、长整型、浮点型和双精度型等几种类型;文字数据也可以分为单个字符和字符串。
第 1章 C++简单程序设计我们编写计算机程序的目的,就是为了解决客观世界中的现实问题 。 所以,高级语言中提供了丰富的数据类型和运算符 。 C++中的数据类型分为基本类型和非基本类型,见图 1-1。 基本类型是 C++编译系统内置的,非基本类型也称为用户定义数据类型,即用户自己定义的数据类型,本节我们首先介绍基本数据类型 。
第 1章 C++简单程序设计图 1-1 C++ 的数据类型第 1章 C++简单程序设计
1.2.1 基本数据类型一个程序要运行,就要先描述算法 。 描述一个算法应先说明算法要用的数据,数据以变量或常量的形式来描述 。 每个变量或常量都有数据类型 。
变量是存储信息的单元,它对应于某个内存空间 。
为了便于描述,计算机高级语言中都用变量名来表示其内存空间,所以,程序能在变量中存储值和取出值 。
第 1章 C++简单程序设计在定义变量时,说明变量名和数据类型 (如 int、
float)就是告诉编译器要为变量分配多少空间,以及变量中要存储什么类型的值 。 数据类型的定义确定了其内存所占空间大小,也确定了其表示范围 。 表 1-1列出了基本数据类型的取值范围 。
在不同的系统中,每个变量类型所占的字节数目可能有所不同,表 1-1里列出的是在 VC++6.0编译环境中的情况 ( 也是目前大多数编译环境中的情况 ) 。
第 1章 C++简单程序设计表 1-1 常用基本数据类型描述类 型 说 明 长度 表 示 范 围 备 注
bool 逻辑型 1 false,true
char 字符型 1 -128~ 127 -27~ (27-1)
unsigned char 无符号字符型 1 0~ 255 0~ (28-1)
short 短整形 2 -32768~ 32767 -215~ (215-1)
unsigned short 无符号短整型 2 0~ 65535 0~ (216-1)
int 整型 4 -2147483648 ~
2147483647
-231~ (231-1)
unsigned int 无符号整型 4 0~ 4294967295 0~ (232-1)
long 长整型 4 -2147483648 ~
2147483647
-231~ (231-1)
unsigned long 无符号长整型 4 0~ 4294967295 0~ (232-1)
float 浮点型 4 -3.4× 1038~ 3.4× 1038 7位有效位
double 双精度 8 -1.7× 10308~ 1.7× 10308 15位有效位
long double 长双精度 8 -1.7× 10308~ 1.7× 10308 15位有效位第 1章 C++简单程序设计
1.2.2 常量所谓常量,是指在程序运行的整个过程中其值始终不可改变的量 。 例如,68,3.5,'A',"hello!" 都是常量 。 常量有以下几种 。
1,整型常量整型常量即以数码形式出现的整数,包括正整数,
负整数和零 。 整型常量的表示形式有十进制,八进制和十六进制 。 十进制整型常量的一般形式与数学中我们所熟悉的表示形式是一样的,[± ] 若干个 0~ 9的数字即符号加若干个 0~ 9的数字,但数字部分不能以 0开头,正数前边的正号可以省略 。
第 1章 C++简单程序设计八进制整型常量的数字部分要以数字 0开头,一般形式为
[± ] 0若干个 0~ 7的数字十六进制整型常量的数字部分要以 ox开头,一般形式为
[± ] ox若干个 0~ 9的数字及 A~ F的字母 (大小写均可 )
整型常量可以用后缀字母 L( 或 l) 表示长整型,用后缀字母 U( 或 u) 表示无符号型,也可同时使用后缀
L和 U( 大小写无关 ) 。
例如,123,0123,- ox5af都是合法的常量形式第 1章 C++简单程序设计
2,实型常量实型常量又称浮点小数 。 在 C++语言中,实型常量只使用十进制表示,有两种表示形式:一般形式和指数形式 。 一般形式:例如,16.5,-13.5等 。
指数形式:例如,0.565E+ 2表示 0.565× 102,-
34.4E-3表示 -34.4× 10-3,其中,字母 E可以大写或小写 。
当以指数形式表示一个实数时,整数部分和小数部分可以省略其一,但不能都省略 。 例如,,234E-1和 12.E2都是正确的,但不能写成 E-3这种形式 。
实型常量默认为 double型,如果后缀为 F(或 f)则为 float型。
第 1章 C++简单程序设计
3,字符常量字符常量是单引号括起来的一个字符,如 'a','G'、
'? ','$' 等 。
另外,还有一些字符是不可显示字符,也无法通过键盘输入,例如响铃,换行,制表符,回车等等 。
这样的字符常量该如何写到程序中呢? C++提供了一种称为转义序列的表示方法来表示这些字符,表 1-2列出了 C++预定义的转义序列 。
第 1章 C++简单程序设计表 1-2 C++预定义的转义序列字符形式 ASCII码 (十六进制 ) 功 能
\n 0A 换行
\t 09 横向跳格 ( 即跳到下一个输出区 )
\v 0B 竖向跳格
\b 08 退格
\r 0D 回车
\a 07 响铃
\\ 5C 反斜杠字符,\”
\' 27 单引号
\" 22 双引号
\ddd ddd(八进制 ) 1到 3位八进制数所代表的字符
\xhh Hh 1到 2位十六进制数所代表的字符第 1章 C++简单程序设计
4,字符串常量字符串常量简称字符串,是用一对双引号括起来的字符序列 。 例如,''China'',''1234'' 都是字符串常量 。
字符串与字符是不同的,字符串在内存中的存放形式是:按串中字符的排列次序顺序存放对应字符的 ASCII
码,每个字符占一个字节,并在字符串末尾添加 '\0'作为结束标记 。 图 1-2是字符数据及其存储形式 ( 十六进制 ) 的举例 。 从图 1-2中可以看出,字符串 ''a'' 与字符
'a' 是不同的 。
5,布尔型常量布尔型常量只有两个,false(假 )和 true(真 )。
第 1章 C++简单程序设计图 1-2 字符数据的存储形式第 1章 C++简单程序设计
1.2.3 变量在程序的执行过程中其值可以变化的量称为变量,
变量需要用标识符来命名 。 就像常量具有各种类型一样,变量也具有相应的类型 。 变量在使用之前需要首先声明其类型和名称 。 在同一语句中可以声明同一类型的多个变量 。 变量声明的形式如下:
<类型标识符 > 变量名 1,变量名 2,…,变量名 n;
第 1章 C++简单程序设计在程序运行时系统会给每一个声明过的变量分配内存空间,用于存放对应类型的数据,因而变量名也就是对相应内存单元的命名 。 在声明一个变量的同时,
也可以给它赋以初值,而这实质上就是给对应的内存单元赋值 。 例如:
int a=3;
float f=3.45;
char c='b';
有一点值得注意,虽然 C++ 中有字符串常量,却没有字符串变量 。 那么,用什么类型的变量来存放字符串呢? 在后面的章节,我们会介绍用字符数组来存储字符串常量 。
第 1章 C++简单程序设计
1.2.4 引用程序设计语言的进化使用户从被迫解决细节问题中解脱出来,而转向允许用户花更多的时间来考虑
,大的蓝图,。 根据这种精神,C++包含了一个称为引用的特性 。 本小节仅仅介绍了引用的基本概念,有关更详细的内容在后面章节会陆续介绍,到时读者就会掌握引用的使用方法 。
第 1章 C++简单程序设计引用是个别名,当建立引用时,程序用另一个变量或对象 ( 目标 ) 的名字来对其进行初始化 。 自此,
引用作为目标的别名而使用,对引用的改动实际是对目标的改动 。
引用的声明形式为
<类型标识符 > &引用名 =目标名或
<类型标识符 > & 引用名 =目标名第 1章 C++简单程序设计其中:
① 引用名是为引用型变量所起的名字,它必须遵循变量的命名规则 。
② 前面的数据类型就是它所引用目标的数据类型 。
在此要特别说明的是,引用在声明时必须进行初始化,即指出该引用是哪一个对象的别名 。 这里的目标名可以是变量名,也可以是以后将要介绍的对象名 。
而且引用一旦声明,就以对应目标的内存单元地址作为自己的地址,并且不再改变,从一而终 。
第 1章 C++简单程序设计例如,引用一个整型变量:
int someInt;
int& rInt=someInt;
声明 rInt是对整数的引用,初始化为引用 someInt。
在这里,要求 someInt已经声明或定义 。
引用不是值,不占存储空间。声明引用时,目标的存储状态不会改变。
第 1章 C++简单程序设计
【 例 1-2】 建立和使用引用例题 。
#include<iostream.h>
void main( )
{
int someInt;
int& rInt=someInt;
someInt=6;
cout<<"someInt:"<<someInt<<endl;
cout<<"rInt:"<<rInt<<endl;
第 1章 C++简单程序设计
rInt=7;
cout<<"someInt:"<<someInt<<endl;
cout<<"rInt:"<<rInt<<endl;
}
程序运行结果为
someInt,6
rInt,6
someInt,7
rInt,7
第 1章 C++简单程序设计在上述程序中,引用 rInt用 someInt来初始化 。 以后,
无论改变 someInt或 rInt,实际上都是指 someInt,两个的值都一样 。 对引用的理解可以见图 1-3。
图 1-3 引用与变量的关系
6
omeInt
rInt
第 1章 C++简单程序设计
1.2.5 运算符与表达式在任何高级程序设计语言中,表达式都是最基本的组成部分,也就是说,程序中的大部分语句是由表达式构成的 。 通常,当我们要进行某种计算时,都要首先列出算式,然后求解其值 。 利用 C++语言编写程序求解问题时也是这样 。
可以简单地将表达式理解为用于计算的公式,它由运算符 (例如 +,-,*,/ ),运算对象 (也称操作数,
可以是常量,变量等等 )和括号组成 。 执行表达式所规定的运算,所得到的结果值便是表达式的值 。 例如,a
+ b,x/y都是表达式 。
第 1章 C++简单程序设计表达式在使用时要注意以下几点:
① 一个常量或标识对象的标识符是一个最简单的表达式,其值是常量或对象的值 。
② 一个表达式的值可以用来参与其它操作,即用作其它运算符的操作数,这就形成了更复杂的表达式 。
③ 包含在括号中的表达式仍是一个表达式,其类型和值与未加括号时的表达式相同 。
C++语言中定义了丰富的运算符,如算术运算符,
关系运算符,逻辑运算符等等,有些运算符需要两个操作数,使用形式为
<操作数 1> 运算符 <操作数 2>
第 1章 C++简单程序设计运算符具有优先级与结合性 。 当一个表达式包含多个运算符时,先进行优先级高的运算,再进行优先级低的运算 。 如果表达式中出现了多个相同优先级的运算,运算顺序就要看运算符的结合性了 。 所谓结合性,是指当一个操作数左右两边的运算符优先级相同时,按什么样的顺序进行运算,是自左向右,还是自右向左 。 例如,我们熟悉的算术表达式 6+5-2中,,+”、
,-”是同级运算符,那么是先算 5-2,还是先算 6+5?
这就取决于算术运算符的结合性 。 由于算术运算符的结合性为自左向右,所以应先算 6+5,然后再算 11-2。
第 1章 C++简单程序设计
1,算术运算符与算术表达式
C++中的算术运算符包括基本的算术运算符和自增,
自减运算符 。 由算术运算符,操作数和括号构成的表达式称为算术表达式 。
基本算术运算符有,+( 加 ),-( 减或负号 ),*
( 乘 ),/( 除 ),%( 取余 ) 。 其中,-”作为负号时为一元运算符,其余都为二元运算符 。 这些基本算术运算符的意义与数学中相应符号的意义是一致的 。 它们之间的相对优先级关系与数学中的也是一致的,即先乘除,后加减,同级运算自左向右进行 。 使用算术运算符要注意以下几点:
第 1章 C++简单程序设计
①,%”是取余运算,只能用于整型操作数 。 表达式 a%b的结果为 a/b的余数 。,%”的优先级与,/”相同 。
② 当,/”用于两整型操作数相除时,其结果取商的整数部分,小数部分被自动舍弃 。 因此,表达式 1/2
的结果为 0,这一点需要特别注意 。
③ C++中的,++”( 自增 ),,--”( 自减 ) 运算符是使用方便且效率很高的两个运算符,它们都是一元运算符 。 这两个运算符都有前置和后置两种使用形式 (例如 ++i与 i--)。
第 1章 C++简单程序设计无论写成前置或后置的形式,它们的作用都是将操作数的值增 1( 减 1) 后,重新写回该操作数在内存中的原有位置 。 所以,如果变量 i原来的值是 1,计算表达式 i++后,表达式的结果为 2,并且 i的值也被改变为 2。
但是,当自增,自减运算的结果要被用于继续参与其它操作时,前置与后置时的情况就完全不同了 。 例如,
如果 i的值为 1,则下列两条语句的执行结果是不一样的:
cout<<i++;
cout<<++i;
第 1章 C++简单程序设计
2,赋值运算符与赋值表达式
C++提供了几个赋值运算符,最简单的赋值运算符就是,=”。 带有赋值运算符的表达式被称为赋值表达式 。 例如,m=m+6就是一个赋值表达式 。 赋值表达式的作用就是将等号右边表达式的值赋给等号左边的对象 。 赋值表达式的类型为等号左边对象的类型,表达式的结果为等号左边对象被赋值后的值,运算的结合性为自右向左 。 请看下列赋值表达式的例子 。
n=1
表达式值为 1。
a=b=c=2
第 1章 C++简单程序设计这个表达式从右向左运算,在 c被更新为 2后,表达式 c=2的值为 2,接着 b的值被更新为 2,最后 a被赋值为 2。
a=3+( c=4)
表达式值为 7,a的值为 7,c为 4。
a=( b=5) +( c=6)
表达式值为 11,a为 11,b为 5,c为 6。
第 1章 C++简单程序设计除了,=”以外,C++还提供了 10种复合的赋值运算符,+=,- =,*=,/=,%=,<<=,>>=,&=,^=,|=。
其中,前五个运算符是赋值运算符与算术运算符复合而成的,后五个是赋值运算符与位运算符复合而成的 。
关于位运算,稍后再做介绍 。 这里 10种运算符的优先级与,=”相同,结合性也是自右向左 。 现在举例说明复合赋值运算符的功能 。
b+=2 //等价于 b=b+2
x*=y+3 //等价于 x=x*( y+3)
x+=x-=x*x //等价于 x=x+( x=x-x*x)
第 1章 C++简单程序设计如果在赋值表达式后面加上分号,便成为了赋值语句 。 例如:
b=b+2;
便是一个赋值语句,它实现的功能与赋值表达式相同 。 赋值表达式与赋值语句的不同点在于:赋值表达式可以作为一个更复杂表达式的一部分,继续参与运算;而赋值语句不能 。
第 1章 C++简单程序设计
3,逗号运算符与逗号表达式在 C++中,逗号也是一个运算符,它的使用形式为
<表达式 1>,<表达式 2>,…,<表达式 n>
求解顺序为,先求解表达式 1,再求解表达式 2,最后求解表达式 n的值 。 逗号表达式的最终结果为表达式
n的值 。 例如:
x=2*5,x*4
表达式的结果为 40。
第 1章 C++简单程序设计
4,关系运算符和关系表达式关系运算符即比较符 。 关系运算符及其优先次序为
< (小于 ),< =( 小于等于 ),>( 大于 ),> =( 大于等于 ),= =( 等于 ),! =( 不等于 )
优先级相同 (较高 ) 优先级相同 (较低 )
第 1章 C++简单程序设计用关系运算符将两个表达式连接起来就是关系表达式 。 关系表达式是一种最简单的逻辑表达式 。 例如,
x>5
x+y<=20
c==a+b
都是关系表达式 。 注意,,= =”( 等于 ) 是连续的两个等号,不要误写为赋值运算符,=”。
第 1章 C++简单程序设计
5,逻辑运算与逻辑表达式只有简单的关系比较是远不能满足编程需要的,
我们还需要用逻辑运算符将简单的关系表达式连接起来构成较复杂的逻辑表达式 。 逻辑表达式的结果类型也为 bool,值只能为 true或 false。 C++中的逻辑运算符及其优先次序为第 1章 C++简单程序设计
“!,是一元运算符,使用形式是,! 操作数 。 非运算的作用是对操作数取反 。 如果操作数 a的值为 true,
则表达式 !a的值为 false;如果操作数 a的值为 false,则表达式 !a的值为 true。
,&&”是二元运算符。,&&”运算的作用是求两个操作数的逻辑与。只有当两个操作数的值都为 true时,
与运算的结果才为 true,其它情况下与运算的结果均为
false。
第 1章 C++简单程序设计
“||”也是二元运算符 。,||”运算的作用是求两个操作数的逻辑或 。 只有当两个操作数的值都为 false时,
或运算的结果才为 false,其它情况下或运算的结果均为 true。 逻辑运算符的运算规则可以用真值表来说明 。
表 1-3给出了操作数 a和 b值的各种组合以及逻辑运算的结果 。
第 1章 C++简单程序设计例如,假设 a=7,b=5,x=20,y=30,则逻辑表达式 (a> b)&&(x> y)的值为 false。
表 1-3 逻辑运算符的真值表
a b !a a&&b a||b
true true false true true
true false false false true
false true true false true
false false true false false
第 1章 C++简单程序设计
6,条件运算符与条件表达式条件运算符,?,是 C++中唯一的三元运算符,它能够实现简单的选择功能 。 条件表达式的形式为
<表达式 1>?<表达式 2>:<表达式 3>
其中,表达式 1的值必须是 bool类型,表达式 2和表达式 3的值可以是任何类型 。
条件表达式的执行顺序是:先求解表达式 1。 若表达式 1的值为 true,则求解表达式 2,表达式 2的值为条件表达式的结果;若表达式 1的值为 false,则求解表达式 3,表达式 3的值为条件表达式的结果 。
第 1章 C++简单程序设计注意:条件运算符的优先级高于赋值运算符,低于逻辑运算符;结合方向为自右向左 。
例如,设 x,a和 b是整型变量,则语句
x=(a<b)?a:b;
的功能是先求出整数 a和 b中较小数的值后,赋给变量 x。
第 1章 C++简单程序设计
7,sizeof操作符
sizeof运算符是用来计算某种数据类型在内存中所占的字节数 。 该操作符使用的语法形式为
sizeof(类型名 )

sizeof(表达式 )
注意,sizeof(表达式 )仅仅计算,表达式,的结果类型所占的字节数,并不对括号中的表达式本身求值 。
第 1章 C++简单程序设计
8,位运算一般的高级语言处理数据的最小单位只能是字节,
C++语言却能对数据按二进制位进行操作 。 在 C++中提供了六个位运算符,可以对整数进行位操作 。
1) 按位与 (&)
按位与操作的作用是将两个操作数对应的每一位分别进行逻辑与操作 。 例如,计算 3&5:
3,00000011
5:(&) 00000101
3&5,00000001
第 1章 C++简单程序设计
8,位运算一般的高级语言处理数据的最小单位只能是字节,
C++语言却能对数据按二进制位进行操作 。 在 C++中提供了六个位运算符,可以对整数进行位操作 。
1) 按位与 (&)
按位与操作的作用是将两个操作数对应的每一位分别进行逻辑与操作 。 例如,计算 3&5:
3,00000011
5:(&) 00000101
3&5,00000001
第 1章 C++简单程序设计
3) 按位异或 (^)
按位异或操作的作用是将两个操作数对应的每一位进行异或 。 具体运算规则是:若对应位相同,则该位的运算结果为 0;若对应位不同,则该位的运算结果为 1。 例如,计算 071^052:
071,00111001
052:(^) 00101010
071^052,00010011
第 1章 C++简单程序设计可以看出:与,1”相异或,具有取反的作用;与
,0”相异或,维持不变 。 使用按位异或操作可以将操作数中的若干指定位取反 。 如果使某位与 0异或,结果是该位的原值;如果使某位与 1异或,则结果与该位原来的值相反 。
例如,要使 01111010 低四位翻转,可以与
00001111进行异或:
01111010
( ^) 00001111
01110101
第 1章 C++简单程序设计
4) 按位取反 (~)
按位取反是一个单目运算符,其作用是对一个二进制数的每一位取反 。 例如:
025,00010101
~025,11101010
5) 移位
C++中有两个移位运算符 —— 左移运算( <<)和右移运算( >>),都是二元运算符。移位运算符左边的操作数是需要移位的数值,右边的操作数是左移或右移的位数。左移是按照指定的位数将一个数的二进制值向左移位。
第 1章 C++简单程序设计左移后,低位补 0,移出的高位舍弃 。 右移是按照指定的位数将一个数的二进制值向右移位 。 右移后移出的低位舍弃 。 如果是无符号数则高位补 0;如果是有符号数,
则高位补符号位 。
下面我们看两个例子 。
① 如果有 char型变量 a的值为 -8,则 a在内存中的二进制补码值为 11111000,于是表达式 a>>2的值为 -2。图 1-4
说明了移位操作的过程。
② 表达式 2<<l的值为 4。图 1-5说明了移位操作的过程。
第 1章 C++简单程序设计图 1-4 a>>2的移位操作过程
1 1 1 1 1 0 0 0
1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 0
第 1章 C++简单程序设计值得注意的是:移位运算的结果是位运算表达式
( a>>2和 2<<1) 的值,移位运算符左边表达式的变量值本身并不会被改变 。
图 1-5 2<<1的移位操作过程
0 0 0 0 0 0 1 0
0 0 0 0 0 0 1 0
0
0 0 0 0 0 1 0 0
第 1章 C++简单程序设计
9,运算符优先级表 1-4中列出了 C++中全部运算符的优先级与结合性,
除 ·*,->*运算符外,其余的都在本章介绍 。
第 1章 C++简单程序设计表 1-4 C++中运算符的优先级与结合性优先级 运 算 符 结合性
1 [?] (?),-> 后置 ++ 后置 -- 左 → 右
2 前置 ++ 前置 -- sizeof & * +( 正号 ) -( 负号 ) ~ ! 右 → 左
3 ( 强制转换类型 ) 右 → 左
4 ·* ->* 左 → 右
5 * / % 左 → 右
6 + - 左 → 右
7 << >> 左 → 右
8 < > <= >= 左 → 右
9 == != 左 → 右
10 & 左 → 右
11 ^ 左 → 右
12 | 左 → 右
13 && 左 → 右
14 || 左 → 右第 1章 C++简单程序设计
15?,右 → 左
16 = *= /= %= += -?= <<= >>= &= ^= |= 右 → 左
17,左 → 右第 1章 C++简单程序设计
1.2.6 数据类型转换当表达式中出现了多种类型数据的混合运算时,
首先需要进行类型转换,其次再计算表达式的值 。 表达式中的类型转换分为两种:隐含转换和强制转换 。
1,隐含转换在混合运算时,对于二元运算符要求两个操作数的类型一致 。 若参加运算的操作数类型不一致,系统自动对数据进行转换 ( 即隐含转换 ) 。 具体的规则如下 。
第 1章 C++简单程序设计
① 算术运算和关系运算转换的基本原则是将低类型数据转换为高类型数据 。 类型越高数据的表示范围越大,精度也越高,所以这种转换是安全的 。 各种类型的高低顺序如下:
char short int unsigned long unsigned-long float double
低 高
② 逻辑运算符要求参与运算的操作数必须是 bool
型,如果操作数是其它类型,则系统自动将其转换为
bool型 。 转换方法是:非 0数据转换为 true,0转换为
false。
第 1章 C++简单程序设计
③ 位运算的操作数必须是整数 。 当二元位运算的操作数是不同类型的整数时,编译系统会自动进行类型转换 。
④ 赋值运算要求左值 ( 赋值运算符左边的值 ) 与右值 ( 赋值运算符右边的值 ) 的类型相同 。 若类型不同,
系统会自动进行类型转换 。 但这时的转换不适用上述的转换规则,而是一律将右值类型转换为左值类型 。
第 1章 C++简单程序设计下面的程序段说明了类型转换的规则:
float fVal;
double dVal;
int iVa1
unsigned long ulVal;
dVal=iVal * ulVal; //iVal被转换为 unsigned long
//乘法运算的结果被转换为
double
dVal=ulVal+ fVal; //ulVal被转换为 float
//加法运算的结果被转换为
double
第 1章 C++简单程序设计
2,强制类型转换强制类型转换又称为显式转换,是通过类型标识符和括号来实现的,其语法形式有两种:
<类型标识符 >(表达式 )

( 类型标识符 ) <表达式 >
强制类型转换的作用是将表达式的结果类型转换为类型标识符所指定的类型。
第 1章 C++简单程序设计例如,
float z= 9.74,fraction_part;
int whole_part;
whole_part=int(z); //将 float型转换为 int型时,取整数部分,舍弃小数部分
fraction_part=z-int(z) //用 z减去其整数部分,得到小数部分使用强制类型转换时,应该注意:
第 1章 C++简单程序设计
① 从上面的例子中可以看到,将高类型数据转换为低类型数据时,数据精度会受到损失 。
② 这种转换是暂时的,一次性的 。 例如,int(z)只是将 float型变量 z的值取出来,临时转换为 int型,然后赋给 whole_part。 而变量 z仍是原来的浮点类型值 。
第 1章 C++简单程序设计
1.3 数据的输入与输出
1.3.1 I/O的书写格式
C++数据的输入与输出是通过 I/O流来实现的,I/O
流输入或输出的是一系列字节 。 当程序需要在屏幕上显示输出时,可以使用插入符,<<”向 cout输出流中插入字符 。 cout是预定义的流类对象,,<<”是预定义的插入符,格式如下:
cout <<表达式 <<表达式 …
第 1章 C++简单程序设计例如,语句
cout<<"\"This is a sample.\ ",he said.\n";
的输出结果为
"This is a sample.",he said.
当程序需要执行键盘输入时,可以使用提取操作符,>>”从 cin输入流中抽取字符,格式如下:
cin>>表达式 >>表达式 …
第 1章 C++简单程序设计
cin是预定义的流类对象,,>>”是预定义的提取符 。 例如:
int a;
char c;
cin>>a>>c;
要求从键盘上输入两个变量的值,两数之间以空格分隔 。 若输入
4 8↙
这时,变量 a获取值为 4,变量 b获取值为 8的 ASCII
值 38( 十六进制 ) 。 因为变量 c的数据类型为 char,cin
能够知道输入的变量类型 。
第 1章 C++简单程序设计
1.3.2 简单的 I/O格式控制从上面的介绍中可以看出,当我们用 cin,cout进行数据的输入和输出时,无论处理的是什么类型的数据,都能够自动按照默认格式处理 。 但这还是不够,
我们仍经常需要设置特殊的格式 。 设置格式有很多方法,有关内容将在第 9章做详细介绍,本节只介绍最简单的格式控制 。
C++的 I/O流类库提供了一些控制符,可以直接嵌入到输入 /输出语句中来实现 I/O格式控制 。 使用格式控制符首先必须在源程序的开头包含 iomanip.h。 表 1-5中列出了几个常用的 I/O流类库格式控制符 。
第 1章 C++简单程序设计表 1-5 常用的 I/O流控制符控 制 符 含 义
Dec 数值数据采用十进制
Hex 数值数据采用十六进制
Oct 数值数据采用八进制
Ws 提取空白符
Endl 插入换行符,并刷新流
Ends 插入空字符
setprecision(int) 设置浮点数的小数位数 ( 包括小数点 )
setw(int) 设置域宽第 1章 C++简单程序设计在使用 setw(n)时要注意:
① 如果一个输出量需要比 setw(n)确定的字符数更多的字符,则该输出量将使用它所需要的宽度 。 例如:
float amount=3.14159;
cout<<setw(4)<<amount<<endl;
其运行结果为 3.14159。 它并不按 4位宽度,而是按实际宽度输出 。
第 1章 C++简单程序设计
② setw(n)仅仅影响下一个数值输出,换句话说,
使用 setw设置的间隔方式并不保留其效力 。 例如:
cout<<setw(8)<<10<<20<<endl;
运行结果为
------1020
运行结果中的下划线表示空格整数 20并没有按宽度 8输出 。 setw( )的默认宽度为 0,意思是按输出数值表示的宽度输出,所以 20就紧挨 10了 。
第 1章 C++简单程序设计
【 例 1-3】 I/O格式控制例题 。
按十六进制,八进制和十进制的格式输出数据例题 。 这三个控制符都是在 iostream.h定义的,所以无需加入头文件 iomanip.h。
#include <iostream.h>
void main( )
{
int number=1001;
第 1章 C++简单程序设计
cout<<"\tDecimal:"<<dec<<number<<endl
<<"\tHexadecimal:"<<hex<<number<<endl
<<"\tOctal:"<<oct<<number<<endl;
}
程序运行结果为
Decimal:1001
Hexadecimal:3e9
Octal:1751
第 1章 C++简单程序设计
1.4 程序的基本控制结构学习了数据类型,表达式,赋值语句和数据的输入与输出后,就可以编写程序完成一些简单的功能了 。
但是,我们现在写的程序还只是一些顺序执行的语句 。
实际上,我们所面对的客观世界远不是这么简单,我们通常解决问题的方法也不是用这样的顺序步骤就可以描述清楚的 。 例如,有一分段函数如下,输入一个 x
值,求出 y值:
第 1章 C++简单程序设计这个问题由人来判断并不复杂,但是如何将这一计算方法用计算机来完成?显然,用顺序执行的语句序列是无法描述的,这里必须进行选择判断,需要用选择型控制结构。
1 ( 0)
0 ( 0)
1 ( 0)
x
Yx
x



第 1章 C++简单程序设计再举一个简单的例子,比如统计某一个年级某门课程的平均成绩 。 这个问题人工计算起来方法很简单,
但是当统计数据量非常大的时候我们就不得不借助于计算机了 。 但是计算方法却必须由我们为它准确地描述清楚 。 这个算法中的一个主要部分就是进行累加,
这种大量重复的相同动作显然不适宜由顺序执行的语句来罗列,需要用循环型控制结构 。
第 1章 C++简单程序设计程序的基本控制结构有三种:顺序结构,选择结构和循环结构 。 其中顺序结构的程序是最简单的 。 下面我们将详细介绍 C++中的选择结构和循环结构控制语句 。 在此之前,为了便于描述算法,我们先介绍一种常用算法表示工具 ——程序流程图 。 流程图是用一些图框表示各种操作的 。 用图框表示算法,具有简洁,
直观,易于理解等优点 。 流程图中常用的符号如图 1-6
所示 。
第 1章 C++简单程序设计图 1-6 流程图的常用符号第 1章 C++简单程序设计
1.4.1 简单选择结构用 if语句可以实现简单选择结构 。 if语句的语法形式如下:
if (表达式 ) 语句 1
else 语句 2
if语句的执行顺序是:首先计算表达式的值 。 若表达式值为 true,则执行语句 1;否则执行语句 2。 执行流程如图 1-7所示 。 其中语句 1和语句 2不仅可以是一条语句,而且可以是大括号括起来的多条语句 ( 称为复合语句 ) 。
第 1章 C++简单程序设计图 1-7 if -else语句流程图第 1章 C++简单程序设计例如:
if(x>y) cout<<x;
else cout<<y;
实现了从 x和 y中选择较大的一个输出 。 if语句中的语句 2可以为空 。 当语句 2为空时,else可以省略,成为如下形式:
if (表达式 ) 语句 1
例如,若 ch字符等于字符 b,则响铃:
if( ch= ='b') cout<<'\a';
第 1章 C++简单程序设计
【 例 1-4】 输入一个年份,判断是否闰年 。
分析:闰年的年份可以被 4整除而不能被 100整除,
或者能被 400整除 。 因此,首先输入年份存放到变量
year中,如果表达式 (( year%4==0&&year%100!=0)
||( yeax% 400==0)) 的值为 true,则为闰年;否则就不是闰年 。
源程序:
#include<iostream.h>
void main( )
{
第 1章 C++简单程序设计
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
第 1章 C++简单程序设计
cout<<year<<" is not a leap year"<<endl;
}
程序运行结果为
Enter the year:2000
2000 is a leap year
第 1章 C++简单程序设计
1.4.2 多重选择结构有很多问题是一次简单的判断所解决不了的,需要进行多次判断选择 。 这可以有以下几种方法 。
1,嵌套的 if语句形式 1:
if (表达式 1)
if (表达式 2) 语句 1
else 语句 2
else
第 1章 C++简单程序设计
if (表达式 3) 语句 3
else 语句 4
形式 2:
if (表达式 1) 语句 1
else if (表达式 2) 语句 2
else if (表达式 3) 语句 3
else 语句 n+1
可以看出,形式 1的嵌套发生在 if及 else分支,形式
2的嵌套仅发生在 else分支 。 形式 2的 if…else if语句的执行顺序如图 1-8所示 。
第 1章 C++简单程序设计图 1-8 if…else if 语句流程图第 1章 C++简单程序设计无论是何种形式,应当注意:
① if与 else的配对关系 。 else总是与它上面最近的 if
配对 。
② 语句 1,2,3,4,…,n+1可以是复合语句 。
③ 如果省略某一个 else,if与 else的数目不一样,
为实现程序设计者的意图,便要用 {}括起该层的 if语句来确定层次关系 。
第 1章 C++简单程序设计例如:
if ( )
{ if ( ) 语句 1}
else 语句 2
这时,{}确定了内嵌 if语句的范围,因此 else与第一个 if配对 。
第 1章 C++简单程序设计
【 例 1-5】 本章开始举例中,有一函数:
-1 (x<0)
Y= 0 (x=0)
1 (x>0)
输入一个 x的值,输出 y的值 。
分析:通过键盘输入一个数,这个数有三种可能:
x=0,x>0,x<0。 因此需要进行多次判断,要用多重选择结构 。 这里我们选用嵌套的 if…else if语句 。
第 1章 C++简单程序设计
#include<iostream.h>
void main( )
{
int x,y;
cin>>x;
if(x<0) y=-1;
else if(x==0) y=0;
else y=1;
cout<<y<<endl;
第 1章 C++简单程序设计
}
程序运行结果为输入,4
屏幕显示,1
2,switch语句如果在算法中,虽然需要进行多次判断选择,但都是判断同一个表达式的值,这样就没有必要在每一个嵌套的 if语句中都计算一次表达式的值,为此,C++中有
switch语句专门来解决这类问题 。 switch语句的语法形式如下:
第 1章 C++简单程序设计
switch( 表达式 )
{ case 常量表达式 1:语句 1
case 常量表达式 2:语句 2
case 常量表达式 n:语句 n
default:语句 n+1
}
第 1章 C++简单程序设计
switch语句的执行顺序是:首先计算 switch语句中的表达式的值,然后在 case语句中寻找值相等的常量表达式,并以此为入口标号,由此开始顺序执行 。 如果没有找到相等的常量表达式,则从,default:,开始执行 。
使用 switch语句应注意下列问题,
① switch后面括弧内的表达式的值只能是整型,字符型,枚举型 。 例如,下面的代码错误地用浮点型作
switch的表达式,它会引起编译错误:
第 1章 C++简单程序设计
float f=4.0
switch(f) //error
{
//...
}
第 1章 C++简单程序设计
② 各常量表达式的值不能相同,且次序不影响执行结果 。 例如,下面的代码中出现相同的常量值,
case 'A':cout<<''this is A\n'';
csae 65:cout<<''this is 65\n''; //error,'A' 等值于 65
③ 每个 case分支可以有多条语句,但不必用 {}。
④ 每个 case语句只是一个入口标号,通常我们只需执行一个 case后的语句,因此,每个 case分支的最后应该加 break语句,用来结束整个 switch结构,否则从入口点开始一直执行到 switch结构的结束点 。
⑤ 当若干分支需要执行相同操作时,可以使多个
case分支共用一组语句 。
第 1章 C++简单程序设计
【 例 1-6】 输入一个 1~ 3的整数,来计算相应图形的面积 ( 1-圆形,2-长方形,3-正方形 ) 。
分析:本题需要根据输入的数字决定相应面积的计算,由于数字 1~ 3分别对应圆形,长方形和正方形,
因此需要运用多重分支结构 。 但是每次判断的都是输入的整数,所以选用 switch语句最为适宜 。
#include <iostream.h>
const double PI=3.1416;
void main( )
{
第 1章 C++简单程序设计
int iType;
doubleradius,a,b,area;
cout << "图形的类型为?( 1-圆形,2-长方形,3-正方形 ):";
cin >> iType;
switch(iType)
{
case 1:
cout << "圆的半径为,";
cin >> radius;
area = PI * radius * radius;
cout<<"面积为,"<<area<<endl;
break;
第 1章 C++简单程序设计
case 2:
cout << "矩形的长为,";
cin >> a;
cout << "矩形的宽为,";
cin >> b;
area = a * b;
cout<<"面积为,"<<area<<endl;
break;
第 1章 C++简单程序设计
case 3:
cout << "正方形的边长为,";
cin >> a;
area = a * a;
cout<<"面积为,"<<area<<endl;
break;
default:
cout << "不是合法的输入值 !"<<endl;
}
}
第 1章 C++简单程序设计程序运行结果为图形的类型为? ( 1-圆形,2-长方形,3-正方形 ),1
圆的半径为?,2
面积为 12.5664
第 1章 C++简单程序设计
1.4.3 循环结构在 C++中有三种循环控制语句 。
1,while语句
while语句的语法形式如下:
while (表达式 ) 语句
while语句的执行顺序是:判断一个条件表达式 (循环控制条件 ),以便决定是否应当进入和执行循环体
(语句 )。 当条件满足时进入循环,不满足时则不再执行循环 。 图 1-9是 while语句的流程图 。
第 1章 C++简单程序设计第 1章 C++简单程序设计应用 while语句时应该注意,一般来说在循环体中,
应该包含改变循环条件表达式值的语句,否则便会造成死循环 。
【 例 1-7】 求自然数 1~ 100之和 。
分析:本题需要用累加算法 。 累加过程是一个循环过程,可以用 while语句实现 。
#include<iostream.h>
void main( )
{
int i=1,sum=0;
第 1章 C++简单程序设计
while(i<=100)
{
sum+=i;
i++;
}
cout<<"sum="<<sum<<endl;
}
程序运行结果为
sum=5050
第 1章 C++简单程序设计
2,do-whil语句
do-whil语句的语法形式如下:
do 语句
while (表达式 );
do while语句的执行顺序是:当流程执行到 do后,
立即执行循环体语句,然后再判断循环条件表达式的值 。 表达式为 true时,继续执行循环体;表达式为 false
则结束循环 。 图 1-10是 do-while语句的流程图 。 该语句结构使循环至少执行一次 。
第 1章 C++简单程序设计第 1章 C++简单程序设计
【 例 1-8】 用 do-while语句编程,求自然数 1~ 100之和 。
#include<iostream.h>
void main( )
{
int i(1),sum(0);
do {
sum+=i++;
}while(i<=100);
cout<<"sum="<<sum<<endl;
}
第 1章 C++简单程序设计
do-while与 while语句都是实现循环结构的,两者的区别是,while语句先判断表达式的值,当值为 true时,
再执行循环体;而 do-while语句是先执行循环体,再判断表达式的值。在大多数情况下,如果循环控制条件和循环体中的语句都相同,while循环和 do-while循环的结果是相同的。但是如果一开始循环控制条件就为假,
这两种循环的执行结果就不同了,do-while循环至少执行一次循环体,while循环却一次都不执行。现在我们将例 1-7的题目稍作修改,改为从键盘输入整数 i,请读者分析在输入的 i值大于 10和不大于 10的情况下,下面两个程序的运行结果。
第 1章 C++简单程序设计程序 l:
#include<iostream.h>
void main( )
{
int i,sum=0;
cin>>i;
while(i<=10)
{
sum+=i;
i++;
}
第 1章 C++简单程序设计
cout<<"sum="<<sum<<endl;
}
程序 2:
#include<iostream.h>
void main( )
{
int i,sum=0;
cin>>i;
do
第 1章 C++简单程序设计
{
sum+=i;
i++;
}while(i<=10);
cout<<"sum="<<sum<<endl;
}
第 1章 C++简单程序设计
3,for语句
for语句的使用最为灵活,既可以用于循环次数确定的情况,也可以用于循环次数未知的情况 。 for语句的语法形式如下:
for (表达式 1;表达式 2;表达式 3)
语句由图 1-11可以看到,for语句的执行流程是:
① 首先计算表达式 1的值 。
② 再计算表达式 2,如果表达式 2的值为 false,则退出循环 。
第 1章 C++简单程序设计
③ 如果表达式 2的值为 true,则执行一次循环体,
然后计算表达式 3的值 。
④ 转回步骤 ② 。
表达式 2的值决定是否继续执行循环体。
第 1章 C++简单程序设计图 1-11 for语句的执行流程图第 1章 C++简单程序设计关于 for语句的几点说明:
① 在 for语句中,表达式 2是循环控制条件,所以一般不能省略 。 如果省略,将会出现死循环 。
② 表达式 l一般用于给循环控制条件赋初值,它也可以是与循环变量无关的其它表达式 。
例如:
for (i=1;i<=100;i++) sum=sum+i; //在表达式 1中给循环控制条件赋初值第 1章 C++简单程序设计
③ 表达式 1和表达式 3可以是任何表达式 。 例如:
for (sum=0,i=1;i<=100;i++) sum=sum+i; //表达式
1为逗号表达式
④ 表达式 3一般用于改变循环控制条件 。 例如,上例中的表达式 3即 i++,每循环一次使i递增,用于改变循环的条件,当 i>100时,结束循环 。
⑤ 如果省略表达式 1和 3,只有表达式 2,则完全等同于 while语句 。 例如,下列两个程序片断完全等同:
第 1章 C++简单程序设计
for(;i<=60;) while(i<=60)
{ sum=sum+i; { sum=sum+i;
i++; i++;
} }
for循环使得所有的循环细节都可在语句中描述,
使得程序又精炼又可读 。 用 for语句可以解决编程中的所有循环问题 。
第 1章 C++简单程序设计
【 例 1-9】 求水仙花数 。 如果一个三位整数的个位数,十位数与百位数的立方和等于该数自身,则称该数为水仙花数 。
分析:显然,水仙花数要在 100~ 999的范围内去找,我们对这个范围内所有数据一一检验其是否符合水仙花数 。 这是一个已知循环次数的循环,故可以使用 for语句 。
第 1章 C++简单程序设计
#include<iostream.h>
void main( )
{
int n,i,j,k;
for(n=100;n<=999;n=n+1)
{
i=n/100; //取出 n的百位数
j=(n/10)%10; //取出 n的十位数
k=n%10; //取出 n的个位数第 1章 C++简单程序设计
if(n==i*i*i+j*j*j+k*k*k)
cout<<n<<"="
<<i<<"^3+"
<<j<<"^3+"
<<k<<"^3\n";
}
}
第 1章 C++简单程序设计程序运行结果为
153=1^3+5^3+3^3
370=3^3+7^3+0^3
371=3^3+7^3+1^3
407=4^3+0^3+7^3
第 1章 C++简单程序设计
【 例 1-10】 给定一个整数,判断其是否为素数 。
分析,m是素数的条件是不能被 2~ √m 内的数整除 。
#include<iostream.h>
#include<math.h>
void main( )
{
long m;
cout<<"Please input a number:";
第 1章 C++简单程序设计
cin>>m;
double sqrtm=sqrt(m); //该函数包含在 math.h
int i;
for(i=2;1<=sqrtm;i++)
if(m % i==0)
break;
if(sqrtm<i)
cout<<m<<" is prime.\n";
第 1章 C++简单程序设计
else
cout<<m<<" is not prime.\n";
}
程序运行结果为
Please input a number:53
53 is prime.
第 1章 C++简单程序设计
1.4.4 循环结构的嵌套一个循环体内可以包含另一个完整的循环结构,构成多重循环 。 while,do-while,和 for三种循环语句可以互相嵌套 。
【 例 1-11】 求 a~ b的数段内所有的素数 。
分析:对 a~ b中的数都进行素数判断,所以就要用到循环的嵌套 。
#include<iostream.h>
#include<math.h>
#include<iomanip.h>
void main( )
{
第 1章 C++简单程序设计
long a,b,l=0;
cout<<"Please input two number:";
cin>>a>>b;
cout<<"primes from "<<a<<" to "<<b<<" is:";
if(a % 2==0)
a++;
for(long m=a;m<=b;m+=2)
{
double sqrtm=sqrt(m);
int i;
for(i=2;i<=sqrtm;i++)
第 1章 C++简单程序设计
if(m % i==0)
break;
if(i>sqrtm)
{
if(l++ % 10==0) //十个数换行
cout<<endl;
cout<<setw(5)<<m;
}
}
第 1章 C++简单程序设计
cout<<endl;
}
程序运行结果为
Please input two number,2 10
primes from 2 to 10 is:
3 5 7
第 1章 C++简单程序设计
1.4.5 其它控制语句
1,break语句
break语句只用于 switch语句或循环体中,其作用是使程序从 switch语句内跳出或结束循环,继续执行逻辑上的下一条语句 。
例 1-12 从键盘输入多个字符,统计小写字符的个数,直到遇到,$”字符结束 。
分析:程序中字符的输入及统计语句肯定应在循环体中,顺序也应当是先输入后判断 。 若输入的字符为,$”字符,则应用 break语句结束循环,否则,一直循环下去 。
第 1章 C++简单程序设计
#include<iostream.h>
void main( )
{
char ch;
int sum=0;
while(true)
{
cin>>ch;
if(ch=='$') break;
if(ch>='a'&&ch<='z') sum++;
第 1章 C++简单程序设计
}
cout<<"sum="<<sum<<endl;
}
程序运行结果为输入,edrftgu$
输出,sum=7
第 1章 C++简单程序设计
2,continue语句
continue语句仅用于循环体中,其作用是结束本次循环,接着开始判断循环条件,决定是否继续执行下一次循环 。
【 例 1-13】 找出 10~ 100之间不能被 2和 3整除的数 。
分析:该问题是固定范围的求解,所以用 for循环最好 。 在循环体中判断是否为要找的数,是则输出,
不是则应用 continue语句结束本次循环,进行下一个数的循环判断 。
第 1章 C++简单程序设计
#include<iostream.h>
void main( )
{
int m,sum=0;
for(m=10;m<=100;m++)
{
if(m%3==0||m%2==0) continue;
cout<<m<<'\t';
}
cout<<endl;
}
第 1章 C++简单程序设计程序运行结果为
1113 17 19 23 25 29 31 35 37
4143 47 49 53 55 59 61 65 67
7173 77 79 83 85 89 91 95 97
第 1章 C++简单程序设计
3,goto语句
goto语句的语法格式如下:
goto <语句标号 >
其中,语句标号,是用来表示语句的标识符,放在语句的最前面,并用冒号 (,)与语句分开 。
goto语句的作用是使程序的执行流程跳转到语句标号所指定的语句 。 goto语句的使用会破坏程序的结构,应该少用或不用 。