《北京大学c教学教程.ppt》由会员分享,可在线阅读,更多相关《北京大学c教学教程.ppt(314页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C+语言程序设计电子教案 教师:李立,第一章 C+语言概述,1.1 C+语言的简史与特点 一、简史 C+语言是1980年由Bell实验室开发的一种面向对象的程序设计语言,它是在C语言的基础上发展起来的。最初被称为“带类的C”,1983年更名为C+。,第一章 C+语言概述,二、特点 1、继承了C语言的优点和市场优势。 2、增加了面向对象机制。 3、弥补了C语言不支持代码重用、不适 宜开发大型软件的不足。,第一章 C+语言概述,1.2 简单的C+程序 例1:设计一个最简单的C+程序。 void main( ) ,说明一 说明二 说明三 说明四,第一章 C+语言概述,一、程序和程序文件 1、程序:用
2、计算机语言对程序要完成 任务的描述。 2、程序文件(源程序文件):存储程 序的文本文件。名称为:.cpp,返回,第一章 C+语言概述,二、函数和函数定义 1、函数:具有特定功能的程序模块。 2、函数定义格式: 类型修饰符 函数名(形式参数表)函数体 如:double Area(double r) return 3.14rr; 注:每个C+程序都由一个或多个函数组成。,返回,第一章 C+语言概述,三、主函数( main函数) 1、每个C+程序至少要有一个函数,这 个不可缺少的函数就称为主函数,约 定的函数名为main。 2、主函数是程序的入口。一个应用程序 是从主函数中第一个语句开始执行。,返回
3、,第一章 C+语言概述,四、字母的大小写 1、在C+程序中,字母的大小写具有 不同的含义。 如:main、Main、MAIN表示不同的名称。 2、主函数的名称只能是main。,返回,第一章 C+语言概述,例2:设计一个程序,显示“同学们,你们好!”。 #include void main( ) cout ”同学们,你们好!”; 此程序的输出结果为: 同学们,你们好!,说明一 说明二 说明三 说明四 说明五 说明六,第一章 C+语言概述,一、C+语句 1、基本语句 以分号;作为结束标志。 如: cout ”同学们,你们好!”; 2、复合语句 用大括弧 括起来的语句序列。 cout ” 你们好!”
4、; cout ” 大家好!”;,返回,第一章 C+语言概述,二、程序书写风格 一行中可以有多个语句; 一个语句也可以分布在连续的若干行中。 如: cout ” 你们好!”; cout ” 大家好!”; cout ” 你们 好!”;,返回,第一章 C+语言概述,三、常量 1、常量是程序中数据的一种重要的表现 形式,常量的值在程序运行过程中不 可改变。 2、常用常量 字符常量 如: a 字符串常量 如: ” string” 整型常量 如:345 实型常量 如:3.45,返回,第一章 C+语言概述,四、cout和数据的显示输出 1、 cout:连接显示器的C+输出流对象。 2、 :输出操作符。,第一
5、章 C+语言概述,3、显示输出语句的格式: cout 表达式【 表达式】 ; 注:【 】中内容可有可无, 若有,可重复多次。 如:cout100; 屏幕输出 100 cout100200100+200; 屏幕输出 100200300,第一章 C+语言概述,4、插入空格:(空格符为 ) 如: cout 100 200 100+200; 屏幕输出 :100 200 300,第一章 C+语言概述,5、换行输出 换行符号:n 换行控制符:endl 如:cout 100n200; cout 100endl200; 则这两个语句的输出结果相同: 100 200,返回,第一章 C+语言概述,五、编译预处理命
6、令#include 1、#:预处理命令的标志。 2、 #include:包含命令; 把一个文本文件的内容插入到该命令处。 3、命令参数; 给出要插入文件的文件名。,返回,第一章 C+语言概述,六、头文件:以h为扩展名的文本文件 如果程序文件中引用到的函数、变量、 常量、对象、数据类型等是由别的文件 提供的,则必须在程序文件的开始部分 用#include命令把有关的头文件包含进来。,返回,第一章 C+语言概述,例3:设计函数hello,通过显示“, 你们好!”,向指定的人问好。 #include void hello(chars) coutendls”,你们好!”; void main( ) h
7、ello( ”同学们” ); hello (”朋友们”); ,说明一 说明二,第一章 C+语言概述,该程序的运行结果,是在屏幕上显示输出: 同学们,你们好! 朋友们,你们好!,第一章 C+语言概述,一、函数调用 1、函数调用的格式: 函数名(实在参数表) 2、实在参数表中的参数必须在数量和类型 上与相应函数定义中的形式参数相一致。 3、在函数调用过程中,首先将实参的值传 给形参。,第一章 C+语言概述,4、在函数调用过程中,程序执行从函数调 用处转移到被调用函数定义处,待此函 数执行完毕,再返回到函数调用处的下 一个语句继续执行。,返回,第一章 C+语言概述,二、程序的注释 两种注释形式: 符
8、号“/”之后的内容。只能占一行。是C+ 特有的一种注释形式。 一对符号“/”与“/”之间的内容。可以占 多行。是从C语言继承的一种注释形式。,返回,第一章 C+语言概述,例4:设计一个函数Area,根据给出的圆的半 径,计算出圆的面积。 #include #define PI 3.1416 double Area(double r) return PIrr; void main( ) double radius,area; coutradius; area=Area(radius); coutendl ”输出面积” area; ,说明一 说明二 说明三 说明四 说明五 说明六,第一章 C+语言
9、概述,一、函数的返回值 1、函数返回值的类型由类型修饰符确定。 2、有返回值的函数调用可以作为表达式。 二、预处理命令#define和符号常量 #define 符号常量 常数 如:#define PI 3.1416,返回,第一章 C+语言概述,三、变量及变量的数据类型 1、变量:程序中数据的一种表现形式, 其值在程序运行过程中可以改变。 2、变量必须先定义后使用。 3、变量的定义格式: 类型修饰符 变量名表; 如:double radius,area;,返回,第一章 C+语言概述,四、标识符 1、为函数、变量等命名时所用的符号。 2、由大小写字母、下划线、数字这三种 字符组成,其中第一个字符必
10、须是大 小写字母或下划线。,返回,第一章 C+语言概述,五、赋值 1、赋值操作符 = 2、赋值语句的格式 : 变量=表达式; 如: circum=2 PIradius;,返回,第一章 C+语言概述,六、cin和键盘输入 1、 cin:连接键盘的输入流对象。 2、 :输入操作符 3、键盘输入语句的格式: cin 变量【 变量】; 注:【 】中内容可有可无,也可重复多次。 如:int a,b,c; cina; cinabc;,返回,第一章 C+语言概述,1.3 程序的编辑、编译、连接和运行 一、应用程序开发的四个步骤: 编辑、编译、连接和运行 1、编辑 输入、修改程序。通过编辑得到的程序 称为源程
11、序。源程序以文本格式保存在 源程序文件中。扩展名为CPP。,第一章 C+语言概述,2、编译 分析源程序文件中的源程序,生成目标 程序,保存在目标程序文件中。扩展名 为OBJ。 3、连接 将若干个目标程序加以归并、整理,为所有的函数、变量等安排具体的地址,生成可执行程序文件。扩展名为EXE。,第一章 C+语言概述,4、运行 按目的划分,运行分为三种: 应用运行 测试运行 调试运行。,第一章 C+语言概述,示意图:,编辑,编译,连接,运行,正确?,开始,源文件,目标文件,可执行文件,否,是,结束,c1.cpp,c1.obj,c1.exe,c2.obj c3.obj,应用程序的开发是一个由编辑开始,
12、经过编译、 连接和运行又回到编辑的反复循环的过程。,第一章 C+语言概述,二、集成化编译系统(集成化开发环境) 1、集文字处理、编译、连接、项目管理、 程序排误等多功能为一体的软件开发 工具。 2、最常用的集成化编译系统 Visual C+(VC 6.0) C+ Builder 4.0(CB 4.0),第二章 基本数据类型与表达式,2.1 C+数据类型概述 一、C+固有的数据类型 1、整型类(int,short,long,char,enum,bool) 2、实型类(float,double,long double) 3、数组 4、指针类(指针,引用) 5、记录类(struct,union),第
13、二章 基本数据类型与表达式,二、几点注意 1、基本数据类型:整型类和实型类。 2、C+程序中的数据主要体现为常量和变量。 3、不同数据类型的数据存储格式不同,所 能实施的操作也不相同。,第二章 基本数据类型与表达式,2.2 整型数据 一、各种整型数据的基本情况(见表2-1) 二、整型(int)常量的表示 1、整型常量的表示方法: 十进制:无前缀。如:12 八进制:0前缀。如:012 十六进制:0 x(或0X)前缀。如:0 x12 无符号数: U(或u)后缀。如:12u,第二章 基本数据类型与表达式,2、短整型(short)常量的表示方法: 由于短整型常量在求值过程中会被无条件地转换为整型常量,
14、因此短整型常量是借助于整型常量来表示的。 3、长整型(long)常量的表示方法: 在整型常量表示方法的基础上加L(或l)后缀。如:012 L,第二章 基本数据类型与表达式,三、整型变量的定义与初始化 1、定义格式: 类型修饰符 变量名=表达式 【,变量名=表达式 】; 如:int a; int a=3; int a,b,c; int a,b=4,c=5; 注:int a=3;,int a; a=3;,第二章 基本数据类型与表达式,2、如果初始化数据的类型与所定义的变量的类型不一致,该数据将被转换为与变量类型相同。 如:int s=109L; long y=99;,第二章 基本数据类型与表达式,
15、2.3 字符型数据 一、字符型数据的基本情况(见表2-2) 二、字符型常量的表示 1、除,”,之外的可显示字符用该字符直接表示,但必须用 括起来。如: a 2、单引号内用后跟一字母表示某些控制字符。,第二章 基本数据类型与表达式,3、单引号内用后跟一数被无条件地理解为 八进制数,表示该代码所代表的字符。 如:15代表CR 4、单引号内用后跟一16进制数(以X或x打 头)表示该代码所代表的字符。 如:X0D代表CR,第二章 基本数据类型与表达式,5、 (单引号)” (双引号) (反斜杠) 的表示: (单引号): ” (双引号): ” (反斜杠): ,第二章 基本数据类型与表达式,6、字符串常量用
16、双引号括起来的字符序列 表示。如:”hello ” 0:字符串结束符。字符串结束符不显式地表示出来,计算字符串长度时也不把它包含在内,但它占一个字节的存储空间。 如:”hello ”长度为5,但是占6个字节的存储空间。,第二章 基本数据类型与表达式,三、字符型变量的定义和初始化 类型修饰符 变量名=表达式 【,变量名=表达式 】; 如:char c1,c2,c3; char c1=x ,c2= y ,c3= z ;,第二章 基本数据类型与表达式,四、字符型与整型的关系 1、在计算机内部,每个字符都与一个整 型的代码相对应。 如: A 的代码是65,a 的代码是97。 2、在表达式求值过程中,所
17、有的字符将 被转换为与其代码等值的整数。 如:执行cout A+ B; 结果是131。,第二章 基本数据类型与表达式,3、在输入输出时,C+的输入流和输出流可明确区分这两种数据类型。 如:cout A ; 输出结果为A cout 65 ; 输出结果为65,第二章 基本数据类型与表达式,2.4 枚举型数据 一、枚举型数据的基本情况(见表2-3) 1、枚举是一种用户自定义的数据类型, 使用前必须先定义。 2、枚举类型的值域由用户定义的一组 符号常量限定。,第二章 基本数据类型与表达式,二、枚举类型的定义和枚举变量的定义 1、枚举类型的定义格式 enum 枚举名符号表; 如:enum WEEKDAY
18、Sun,Mon,Tue,Wed,Thu,Fri,Sat;,第二章 基本数据类型与表达式,2、枚举变量的定义 (1)用已定义的枚举类型名来定义枚举变量。 如:WEEKDAY w1,w2; WEEKDAY w1= Wed,w2= Sat; (2)定义枚举类型的同时定义枚举变量。 如: enum WEEKDAYSun,Mon,Tue,Wed,Thu,Fri, Satw1,w2;,第二章 基本数据类型与表达式,三、枚举型与整型的关系 1、枚举中的符号常量与整数有一一对应的关系,即每个符号常量对应一个整数。 (1)枚举中的符号常量依次与0,1,2对应 如:enum WEEKDAYSun,Mon,Tue,
19、Wed,Thu,Fri,Sat;,0 1 2 3 4 5 6,第二章 基本数据类型与表达式,(2)任意规定其对应关系 如:enum SomeDigitsONE=1,TWO,FIVE=5,SIX, SEVEN; 其中符号常量与整数的对应关系为: ONE=1,TWO=2,FIVE=5,SIX=6,SEVEN=7 注:可用=为一个符号常量规定任意的对应整数;该整数加1就是下一个符号常量默认的对应整数。,第二章 基本数据类型与表达式,2、在表达式求值过程中,枚举型被无条件转换为相应的整型。 如:已知今天的值,求明天是星期几。 WEEKDAY nextDayOf(WEEKDAY today) if(to
20、day=Sat) return Sun; return today+1; ,第二章 基本数据类型与表达式,3、枚举型数据的输入和输出都是借助于 整数来实现的。 如:SomeDigits digit=TWO; coutd;则要使d的值为Fri,应键入5。,第二章 基本数据类型与表达式,2.5 实型数据 一、实型数据的基本情况(见表2-4) 二、实型常量的表示 1、双精度(double)常量的表示 (1)常规表示法 如:32.3 0.323 (2)科学表示法 如:3.23e+1 3.23e-1,第二章 基本数据类型与表达式,2、单精度(float)常量的表示: 在双精度常量表示的基础上加F(或f)
21、后缀。 如: 32.3F 3.23e+1F 3、长双精度(long double)常量的表示: 在双精度常量表示的基础上加 L(或l)后缀。 如: 32.3L 3.23e+1L,第二章 基本数据类型与表达式,三、实型变量的定义和初始化 类型修饰符 变量名=表达式 【,变量名=表达式 】; 如:double x,y; double x=1.23,y=34.2;,第二章 基本数据类型与表达式,2.6 符号常量与常值变量 一、符号常量 1、定义一个符号来代表某个常量。 如:#define PI 3.1416 2、使用符号常量的好处: 提高程序的可读性。 提高程序的可维护性。 提高程序的一致性。,第二
22、章 基本数据类型与表达式,二、常值变量 1、在一般变量的定义前加上保留字const。 如:const double PI=3.1416; 2、常值变量在定义时必须初始化,且在 程序运行中保持初始值不变。,第二章 基本数据类型与表达式,2.7 数值表达式 一、无操作符的表达式简单表达式 1、最简单的表达式:常量、变量、函数调用 2、每个表达式都有一个值: 常量的值:常量数据本身。 变量的值:存于该变量空间的数据。 函数的值:函数返回的数据。 3、数值表达式:整型类表达式和实型类表达式,第二章 基本数据类型与表达式,二、算术操作符 +,-,/,%,+,- 1、/ :对于整型和实型有不同的意义。 (
23、1)若两个操作数都是整数,则为整除操作(求商,舍余),操作结果为整数。 如:10/3=3 (2)只要两个操作数中有一个为实数,则操作结果为实数。 如:10.0/3=3.3333,第二章 基本数据类型与表达式,2、%:只用于整数的求余操作(求余,舍商)。如:10%3=1 3、+,-(取正,取负):一元操作符,在表达式中可以跟在其他类型的操作符的后面,但不能跟在+(加号),-(减号) 后面。 如:p+q i/-3 () P+q i-3 () 注:两个操作符在一起,最好使用( ) 如: p(+q ) i/(-3 ),第二章 基本数据类型与表达式,三、位操作符 , |, 3、赋值操作符可连续使用。 如
24、:执行k=m=7;则k和m的值都为7。,第二章 基本数据类型与表达式,五、复合赋值操作符 +=,-=,=,/=,%=,=,|=, 例2:int k,d=5; k=+d2; 结果为:d=6,k=12,k+=1; /k=k+1;,m=k;,d+=1; /d=d+1;,k=d2;,第二章 基本数据类型与表达式,2、 +(后增1,如i +) - (后减1,如i -) 变量先以原值参与表达式的计算,然后对 变量增1(或减1) 。 (先计算,后变值。),第二章 基本数据类型与表达式,例1: m=k +; 例2:int k,d=5; k=d + 2; 结果为:d=6,k=10,m=k;,k+=1; /k=k
25、+1;,k=d2;,d+=1; /d=d+1;,第二章 基本数据类型与表达式,七、sizeof操作符 1、作用:计算一数据或数据类型所占空间 的字节数。 2、格式 例:double d=3; coutsizeof(5) sizeof(d+2) sizeof(long double);,sizeof(类型修饰符),sizeof(表达式),第二章 基本数据类型与表达式,八、操作符的优先级和结合性 1、优先级(见附录A) 当一个表达式中有多个操作符时,优先级高的先执行。如:22-25; 2、结合性,从右向左:一元、赋值及复合赋值操作符,从左向右:除一元、赋值及复合赋值操作符外,第二章 基本数据类型与
26、表达式,若表达式中相邻的两个操作符优先级 相同,那么先执行哪个操作符,就由 前一个操作符的结合性确定。 如:k=j+=5;,从左向右:先执行前一个操作符,从右向左:先执行后一个操作符,第二章 基本数据类型与表达式,3、( )具有最高的优先级,可强制改变运 算顺序。如:x+3/y (x+3)/y 4、C+表达式与数学表达式的区别 (1)所有字符写在同一水平线上。 (2)算术运算符与数学中的运算符在写法 上有所区别。 (3)算术运算符不能省略。3ab,xx,3ab,第二章 基本数据类型与表达式,(4)一些运算用函数实现。 pow:乘方 如: sqrt:开平方 如: log:自然对数 如:lnx l
27、og(x) log10:常用对数 如:lgx log10(x) exp:以e为底的乘幂 如: exp(2.5) sin:正弦 如:sinx sin(x) cos:余弦 如:cosx cos(x),pow(a,2x),sqrt(a),第二章 基本数据类型与表达式,使用这些函数时应注意: 1、参数必须放在( )中。 2、在程序开始必须加上语句 #include (5)括号无大、中、小之分,全部用小括 号( )来表示,而且可以嵌套。,第二章 基本数据类型与表达式,九、类型的自动转换与强制转换 1、自动转换 当表达式中一个操作符的两个操作数类型不同时,其中一个操作数的类型将自动转换成与另一个操作数的类
28、型相同。 (1)转换的优先顺序(见图2-1),第二章 基本数据类型与表达式,(2)转换规律 短的向长的靠拢,有符号的向无符号的靠拢; 整型向实型靠拢,低精度的向高精度的靠拢。 例:4+23L-5.1 4L +23L-5.1 27L-5.1 27.0-5.1 21.9,第二章 基本数据类型与表达式,(3)转换规律不适用的两种操作 只针对特定类型的操作。 (两边向操作符靠拢) 赋值或复合赋值操作。 (右边向变量靠拢) 例:int k=3; double d=2.718; k+=d; /k=k+d; coutk; 语句执行后的输出结果为5。,第二章 基本数据类型与表达式,2、强制转换 (1)利用类型
29、修饰符控制类型转换的过程。 (2)格式: (类型修饰符)表达式 /继承C语言格式 类型修饰符(表达式) /C+特有的格式 如:float(j) 或 (float)j、(float)(j) int(3.14+i) 或 (int)(3.14+i) 3、只有兼容的数据类型才能相互转换。,第二章 基本数据类型与表达式,2.8 逻辑型数据与逻辑表达式 一、逻辑型数据的基本情况(见表2-5) 1、逻辑型是用来判别真、假状态的数据类型。 2、逻辑常量只有两个:true(真)和false(假) 3、逻辑变量的定义与初始化(格式同整型变量) 如:bool x; bool x=true; bool x,y,z;
30、bool x=false,y=true,z=true;,第二章 基本数据类型与表达式,二、逻辑表达式 1、无操作符的逻辑表达式简单逻辑表达式 (逻辑常量、逻辑变量和逻辑型函数调用) 2、关系操作符和关系表达式 (1)关系操作符(=,!=,=,=) 用于判断两个操作数是否相等或比较两者的 大小,比较结果为false或true。 如:-3!=3 (值为true) -3=3 (值为false) (2)关系表达式:由关系操作符构成的逻辑 表达式。,第二章 基本数据类型与表达式,3、逻辑操作符和逻辑表达式 (1)逻辑操作符(! | 若一个条件为false ,则另一 个条件必为true。那么这两个条件互
31、为相反条件。 如:xy和x=y互为相反条件。,第二章 基本数据类型与表达式,2、构造相反条件的方法 使用! 如:xy的相反条件为!(xy) 利用配对关系(=和!=,和=) 如:不用操作符!,xy+3,第二章 基本数据类型与表达式,五、等价条件 1、若两个逻辑表达式在任何情况下同为false或同为true,则这两个表达式所表达的条件称为等价条件。 如:xy和!(x=y)为等价条件,第二章 基本数据类型与表达式,2、典型的等价形式 !E E !(x=y) x!=y !(x!=y) x=y !(xy) xy !(x=y !(x=y) xy,相反条件的相反条件 等价于原条件。,第二章 基本数据类型与表
32、达式,!(E1 int j=3; coutendlj+k j=k; 输出结果为: 4 0,第二章 基本数据类型与表达式,2、在用数值数据对逻辑变量进行初始化 或者赋值时,任何非0值都转换为1。 例:bool k=9,h; h=5; coutk h; 输出结果为:1 1 注:逻辑型数据的输入和输出是借助整数 0和1来实现的。,第二章 基本数据类型与表达式,3、逻辑操作符 cinx; w=x100 ? 0 : x3; coutw; 若输入20,则输出60;若输入120,则输出0; 4、表达式1和表达式2应该是同一数据类型的表达式,若不同则进行类型转换。,第二章 基本数据类型与表达式,5、表达式1和
33、表达式2也可以是条件表达式, 即条件表达式可以嵌套。 例:x0 ? 1 : (x0 1 x=0 x0 : -1 x=0 : 0,第二章 基本数据类型与表达式,2.9 自定义类型修饰符 1、用自定义的标识符来代表一个特定的 数据类型。 2、格式:typedef 类型修饰符说明; 例:typedef int DISTANCE; DISTANCE i,Beijing_to_Tianjing; int i,Beijing_to_Tianjing;,第二章 基本数据类型与表达式,3、作用 提高程序的可读性。 提高程序的可维护性。 避免类型使用上的不一致性。 例:已知程序中用unsigned char型数
34、据表示年龄,为了增加可读性,决定将之命名为AGE,则完成命名的定义是: typedef unsigned char AGE;,第二章 基本数据类型与表达式,2.10 表达式的副作用与表达式语句 一、表达式的副作用 1、在表达式的求值过程中不但要提取变 量的值,还可能改变变量的值。 如:k=m+ 2、表达式能产生副作用的原因:引入了 具有副作用的操作。,第二章 基本数据类型与表达式,赋值(=) 复合赋值(+=, =, =,/=,%=, =,|=, cout(k+=2); cout k; 输出结果为:5 5,第二章 基本数据类型与表达式,4、可对同一变量连续施加若干个“作用 于变量的操作”。 例:
35、 int k=3; cout+(k+=2); cout k; 输出结果为:6 6,第二章 基本数据类型与表达式,注:(1) “作用于变量的操作”只能施加 于变量对象。 如:(p+3) =k, +5, 100=p都是错误的。 (2)当若干个“作用于变量的操作”施加于 同一变量时,除了最后一个外,不得 有后增1或后减1操作。 如:k+=5是错误的.,第二章 基本数据类型与表达式,二、表达式副作用的应用 1、逗号操作符与逗号表达式 (1)逗号操作符:, (2)格式:表达式1,表达式2 (3)逗号表达式的值:逗号表达式的值 就是表达式2的值。 如:由x=(i+,j)可知:x与j同值。,第二章 基本数据
36、类型与表达式,2、表达式语句 (1)表达式作为语句来使用。 (2)构成:表达式后加分号;。 (3)功能:表达式作为语句使用时,它的功能通过副作用来体现。因此把没有副作用的表达式作为语句使用是无意义的。 如:x+=5;(有意义)k+1;(无意义),第三章 C+程序的流程控制,3.1 流程控制与程序结构 一、流程控制 控制程序中语句的执行顺序。 二、流程控制方式: 顺序控制、条件分支控制、循环控制。 三、程序结构种类: 顺序结构、条件分支结构、循环结构。,第三章 C+程序的流程控制,1、顺序流程 程序中的语句按先后顺序依此执行。 如:(1)int i; (2)cini; (3)couti2; 计算
37、机按语句的先后顺序依此执行 (1)(2)(3),第三章 C+程序的流程控制,2、条件分支结构 (1)由特定的条件决定执行哪个语句。 (2)分类 单分支结构 多分支结构 (3)条件分支结构用if语句或switch语句实现。,第三章 C+程序的流程控制,3、循环结构 (1)由特定的条件决定某个语句重复 执行的次数。 (2)分类 先判断后执行结构 先执行后判断结构 (3)循环结构用for语句, while语句或 dowhile 语句来实现。,第三章 C+程序的流程控制,说明: 1、三种程序结构的共同特点: 只有一个入口和一个出口。 2、三种程序结构之间的关系: 衔接:一个结构的出口是另一个结构的入口
38、。 嵌套:自身嵌套、相互嵌套,第三章 C+程序的流程控制,3.2 条件分支结构 一、if语句 格式1: 格式2: if(条件)语句1 if(条件)语句1 else 语句2 若条件为真,执行 语句1,否则什么都不做 (示意图见图3-3) (示意图见图3-2),若条件为真,执行 语句1,否则执行语句2,第三章 C+程序的流程控制,说明: 1、格式中的条件通常是一个逻辑表达式,若不是,则一切0值转换为false,一切非0值转换为true。 2、格式中的语句1和语句2可以是基本语句,也可以是复合语句,但不能不是语句,也不能是多个语句。,第三章 C+程序的流程控制,例1:if (x) cout”x is
39、 non-zero ” else cout ” x is zero ”; 例2:if(x=100) a=1;b=2; else a=-1;b=-2;,例1:if (x) cout”x is non-zero ”; else cout ” x is zero ”; 例2:if(x=100) a=1;b=2; else a=-1;b=-2;,第三章 C+程序的流程控制,二、if语句的嵌套 if语句格式中的语句1和语句2本身也可以是if语句。 1、if与else的配对:从第一个else开始,else总是与离它最近的尚未配对的if进行配对。 例1:if (n0) if(ab) z=a; else z=
40、b;,if (n0) if(ab) z=a; else z=b;,第三章 C+程序的流程控制,例2: if(x0) if(x10) cout-20) cout C ; else cout D ; 若x值为4,y值为-55,则输出结果为:B,第三章 C+程序的流程控制,2、为了提高可读性,必要时可以把嵌套 位置放在else之后。 例: if (n0) if(ab) z=a; else z=b; 3、把永真条件或永假条件用于if语句,是一种严重的逻辑错误。,if (nb) z=a;,第三章 C+程序的流程控制,三、if多分支结构 通过规范化的if嵌套所构成的多分支结构。,嵌套的if语句放在else
41、之后,第三章 C+程序的流程控制,格式: if(条件1)语句1 else if(条件2)语句2 else if(条件3)语句3 else if(条件n)语句n 【 else 语句n+1 】 注:多分支结构中的各个条件都应当是 相互排斥的,任意时刻顶多有一个 条件得以满足。(示意图见图3-8),第三章 C+程序的流程控制,例:#include void main( ) float score; cin score; if(score100) cout ”输入错误!”; else if (score 60) cout ”不及格”; else if (score 70) cout ”及格”; els
42、e if (score 80) cout ”中等”; else if (score 90) cout ”良好”; else cout ”优秀”;,第三章 C+程序的流程控制,四、switch语句和switch多分支结构 1、switch语句的格式: switch(整型表达式) case 整型常量表达式1:语句序列1; case 整型常量表达式2:语句序列2; case 整型常量表达式k:语句序列k; 【default:语句序列k+1 】 ,第三章 C+程序的流程控制,2、执行顺序: 先计算switch语句中表达式的值,然后 在case 语句中寻找值相等的常量表达式,并以此为入口,由此开始 顺序
43、执行。如果没有找到 相等的常量表达式,且default 后的语句n+1存在,则执行语句n+1,否则什么都不做。 (示意图见3-9),第三章 C+程序的流程控制,3、几点说明: 1、整型表达式如果不是整型,则它的值将自动转换为整型。 2、整型常量表达式通常就是一个整型常量。如果不是,将自动转换为整型。 3、case的作用只是标明一个入口以及转入该入口的条件。一旦从某个入口进入一个语句序列,就从该语句序列开始顺序执行,直到以下所有语句序列执行完毕时为止。,第三章 C+程序的流程控制,4、语句序列可以是空的,即其中一个语 句也没有。 5、break语句可以提前结束switch语句的 执行。,第三章
44、C+程序的流程控制,例:根据整型变量dayoftheweek(0-6)值输出其表示的星期几的英语单词。 (无break语句) Switch(dayoftheweek) case 0: cout ”Sunday”; case 1: cout ”Monday”; case 2: cout ”Tuesday”; case 3: cout ”Wednesday”; case 4: cout ”Thursday”; case 5: cout ”Friday”; case 6: cout ”Saturday”; default:cout ”Unknown week day”; ;,第三章 C+程序的流程控
45、制,若dayoftheweek的值为4, 则输出结果为: ThursdayFridaySaturdayUnknown week day,第三章 C+程序的流程控制,(有break语句) Switch(dayoftheweek) case 0: cout ”Sunday”; break; case 1: cout ”Monday”; break; case 2: cout ”Tuesday”; break; case 3: cout ”Wednesday”; break; case 4: cout ”Thursday”; break; case 5: cout ”Friday”; break;
46、case 6: cout ”Saturday”; break; default:cout ”Unknown week day”; break; ;,第三章 C+程序的流程控制,若dayoftheweek的值为4, 则输出结果为: Thursday,第三章 C+程序的流程控制,if多分支结构和switch多分支结构的相互 替代: 替代条件: switch语句中每个非空语句序列的最后 一个语句都为break语句。,第三章 C+程序的流程控制,例:switch(k) if(k=1|k=2|k=3) coutA ; case1: else if(k=4|k=5) case2: cout B ; case3: coutA ;break; else cout C ; case4: case5: cout B ;break; default: cout C ;break; ,