第二章 C++简单程序设计
清华大学计算机与信息管理中心
郑 莉
C++语言程序设计
前一页 休息 2
本章主要内容
? C++语言概述
? 基本数据类型和表达式
? 数据的输入与输出
? 算法的基本控制结构
? 自定义数据类型
前一页 休息 3
C++语言的产生
? C++是从 C语言发展演变而来的,首先
是一个更好的 C。
? 引入了类的机制,最初的 C++被称为 "
带类的 C"。
? 1983年正式取名为 C++。 C++语言的标
准化工作从 1989年开始,于 1994年制定
了 ANSI C++标准草案。以后又经过不
断完善,成为目前的 C++。
C++




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




前一页 休息 5
C++程序实例 — 例 2-1
#include <iostream.h>
void main(void)
{
cout<<"Hello!\n";
cout<<"Welcome to c++!\n";
}
C++




前一页 休息 6
C++程序实例
运行结果:
Hello!
Welcome to c++!
C++




前一页 休息 7
C++字符集
? 大小写的英文字母,A~Z,a~z
? 数字字符,0~9
? 特殊字符:
空格 ! # % ^ & *
_(下划线 )+ = - ~
< > / \ ' " ;
.,() [] {}
C++




前一页 休息 8
词法记号
? 关键字 C++预定义的单词。
? 标识符 程序员声明的单词,它命名程序
正文中的一些实体。
? 文字 在程序中直接使用符号表示的数据
? 操作符 用于实现各种运算的符号。
? 分隔符 用于分隔各个词法记号或程序正
文,() {},,;
? 空白:空格、制表符( TAB键产生的字
符)、换行符( Enter键所产生的字符)和
注释的总称。
C++




前一页 休息 9
标识符的构成规则
? 以大写字母、小写字母或下划线 (_)开
始。
? 可以由以大写字母、小写字母、下划
线 (_)或数字 0~9组成。
? 大写字母和小写字母代表不同的标识
符。
C++




前一页 休息 10
数据类型 —— 常量与变量
#include<iostream.h>
void main(void)
{
const int PRICE=30;
int num,total;
float v,r,h;
num=10;
total=num*PRICE;
cout<<total <<endl;
r=2.5;
h=3.2;
v=3.14159*r*r*h;
cout<<v <<endl;
}
常量
变量
变量先定
义后使用 符号常量
Page 10










前一页 休息 11
#include<iostream.h>
void main(void)
{
const int PRICE=30;
int num,total;
float v,r,h;
num=10;
total=num*PRICE;
cout<<total <<endl;
r=2.5;
h=3.2;
v=3.14159*r*r*h;
cout<<v <<endl;
}
数据类型 —— 整型数据
整型常量short
unsigned short
2字节
int,unsigned int
4字节
long
unsigned long
4字节
整型变量
整型变量声明










前一页 休息 12
数据类型 — 整型数据及取值范围
类型 说明符 位数 数值范围
短整 short 16 -32768~ 32767
基本 int 32 -231~ (231-1)
长整 long 32 -231~ (231-1)
无符号
unsigned short 16 0~ 65535
unsigned [int] 32 0~ (232-1)
unsigned long 32 0~ (232-1)










前一页 休息 13
#include<iostream.h>
void main(void)
{
const int PRICE=30;
int num,total;
float v,r,h;
num=10;
total=num*PRICE;
cout<<total<<endl;
r=2.5;
h=3.2;
v=3.14159*r*r*h;
cout<<v<<endl;
}
数据类型 —— 实型数据
实型常量
float 4字节
3.4× 10± 38
7位有效数字
double 8字节
1.7× 10± 308
15位有效数字
long double
8字节
1.7× 10± 308
15位有效数字
实型变量 ?缺省为 double型
?后缀 F(或 f)
为 float型
?后缀 L(或 l)
为 long double











前一页 休息 14
数据类型 —— 字符型数据(一)
? 字符常量
– 单引号括起来的一个字符,如,'a','D','?','$'
? 字符变量
– 用来存放字符常量
例,char c1,c2;
c1='a';
c2='A';
? 字符数据在内存中的存储形式
– 以 ASCII码存储,占 1字节,用 7个二进制位
Page 14










前一页 休息 15
? 字符数据的使用方法
– 字符数据和整型数据之间可以运算。
– 字符数据与整型数据可以互相赋值。
? 字符串常量
例,"CHINA"
"a"
'a'
所以,char c;
c="a";
C H I N A \0
a\0
a
Page 15
数据类型 —— 字符型数据(二)基









前一页 休息 16
数据类型
—— 布尔型数据
? 布尔型变量的说明:
例,bool flag;
? 布尔型数据的取值:
只有 false 和 true 两个值










前一页 休息 17
数据类型 —— 变量赋初值
例:
int a=3;
double f=3.56;
char c='a';
int c=5;
Page 17










前一页 休息 18
数据类型 — 不同类型数据混合运算时的类型转换
? 不同类型数据进行混合运算时,C++编译
器会自动进行类型转换。
? 为了避免不同的数据类型在运算中出现混
淆,应尽量使用同种类型数据。
? 可以采用强制类型转换:
例如:
float c;
int a,b;
c=float(a)/float(b); 或 c= (float)a/(float)b;










前一页 休息 19
变量的存储类型
? auto存储类
– 属于一时性存储,其存储空间可以被若干变量多次覆盖使用。
? register存储类
– 存放在通用寄存器中。
? extern存储类
– 在所有函数和程序段中都可引用。
? static存储类
– 在内存中是以固定地址存放的,在整个程序运行期间都有效。










前一页 休息 20
算术运算符与算术表达式
? 基本算术运算符
+ - * / (若整数相除,结果取整 )
%(取余,操作数为整数)
? 优先级与结合性
先乘除,后加减,同级自左至右
? ++,--(自增、自减)
例,i++; -- j;
Page 20










前一页 休息 21
赋值运算符和赋值表达式
简单的赋值运算符 "="
? 举例:
n=n+5
? 类型:
等号左边对象的类型
? 值:
等号左边对象被赋值后的值
Page 21










前一页 休息 22
赋值运算符和赋值表达式
复合的赋值运算符
?有 10种复合运算符:
+=,-=,*=,/=,%=,
<<=,>>=,&=,^=,|=
?例,a+=3 等价于 a=a+3
x*=y+8 等价于 x=x*(y+8)










前一页 休息 23
赋值运算符和赋值表达式 —— 赋值表达式举例
a=5 表达式值为 5
a=b=c=5 表达式值为 5,a,b,c均为 5
a=5+(c=6) 表达式值为 11,a为 11,c为 6
a=(b=4)+(c=6)
表达式值为 10,a为 10,b为 4,c为 6
a=(b=10)/(c=2)
表达式值为 5,a为 5,b为 10,c为 2
a+=a-=a*a 相当于, a=a+(a=a-a*a)
Page 23










前一页 休息 24
逗号运算和逗号表达式
? 格式:
表达式 1,表达式 2
? 求解顺序及结果:
先求解 1,再求解 2,最终结果为表达
式 2的值
? 例
a=3*5,a*4 最终结果为 60
Page 24










前一页 休息 25
关系运算与关系表达式
? 关系运算是比较简单的一种逻辑运算,
优先次序为:
< <= > >= == !=
优先级相同(高) 优先级相同(低)
? 关系表达式是一种最简单的逻辑表达式
其结果类型为 bool,值只能为 true 或 false。
? 例如,a>b,c<=a+b,x+y==3










前一页 休息 26
逻辑运算与逻辑表达式
? 逻辑运算符:
!(非 ) &&(与 ) ||(或 )
优先次序,高 → 低
? 逻辑表达式
例如,(a>b)&&(x>y)
其结果类型为 bool,值只能为 true
或 false。










前一页 休息 27
条件运算符与条件表达式
? 一般形式:
表达式 1?表达式 2:表达式 3
表达式 1 必须是 bool 类型
? 执行顺序:
– 先求解 表达式 1,
– 若表达式 1的值为 true,则求解 表达式 2,
表达式 2的值为最终结果
– 若表达式 1的值为 false,则求解 表达式 3,
表达式 3的值为最终结果
? 例,x=a>b? a:b;










前一页 休息 28
条件运算符与条件表达式
? 注意:
– 条件 运算符优级 高于 赋值 运算符,低于
逻辑 运算符
– 表达式 2,3的类型可以不同,条件表达
式的最终类型为 2 和 3 中较高的类型。
? 例,x=a>b? a:b;












前一页 休息 29
sizeof 操作符
? 语法形式
sizeof (类型名 )
或 sizeof (表达式 )
? 结果值:
“类型名”所指定的类型或“表达式”的结果
类型所占的字节数。
? 例:
sizeof(short)
sizeof(x)










前一页 休息 30
位运算 —— 按位与( &)
? 运算规则
– 将两个运算量的每一个位进行逻辑 与 操作
? 举例:计算 3 & 5
3,0 0 0 0 0 0 1 1
5,(&) 0 0 0 0 0 1 0 1
3 & 5,0 0 0 0 0 0 0 1
? 用途:
– 将某一位置 0,其它位不变。例如:
将 char 型变量 a 的最低位置 0,a = a & 0376;
– 取指定位。
例如:有 char c; int a;
取出 a 的低字节,置于 c 中,c = a & 0377;










前一页 休息 31
位运算 —— 按位或( |)
? 运算规则
– 将两个运算量的每一个位进行逻辑 或 操作
? 举例:计算 3 | 5
3,0 0 0 0 0 0 1 1
5,(|) 0 0 0 0 0 1 0 1
3 | 5,0 0 0 0 0 1 1 1
? 用途:
– 将某些位置 1,其它位不变。
例如:将 int 型变量 a 的低字节置 1,
a = a | 0xff;










前一页 休息 32
位运算 —— 按位异或( ^)
? 运算规则
– 两个操作数进行异或:
若对应位 相同,则结果该位为 0,
若对应位 不同,则结果该位为 1,
? 举例:计算 071^052
071,0 0 1 1 1 0 0 1
052,(^) 0 0 1 0 1 0 1 0
071^052, 0 0 0 1 0 0 1 1










前一页 休息 33
位运算 —— 按位异或( ^)
? 用途:
– 使特定位翻转(与 0异或保持原值,与 1
异或取反)
例如:要使 01111010 低四位翻转:
0 1 1 1 1 0 1 0
(^) 0 0 0 0 1 1 1 1
0 1 1 1 0 1 0 1










前一页 休息 34
位运算 —— 取反 (~)
单目运算符:对一个二进制数按位取
反。
例,025,0000000000010101
~025,1111111111101010










前一页 休息 35
位运算 —— 移位
?左移运算( <<)
左移后,低位补 0,高位舍弃。
?右移运算( >>)
右移后,低位:舍弃
高位:无符号数:补 0
有符号数:补,符号位”










前一页 休息 36
运算符优先级
括号
++,--,sizeof
*,/,%
+,-
==,!=
位运算
&&
||
:
赋值运算
逗号运算 低











前一页 休息 37
混合运算时数据类型的转换
—— 隐含转换
? 一些二元运算符(算术运算符、关系运算符、逻
辑运算符、位运算符和赋值运算符)要求两个操
作数的类型一致。
? 在算术运算和关系运算中如果参与运算的操作数
类型不一致,编译系统会自动对数据进行转换
(即隐含转换),基本原则是将低类型数据转换
为高类型数据。
char short int unsigned long unsigned long float double
低 高










前一页 休息 38
混合运算时数据类型的转换
—— 隐含转换
? 当参与运算的操作数必须是 bool型时,如果操作数
是其它类型,编译系统会自动将非 0数据转换为
true,0转换为 false。
? 位运算的操作数必须是整数,当二元位运算的操
作数是不同类型的整数时,也会自动进行类型转
换,
? 赋值运算要求左值与右值的类型相同,若类型不
同,编译系统会自动将右值转换为左值的类型。










前一页 休息 39
混合运算时数据类型的转换
—— 强制类型转换
? 语法形式:
类型说明符 (表达式 )

(类型说明符 )表达式
? 强制类型转换的作用是将表达式的结
果类型转换为类型说明符所指定的类
型。










前一页 休息 40
赋值语句
?格式:
赋值表达式;
?赋值语句与赋值表达式的区别:
赋值表达式可以包含在其它表达式中,
而赋值语句不可。
例,if ((a=b)>0) t=a;
不可写为,if ((a=b;)>0) t=a;
前一页 休息 41
简单的输入、输出
?向标准输出设备(显示器)输出
例,int x;
cout<<“x=“<<x;
?从标准输入设备(键盘)输入
例,int x;
cin>>x;
前一页 休息 42
? 顺序结构
? 分支结构
? 循环结构
算法的基本控制结构
前一页 休息 43
如何解决分支问题?
例 2-2
输入一个年份,判断是否闰年。









#include <iostream.h>
void main(void)
{ int year;
bool IsLeapYear;
cout << "Enter the year,";
cin >> year;
IsLeapYear = ((year % 4 == 0 &&year % 100 != 0)||(year % 400 == 0));
if (IsLeapYear)
cout << year << " is a leap year" << endl;
else
cout << year << " is not a leap year"<< endl;
}
运行结果:
Enter the year,2000
2000 is a leap year
前一页 休息 46
if (表达式 ) 语句
例,if (x>y) cout<<x;
if (表达式 ) 语句 1 else 语句 2
例,if (x>y) cout<<x;
else cout<<y;
if (表达式 1) 语句 1
else if (表达式 2) 语句 2
else if (表达式 3) 语句 3

else 语句 n
if 语句 —— 三种形式









前一页 休息 47
如何解决多分之问题?
例 2-3
输入两个整数,比较两个数的大小。









#include<iostream.h>
void main()
{
int x,y;
cout<<"Enter x and y:";
cin>>x>>y;
if (x!=y)
if (x>y)
cout<<"x>y"<<endl;
else
cout<<"x<y"<<endl;
else
cout<<"x=y"<<endl;
}
运行结果 1:
Enter x and y:5 8
x<y
运行结果 2:
Enter x and y:8 8
x=y
运行结果 3:
Enter x and y:12 8
x>y
前一页 休息 50
? 一般形式
if ( )
if ( ) 语句 1
else 语句 2
else
if ( ) 语句 3
else 语句 4
? 注意
语句 1,2,3,4 可以是复合语句,每层的 if
与 else 配对,或用 { } 来确定层次关系。
if 语句 —— 嵌套









前一页 休息 51
特殊的多分支结构
例 2-4
输入一个 0~6的整数,转换成星期输出。









#include <iostream.h>
void main(void)
{ int day;
cin >> day;
switch (day)
{
case 0,cout << "Sunday" << endl;
break;
case 1,cout << "Monday" << endl;
break;
case 2,cout << "Tuesday" << endl;
break;
case 3,cout << "Wednesday" << endl;
break;
case 4,cout << "Thursday" << endl;
break;
case 5,cout << "Friday" << endl;
break;
case 6,cout << "Saturday" << endl;
break;
default:
cout << "Day out of range Sunday,,Saturday"
<< endl;
break;
}
}
前一页 休息 54
? 一般形式
switch (表达式 )
{ case 常量表达式 1:语句 1
case 常量表达式 2:语句 2

case 常量表达式 n:语句 n
default, 语句 n+1
}
switch 语句
? 执行顺序
以 case中的 常量表达式值 为入口标号,由此开始顺序执
行。因此,每个 case分支最后应该加 break语句。
每个常量表达式的值不
能相同,次序不影响执
行结果。
可以是多个语句,但不
必用 { }。
可以是 整型、字符型、枚举型









前一页 休息 55
使用 switch语句应注意的问题
? case分支可包含多个语句,且不用 { }。
? 表达式、判断值都是 int型或 char型。
? 若干分支执行内容相同可共用一组语
句。









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









#include<iostream.h>
void main()
{
int i(1),sum(0);
while(i<=10)
{
sum+=i; //相当于 sum=sum+i;
i++;
}
cout<<"sum="<<sum
<<endl;
}
运行结果:
sum=55
前一页 休息 58
while 语句
? 形式
while (表达式 ) 语句
可以是复合语句,其中必须含有
改变条件表达式值的语句。
? 执行顺序
先判断表达式的值,为 true 时,再执行语句。









前一页 休息 59
先执行循环体,后判断条件的情况
例 2-6
输入一个整数,将各位数字反转后输
出。









#include <iostream.h>
void main(void)
{
int n,right_digit,newnum = 0;
cout << "Enter the number,";
cin >> n;
cout << "The number in reverse order is ";
do
{
right_digit = n % 10;
cout << right_digit;
n /= 10; //相当于 n=n/10
}
while (n != 0);
cout<<endl;
}
运行结果:
Enter the number,365
The number in reverse order is 563
前一页 休息 62
do-while 语句
? 一般形式
do 语句
while (表达式 )
可以是复合语句,其中必须含
有改变条件表达式值的语句。
? 执行顺序
先执行循环体语句,后判断条件。
表达式 为 true 时,继续执行循环体
? 与 while 语句的比较:
– While 语句执行顺序
先判断表达式的值,为 true 时,再执行语句









对比下列程序:
程序 1:
#include<iostream.h>
void main()
{
int i,sum(0);
cin>>i;
while(i<=10)
{
sum+=i;
i++;
}
cout<<"sum="<<sum<<endl;
}









程序 2:
#include<iostream.h>
void main()
{
int i,sum(0);
cin>>i;
do {
sum+=i;
i++;
} while(i<=10);
cout<<"sum="<<sum<<endl;
}
前一页 休息 64
for 语句
语法形式
for (表达式 1;表达式 2;表达式 3) 语句
循环前先求解
为 true时执行循环体
每次执行完循环体后求解









前一页 休息 65
例 2-8
输入一个整数,求出它的所有因子。









#include <iostream.h>
void main(void)
{
int n,k;
cout << "Enter a positive integer,";
cin >> n;
cout << "Number " << n << " Factors ";
for (k=1; k <= n; k++)
if (n % k == 0)
cout << k << " ";
cout << endl;
}
运行结果 1:
Enter a positive integer,36
Number 36 Factors 1 2 3
4 6 9 12 18 36
运行结果 2:
Enter a positive integer,7
Number 7 Factors 1 7
前一页 休息 68
循环结构的嵌套
#include<iostream.h>
void main()
{
int i(1),a(0);
for(;i<=5;i++)
{
do{
i++;
a++;
}while(i<3);
i++;
}
cout<<a<<”,”<<i<<endl;
}









前一页 休息 69
例 2-9 编写程序输出以下图案
*
***
*****
*******
*****
***
*









#include<iostream.h>
void main()
{ int i,j,n=4;
for(i=1;i<=n;i++) //输出前 4行图案
{ for(j=1;j<=30;j++)
cout<<' '; //在图案左侧空 30列
for(j=1; j<=8-2*i ;j++)
cout<<' ';
for(j=1; j<=2*i-1 ;j++)
cout<<'*';
cout<<endl;
}
for(i=1;i<=n-1;i++) //输出后 3行图案
{ for(j=1;j<=30;j++)
cout<<' '; //在图案左侧空 30列
for(j=1; j<=7-2*i ;j++)
cout<<'*';
cout<<endl;
}
}
前一页 休息 72
循环结构与选择结构相互嵌套
#include<iostream.h>
void main()
{
int n;
for(n=100; n<=200; n++)
{
if (n%3!=0)
cout<<n;
}
}









前一页 休息 73
例 2-10
? 读入一系列整数,统计出正整数个数 i
和负整数个数 j,读入 0则结束。
? 分析:
– 需要读入一系列整数,但是整数个数不
定,要在每次读入之后进行判断,因此
使用 while循环最为合适。循环控制条件
应该是 n!=0。由于要判断数的正负并分
别进行统计,所以需要在循环内部嵌入
选择结构。









#include<iostream.h>
void main()
{ int i=0,j=0,n;
cout<<"请输入若干整数 (输入 0则结束 ),";
cin>>n;
while( n!=0 )
{ if(n>0) i++;
if(n<0) j++;
cin>>n ;
}
cout<<"正整数个数,"<<i<<" 负整数个数:
"<<j<<endl;
}
前一页 休息 75
break 和 continue 语句
? break语句
使程序从循环体和 switch语句内跳出,继
续执行逻辑上的下一条语句。不宜用在别
处。
? continue 语句
结束本次循环,接着判断是否执行下一次
循环。









前一页 休息 76
typedef语句
? 为一个已有的数据类型另外命名
? 语法形式
typedef 已有类型名 新类型名表 ;
? 例如
typedef double area,volume;
typedef int natural;
natural i1,i2;
area a;
volume v;







前一页 休息 77
枚举类型 — enum
? 只要将需要的变量值一一列举出来,
便构成了一个枚举类型。
? 枚举类型的声明形式如下:
enum 枚举类型名 {变量值列表 };
? 例如:
enum weekday {sun,mon,tue,wed,thu,fri,sat};







前一页 休息 78
枚举类型 — enum
? 枚举类型应用说明:
– 对枚举元素按常量处理,不能对它们赋值。
例如,不能写,sun=0;
– 枚举元素具有缺省值,它们依次为:
0,1,2,......。
– 也可以在声明时另行指定枚举元素的值,如:
enum weekday {sun=7,mon=1,tue,wed,thu,fri,sat};
– 枚举值可以进行关系运算。
– 整数值不能直接赋给枚举变量,如需
要将整数赋值给枚举变量,应进行强
制类型转换。







前一页 休息 79
例 2-11
? 设某次体育比赛的结果有四种可能:
胜( win)、负( lose)、平局( tie)、
比赛取消( cancel),编写程序顺序
输出这四种情况。
? 分析:由于比赛结果只有四种可能,
所以可以声明一个枚举类型,声明一
个枚举类型的变量来存放比赛结果。







#include <iostream.h>
enum game_result {WIN,LOSE,TIE,CANCEL};
int main()
{
game_result result;
enum game_result omit = CANCEL;
int count;
for (count = WIN ; count <= CANCEL ; count++)
{
result = (game_result)count;
if (result == omit)
{
cout << "The game was cancelled\n";
}
else
{
cout << "The game was played ";
if (result == WIN)
cout << "and we won!";
if (result == LOSE)
cout << "and we lost.";
cout << "\n";
}
}
return 0;
}
运行结果
The game was played and we won!
The game was played and we lost.
The game was played
The game was cancelled
前一页 休息 83
例 2-12
? 口袋中有红、黄、蓝、白、黑五种颜色的
球若干个。每次从口袋中取出 3个不同颜色
的球,问有多少种取法。
? 分析:由于球只能是五种颜色之一,故可
用枚举类型表示球的颜色。设取出的球为 i、
j,k,根据题意,i,j,k分别可以有五种
取值,且 i≠j≠k。可以用穷举法,逐个检验
每一种可能的组合,从中找出符合要求的
组合并输出。







#include<iostream.h>
void main()
{
enum color{red,yellow,blue,white,black};
enum color pri;
int n,loop,i,j,k;
char c;
n=0;
for(i=red;i<=black;i++)
for(j=red;j<=black;j++)
if(i!=j) //前两个球不同
{for(k=red;k<=black;k++)
if((k!=i)&&(k!=j)) //第三个球不同于前两个
{ n=n+1;
cout.width(4);
cout<<n;
for(loop=1;loop<=3;loop++)
{switch(loop)
{ case 1,pri=(enum color)i;
break;
case 2,pri=(enum color)j;
break;
case 3,pri=(enum color)k;
break;
default,break;
}
switch(pri)
{ case red,cout<<" red";
break;case yellow,cout<<" yellow";
break;case blue,cout<<" blue";
break;
case white,cout<<" white"; break;
case black,cout<<" black"; break;
default,break;
}}
cout<<endl;}
}
cout<<"total:"<<n<<endl;}
前一页 休息 87
结构体 —— 结构的声明
? 结构的概念
– 结构是由不同数据类型的数据组成的集合体。
? 声明结构类型
struct 结构名
{
数据类型 成员名 1;
数据类型 成员名 2;

数据类型 成员名 n;
};







前一页 休息 88
结构体 —— 结构的声明
? 举例:
struct student //学生信息结构体
{
int num; //学号
char name[20]; //姓名
char sex; //性别
int age; //年龄
float score; //成绩
char addr[30]; //住址
}







前一页 休息 89
结构体 —— 结构变量说明
? 变量说明形式
结构名 结构变量名;
? 注意:
– 结构变量的存储类型概念、它的寿命、可见
性及使用范围与普通变量完全一致。
– 结构变量说明在结构类型声明之后,二者也
可同时进行。
– 结构变量占内存大小可用 sizeof 运算求出:
sizeof(运算量 )







前一页 休息 90
结构体
—— 结构变量的初始化和使用
? 初始化
说明结构变量的同时可以直接设置初值。
? 使用
结构体成员的引用形式:
结构变量名,成员名







前一页 休息 91
例 2-13
结构体变量的初始化和使用
#include <iostream.h>
#include <iomanip.h>
struct student //学生信息结构体
{
int num; //学号
char name[20]; //姓名
char sex; //性别
int age; //年龄
}stu={97001,"Lin Lin",'F',19};







void main()
{
cout<<setw(7)<<stu.num<<setw(20)<<stu.name
<<setw(3)<<stu.sex<<setw(3)<<stu.age;
}
运行结果,
97001 Lin Lin F 19
前一页 休息 93
例 2-14
有三只动物,都具有重量和身长两个属性,现在
需要对它们的重量和身长赋值,并且输出它们的
重量。
#include <iostream.h>
struct animal
{
int weight;
int feet;
};
int main()
{
animal dog1,dog2,chicken;







dog1.weight = 15;
dog2.weight = 37;
chicken.weight = 3;
dog1.feet = 4;
dog2.feet = 4;
chicken.feet = 2;
cout << "The weight of dog1 is " << dog1.weight << "\n";
cout << "The weight of dog2 is " << dog2.weight << "\n";
cout << "The weight of chicken is "<< chicken.weight
<< "\n";
return 0;
}
运行结果
The weight of dog1 is 15
The weight of dog2 is 37
The weight of chicken is 3
前一页 休息 96
联合体
? 声明形式:
union 联合名
{
数据类型 成员名 1;
数据类型 成员名 2;

数据类型 成员名 n;
};
? 联合体类型变量说明的语法形式
联合名 联合变量名;
? 引用形式:
联合名,成员名







前一页 休息 97
例,union uarea
{ char c_data;
short s_data;
long l_data;
}
uarea c_data l_datas_data
联合体







前一页 休息 98
无名联合
? 无名联合没有标记名,只是声明一个成员项
的集合,这些成员项具有相同的内存地址,
可以由成员项的名字直接访问。
? 例:
union
{ int i;
float f;
}
在程序中可以这样使用:
i=10;
f=2.2;







前一页 休息 99
例 2-15
#include <iostream.h>
struct aircraft
{
int wingspan;
int passengers;
union
{
float fuel_load;
float bomb_load;
int pallets;
};
} fighter,bomber,transport;







int main()
{
fighter.wingspan = 40;
fighter.passengers = 1;
fighter.fuel_load = 12000.0;
bomber.wingspan = 90;
bomber.passengers = 12;
bomber.bomb_load = 14000.0;
transport.wingspan = 106;
transport.passengers = 4;
transport.pallets = 42;
transport.fuel_load = 18000.0;
fighter.pallets = 4;
cout << "The fighter carries "<<
fighter.pallets << " pallets.\n";
cout << "The bomber bomb load is " <<
bomber.bomb_load << "\n";
return 0;
}
运行结果:
The fighter carries 4 pallets.
The bomber bomb load is 14000
前一页 休息 102
作业
? 复习第二章,预习第三章
? 思考,2-1~2-17,2-21,2-22、
2-25~2-27
? 上机题,2-19,2-20,2-28,2-30、
2-31,2-33
? 实验二
前一页 休息 103