第3章 程序设计初步_第1页
第3章 程序设计初步_第2页
第3章 程序设计初步_第3页
第3章 程序设计初步_第4页
第3章 程序设计初步_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第三章第三章 程序设计初步程序设计初步3.1 基于过程的程序设计和算法基于过程的程序设计和算法3.2 C+的程序结构和语句的程序结构和语句3.3 赋值操作赋值操作3.4 C+的输入与输出的输入与输出3.5 编写顺序结构的程序编写顺序结构的程序3.6 关系运算和逻辑运算关系运算和逻辑运算3.7 选择结构和选择结构和if语句语句3.8 循环结构和循环语句循环结构和循环语句23.1 基于过程的程序设计和算法基于过程的程序设计和算法 在基于过程的程序设计中在基于过程的程序设计中,程序设计者必须指定程序设计者必须指定计算机执行的具体步骤计算机执行的具体步骤,程序设计者不仅要考虑程序程序设计者不仅要考虑

2、程序要要“做什么做什么”,还要解决还要解决“怎么做怎么做”的问题的问题,根据程序根据程序要要“做什么做什么”的要求的要求,写出一个个语句写出一个个语句,安排好它们的安排好它们的执行顺序执行顺序 怎样设计这些步骤怎样设计这些步骤,怎样保证它的正确性和具有怎样保证它的正确性和具有较高的效率较高的效率,这就是算法需要解决的问题这就是算法需要解决的问题 33.1.1 算法的概念算法的概念一个面向过程的程序应包括以下两方面内容一个面向过程的程序应包括以下两方面内容:l(1) 对数据的描述对数据的描述 在程序中要指定数据的类型在程序中要指定数据的类型和数据的组织形式和数据的组织形式,即数据结构即数据结构

3、l(2) 对操作的描述对操作的描述 即操作步骤即操作步骤,也就是算法。也就是算法。l对于面向过程的程序对于面向过程的程序,可以用下面的公式表示可以用下面的公式表示: 程序程序=算法算法+数据结构数据结构 4l不要认为只有不要认为只有“计算计算”的问题才有算法的问题才有算法 广义地说广义地说, 为解决一个问题而采取的方法和步骤为解决一个问题而采取的方法和步骤,就称为就称为“算法算法” l计算机算法可分为两大类别计算机算法可分为两大类别:数值算法和非数值算法数值算法和非数值算法 数值算法的目的是求数值解数值算法的目的是求数值解 非数值算法包括的面非数值算法包括的面十分广泛十分广泛,最常见的是用于事

4、务管理领域最常见的是用于事务管理领域 目前目前,计算计算机在非数值方面的应用远远超过了在数值方面的应用机在非数值方面的应用远远超过了在数值方面的应用 lC+既支持面向过程的程序设计既支持面向过程的程序设计,又支持面向对象的又支持面向对象的程序设计程序设计 无论面向过程的程序设计还是面向对象的无论面向过程的程序设计还是面向对象的程序设计程序设计,都离不开算法设计都离不开算法设计 53.1.2 算法的表示算法的表示l1. 自然语言自然语言 用中文或英文等自然语言描述算法用中文或英文等自然语言描述算法 但容易产但容易产生歧义性生歧义性,在程序设计中一般不用自然语言表示算在程序设计中一般不用自然语言表

5、示算法法 l2. 流程图流程图 可以用传统的流程图或结构化流程图可以用传统的流程图或结构化流程图 用图的用图的形式表示算法形式表示算法,比较形象直观比较形象直观,但修改算法时显得不但修改算法时显得不大方便大方便 l3. 伪代码伪代码 伪代码是用介于自然语言和计算机语言之间的伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法文字和符号来描述算法 如如6 if x is positive then print x else print-xl用伪代码写算法并无固定的用伪代码写算法并无固定的 严格的语法规则严格的语法规则,只需只需把意思表达清楚把意思表达清楚,并且书写的格式要写成清晰易读的并

6、且书写的格式要写成清晰易读的形式形式 它不用图形符号它不用图形符号,因此书写方便因此书写方便 格式紧凑格式紧凑,容容易修改易修改,便于向计算机语言算法便于向计算机语言算法(即程序即程序)过渡过渡 l4. 用计算机语言表示算法用计算机语言表示算法 用一种计算机语言去描述算法用一种计算机语言去描述算法,这就是计算机程这就是计算机程序序 教材中常用的:教材中常用的:流程图和计算机语言流程图和计算机语言73.2 C+的程序结构和语句的程序结构和语句 由第由第1章已知章已知,一个程序包含一个或多个程序单位一个程序包含一个或多个程序单位(每个程序单位构成一个程序文件每个程序单位构成一个程序文件) 每一个程

7、序单位每一个程序单位由以下几个部分组成由以下几个部分组成: l(1) 预处理命令预处理命令 如如#include命令和命令和#define命令命令 l(2)全局声明全局声明 例如对数据类型和函数的声明例如对数据类型和函数的声明,以及对以及对变量的定义变量的定义 l(3) 函数函数 包括函数首部和函数体包括函数首部和函数体,在函数体中可以包在函数体中可以包含若干声明语句和执行语句含若干声明语句和执行语句 8#include /预处理命令预处理命令using namespace std; /在函数之外的声明部分在函数之外的声明部分int a=3; /在函数之外的声明部分在函数之外的声明部分int

8、main( )/函数首部函数首部 float b;/函数内的声明部分函数内的声明部分 b=4.5; /执行语句执行语句 coutab;/执行语句执行语句 return 0; /执行语句执行语句910C+语句可以分为以下语句可以分为以下4种种:l1. 声明语句声明语句 如如int a,b; 在在C语言中语言中,只有产生实际操作的才称为语句只有产生实际操作的才称为语句,对变对变量的定义不作为语句量的定义不作为语句,而且要求对变量的定义必须出现而且要求对变量的定义必须出现在本块中所有程序语句之前在本块中所有程序语句之前 因此因此C程序员已经养成了程序员已经养成了一个习惯一个习惯: 在函数或块的开头位

9、置定义全部变量在函数或块的开头位置定义全部变量 在在C+中中,对变量对变量(以及其他对象以及其他对象)的定义被认为是一的定义被认为是一条语句条语句,并且可以出现在函数中的任何行并且可以出现在函数中的任何行,即可以放在其即可以放在其他程序语句可以出现的地方他程序语句可以出现的地方,也可以放在函数之外也可以放在函数之外 112. 执行语句执行语句通知计算机完成一定的操作通知计算机完成一定的操作 执行语句包括执行语句包括: (1) 控制语句控制语句,完成一定的控制功能完成一定的控制功能 C+有有9种控制语种控制语句句,即即 if( )else (条件语句条件语句) for( ) (循环语句循环语句)

10、 while( ) (循环语句循环语句) dowhile( ) (循环语句循环语句) continue(结束本次循环语句结束本次循环语句) break(中止执行中止执行switch或循环语句或循环语句) switch (多分支选择语句多分支选择语句) goto (转向语句转向语句) return (从函数返回语句从函数返回语句)12(2) 函数和流对象调用语句函数和流对象调用语句 函数调用语句由一次函数调用语句由一次函数调用加一个分号构成一个语句函数调用加一个分号构成一个语句,例如例如: sort(x,y,z);/假设已定义了假设已定义了sort函数函数,它有它有3个参数个参数 coutx10

11、0) z=z-100; cout0) cout00) cout0endl;l因为在因为在if的条件中不能包含赋值语句的条件中不能包含赋值语句 C+把赋值把赋值语句和赋值表达式区别开来语句和赋值表达式区别开来,增加了表达式的种类增加了表达式的种类,能实现其他语言中难以实现的功能能实现其他语言中难以实现的功能 163.4 C+的输入与输出的输入与输出l输入和输出并不是输入和输出并不是C+语言中的正式组成成分语言中的正式组成成分 C和和C+本身都没有为输入和输出提供专门的语句结构本身都没有为输入和输出提供专门的语句结构 输入输出不是由输入输出不是由C+本身定义的本身定义的,而是在编译系统而是在编译系

12、统提供的提供的I/O库中定义的库中定义的 lC+的输出和输入是用的输出和输入是用“流流”(stream)的方式实现的方式实现的的 17有关流对象有关流对象cin cout和流运算符的定义等信息是存放和流运算符的定义等信息是存放在在C+的输入输出流库中的的输入输出流库中的,因此如果在程序中使用因此如果在程序中使用cin cout和流运算符和流运算符,就必须使用预处理命令把头文件就必须使用预处理命令把头文件stream包含到本文件中包含到本文件中: #include C+通过流进行输出的过程通过流进行输出的过程C+通过流进行输入的过程通过流进行输入的过程18*3.4.1 输入流与输出流的基本操作输

13、入流与输出流的基本操作lcout语句的一般格式为语句的一般格式为 cout表达式表达式1表达式表达式2变量变量1变量变量2变量变量n;l在定义流对象时在定义流对象时,系统会在内存中开辟一段缓冲区系统会在内存中开辟一段缓冲区,用来用来暂存输入输出流的数据暂存输入输出流的数据 在执行在执行cout语句时语句时,先把插入先把插入的数据顺序存放在输出缓冲区中的数据顺序存放在输出缓冲区中,直到输出缓冲区满或直到输出缓冲区满或遇到遇到cout语句中的语句中的endl(或或n,ends,flush)为止为止,此时将此时将缓冲区中已有的数据一起输出缓冲区中已有的数据一起输出,并清空缓冲区并清空缓冲区 输出流输

14、出流中的数据在系统默认的设备中的数据在系统默认的设备(一般为显示器一般为显示器)输出输出 19一个一个cout语句可以分写成若干行语句可以分写成若干行 如如coutThis is a simple C+ program.endl;可以写成可以写成 coutThis is /注意行末尾无分号注意行末尾无分号a C+ program.endl; /语句最后有分号语句最后有分号也可写成也可写成多个多个cout语句语句,即即coutThis is ; /语句末尾有分号语句末尾有分号cout a C+ ;cout program.;coutendl;20注意注意 不能用一个插入运算符不能用一个插入运算符

15、“”插入多个输出项插入多个输出项:couta,b,c; /错误错误,不能一次插入多项不能一次插入多项couta+b+c; /正确正确,这是一个表达式这是一个表达式.作为一项在用作为一项在用cout输出时输出时,用户不必通知计算机按何用户不必通知计算机按何种类型输出种类型输出,系统会自动判别输出数据的类型系统会自动判别输出数据的类型,使输使输出的数据按相应的类型输出出的数据按相应的类型输出 如已定义如已定义a为为int型型,b为为float型型,c为为char型型,则则couta, b,cabcd;可以写成可以写成 cina /注意行末尾无分号注意行末尾无分号 b /这样写可能看起来清晰些这样写

16、可能看起来清晰些 c d; 也可以写成也可以写成cina;cinb;cinc;cind;以上以上3种情况均可以从键盘输入种情况均可以从键盘输入: 1 2 3 4 也可以分多行输入数据也可以分多行输入数据: 1 2 3 4 22在用在用cin输入时输入时,系统也会根据变量的类型从输入流系统也会根据变量的类型从输入流中提取相应长度的字节中提取相应长度的字节 如有如有 char c1,c2; int a; float b; cinc1c2ab; coutc1,c2,a,bendl;如果输入如果输入1234 56.78 也可以按下面格式输入也可以按下面格式输入:1 2 34 56.78 (在在1和和2

17、之间有空格之间有空格)输出如下输出如下:1,2,34,56.78 输出同上输出同上23注意:注意:不能用不能用cin语句把空格字符和回车换行符作为字符输语句把空格字符和回车换行符作为字符输入给字符变量入给字符变量,它们将被跳过它们将被跳过 如果想将空格字符或回车换行符如果想将空格字符或回车换行符(或任何其他键盘上的字或任何其他键盘上的字符符)输入给字符变量输入给字符变量,可以用可以用getchar函数(函数(3.4.3节介绍)节介绍) 在组织输入流数据时在组织输入流数据时,要仔细分析要仔细分析cin语句中变量的类型语句中变量的类型,按照相应的格式输入按照相应的格式输入,否则容易出错否则容易出错

18、 24*3.4.2 在输入流与输出流中使用控制符在输入流与输出流中使用控制符l上面介绍的是使用上面介绍的是使用cout和和cin时的默认格式时的默认格式 但但有时人们在输入输出时有一些特殊的要求有时人们在输入输出时有一些特殊的要求,如在输如在输出实数时规定字段宽度出实数时规定字段宽度,只保留两位小数只保留两位小数,数据向数据向左或向右对齐等左或向右对齐等 C+提供了在输入输出流中使提供了在输入输出流中使用的控制符用的控制符(有的书中称为操纵符有的书中称为操纵符),见书中表见书中表3.1 l需要注意的是需要注意的是: 如果使用了控制符如果使用了控制符,在程序单位的在程序单位的开头除了要加开头除了

19、要加iostream头文件外头文件外,还要加还要加iomanip头文件头文件 25浮点数输出举例:浮点数输出举例:double a=123.456789012345;对对a赋初值赋初值(1) couta; 输出输出: 123.456或或123.457 (2) coutsetprecision(9)a; 输出输出: 123.456789 (3) coutsetiosflags(ios fixed)setprecision(8)a; 输出输出: 123.45678901(4) coutsetiosflags(ios scientific)a; 输出输出: 1.234568e+002(5)couts

20、etiosflags(ios scientific)setprecision(4)a; 输出输出: 1.2346e+002注意四舍五入问题,注意四舍五入问题,vc6为后者为后者26整数输出举例整数输出举例: int b=123456;对对b赋初值赋初值(1) coutb; 输出输出: 123456(2) coutsetw(10)b,b; 输出输出: 123456,123456 设置相同宽度设置相同宽度 右对齐右对齐 精度相同精度相同综合使用综合使用 27如果在多个如果在多个cout语句中使用相同的语句中使用相同的setw(n), setiosflags(ios right),可以实现各行数据右

21、对齐。可以实现各行数据右对齐。使用如果指定相同的精度使用如果指定相同的精度,可以实现上下小数点对齐可以实现上下小数点对齐 例例3.1 各行小数点对齐各行小数点对齐 #include #include using namespace std;int main( ) double a=123.456,b=3.14159,c=-3214.67; coutsetiosflags(ios:fixed)setiosflags(ios:right)setprecision(2); coutsetw(10)aendl; coutsetw(10)bendl; coutsetw(10)cendl; return

22、0; 输出如下输出如下: 123.46 3.14 -3214.67统一设置定点形式输出统一设置定点形式输出 取两位小数取两位小数 右对齐右对齐 这些设置对其后的输出均这些设置对其后的输出均有效有效(除非重新设置除非重新设置),而而setw只对其后只对其后一个输出项有效一个输出项有效,因此必须在输出因此必须在输出a,b,c之前都要写之前都要写setw(10) 283.4.3 用用getchar和和putchar 函数进行字符的输入和输出函数进行字符的输入和输出C+还保留了还保留了C语言中用于输入和输出单个字符的函数语言中用于输入和输出单个字符的函数,使使用很方便用很方便 其中最常用的有其中最常用

23、的有getchar函数和函数和putchar函数函数 1. putchar函数函数(字符输出函数字符输出函数)putchar函数的作用是向终端输出一个字符函数的作用是向终端输出一个字符 例如例如 putchar(c);它输出字符变量它输出字符变量c的值的值 29例例3.2 输出单个字符输出单个字符 #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);put

24、char(10); return 0;运行结果为运行结果为BOYBOY30 putchar(101) (输出字符输出字符A,八进制的八进制的101是是A的的ASCII码码) putchar() (输出单引号字符输出单引号字符) putchar(015) (输出回车输出回车,不换行不换行,使输出的当前位置移到本行开头使输出的当前位置移到本行开头)312. getchar函数函数(字符输入函数字符输入函数)此函数的作用是从终端此函数的作用是从终端(或系统隐含指定的输入设备或系统隐含指定的输入设备)输入一输入一个字符个字符 getchar函数没有参数函数没有参数, 函数的值就是从输入设备得函数的值就

25、是从输入设备得到的字符到的字符 例例3.3 输入单个字符输入单个字符 #include using namespace std;int main( ) char c; c=getchar( ); putchar(c+32); putchar(n); return 0; 在运行时在运行时,如果从键盘输入大写字如果从键盘输入大写字母母A并按回车键并按回车键,就会在屏幕上输就会在屏幕上输出小写字母出小写字母a 32请注意请注意,getchar( )只能接收一个字符只能接收一个字符 getchar函数得到的字符可以赋给一个字符变量或整型函数得到的字符可以赋给一个字符变量或整型变量变量,也可以不赋给任何

26、变量也可以不赋给任何变量,作为表达式的一部分作为表达式的一部分 例例3.3中的:中的: char c; c=getchar( ); putchar(c+32); putchar(n);可以用下面程序行代替可以用下面程序行代替: putchar(getchar()+32); putchar(n);此时不必定义变量此时不必定义变量c 33假设:假设: char c; 思考下面代码行的功能:思考下面代码行的功能:(输入时敲入输入时敲入A)(1)cout(c=getchar( ); (2)cout(c=getchar( )+32); 可以看到用可以看到用putchar和和getchar函数输出和输入字

27、符十函数输出和输入字符十分灵活方便分灵活方便,由于它们是函数所以可以出现在表达式中。由于它们是函数所以可以出现在表达式中。输出输出A输出输出a343.4.4 用用scanf和和printf函数进行输入和输出函数进行输入和输出 不做要求不做要求353.5 编写顺序结构的程序编写顺序结构的程序例例3.5 求一元二次方程式求一元二次方程式ax2+bx+c=0的根的根 a,b,c的值在运行时由键盘输入的值在运行时由键盘输入,它们的值满足它们的值满足b2-4ac0 #include #include /由于程序要用到数学函数由于程序要用到数学函数sqrtusing namespace std;int m

28、ain( ) float a,b,c,x1,x2; 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.327612x2=-1.17794363.6 关系运算和逻辑运算关系运算和逻辑运算往往要求根据某个指定的条件是否满足来决定执往往要求根据某个指定的条件是否满足来决定执行的内容行的内容 例如例如,购物在购物在1000元以下的打九五折元以下的打九五折,1000元及以元及以上

29、的打九折上的打九折 C+提供提供if语句来实现这种条件选择语句来实现这种条件选择 /amount代表购物总额代表购物总额,tax代表折扣代表折扣 /pay为实付款为实付款 if (amount1000 ) tax=0.95; else tax=0.9; pay=amount*tax; 373.6.1 关系运算和关系表达式关系运算和关系表达式上面上面if语句中的语句中的“amount1000”实现的不是算术运算实现的不是算术运算,而是关系运算而是关系运算 实际上是比较运算实际上是比较运算,将两个数据进行比将两个数据进行比较较,判断比较的结果判断比较的结果 “amount”是一个比较符是一个比较符

30、,称为关系运算符称为关系运算符 C+的关系运算符有的关系运算符有: (小于小于) (大于大于) = (大于或等于大于或等于) = (等于等于) != (不等于不等于) 优先级相同优先级相同 (高高)优先级相同优先级相同 (低低)38关于优先次序关于优先次序: 前前4种关系运算符种关系运算符(,=)的优先级别相同的优先级别相同,后两种也相同后两种也相同 前前4种高于后两种种高于后两种 例如例如,“”优先于优先于“=” 而而“”与与“a+b 等效于等效于 c(a+b) ab=c等效于等效于(ab)=c a=bc等效于等效于a=(bc 等效于等效于a=(bc)用关系运算符将两个表达式连接起来的式子用

31、关系运算符将两个表达式连接起来的式子,称为称为关系表达式关系表达式 39关系表达式的一般形式可以表示为关系表达式的一般形式可以表示为 表达式表达式 关系运算符关系运算符 表达式表达式其中的其中的“表达式表达式”可以是算术表达式或关系表达式可以是算术表达式或关系表达式 逻辑表达式逻辑表达式 赋值表达式赋值表达式 字符表达式字符表达式 例如例如,下面都是合法的关系表达式下面都是合法的关系表达式: ab, a+bb+c,(a=3)(b=5), ab)(b=0”的值为的值为“真真” 在在C和和C+中都用数值中都用数值1代表代表“真真”,用用0代表代表“假假” 如果有以下赋值表达式如果有以下赋值表达式:

32、d=ab 则则d得到的值为得到的值为1f=abc f得到的值为得到的值为0403.6.2 逻辑常量和逻辑变量逻辑常量和逻辑变量C+中提供了逻辑型数据中提供了逻辑型数据 逻辑型常量只有两个逻辑型常量只有两个,即即false(假假)和和true(真真) 逻辑型变量要用类型标识符逻辑型变量要用类型标识符bool来定义来定义,它的值只能是它的值只能是true和和false之一之一 如如 bool found,flag=false; found=true;由于逻辑变量是用由于逻辑变量是用关键字关键字bool来定义来定义的的,因此又称为因此又称为布尔变量布尔变量 逻辑型常量又称为布尔常量逻辑型常量又称为布

33、尔常量 设立逻辑类型的目的是为了看程序时直观易懂设立逻辑类型的目的是为了看程序时直观易懂 41在编译系统处理逻辑型数据时在编译系统处理逻辑型数据时,将将false处理为处理为0,将将true处理为处理为1 因此因此,逻辑型数据可以与数值型数据进行算术运算逻辑型数据可以与数值型数据进行算术运算 如果将一个非零的整数赋给逻辑型变量如果将一个非零的整数赋给逻辑型变量,则按则按“真真”处理。处理。如:如: flag=123; /赋值后赋值后flag的值为的值为true cout 算术运算符算术运算符 关系运算符关系运算符 & | 赋值运算赋值运算符符例如例如: (ab) & (xy) 可写成可写成 a

34、b & xy (a=b) | (x=y) 可写成可写成 a=b | x=y (!a) | (ab)可写成可写成 !a | ab将两个关系表达式用逻辑运算符连接起来就成为一个将两个关系表达式用逻辑运算符连接起来就成为一个逻辑表达式逻辑表达式,上面几个式子就是逻辑表达式上面几个式子就是逻辑表达式 44逻辑表达式的一般形式可以表示为逻辑表达式的一般形式可以表示为 表达式表达式 逻辑运算符逻辑运算符 表达式表达式逻辑表达式的值是一个逻辑量逻辑表达式的值是一个逻辑量“真真”或或“假假” 在在给出逻辑运算结果给出逻辑运算结果时时,以数值以数值1代表代表“真真”,以以0代表代表“假假”。但在但在判断一个逻辑

35、量判断一个逻辑量是否为是否为“真真”时时,采取的标准是采取的标准是: 如果其值如果其值是是0就认为是就认为是“假假”,如果其值是如果其值是非非0就认为是就认为是“真真” 例如例如:(1)若)若a=4,则则!a的值为的值为0 (2)若)若a=4,b=5,则则a & b的值为的值为1 (3) a,b值同前值同前,a-b|a+b的值为的值为1 (4) a,b值同前值同前,!a | b的值为的值为1 (5) 4 & 0 | 2 的值为的值为1 45在在C+中中,整型数据可以出现在逻辑表达式中整型数据可以出现在逻辑表达式中,在进行逻在进行逻辑运算时辑运算时,根据整型数据的值是根据整型数据的值是0或非或非

36、0,把它作为逻辑量把它作为逻辑量假或真假或真,然后参加逻辑运算然后参加逻辑运算 小结小结: 逻辑运算结果不是逻辑运算结果不是0就是就是1,不可能是其他数值不可能是其他数值 而在逻而在逻辑表达式中作为参加逻辑运算的运算对象可以是辑表达式中作为参加逻辑运算的运算对象可以是0(“假假”)或任何非或任何非0的数值的数值(按按“真真”对待对待) 如果在一个表达式中的如果在一个表达式中的不同位置上出现数值不同位置上出现数值,应区分哪些是作为数值运算或关系运应区分哪些是作为数值运算或关系运算的对象算的对象,哪些作为逻辑运算的对象哪些作为逻辑运算的对象 实际上实际上,逻辑运算符两侧的表达式不但可以是关系表达式

37、或整逻辑运算符两侧的表达式不但可以是关系表达式或整数数(0和非和非0),也可以是任何类型的数据也可以是任何类型的数据, 系统最终以系统最终以0和非和非0来判定它们属于来判定它们属于“真真”或或“假假” 例如例如c & d的值为的值为1 46可以将表可以将表3.2改写成书中表改写成书中表3.3形式形式 熟练掌握熟练掌握C+的关系运算符和逻辑运算符后的关系运算符和逻辑运算符后,可以巧妙可以巧妙地用一个逻辑表达式来表示一个复杂的条件地用一个逻辑表达式来表示一个复杂的条件 例如例如,要判别某一年要判别某一年(year)是否为闰年是否为闰年 闰年的条件是符合下面闰年的条件是符合下面两者之一两者之一: 能

38、被能被4整除整除,但不能被但不能被100整除整除 能被能被100整除整除,又能被又能被400整除整除 例如例如2004 2000年是闰年年是闰年,2005 2100年不是闰年年不是闰年 (year % 4 = 0 & year % 100 != 0) | year % 400 = 0 可以加一个可以加一个“!”用来判别非闰年用来判别非闰年:!(year % 4 = 0 & year % 100 != 0) | year % 400 = 0)473.7 选择结构和选择结构和if语句语句if语句是用来判定所给定的条件是否满足语句是用来判定所给定的条件是否满足,根据判定的结果根据判定的结果(真或假真

39、或假)决定执行给出的决定执行给出的两种操作之一两种操作之一483.7.1 if语句的形式语句的形式1. if(表达式表达式)语句语句例如例如:if(xy) coutxy) coutx;else cout500) cost=0.15;else if(number300) cost=0.10;else if(number100) cost=0.075;else if(number50) cost=0.05;else cost=0;对应流程图对应流程图50说明说明:(1) 3种形式的种形式的if语句都是由一个入口进来语句都是由一个入口进来,经过对经过对“表达表达 式式”的判断的判断,分别执行相应的语

40、句分别执行相应的语句,最后归到一个共同最后归到一个共同 的出口的出口 这种形式的程序结构称为选择结构这种形式的程序结构称为选择结构 在在C+ 中中if语句是实现选择结构主要的语句语句是实现选择结构主要的语句 (2) 3种形式的种形式的if语句中在语句中在if后面都有一个用括号括起来的表后面都有一个用括号括起来的表达式达式,它是程序编写者要求程序判断的它是程序编写者要求程序判断的“条件条件”,一般是一般是逻辑表达式或关系表达式逻辑表达式或关系表达式 (3) 第第2 第第3种形式的种形式的if语句中语句中,在每个在每个else前面有一分号前面有一分号,整整个语句结束处有一分号个语句结束处有一分号

41、(4) 在在if和和else后面可以只含一个内嵌的操作语句后面可以只含一个内嵌的操作语句(如上例如上例),也也可以可以有多个操作语句有多个操作语句,此时用花括号此时用花括号“”将几个语句括将几个语句括起来成为一个复合语句起来成为一个复合语句 51例例3.6 求三角形的面积求三角形的面积 #include #include /使用数学函数时要包含头文件使用数学函数时要包含头文件cmath#include /使用使用I/O流控制符要包含头文件流控制符要包含头文件iomanipusing namespace std;int main( ) double a,b,c; coutabc; if (a+b

42、c & b+ca & c+ab) /复合语句开始复合语句开始 double s,area;/在复合语句内定义变量在复合语句内定义变量 s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c); coutsetiosflags(ios fixed)setprecision(4); coutarea=areaendl; /复合语句结束复合语句结束 else coutit is not a trilateral!b) max=a;else max=b;可以用条件运算符可以用条件运算符(? :)来处理来处理: max=(ab)?a:b; 56条件运算符要求有条件运算符要求有

43、3个操作对象个操作对象,称三目称三目(元元)运算符运算符,它是它是C+中惟一的一个三目运算符中惟一的一个三目运算符 条件表达式的一般形式为条件表达式的一般形式为 表达式表达式1 ? 表达式表达式2 表达式表达式3条件运算符的条件运算符的执行顺序是执行顺序是:先求解表达式先求解表达式1,若为非若为非0(真真)则求解表达式则求解表达式2,此时表达式此时表达式2的值就作为整个条件表达的值就作为整个条件表达式的值式的值 若表达式若表达式1的值为的值为0(假假),则求解表达式则求解表达式3,表达式表达式3的值就是整个条件表达式的值的值就是整个条件表达式的值 “max=(ab)?a:b” 的执行结果是将条

44、件表达式的值赋给的执行结果是将条件表达式的值赋给max 也就是将也就是将a和和b二者中的大者赋给二者中的大者赋给max (条件运算符条件运算符优先于赋值运算符优先于赋值运算符)57例例3.7 输入一个字符输入一个字符,判别它是否为大写字母判别它是否为大写字母,如果是如果是,将它转换成小写字母将它转换成小写字母;如果不是如果不是,不转换不转换 然后输出最然后输出最后得到的字符后得到的字符 #include using namespace std;int main( ) char ch; cinch; ch=(ch=A & ch=Z)?(ch+32):ch; /判别判别ch是否大写字母是否大写字母

45、,是则转换是则转换 coutchendl; return 0;583.7.4 多分支选择结构和多分支选择结构和switch 语句语句switch语句是多分支选择语句语句是多分支选择语句,用来实现多分支用来实现多分支选择结构选择结构 它的一般形式如下它的一般形式如下:switch(表达式表达式) case 常量表达式常量表达式1:语句语句1 case 常量表达式常量表达式2:语句语句2 . case 常量表达式常量表达式n:语句语句n default:语句语句n+1 59例如例如,要求按照考试成绩的等级打印出百分制分数段。要求按照考试成绩的等级打印出百分制分数段。switch(grade) ca

46、se A: cout85100n; case B: cout7084n; case C: cout6069n; case D: cout60n; default: couterrorn; 说明说明:(1) switch后面括号内的后面括号内的“表达式表达式”,可以为整型类型或字符类型可以为整型类型或字符类型 (2) 当当switch表达式的值表达式的值与某一个与某一个case子句中的常量表达式的值子句中的常量表达式的值相匹配时相匹配时,就执行此就执行此case子句中的内嵌语句子句中的内嵌语句,若所有的若所有的case子句子句中的常量表达式的值都不能与中的常量表达式的值都不能与switch表达式

47、的值匹配表达式的值匹配,就执行就执行default子句的内嵌语句子句的内嵌语句 60(3) 每一个每一个case表达式的值必须互不相同表达式的值必须互不相同,否则就会否则就会出现互相矛盾的现象出现互相矛盾的现象(对表达式的同一个值对表达式的同一个值,有两种有两种或多种执行方案或多种执行方案) (4) 各个各个case和和default的出现次序不影响执行结果的出现次序不影响执行结果 例如例如,可以先出现可以先出现“default:”,再出现再出现“case D:”,然后是然后是“case A:” (5) 执行完一个执行完一个case子句后子句后,流程控制转移到下一个流程控制转移到下一个case

48、子子句继续执行句继续执行 “case常量表达式常量表达式”只是起语句标号作用只是起语句标号作用,并不是在该处进行条件判断并不是在该处进行条件判断 在执行在执行switch语句时语句时,根据根据switch表达式的值找到与之匹配的表达式的值找到与之匹配的case子句子句,就从此就从此case子句开始执行下去子句开始执行下去,不再进行判断不再进行判断 61switch(grade) case A: cout85100n; case B: cout7084n; case C: cout6069n; case D: cout60n; default: couterrorn; 若若grade的值等于的值

49、等于A,则则将连续输出将连续输出: 85100 7084 6069 60 error62因此因此,应该在执行一个应该在执行一个case子句后子句后,使流程跳出使流程跳出switch结构结构,即终止即终止switch语句的执行语句的执行 可以用一个可以用一个break语句语句来达到此目的来达到此目的 将上面的将上面的switch结构改写如下结构改写如下:switch(grade) case A: cout85100n;break; case B: cout7084n;break; case C: cout6069n;break; case D: cout60n;break; default: c

50、outerrorn;break; 在在case子句中虽然子句中虽然包含一个以上执包含一个以上执行语句行语句,但可以不但可以不必用花括号括起必用花括号括起来来,会自动顺序执会自动顺序执行本行本case子句中所子句中所有的执行语句有的执行语句 63(6) 多个多个case可以共用一组执行语句可以共用一组执行语句,如如. case A: case B: case C: cout60n;break;.当当grade的值为的值为A B或或C时都执行同一组语句时都执行同一组语句 643.7.5 编写选择结构的程序编写选择结构的程序例例3.8 编写程序编写程序,判断某一年是否为闰年判断某一年是否为闰年 in

51、t main( ) int year; bool leap; coutyear; /输入年份输入年份 if (year%4=0) if(year%100=0) if (year%400=0)/年份能被年份能被400整除整除 leap=true; /闰年闰年 else leap=false; /非闰年非闰年 else /年份能被年份能被4整除但不能被整除但不能被100整除肯定是闰年整除肯定是闰年 leap=true; /是闰年是闰年,令令leap=true else /年份不能被年份不能被4整除肯定不是闰年整除肯定不是闰年 leap=false; 运行情况如下运行情况如下: 2005 2005

52、is not a leap year. 1900 1900 is a leap year. 2004 2004 is a leap year. if (leap) coutyear is ; else coutyear is not ; cout a leap year.endl; return 0;65也可以用一个逻辑表达式包含所有的闰年条件也可以用一个逻辑表达式包含所有的闰年条件,将上述将上述if语句用下面的语句用下面的if语句代替语句代替:if(year%4 = 0 & year%100 !=0) | (year%400 = 0) leap=true;else leap=false;66

53、例例3.9 运输公司对用户计算运费运输公司对用户计算运费 路程路程(s)越远越远,每公里每公里运费越低运费越低 标准如下标准如下: s250km 没有折扣没有折扣 250s500 2%折扣折扣 500s1000 5%折扣折扣1000s2000 8%折扣折扣2000s3000 10%折扣折扣3000s 15%折扣折扣设每公里每吨货物的基本运费为设每公里每吨货物的基本运费为p(price的缩写的缩写),货物重为货物重为w(wright的缩写的缩写),距离为距离为s,折扣为折扣为d(discount的缩写的缩写),则则总运费总运费f(freight的缩写的缩写)的计算公式为的计算公式为 f = p

54、* w * s * (1 - d)67#include using namespace std;int main( ) int c,s; float p,w,d,f; coutpws; if(s=3000) c=12; else c=s/250; 68 switch (c) case 0: d=0;break; case 1: d=2;break; case 2: case 3: d=5;break; case 4: case 5: case 6: case 7: d=8;break; case 8: case 9: case 10: case 11: d=10;break; case 12:

55、 d=15;break; f=p*w*s*(1-d/100.0); coutfreight=fendl; return 0;运行结果如下运行结果如下:please enter p,w,s:100 20 300 freight=588000693.8 循环结构和循环语句循环结构和循环语句在人们所要处理的问题中常常遇到需要反复执行某一在人们所要处理的问题中常常遇到需要反复执行某一操作的情况操作的情况 这就需要用到循环控制这就需要用到循环控制 许多应用程许多应用程序都包含循环序都包含循环 顺序结构顺序结构 选择结构和循环结构是结构化程序设计的选择结构和循环结构是结构化程序设计的3种基本结构种基本结构

56、,是各种复杂程序的基本构造单元是各种复杂程序的基本构造单元 因因此程序设计者必须熟练掌握选择结构和循环结构的此程序设计者必须熟练掌握选择结构和循环结构的概念及使用方法概念及使用方法 703.8.1 用用while语句构成循环语句构成循环while语句的一般形式如下语句的一般形式如下: while (表达式表达式) 语句语句其作用是其作用是: 当指定的条件为真当指定的条件为真(表表达式为非达式为非0)时时,执行执行while语句语句中的内嵌语句中的内嵌语句 其特点是其特点是:先判断表达式先判断表达式,后执行后执行语句语句 while循环称为当型循环循环称为当型循环 while语句对应的流程图语句

57、对应的流程图71例例3.10 求求1+2+3+100 用流程图表示的算法用流程图表示的算法 #include using namespace std;int main( ) int i=1,sum=0; while (i=100) sum=sum+i; i+; coutsum=sumendl;运行结果为运行结果为sum=505072需要注意需要注意:(1) 循环体如果包含一个以上的语句循环体如果包含一个以上的语句,应该用花括号应该用花括号括起来括起来,以复合语句形式出现以复合语句形式出现 如果不加花括号如果不加花括号,则则while语句的范围只到语句的范围只到while后面第一个分号后面第一个

58、分号处处 (2) 在循环体中应有使循环趋向于结束的语句在循环体中应有使循环趋向于结束的语句 733.8.2 用用do-while语句构成循环语句构成循环do-while语句的特点是先执行循环体语句的特点是先执行循环体,然后判断循环然后判断循环条件是否成立条件是否成立 其一般形式为其一般形式为do 语句语句 while (表达式表达式);它是这样执行的它是这样执行的:先执行一次指定的语句先执行一次指定的语句(即循环体即循环体),然然后判别表达式后判别表达式,当表达式的值为非零当表达式的值为非零(“真真”) 时时,返回返回重新执行循环体语句重新执行循环体语句,如此反复如此反复,直到表达式的值等于直

59、到表达式的值等于0为止为止,此时循环结束此时循环结束 74do 语句语句 while (表达式表达式);do-while语句对应的流程图语句对应的流程图75例例3.11 用用do-while语句求语句求1+2+3+100 先画出流程图先画出流程图,见图见图3.12 #include using namespace std;int main( ) int i=1,sum=0; do sum=sum+i; i+; while (i=100); coutsum=sumendl; return 0;763.8.3 用用for语句构成循环语句构成循环C+中的中的for语句使用最为广泛和灵活语句使用最为广

60、泛和灵活,不仅可不仅可以用于循环次数已经确定的情况以用于循环次数已经确定的情况,而且可以而且可以用于循环次数不确定而只给出循环结束条用于循环次数不确定而只给出循环结束条件的情况件的情况,它完全可以代替它完全可以代替while语句语句 for语句的一般格式为语句的一般格式为 for(表达式表达式1;表达式表达式2;表达式表达式3) 语句语句它的执行过程如下它的执行过程如下:(1) 先求解表达式先求解表达式1 (2) 求解表达式求解表达式2,若其值为真若其值为真(值为非值为非0),则执则执行行for语句中指定的内嵌语句语句中指定的内嵌语句,然后执行下然后执行下面第面第(3)步步 若为假若为假(值为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论