Download presentation
Presentation is loading. Please wait.
1
C++语言程序设计 第二章 C++简单程序设计
2
本章主要内容 C++语言概述 基本数据类型和表达式 数据的输入与输出 算法的基本控制结构 自定义数据类型
3
C++语言的产生 C++语言概述 C++是从C语言发展演变而来的,首先是一个更好的C 引入了类的机制,最初的C++被称为“带类的C”
于1994年制定了ANSI C++标准草案 于1998年11月被国际标准化组织(ISO)批准为国际标准,成为目前的C++
4
C++的特点 C++语言概述 全面兼容C 支持面向对象的方法 它保持了C的简洁、高效和接近汇编语言等特点 对C的类型系统进行了改革和扩充
5
C++程序实例—例2-1 C++语言概述 //2_1.cpp #include <iostream.h>
void main(void) { cout<<"Hello!\n"; cout<<"Welcome to c++!\n"; } 运行结果: Hello! Welcome to c++!
6
一个简单的C++程序 /* C语言的某些特征仍可沿用*/ #include "iostream.h" #include "stdio.h"
void print(); //函数声明 void main() { int i; char s[80]; print( ); cout<<“What‘s your name?\n”; // 用C++特有的方式输出数据 cin>>s; cout<<"How old are you?\n"; cin>>i; cout<<s<<" is "<<i<<" years old."; } void print( ) { printf("printf is also can be used\n"); 一个简单的C++程序
7
C++程序的基本组成 C++语言概述 (1)C语言中原有的规则和语句在C++中仍可继续使用,但C++又增添了很多新的风格。
(2)一个C++的程序是由一到若干个函数构成的,但其中必须有且仅有一个名称为main的函数存在。 (3)不管一个程序中有多个函数,只有main函数整个程序运行时的入口,程序运行时从此函数开始执行。但在程序中,main函数所处的位置可以任意。 (4)一个C++的函数是由两部分构成的,即函数的说明部分和函数体,函数的说明部分包括了函数的返回值的类型、函数的名称、圆括号、形参及形参的类型说明。函数体由一对大括号{}括起来,其内容是由若干条语句
8
C++语言概述 构成,函数体的内容决定了该函数的功能。 (5)C++对程序中的名称是大小写“敏感”的,除特殊情况下,应一律小写。
(6)程序中的注释:可以用/*…………*/或//(单行注释)对程序中的内容进行注释。二者的区别在于,采用/*…………*/方法时,注释可以写成多行,而采用//方法时,注释只能写成一行,它可单独占一行,也可写在某行程序代码的末尾。 (7)数据输出:除了使用printf( )函数,还可使用功能更强大、更方便的cout对象进行输出数据。格式如下: cout<<数据1<< 数据2<<……<< 数据n C++语言概述
9
C++语言概述 (8) 数据输入:除了使用scanf( )函数,还可使用功能更强大、更方便的cin对象进行数据输入。格式如下:
cin>>变量1>>变量2>>……>>变量n 如:上例中的语句cin>>s;表示给变量s输入一个值 (9) 在分别使用cout和cin进行数据的输出和输入时,需要在程序的开头嵌入”iostream.h”文件。在该头文件中定义了输入输出流对象cout和cin等。 (10) 一个C++的源程序文件在存盘时,要以.CPP为文件名后缀,而不是.C。 C++语言概述
10
C++字符集 C++语言概述 大小写的英文字母:A~Z,a~z 数字字符:0~9 特殊字符:
空格 ! # % ^ & * _(下划线) + = - ~ < > / \ ' " ; . , () [] {}
11
词法记号 C++语言概述 关键字 C++预定义的单词 标识符 程序员声明的单词,它命名程序正文中的一些实体
标识符 程序员声明的单词,它命名程序正文中的一些实体 文字 在程序中直接使用符号表示的数据 操作符 用于实现各种运算的符号 分隔符 () {} , : ; 用于分隔各个词法记号或程序正文 空白符 空格、制表符(TAB键产生的字符)、换行符(Enter键所产生的字符)和注释的总称
12
标识符的构成规则 C++语言概述 以大写字母、小写字母或下划线(_)开始。 可以由以大写字母、小写字母、下划线(_)或数字0~9组成。
大写字母和小写字母代表不同的标识符。
13
C++数据类型、运算符和表达式 数据类型 C++是一门强数据类型的语言,每一种数据一般都严格
义的数据类型,非基本数据类型包括指针、数组和结构以及 类类型等,非基本数据类型也称用户引入的数据类型。 本节重点介绍C++的基本数据类型,有关构造数据类型将在后面章节进行介绍。
14
数据类型 基本数据类型 指针类型 type* (含void*) 引用类型 type& (无void数据更无void&数据) 枚举类型 enum (枚举常数为有限个int型常数) 集合数据类型 数组类型 array [ ] 结构类型 struct 联合类型 union 类类型 class 整型 int short long 字符型 char(属于1字节的整型) 单精度浮点型float 实型 双精度浮点型double 长双精度浮点型 long double 布尔逻辑型 bool
15
基本数据类型表 类型名type 说明 长度 数据范围 bool 布尔逻辑型 1 true (1) false(0) char 字符型 l
-128~127 (0~255) unsigned char 无符号字符型 0~255 signed char 有符号字符型 -128~127 [signed] short [ int] 有符号短整型 2 -32768~32767 unsigned short [ int] 无符号短整型 [signed] int 有符号整型 2/4 unsigned [int] 无符号整型 2 /4 0~65535 [signed] long [int] 有符号长整型 4 ~ unsigned long [int] 无符号长型型 0~ float 浮点型 3.4*10e-38~~3.4*10e38 double 双精度型 8 1.7*10e-308~~1.7*10e308 long double 长双精度型 8/ 10 至少与double类型同 基本数据类型表
16
数据类型 ——常量与变量 基本数据类型和表达式 #include <iostream> using namespace std;
数据类型 ——常量与变量 基本数据类型和表达式 #include <iostream> using namespace std; 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= *r*r*h; cout<<v <<endl; } 变量先声 明后使用 符号常量 变量 Page 16 4
17
数据类型 ——整型数据 基本数据类型和表达式 #include <iostream> using namespace std;
数据类型 ——整型数据 基本数据类型和表达式 #include <iostream> using namespace std; 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= *r*r*h; cout<<v <<endl; } short unsigned short 2字节 int、 unsigned int 字节 long unsigned long 4字节 5
18
数据类型 —整型数据及取值范围 基本数据类型和表达式 类型 说明符 位数 数值范围 短整 short 16 -32768~32767
数据类型 —整型数据及取值范围 基本数据类型和表达式 类型 说明符 位数 数值范围 短整 short ~32767 基本 int ~(231-1) 长整 long ~(231-1) 无符号 unsigned short 16 0~ unsigned [int] 32 0~(232-1) unsigned long 32 0~(232-1)
19
数据类型 ——实型数据 基本数据类型和表达式 #include <iostream> using namespace std;
数据类型 ——实型数据 基本数据类型和表达式 #include <iostream> using namespace std; 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= *r*r*h; cout<<v<<endl; } 实型变量 缺省为double型 后缀 F(或 f) 为 float型 后缀 L(或 l) 为 long double 型 float 4字节 3.4×10±38 7位有效数字 double 8字节 1.7×10±308 15位有效数字 long double 8字节 实型常量
20
数据类型 ——字符型数据(一) 基本数据类型和表达式 字符常量 字符变量 字符数据在内存中的存储形式
数据类型 ——字符型数据(一) 基本数据类型和表达式 字符常量 单引号括起来的一个字符,如:'a', 'D', '?', '$' 字符变量 用来存放字符常量 例:char c1,c2; c1='a'; c2='A'; 字符数据在内存中的存储形式 以ASCII码存储,占1字节,用7个二进制位 Page 20
21
数据类型 ——字符型数据(二) 基本数据类型和表达式 字符数据的使用方法 字符串常量 C H I N A \0 a \0 a
数据类型 ——字符型数据(二) 基本数据类型和表达式 字符数据的使用方法 字符数据和整型数据之间可以运算。 字符数据与整型数据可以互相赋值。 字符串常量 例:"CHINA" "a" 'a' 所以:char c; c="a"; C H I N A \0 a \0 a Page 21
22
数据类型 ——布尔型数据 基本数据类型和表达式 布尔型变量的说明: 例:bool flag;
数据类型 ——布尔型数据 基本数据类型和表达式 布尔型变量的说明: 例:bool flag; 布尔型数据的取值: 只有 false 和 true 两个值
23
数据类型 ——变量初始化 基本数据类型和表达式
数据类型 ——变量初始化 基本数据类型和表达式 例: int a=3; double f=3.56; char c='a'; int c(5); Page 23
24
数据类型 —混合运算时的类型转换 基本数据类型和表达式 不同类型数据进行混合运算时,C++编译器会自动进行类型转换。
数据类型 —混合运算时的类型转换 不同类型数据进行混合运算时,C++编译器会自动进行类型转换。 为了避免不同的数据类型在运算中出现类型问题,应尽量使用同种类型数据。 可以采用强制类型转换: 例如: float c; int a,b; c=float(a)/float(b); 或 c= (float)a/(float)b;
25
变量的存储类型 基本数据类型和表达式 auto register extern static
属于一时性存储,其存储空间可以被若干变量多次覆盖使用。 register 存放在通用寄存器中。 extern 在所有函数和程序段中都可引用。 static 在内存中是以固定地址存放的,在整个程序运行期间都有效。
26
算术运算符与算术表达式 基本数据类型和表达式 基本算术运算符 优先级与结合性 ++, --(自增、自减)
* / (若整数相除,结果取整) %(取余,操作数为整数) 优先级与结合性 先乘除,后加减,同级自左至右 ++, --(自增、自减) 例:i++; j; Page 26
27
赋值运算符和赋值表达式 简单的赋值运算符"="
赋值运算符和赋值表达式 简单的赋值运算符"=" 基本数据类型和表达式 举例 n=n+5 表达式的类型 等号左边对象的类型 表达式的值 等号左边对象被赋值后的值 Page 27
28
赋值运算符和赋值表达式 复合的赋值运算符 基本数据类型和表达式
赋值运算符和赋值表达式 复合的赋值运算符 基本数据类型和表达式 有10种复合运算符: +=, -=, *=, /=, %=, <<=,>>=,&=,^=,|= 例 a+=3 等价于 a=a+3 x*=y+8 等价于 x=x*(y+8)
29
赋值运算符和赋值表达式 ——赋值表达式举例
赋值运算符和赋值表达式 ——赋值表达式举例 基本数据类型和表达式 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 29
30
逗号运算和逗号表达式 基本数据类型和表达式 格式 表达式1,表达式2,…,表达式n 求解顺序及结果
例 a=3*5 , a*4 最终结果为60 如:有语句int a=3,b=4;则表达式a++,b++,a+b的值为9。 如:设有int i;则表达式i=1,i++==2?i+1:i+4的值为6。 Page 30
31
关系运算与关系表达式 基本数据类型和表达式
关系运算是比较简单的一种逻辑运算,优先次序为: < <= > >= == != 优先级相同(高) 优先级相同(低) 关系表达式是一种最简单的逻辑表达式 其结果类型为 bool,值只能为 true 或 false。 例如:a>b,c<=a+b,x+y==3
32
逻辑运算与逻辑表达式 基本数据类型和表达式 逻辑运算符 !(非) &&(与) ||(或) 优先次序: 高 → 低
逻辑运算符 !(非) &&(与) ||(或) 优先次序: 高 → 低 逻辑表达式 例如:(a>b)&&(x>y) 其结果类型为 bool,值只能为 true 或 false
33
条件运算符与条件表达式 基本数据类型和表达式 一般形式 执行顺序 例: x=a>b? a:b; 表达式1?表达式2:表达式3
表达式1 必须是 bool 类型 执行顺序 先求解表达式1, 若表达式1的值为true,则求解表达式2,表达式2的值为最终结果 若表达式1的值为false,则求解表达式3,表达式3的值为最终结果 例: x=a>b? a:b;
34
条件运算符与条件表达式 基本数据类型和表达式 注意: 例: x=a>b? a:b; 条件运算符优级高于赋值运算符,低于逻辑运算符
表达式2、3的类型可以不同,条件表达式的最终类型为 2 和 3 中较高的类型。 例: x=a>b? a:b; ① ②
35
sizeof 运算符 基本数据类型和表达式 sizeof (1.0) = sizeof ( double ) = 8
结果值: “类型名”所指定的类型或“表达式”的结果类型所占的字节数。 例: sizeof(short) sizeof(x) sizeof (1.0) = sizeof ( double ) = 8 sizeof '1'= sizeof(char)=1,
36
位运算——按位与(&) 基本数据类型和表达式 运算规则 举例:计算 3 & 5 用途: 将两个运算量的每一个位进行逻辑与操作
3: 5:(&) 3 & 5: 用途: 将某一位置0,其它位不变。例如: 将 char 型变量 a 的最低位置 0: a = a & 0376; 取指定位。 例如:有 char c; int a; 取出 a 的低字节,置于 c 中:c = a & 0377;
37
位运算——按位或(|) 基本数据类型和表达式 运算规则 举例:计算 3 | 5 用途: 将两个运算量的每一个位进行逻辑或操作
3: 5:(|) 3 | 5: 用途: 将某些位置1,其它位不变。 例如:将 int 型变量 a 的低字节置 1 : a = a | 0xff;
38
位运算——按位异或(^) 基本数据类型和表达式 运算规则 举例:计算 071^052
两个操作数进行异或: 若对应位相同,则结果该位为 0, 若对应位不同,则结果该位为 1, 举例:计算 071^052 071: 052: (^) 071^052 :
39
位运算——按位异或(^) 基本数据类型和表达式 用途: 使特定位翻转(与0异或保持原值,与1异或取反)
例如:要使 低四位翻转: (^)
40
位运算——取反(~) 基本数据类型和表达式 单目运算符,对一个二进制数按位取反。 例: 025:0000000000010101
~025:
41
位运算——移位 基本数据类型和表达式 左移运算(<<) 右移运算(>>) 左移后,低位补0,高位舍弃。
右移后,低位:舍弃 高位:无符号数:补0 有符号数:补“符号位”
42
运算符优先级 基本数据类型和表达式 括号 ++,--,sizeof *, /, % +, - >,>=,<,<=
==, != 位运算 && || ?: 赋值运算 逗号运算 高 低
43
表 C++中运算符的优先级和结合性 优先级 运算符 结合性 1 () :: [] -> . .* ->* 自左至右 2
() :: [] -> . .* ->* 自左至右 2 ! ~ * & (类型) sizeof new[] delete[] 自右至左 3 * / % 4 + - 5 << >> 6 < <= > >= 7 == != 8 & 9 ^ 10 | 11 && 12 || 13 ?: 14 = += -= *= /= %= <<= >>= &= ^= |= 15 ,
44
混合运算时数据类型的转换 ——隐含转换 基本数据类型和表达式
混合运算时数据类型的转换 ——隐含转换 基本数据类型和表达式 一些二元运算符(算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符)要求两个操作数的类型一致。 在算术运算和关系运算中如果参与运算的操作数类型不一致,编译系统会自动对数据进行转换(即隐含转换),基本原则是将低类型数据转换为高类型数据。 char short int unsigned long unsigned long float double 低 高
45
混合运算时数据类型的转换 ——隐含转换 基本数据类型和表达式
混合运算时数据类型的转换 ——隐含转换 基本数据类型和表达式 当参与运算的操作数必须是bool型时,如果操作数是其它类型,编译系统会自动将非0数据转换为true,0转换为false。 位运算的操作数必须是整数,当二元位运算的操作数是不同类型的整数时,也会自动进行类型转换, 赋值运算要求左值与右值的类型相同,若类型不同,编译系统会自动将右值转换为左值的类型。
46
混合运算时数据类型的转换 ——强制类型转换
混合运算时数据类型的转换 ——强制类型转换 基本数据类型和表达式 语法形式: 类型说明符(表达式) 或 (类型说明符)表达式 强制类型转换的作用是将表达式的结果类型转换为类型说明符所指定的类型。
47
语句 声明语句 表达式语句 选择语句 循环语句 跳转语句 复合语句 标号语句
48
表达式语句 语 句 格式: 表达式语句与表达式的区别: 表达式; 表达式可以包含在其它表达式中,而语句不可。
语 句 格式: 表达式; 表达式语句与表达式的区别: 表达式可以包含在其它表达式中,而语句不可。 例:if ((a=b)>0) t=a; 不可写为:if ((a=b;)>0) t=a;
49
复合语句 语 句 将多个语句用一对大括号包围,便构成一个复合语句 例如 { sum=sum+i; i++; }
50
简单的输入、输出 向标准输出设备(显示器)输出 从标准输入设备(键盘)输入 例:int x;
cout<<“x=“<<x; 从标准输入设备(键盘)输入 cin>>x;
51
算法的基本控制结构 顺序结构 分支结构 循环结构
52
如何解决分支问题? 例2-2 算法的基本控制结构 输入一个年份,判断是否闰年。 分析: ① 年号能被4整除,但要排除同时能被100整除;
② 年号能被400整除。
53
#include <iostream> using namespace std; 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; } 53
54
运行结果: Enter the year: 2000 2000 is a leap year 54
55
if 语句 ——三种形式 算法的基本控制结构 真 假 表达式 语句1 语句2 真 假 表达式 语句 单分支if 语句 双分支if语句
56
if 语句 ——三种形式 算法的基本控制结构 真 假 表达式1 表达式2 语句1 语句2 语句3 语句4 表达式3 多分支if语句
57
if 语句 ——三种形式 算法的基本控制结构 if (表达式) 语句 if (表达式) 语句1 else 语句2
例:if (x>y) cout<<x; if (表达式) 语句1 else 语句2 else cout<<y; if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句 … else 语句 n
58
多分支if语句的例子 算法的基本控制结构 输入学生的成绩score,按分数输出其等级:score≥90为优,90>score≥80为良,80>score≥70为中等,70>score≥60为及格,score<60为不及格。
59
#include<iostream.h>
void main() { float score; cout<<"Input score(0~100):"; cin>>score; if(score>=90) cout<<"Excellent!"; else if(score>=80) cout<<"Good!"; else if(score>=70) cout<<"Right!"; else if(score>=60) cout<<"Pass!"; else cout<<"Failed!"; }
60
如何解决嵌套分支问题? 算法的基本控制结构 例2-3 输入两个整数,比较两个数的大小。
61
#include<iostream> using namespace std; 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; cout<<"x=y"<<endl; } 61
62
运行结果1: Enter x and y:5 8 x<y 运行结果2: Enter x and y:8 8 x=y 运行结果3:
62
63
if 语句 ——嵌套 算法的基本控制结构 一般形式 注意
else 语句 2 else if ( ) 语句 3 else 语句 4 注意 语句 1、2、3、4 可以是复合语句,每层的 if 与 else 配对,或用 { } 来确定层次关系。
64
特殊的多分支结构 算法的基本控制结构 例2-4 输入一个0~6的整数,转换成星期输出。
65
#include <iostream> using namespace std; 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; } 65
66
switch 语句 算法的基本控制结构 一般形式 执行顺序
{ case 常量表达式 1:语句1 case 常量表达式 2:语句2 ┆ case 常量表达式 n:语句n default : 语句n+1 } 可以是整型、字符型、枚举型 每个常量表达式的值不能相同,次序不影响执行结果。 可以是多个语句,但不必用{ }。 执行顺序 以case中的常量表达式值为入口标号,由此开始顺序执行。因此,每个case分支最后应该加break语句。
67
使用switch语句应注意的问题 算法的基本控制结构 case分支可包含多个语句,且不用{ }。 表达式、判断值都是int型或char型。
若干分支执行内容相同可共用一组语句。
68
如何有效地完成重复工作 例2-5 算法的基本控制结构 求自然数1~10之和
分析:本题需要用累加算法,累加过程是一个循环过程,可以用while语句实现。
69
#include<iostream> using namespace std; void main() {
int i(1), sum(0); while(i<=10) sum+=i; //相当于sum=sum+i; i++; } cout<<"sum="<<sum <<endl; 运行结果: sum=55 69
70
while 语句 算法的基本控制结构 形式 执行顺序 while (表达式) 语句 先判断表达式的值,为 true 时,再执行语句。
可以是复合语句,其中必须含有改变条件表达式值的语句。 执行顺序 先判断表达式的值,为 true 时,再执行语句。
71
先执行循环体,后判断条件的情况 算法的基本控制结构 例2-6 输入一个整数,将各位数字反转后输出。
72
#include <iostream> using namespace std; 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; 72
73
The number in reverse order is 563
运行结果: Enter the number: 365 The number in reverse order is 563 73
74
do-while 语句 算法的基本控制结构 一般形式 执行顺序 与while 语句的比较: do 语句 while (表达式)
可以是复合语句,其中必须含有改变条件表达式值的语句。 执行顺序 先执行循环体语句,后判断条件。 表达式为 true 时,继续执行循环体 与while 语句的比较: While 语句执行顺序 先判断表达式的值,为true 时,再执行语句
75
对比下列程序: 算法的基本控制结构 程序2: 程序1: #include<iostream>
using namespace std; void main() { int i, sum(0); cin>>i; do { sum+=i; i++; } while(i<=10); cout<<"sum="<<sum<<endl; } 程序1: #include<iostream> using namespace std; void main() { int i, sum(0); cin>>i; while(i<=10) sum+=i; i++; } cout<<"sum="<<sum<<endl; } 75
76
for 语句 算法的基本控制结构 语法形式 for (表达式1;表达式2;表达式3) 语句 循环前先求解 每次执行完循环体后求解
为true时执行循环体 每次执行完循环体后求解
77
例2-8 算法的基本控制结构 输入一个整数,求出它的所有因子。
78
#include <iostream> using namespace std; 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; } 78
79
Enter a positive integer: 36 Number 36 Factors 1 2 3 4 6 9 12 18 36
运行结果1: Enter a positive integer: 36 Number Factors 运行结果2: Enter a positive integer: 7 Number 7 Factors 1 7 79
80
例2-9 编写程序输出以下图案 算法的基本控制结构 * *** ***** *******
81
#include<iostream> using namespace std; 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; } 81
82
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; } 82
83
循环结构与选择结构相互嵌套 算法的基本控制结构 #include<iostream> using namespace std;
void main() { int n; for(n=100; n<=200; n++) { if (n%3!=0) cout<<n; }
84
例2-10 算法的基本控制结构 读入一系列整数,统计出正整数个数i和负整数个数j,读入0则结束。 分析:
需要读入一系列整数,但是整数个数不定,要在每次读入之后进行判断,因此使用while循环最为合适。循环控制条件应该是n!=0。由于要判断数的正负并分别进行统计,所以需要在循环内部嵌入选择结构。
85
#include<iostream> using namespace std; 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; 85
86
break 和 continue 语句 算法的基本控制结构 break语句 continue 语句
使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句。不宜用在别处。 continue 语句 结束本次循环,接着判断是否执行下一次循环。
87
typedef语句 自定义数据类型 为一个已有的数据类型另外命名 语法形式 例如 typedef 已有类型名 新类型名表;
typedef double area,volume; typedef int natural; natural i1,i2; area a; volume v;
88
枚举类型—enum 自定义数据类型 只要将需要的变量值一一列举出来,便构成了一个枚举类型。 枚举类型的声明形式如下: 例如:
enum weekday {sun,mon,tue,wed,thu,fri,sat};
89
枚举类型—enum 自定义数据类型 枚举类型应用说明: 对枚举元素按常量处理,不能对它们赋值。例如,不能写:sun=0;
枚举元素具有缺省值,它们依次为: 0,1,2,......。 也可以在声明时另行指定枚举元素的值,如: enum weekday {sun=7,mon=1,tue,wed,thu,fri,sat}; 枚举值可以进行关系运算。 整数值不能直接赋给枚举变量,如需 要将整数赋值给枚举变量,应进行强 制类型转换。
90
例2-11 自定义数据类型 设某次体育比赛的结果有四种可能:胜(win)、负(lose)、平局(tie)、比赛取消(cancel),编写程序顺序输出这四种情况。 分析:由于比赛结果只有四种可能,所以可以声明一个枚举类型,声明一个枚举类型的变量来存放比赛结果。
91
#include <iostream> using namespace std;
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; 91
92
The game was played and we won! The game was played and we lost.
运行结果 The game was played and we won! The game was played and we lost. The game was played The game was cancelled 92
93
结构体——结构的声明 自定义数据类型 结构的概念 声明结构类型 结构是由不同数据类型的数据组成的集合体。 struct 结构名 {
数据类型 成员名 1; 数据类型 成员名 2; : 数据类型 成员名 n; };
94
结构体——结构的声明 自定义数据类型 举例: struct student //学生信息结构体 { int num; //学号
char name[20]; //姓名 char gender; //性别 int age; //年龄 float score; //成绩 char addr[30]; //住址 }
95
结构体——结构变量说明 自定义数据类型 变量说明形式 注意: 结构名 结构变量名;
结构名 结构变量名; 注意: 结构变量的存储类型概念、它的寿命、可见性及使用范围与普通变量完全一致。 结构变量说明在结构类型声明之后,二者也可同时进行。 结构变量占内存大小可用 sizeof 运算求出: sizeof(运算量)
96
结构体 ——结构变量的初始化和使用 自定义数据类型 初始化 说明结构变量的同时可以直接设置初值。 使用
结构体成员的引用形式: 结构变量名.成员名
97
例2-12 自定义数据类型 结构体变量的初始化和使用 #include <iostream>
#include <iomanip> using namespace std; struct student //学生信息结构体 { int num; //学号 char name[20]; //姓名 char gender; //性别 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; } 运行结果: Lin Lin F 19
98
联合体 自定义数据类型 声明形式: 联合体类型变量说明的语法形式 引用形式: union 联合名 { 数据类型 成员名 1;
数据类型 成员名 1; 数据类型 成员名 2; : 数据类型 成员名 n; }; 联合体类型变量说明的语法形式 联合名 联合变量名; 引用形式: 联合名.成员名
99
联合体 自定义数据类型 例: union uarea { char c_data; short s_data; long l_data; }
100
无名联合 自定义数据类型 无名联合没有标记名,只是声明一个成员项的集合,这些成员项具有相同的内存地址,可以由成员项的名字直接访问。 例:
union { int i; float f; } 在程序中可以这样使用: i=10; f=2.2;
Similar presentations