ImageVerifierCode 换一换
格式:PPT , 页数:151 ,大小:512KB ,
资源ID:7414498      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-7414498.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第3章面向过程的程序设计.ppt)为本站会员(hwpkd79526)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

第3章面向过程的程序设计.ppt

1、第3章 程序设计初步 第4章 函数与预处理 第5章 数组 第6章 指针 第7章 自定义数据类型,第2篇 面向过程的程序设计,关键考点: 选择结构循环结构,第3章 程序设计初步,3.1 面向过程的程序设计和算法 3.2 +程序和语句 3.3 赋值语句 3.4 C+的输入与输出 3.5 编写顺序结构的程序 3.6 关系运算和逻辑运算 3.7 选择结构和if语句 3.8 条件运算符和条件表达式 3.9 多分支选择结构和switch语句 3.10 编写选择结构的程序 3.11 循环结构和循环语句 3.12 循环的嵌套 3.13 break语句和continue语句 3.14 编写循环结构的程序,在面向

2、过程的程序设计中,程序设计者必须指定计算机执行的具体步骤,程序设计者不仅要考虑程序要“做什么”,还要解决“怎么做”的问题,根据程序要“做什么”的要求,写出一个个语句,安排好它们的执行顺序。怎样设计这些步骤,怎样保证它的正确性和具有较高的效率,这就是算法需要解决的问题。,3.1 面向过程的程序设计和算法,一个面向过程的程序应包括以下两方面内容:对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构(data structure)。(2) 对操作的描述。即操作步骤,也就是算法(algorithm)。对于面向过程的程序,可以用下面的公式表示:程序=算法+数据结构,3.1.1 算法的概念,

3、作为程序设计人员,必须认真考虑和设计数据结构和操作步骤(即算法)。算法是处理问题的一系列的步骤。算法必须具体地指出在执行时每一步应当怎样做。,不要认为只有“计算”的问题才有算法。广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。计算机算法可分为两大类别:数值算法和非数值算法。 数值算法的目的是求数值解。非数值算法包括的面十分广泛,最常见的是用于事务管理领域。,目前,计算机在非数值方面的应用远远超过了在数值方面的应用。C+既支持面向过程的程序设计,又支持面向对象的程序设计。无论面向过程的程序设计还是面向对象的程序设计,都离不开算法设计。,1. 自然语言 用中文或英文等自然语言描述算法。

4、但容易产生歧义性,在程序设计中一般不用自然语言表示算法。2. 流程图 可以用传统的流程图或结构化流程图。用图的形式表示算法,比较形象直观,但修改算法时显得不大方便。3. 伪代码(pseudo code) 伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。如,3.1.2 算法的表示,if x is positive thenprint x else print -x用伪代码写算法并无固定的、严格的语法规则,只需把意思表达清楚,并且书写的格式要写成清晰易读的形式。它不用图形符号,因此书写方便、格式紧凑,容易修改,便于向计算机语言算法(即程序)过渡。4. 用计算机语言表示算法 用一种计算

5、机语言去描述算法,这就是计算机程序。,由第1章已知,一个程序包含一个或多个程序单位(每个程序单位构成一个程序文件)。每一个程序单位由以下几个部分组成: 预处理命令。如#include命令和#define命令。(2) 声明部分。例如对数据类型和函数的声明,以及对变量的定义。(3) 函数。包括函数首部和函数体,在函数体中可以包含若干声明语句和执行语句。,3.2 C+程序和语句,如下面是一个完整的C+程序:#include /预处理命令 using namespace std; /在函数之外的声明部分 int a=3; /在函数之外的声明部分 int main( ) /函数首部 float b; /

6、函数内的声明部分b=4.5; /执行语句coutab; /执行语句return 0; /执行语句 ,如果一个变量在函数之外进行声明,此变量是全局变量,它的有效范围是从该行开始到本程序单位结束。如果一个变量在函数内声明,此变量是局部变量,它的有效范围是从该行开始到本函数结束。C+程序结构可以用图31表示。,图3.1,程序应该包括数据描述(由声明语句来实现)和数据操作(由执行语句来实现)。数据描述主要包括数据类型的声明、函数和变量的定义、变量的初始化等。数据操作的任务是对已提供的数据进行加工。 C+程序中最小的独立单位是语句(statement)。它相当于一篇文章中的一个句子。句子是用句号结束的。

7、语句一般是用分号结束的(复合语句是以右花括号结束的)。 C+语句可以分为以下4种:,声明语句如int a,b;在C语言中,只有产生实际操作的才称为语句;对变量的定义不作为语句,而且要求对变量的定义必 须出现在本块中所有程序语句之前。,C语言有一个习惯: 在函数或块的开头位置定义全部变量。在C+中,对变量(以及其他对象)的定义被认为是一条语 句,并且可出现在函数中的任何行,即可以放在其他程 序语句可以出现的地方,也可以放在函数之外。,2. 执行语句通知计算机完成一定的操作。执行语句包括: (1) 控制语句,完成一定的控制功能。C+有9种控制语句,即 if( )else (条件语句) for( )

8、 (循环语句) while( ) (循环语句) dowhile( ) (循环语句) continue (结束本次循环语句) break (中止执行或循环语句) switch (多分支选择语句) goto (转向语句) return (从函数返回语句),(2) 函数和流对象调用语句。 函数调用语句由一次函数调用加一个分号构成一个语句,例如sort(x,y,z); /假设已定义了sort函数,它有3个参数coutxendl; /流对象调用语句,(3) 表达式语句。由一个表达式加一个分号构成一个语句。最典型的是: 由赋值表达式构成一个赋值语句。i=i+1 /是一个赋值表达式i=i+1; /是一个赋值

9、语句,任何一个表达式的最后加一个分号都可以成为一个语句。一个语句必须在最后出现分号。表达式能构成语句是C和C+语言的一个重要特色。C+程序中大多数语句是表达式语句(包括函数调用语句)。,3. 空语句下面是一个空语句: ; 即只有一个分号的语句,它什么也不做。有时用来做被转向点,或循环语句中的循环体。,4. 复合语句可以用 把一些语句括起来成为复合语句。如下面是一个复合语句。 z=x+y;if(z100) z=z-100;coutz; ,注意:复合语句中最后一个语句中最后的分号不能省略。在本章中将介绍几种顺序执行的语句,在执行这些语句的过程中不会发生流程的控制转移。,前面已介绍,赋值语句是由赋值

10、表达式加上一个分号构成。 (1)C+的赋值语句具有其他高级语言的赋值语句的功能。不同的是: C+中的赋值号“”是一个运算符,可以写成 a=b=c=d;而在其他大多数语言中赋值号不是运算符,上面的写法是不合法的。,3.3 赋值语句,(2) 关于赋值表达式与赋值语句的概念。在C+中,赋值表达式可以包括在其他表达式之中,例如 if(a=b)0) cout0endl;按语法规定if后面的( )内是一个条件。现在在x的位置上换上一个赋值表达式“a=b”;,其作用是:先进行赋值运算(将b的值赋给a), 然后判断a是否大于0,如大于0,执行cout00) cout0endl;因为在if的条件中不能包含赋值语

11、句。C+把赋值语句和赋值表达式区别开来,增加了表达式的种类,能实现其他语言中难以实现的功能。,输入和输出并不是C+语言中的正式组成成分。C和C+本身都没有为输入和输出提供专门的语句结构。 输入输出不是由C+本身定义的,而是在编译系统提供的I/O库中定义的。C+的输出和输入是用“流”(stream)的方式实现的。 图3.2和图3.3表示C+通过流进行输入输出的过程。,3.4 C+的输入与输出,图3.2,图3.3,有关流对象cin、cout和流运算符的定义等信息是存放在C+的输入输出流库中的;如果在程序中使用cin、cout和流运算符,就必须使用预处理命令把头文件stream包含到本文件中:#in

12、clude ,尽管cin和cout不是C+本身提供的语句;但是在不致混淆的情况下,为了叙述方便,常常把由cin和流提取运算符“”实现输入的语句称为输入语句或cin语句;把由cout和流插入运算符“”实现输出的语句称为输出语句或cout语句。根据C+的语法,凡是能实现某种操作而且最后以分号结束的都是语句。,cout语句的一般格式为cout变量1变量2变量n; 在定义流对象时,系统会在内存中开辟一段缓冲区,用来暂存输入输出流的数据。在执行cout语句时,先把插入的数据顺序存放在输出缓冲区中,直到输出缓冲区满或遇到cout语句中的endl(或n,ends,flush)为止,此时将缓冲区中已有的数据一

13、起输出,并清空缓冲区。输出流中的数据在系统默认的设备(一般为显示器)输出。,*3.4.1 输入流与输出流的基本操作,一个cout语句可以分写成若干行。如 coutThis is a simple C+ program.endl; 可以写成 coutThis is /注意行末尾无分号 a C+ program. endl; /语句最后有分号 也可写成多个cout语句,即 coutThis is ; /语句末尾有分号 cout a C+ ; cout program.; coutendl; 以上3种情况的输出均为,This is a simple C+ program. 注意 不能用一个插入运算符

14、“abcd;,可以写成cina /注意行末尾无分号 b /这样写可能看起来清晰些cd; 也可以写成 cina; cinb; cinc; cind; 以上3种情况均可以从键盘输入: 1 2 3 4 也可以分多行输入数据:,1 2 3 4 在用cin输入时,系统也会根据变量的类型从输入流中提取相应长度的字节。如有 char c1,c2; int a; float b; cinc1c2ab; 如果输入 1234 56.78,注意: 34后面应该有空格以便和56.78分隔开。也可以按下面格式输入: 1 2 34 56.78 (在1和2之间有空格)不能用cin语句把空格字符和回车换行符作为字符输入给字符

15、变量,它们将被跳过。如果想将空格字符或回车换行符(或任何其他键盘上的字符)输入给字符变量,可以用3.4.3节介绍的getchar函数。在组织输入流数据时,要仔细分析cin语句中变量的类型,按照相应的格式输入,否则容易出错。,上面介绍的是使用cout和cin时的默认格式。但有时人们在输入输出时有一些特殊的要求,如在输出实数时规定字段宽度,只保留两位小数,数据向左或向右对齐等。C+提供了在输入输出流中使用的控制符(有的书中称为操纵符),见书中表3.1。需要注意的是: 如果使用了控制符,在程序单位的开头除了要加iostream头文件外,还要加iomanip头文件。举例: 输出双精度数。,*3.4.2

16、 在输入流与输出流中使用控制符,double a=123.456789012345;对a赋初值 (1) couta;输出: 123.456 (2) coutsetprecision(9)a;输出: 123.456789 (3) coutsetprecision(6);恢复默认格式(精度为6) (4) cout setiosflags(iosfixed);输出: 123.456789 (5) coutsetiosflags(iosfixed)setprecision(8)a;输出: 123.45678901 (6) coutsetiosflags(iosscientific)a;输出: 1.23

17、4568e+02 (7) coutsetiosflags(iosscientific)setprecision(4)a; 输出: 1.2346e02 下面是整数输出的例子: int b=123456;对b赋初值 (1) coutb;输出: 123456 (2) couthexb; 输出: 1e240 (3) coutsetiosflags(iosuppercase)b;输出: 1E240 (4) coutsetw(10)b,b; 输出: 123456,123456 (5) coutsetfill(*)setw(10)b;输出: * 123456 (6) coutsetiosflags(ioss

18、howpos)b;输出: +123456,如果在多个cout语句中使用相同的setw(n),并使用setiosflags(iosright),可以实现各行数据右对齐,如果指定相同的精度,可以实现上下小数点对齐。 例3.1 各行小数点对齐。 #include #include using namespace std; int main( ) double a=123.456,b=3.14159,c=-3214.67; coutsetiosflags(iosfixed)setiosflags(iosright)setprecision(2);coutsetw(10)aendl;coutsetw(1

19、0)bendl;coutsetw(10)cendl; return 0; ,输出如下:123.46 (字段宽度为10,右对齐,取两位小数)3.14-3214.67 先统一设置定点形式输出、取两位小数、右对齐。这些设置对其后的输出均有效(除非重新设置),而setw只对其后一个输出项有效,因此必须在输出a,b,c之前都要写setw(10)。,C+保留了C语言中用于输入和输出单个字符的函数,使用很方便。其中最常用的有getchar函数和putchar函数。putchar函数(字符输出函数)putchar函数的作用是向终端输出一个字符。例如 putchar(c);它输出字符变量的值。,3.4.3 用g

20、etchar和putchar 函数进行字符的输入和输出,例3.2 输出单个字符。#include /或者包含头文件stdio.h: #include using namespace std; int main( ) char a,b,c;a=B;b=O;c=Y;putchar(a);putchar(b);putchar(c);putchar(n);putchar(66);putchar(79);putchar(89);putchar(10);return 0; 运行结果为 BOY BOY,可以看到: 用putchar可以输出转义字符,putchar(n)的作用是输出一个换行符,使输出的当前位置

21、移到下一行的开头。putchar(66)的作用是将66作为ASCII码转换为字符输出,66是字母B的ASCII码,因此putchar(66)输出字母B。其余类似。,putchar(10)中的10是换行符的ASCII码,putchar(10)输出一个换行符,作用与putchar(n) 相同。也可以输出其他转义字符,如putchar(101) (输出字符A,八进制的101是A的ASCII码)putchar() (输出单引号字符)putchar(015) (输出回车,不换行,使输出的当前位置移到本行开头),此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。getchar函数没有参数,其一

22、般形式为getchar( );函数的值就是从输入设备得到的字符。,2. getchar函数(字符输入函数),#include using namespace std; int main( ) char c;c=getchar( ); putchar(c+32); putchar(n);return 0; 在运行时,如果从键盘输入大写字母A并按回车键,就会在屏幕上输出小写字母a。,例3.3 输入单个字符。,请注意:getchar( )只能接收一个字符。getchar函数得到的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量,作为表达式的一部分。例如,例3.3第5行可以用下面一行代替: p

23、utchar(getchar()+32);putchar(n);因为getchar( )读入的值为A,A+32是小写字母a的ASCII码,因此putchar函数输出a。此时不必定义变量c。,也可用cout输出getchar函数得到字符的ASCII的值:coutgetchar( );这时输出的是整数97,因为用getchar( )读入的实际上是字符的ASCII码,现在并未把它赋给一个字符变量,cout就按整数形式输出。,如果改成cout(c=getchar( ); /设c已定义为字符变量则输出为字母a,因为要求输出字符变量c的值。可以看到用putchar和getchar函数输出和输入字符十分灵活

24、方便,由于它们是函数所以可以出现在表达式中, 例如 cout(c=getchar( )+32);,在C语言中是用printf函数进行输出,用scanf函数进行输入的。C+保留了C语言的这一用法。scanf函数一般格式是 scanf(格式控制,输出表列)printf函数的一般格式是printf(格式控制,输出表列),3.4.4 用scanf和printf函数进行输入和输出,例3.4 用scanf和printf函数进行输入和输出。 #include using namespace std; int main( ) int a; float b; char c;scanf(%d %c %f, 运行情

25、况如下:12 A 67.98(本行为输入,输入的3个数据间以空格相间) a=12,b=67.980003,c=A(本行为输出) 输入的整数12送给整型变量a,字符A送给字符变量c,67.98送给单精度变量b。,例3.5 求一元二次方程式ax2+bx+c=0的根。a,b,c的值在运行时由键盘输入,它们的值满足b2-4ac0。 根据求x1,x2的算法。,3.5 编写顺序结构的程序,它可以编写出以下C+程序:#include #include /由于程序要用到数学函数sqrt,故应包含头文件cmath using namespace std; int main( ) float a,b,c,x1,x

26、2;cinabc;x1=(-b+sqrt(b*b-4*a*c)/(2*a);x2=(-b-sqrt(b*b-4*a*c)/(2*a);coutx1=x1endl;coutx2=x2endl;return 0; ,运行情况如下:4.5 8.8 2.4 x1=-0.327612 x2=-1.17794如果程序中要用到数学函数,都要包含头文件cmath。,在写程序时,一定要注意将数学表达式正确地转换成合法的C+表达式。可以看到: 顺序结构的程序中的各执行语句是顺序执行的。这种程序最简单,最容易理解。,往往要求根据某个指定的条件是否满足来决定执行的内容。例如,购物在1000元以下的打九五折,1000元

27、及以上的打九折。C+提供if语句来实现这种条件选择。如 if amount1000 tax=0.95; /amount代表购物总额,tax代表折扣 else tax=0.9; /若amount1000,条件满足,tax=0.95,否则tax=0.9 pay=amount*tax; /pay为实付款流程可以用图3.4表示。,3.6 关系运算和逻辑运算,图3.4,上面if语句中的“amount”是一个比较符,称为关系运算符。 C+的关系运算符有: (大于) = (大于或等于) = (等于) != (不等于) 优先级相同 (低),3.6.1 关系运算和关系表达式,关于优先次序: 前4种关系运算符(,

28、)的优先级别相同,后两种也相同。前4种高于后两种。例如,“”优先于“”。而“”与“a+b 等效于 c(a+b)ab=c 等效于(ab)=ca=bc 等效于a=(bc) 用关系运算符将两个表达式连接起来的式子,称为关系表达式。,关系表达式的一般形式可以表示为表达式 关系运算符 表达式其中的“表达式”可以是算术表达式或关系表达式、逻辑表达式、赋值表达式、字符表达式。例如,下面都是合法的关系表达式: ab, a+bb+c,(a=3)(b=5), ab)(b=0”的值为“真”。在C和C+中都用数值1代表“真”,用0代表“假”。 如果有以下赋值表达式: d=ab 则d得到的值为1 f=abc f得到的值

29、为0,C语言没有提供逻辑型数据,关系表达式的值(真或假)分别用数值1和0代表。C+增加了逻辑型数据。逻辑型常量只有两个,即false(假)和true(真)。,3.6.2 逻辑常量和逻辑变量,逻辑型变量要用类型标识符bool来定义,它的值只能是true和false之一。如 bool found,flag=false; /定义逻辑变量found和flag,并使flag的初值为false found=true; /将逻辑常量true赋给逻辑变量found 由于逻辑变量是用关键字bool来定义的,因此又称为布尔变量。逻辑型常量又称为布尔常量。所谓逻辑型,就是布尔型。 设立逻辑类型的目的是为了看程序时直

30、观易懂。,在编译系统处理逻辑型数据时,将false处理为0,将true处理为1。因此,逻辑型数据可以与数值型数据进行算术运算。如果将一个非零的整数赋给逻辑型变量,则按“真”处理,如 flag=123; /赋值后flag的值为true coutflag; 输出为数值1。,有时只用一个关系表达式还不能正确表示所指定的条件。 C+提供3种逻辑运算符:& 逻辑与 (相当于其他语言中的AND)(2) | 逻辑或 (相当于其他语言中的OR)(3) ! 逻辑非 (相当于其他语言中的NOT),3.6.3 逻辑运算和逻辑表达式,逻辑运算举例如下:a & b 若a,b为真,则a & b为真。a|b 若a,b之一为

31、真,则a|b为真。!a 若a为真,则!a为假。书中表32为逻辑运算的“真值表”。,在一个逻辑表达式中如果包含多个逻辑运算符,按以下 的优先次序:!(非) &(与)(或),即“!”为三者中最高的。(2) 逻辑运算符中的“&”和“|”低于关系运算符,“!”高 于算术运算符。,例如:(ab) & (xy) 可写成 ab & xy(a=b) | (x=y) 可写成 a=b | x=y(!a) | (ab) 可写成 !a | ab将两个关系表达式用逻辑运算符连接起来就成为一个逻辑表达式,上面几个式子就是逻辑表达式。,逻辑表达式的一般形式可以表示为:表达式 逻辑运算符 表达式逻辑表达式的值是一个逻辑量“真

32、”或“假”。,在给出逻辑运算结果时,以数值1代表“真”,以0代表“假”,但在判断一个逻辑量是否为“真”时,采取的标准是: 如果其值是0就认为是“假”,如果其值是非0就认为是“真”。 例如: (1) 若a=4,则!a的值为0。因为a的值为非0,被认作“真”,对它进行“非”运算,得“假”,“假”以0代表。 (2) 若a=4,b=5,则a & b的值为1。因为a和b均为非0,被认为是“真” 。 (3) a,b值同前,a-b|a+b的值为1。因为a-b和a+b的值都为非零值。 (4) a,b值同前,!a | b的值为1。 (5) 4 & 0 | 2 的值为1。,在C+中,整型数据可以出现在逻辑表达式中

33、,在进行逻辑运算时,根据整型数据的值是0或非0,把它作为逻辑量假或真,然后参加逻辑运算。通过这几个例子可以看出: 逻辑运算结果不是0就是1,不可能是其他数值。而在逻辑表达式中作为参加逻辑运算的运算对象可以是0(“假”)或任何非0的数值(按“真”对待)。如果在一个表达式中的不同位置上出现数值,应区分哪些是作为数值运算或关系运算的对象,哪些作为逻辑运算的对象。,实际上,逻辑运算符两侧的表达式不但可以是关系表达式或整数(0和非0),也可以是任何类型的数据,如字符型、浮点型或指针型等。系统最终以0和非0来判定它们属于“真”或“假”。例如c & 的值为1。,可以将表3.2改写成书中表3.3形式。 熟练掌

34、握C+的关系运算符和逻辑运算符后,可以巧妙地用一个逻辑表达式来表示一个复杂的条件。例如,要判别某一年(year)是否为闰年。闰年的条件是符合下面两者之一: 能被4整除,但不能被100整除。能被100整除,又能被400整除。例如2004、 2000年是闰年,2005、 2100年不是闰年。 可以用一个逻辑表达式来表示: (year % 4 = 0 & year % 100 != 0) | year % 400 = 0 当给定year为某一整数值时,如果上述表达式值为真(1),则year为闰年;否则year为非闰年。可以加一个“!”用来判别非闰年: !(year % 4 = 0 & year %

35、100 != 0) | year % 400 = 0),若表达式值为真(1),year为非闰年。也可以用下面的逻辑表达式判别非闰年: (year % 4 != 0) | (year % 100 = 0 & year % 400 !=0) 若表达式值为真,year为非闰年。请注意表达式中右面的括号内的不同运算符(%,!,&,=)的运算优先次序。,if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。,3.7 选择结构和if语句,1. if(表达式)语句 例如: if(xy) couty) coutx; else couty; 见图3.5(b)。,3.7.1

36、if语句的3种形式,图3.5,3. if(表达式1) 语句1 else if(表达式2) 语句2 else if(表达式3) 语句3 else if(表达式m) 语句m else 语句n流程图见图3.6。,例如: if (number500) cost=0.15; else if(number300) cost=0.10; else if(number100) cost=0.075; else if(number50) cost=0.05; else cost=0;,图3.,说明: (1) 从图3.5和图3.6可以看到: 3种形式的if语句都是由一个入口进来,经过对“表达式”的判断,分别执行相

37、应的语句,最后归到一个共同的出口。这种形式的程序结构称为选择结构。在C+中if语句是实现选择结构主要的语句。 (2) 3种形式的if语句中在if后面都有一个用括号括起来的表达式,它是程序编写者要求程序判断的“条件”,一般是逻辑表达式或关系表达式。 (3) 第2、第3种形式的if语句中,在每个else前面有一分号,整个语句结束处有一分号。 (4) 在if和else后面可以只含一个内嵌的操作语句(如上例),也可以有多个操作语句,此时用花括号“”将几个语句括起来成为一个复合语句。,例3.6 求三角形的面积。 #include #include /使用数学函数时要包含头文件cmath #include

38、 /使用I/O流控制符要包含头文件iomanip using namespace std; int main( ) double a,b,c;coutabc;if (a+bc ,运行情况如下: please enter a,b,c:2.45 3.67 4.89 area=4.3565 变量s和area只在复合语句内用得到,因此在复合语句内定义,它的作用范围为从定义变量开始到复合语句结束。如果在复合语句外使用s和area,则会在编译时出错,系统认为这两个变量未经定义。将某些变量局限在某一范围内,与外界隔离,可以避免在其他地方被误调用。,在if语句中又包含一个或多个if语句称为if语句的嵌套。一般

39、形式如下: if( ) if( )语句1 内嵌if else 语句2 Elseif( )语句3 内嵌if else 语句4 应当注意if与else的配对关系。else总是与它上面最近的、且未配对的if配对。假如写成,3.7.2 if语句的嵌套,if( ) if( )语句1 elseif( )语句2 内嵌if else 语句3,编程序者把第一个else写在与第一个if(外层if)同一列上,希望else与第一个if对应,但实际上else是与第二个if配对,因为它们相距最近,而且第二个if并未与任何else配对。为了避免误用,最好使每一层内嵌的if语句都包含else子句(如本节开头列出的形式),这样

40、if的数目和else的数目相同,从内层到外层一一对应,不致出错。,如果if与else的数目不一样,为实现程序设计者的企图,可以加花括号来确定配对关系。例如:if( ) if ( ) 语句1 /这个语句是上一行if语句的内嵌ifelse 语句2 /本行与第一个if配对这时 限定了内嵌if语句的范围, 外的else不会与 内的if配对。关系清楚,不易出错。,若在if语句中,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且给同一个变量赋值时,可以用简单的条件运算符来处理。例如,若有以下if语句: if (ab) max=a; else max=b;,3.8 条件运算符和条件表达式,可以用

41、条件运算符(? :)来处理:max=(ab)?a:b; 其中“(ab)?a:b”是一个“条件表达式”。它是这样执行的:如果(ab)条件为真,则条件表达式的值就取“?”后面的值,即条件表达式的值为,否则条件表达式的值为“:”后面的值,即b。,条件运算符要求有3个操作对象,称三目(元)运算符,它是C+中惟一的一个三目运算符。条件表达式的一般形式为表达式1 ? 表达式2 表达式3,条件运算符的执行顺序是:先求解表达式1,若为非0(真)则求解表达式2,此时表达式的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。“max=(ab)?a:b” 的执

42、行结果是将条件表达式的值赋给max。也就是将a和b二者中的大者赋给max。条件运算符优先于赋值运算符,因此上面赋值表达式的求解过程是先求解条件表达式,再将它的值赋给max。,条件表达式中,表达式1的类型可以与表达式2和表达式3的类型不同。如 x? ab如果已定义x为整型变量,若x=0,则条件表达式的值为字符b的ASCII码。表达式2和表达式3的类型也可以不同,此时条件表达式的值的类型为二者中较高的类型。如有条件表达式xy?1:1.5,如果xy,则条件表达式的值为1.5,若xy,值应为1,由于C+把1.5按双精度数处理,双精度的类型比整型高,因此,将1转换成双精度数,以此作为表达式的值。,例3.

43、7 输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。#include using namespace std; int main( ) char ch;cinch;ch=(ch=A return 0 ,switch语句是多分支选择语句,用来实现多分支选择结构。 它的一般形式如下: switch(表达式)case 常量表达式1:语句1case 常量表达式2:语句2.case 常量表达式n:语句ndefault:语句n+1,3.9 多分支选择结构和switch 语句,例如,要求按照考试成绩的等级打印出百分制分数段,可以用switch语句实现

44、: switch(grade)case A: cout85100n;case B: cout7084n;case C: cout6069n;case D: cout60n;default : couterrorn;,说明: switch后面括号内的“表达式”,允许为任何类型。(2) 当switch表达式的值与某一个case子句中的常量表达式的值相匹配时,就执行此case子句中的内嵌语句,若所有的case子句中的常量表达式的值都不能与switch表达式的值匹配,就执行default子句的内嵌语句。,(3) 每一个case表达式的值必须互不相同,否则就会出现互相矛盾的现象(对表达式的同一个值,有两

45、种或多种执行方案)。(4) 各个case和default的出现次序不影响执行结果。例如,可以先出现“default:”,再出现“case D:”,然后是“case A:”。,(5) 执行完一个case子句后,流程控制转移到下一个case子句继续执行。“case常量表达式”只是起语句标号作用,并不是在该处进行条件判断。在执行switch语句时,根据switch表达式的值找到与之匹配的case子句,就从此case子句开始执行下去,不再进行判断。例如,上面的例子中,若grade的值等于A,则将连续输出:,851007084606960error因此,应该在执行一个case子句后,使流程跳出switc

46、h结构,即终止switch语句的执行。,可以用一个break语句来达到此目的。将上面的switch结构改写如下:switch(grade)case A: cout85100n;break;case B: cout7084n;break;case C: cout6069n;break;case D: cout60n;break;default : couterrorn;break;,最后一个子句(default)可以不加break语句。如果grade的值为B,则只输出“7084”。流程图见图3.7。,图3.7,在case子句中虽然包含一个以上执行语句,但可以不必用花括号括起来,会自动顺序执行本c

47、ase子句中所有的执行语句。,(6) 多个case可以共用一组执行语句,如.case A: case B: case C: cout60n;.当grade的值为A、B或C时都执行同一组语句。,例3.8 编写程序,判断某一年是否为闰年。 #include using namespace std; int main( ) int year;bool leap;coutyear; /输入年份if (year%4=0) /年份能被4整除if(year%100=0) /年份能被4整除又能被100整除if (year%400=0) /年份能被4整除又能被400整除leap=true; /闰年,令leap=true(真)else leap=false; /非闰年,令leap=false(假)else /年份能被4整除但不能被100整除肯定是闰年leap=true; /是闰年,令leap=true,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报