




已阅读5页,还剩89页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章程序结构与语句 C ProgrammingLanguage 本章内容 顺序语句结构选择语句结构循环语句结构无条件控制语句 重点难点 三种流程控制结构 重点 嵌套的if语句 难点 循环结构 难点 C ProgrammingLanguage 1概述 任何计算问题都可以通过特定顺序执行一系列操作而完成 包括 1 执行的操作 action 2 执行操作的顺序 order 例子 C ProgrammingLanguage C 程序由函数构成 而函数由语句组成 指定计算机执行语句的顺序称为程序控制 programcontrol 通常 程序中的语句按编写的顺序一条一条地执行 称为顺序执行 sequentialexecution 可以用C 的流程控制语句控制程序的执行顺序 这种技术称为控制转移 transferofcontrol C ProgrammingLanguage 2C 中的语句结构 顺序结构 sequencestructure 选择结构 selectionstructure if else 语句 switch case 语句 循环结构 loopstructure while 语句 do while 语句 for 语句无条件转移语句break语句 continue语句 goto语句顺序结构 选择结构 循环结构是结构化程序的三种基本结构 不提倡使用goto语句 C ProgrammingLanguage 3顺序结构 sequencestructure 程序设计 C 语句 statement 是以分号 为结束标志的 分号是C 语句不可缺少的一部分 表达式语句 说明语句和空语句 1 表达式后加分号 构成表达式语句 expressionstatement 2 变量的定义 引用的说明和函数的说明后面加分号 构成说明语句 declarationstatement 3 空语句 前无内容复合语句多条语句用 括起来称为复合语句 又称块语句 复合语句可以嵌套 分程序的概念 C ProgrammingLanguage 在顺序结构程序中 各语句 或命令 是按照位置的先后次序 顺序执行的 且每个语句都会被执行到 顺序结构的流程图 a 常用流程图 b N S流程图 C ProgrammingLanguage 注 对表达式 i i 1 的正确理解 表达式 i i 1 与数学中的方程 x x 1 的比较计算机对 i i 1 的执行过程 计算i 1即3 1的值 结果为4 4 3 C ProgrammingLanguage 顺序结构程序设计举例 例3 1 输入三角形的三边长 求三角形面积 已知三角形的三边长a b c 则该三角形的面积公式为 其中s a b c 2 源程序 ex3 1 cpp include includeintmain floata b c s area cin a b c s 1 0 2 a b c area sqrt s s a s b s c cout a a b b c c s s endl cout area area endl return0 C ProgrammingLanguage 例3 2 从键盘输入一个大写字母 要求改用小写字母输出 要求输出相应字母的ASCII码 提示 每一个小写字母比它相应的大写字母的ASCII码大32 源程序 ex3 2 cpp includeintmain charc1 c2 intn1 n2 cin c1 n1 c1 cout c1 n1 endl c2 c1 32 n2 c2 cout c2 n2 endl return0 C ProgrammingLanguage 例3 3 求ax2 bx c 0方程的根 a b c由键盘输入 设b2 4ac 0 求根公式为 令 则 C ProgrammingLanguage 源程序 ex3 3 cpp include includeintmain floata b c disc x1 x2 p q cin a b c disc b b 4 a c p b 2 a q sqrt disc 2 a x1 p q x2 p q cout x1 x1 x2 x2 endl return0 C ProgrammingLanguage 5选择结构 selectionstructure 程序设计 选择结构 selectionstructure 也称分支结构或判断结构 它根据 条件 判断的结果决定程序执行的流向 条件即表达式 其值 非0 代表 真 True T 0 代表 假 False F 二分支结构 if结构 多分支结构 switch结构 在以后对条件表达式的叙述中 用 T 代表 非0 F代表 0 C ProgrammingLanguage 5if语句 if语句的第一种形式if 表达式 语句说明 如果表达式的值为T 则执行语句 否则不执行 其中的语句可以是简单语句 也可以是复合语句 该结构的执行过程如下图 a b C ProgrammingLanguage 例3 4 从输入x y两个整数 按从小到大的顺序输出 源程序 ex3 4 cpp本程序若输入的x大于y 则交换x和y本身 includeintmain intx y t cin x y if x y 实现x和y的互换t x x y y t cout x y endl return0 C ProgrammingLanguage if语句的第二种形式if 表达式 语句1else语句2说明 如果表达式的值为T 则执行语句1 否则执行语句2 其中的语句和语句2可以是简单语句 也可以是复合语句 该语句的执行过程如下图 C ProgrammingLanguage a b C ProgrammingLanguage 例3 5 用if语句的第二种结构改写 例3 4 源程序 ex3 5 cpp includeintmain intx y cin x if x y cout y x endl elsecout x y endl return0 C ProgrammingLanguage 例3 6 有一函数写一程序 输入x的值 输出y的值 源程序 ex3 6 cpp includeintmain intx y cin x if x 8 y 10 3 x elsey 6 x 5 cout x x t y y endl return0 C ProgrammingLanguage if语句的第三种形式if 表达式1 语句1elseif 表达式2 语句2elseif 表达式n 语句nelse语句n 1该语句的执行过程如下图 C ProgrammingLanguage a b C ProgrammingLanguage 例如 if number 500 cost 0 15 elseif number 300 cost 0 10 elseif number 100 cost 0 075 elseif number 50 cost 0 05 elsecost 0 C ProgrammingLanguage 使用if语句中还应注意以下问题 在三种形式的if语句中 在if关键字之后均为表达式 该表达式通常是逻辑表达式或关系表达式 但也可以是其它表达式 如赋值表达式等 甚至也可以是一个变量 在执行if语句时先对表达式求解 若值为0 按 假 处理 若值为非0 按 真 处理 执行指定的语句 例如 if a 5 语句 if 3 cout O K endl C ProgrammingLanguage 在if语句中 条件判断表达式必须用括号括起来 在语句之后必须加分号 在if语句的三种形式中 所有的语句应为单个语句 如果要想在满足条件时执行一组 多个 语句 则必须把这一组语句用 括起来组成一个复合语句 但要注意的是在 之后不能再加分号 例如 if a b a b else a 0 b 10 C ProgrammingLanguage if语句的嵌套 在if语句中又包含一个或多个if语句称为if语句的嵌套 一般形式如下 if if 语句1else语句2elseif 语句3else语句4注意if和else的配对关系 内嵌if 内嵌if C ProgrammingLanguage 例如 if 表达式1 if 表达式2 语句1 else语句2 其中的else究竟是与哪一个if配对呢 C ProgrammingLanguage 应该理解为 if 表达式1 if 表达式2 语句1 else语句2 还是应理解为 if 表达式1 if 表达式2 语句1 else语句2 为了避免二义性 C 规定 else总是与它前面最近的if配对 因此对上述例子应按前一种情况理解 C ProgrammingLanguage 条件运算符和条件表达式 如果在条件语句中 只执行单个的赋值语句时 常可使用条件表达式来实现 例如 if a b max a elsemax b 可改写为 max a b a b 其中 a b a b 就是一个条件表达式 它是这样执行的 如果 a b 条件为真 则条件表达式取值a 否则取值b C ProgrammingLanguage 条件运算符为 和 它是一个三目运算符 即有三个参与运算的量 由条件运算符组成条件表达式的一般形式为 表达式1 表达式2 表达式3其求值规则为 如果表达式1的值为真 则以表达式2的值作为条件表达式的值 否则以表达式2的值作为整个条件表达式的值 使用条件表达式时 还应注意以下几点 1 条件运算符的运算优先级低于关系运算符和算术运算符 但高于赋值符 因此max a b a b可以去掉括号而写为max a b a b C ProgrammingLanguage 条件运算符 和 是一对运算符 不能分开单独使用 条件运算符的结合方向是自右至左 例如 a b a c d c d应理解为a b a c d c d 这也就是条件表达式嵌套的情形 即其中的表达式3又是一个条件表达式 条件表达式不能取代一般的if语句 只有在if语句中内嵌的语句为赋值语句 且两个分支都给同一个变量赋值 时才能代替if语句 C ProgrammingLanguage 像下面的if语句就无法用一个条件表达式代替if a b coutb a b y 1 1 5 C ProgrammingLanguage 例3 7 用条件表达式改写 例3 6 源程序 ex3 7 cpp includeintmain intx y cin x y x 8 10 3 x 6 x 5 cout x x t y y endl return0 C ProgrammingLanguage 6switch语句 语言还提供了另一种用于多分支选择的switch语句 其一般形式为 switch 表达式 case常量表达式1 语句1 case常量表达式2 语句2 case常量表达式n 语句n default 语句n 1 C ProgrammingLanguage 语义 计算表达式的值并逐个与其后的常量表达式值相比较 当表达式的值与某个常量表达式的值相等时 即执行其后的语句 然后不再进行判断 继续执行后面所有case后的语句 如表达式的值与所有case后的常量表达式均不相同时 则执行default后的语句 例如 按照成绩等级打印出分数段 用switch语句 switch grade case A cout 85 100 endl case B cout 70 84 endl case C cout 60 69 endl case D cout 60 endl default cout error endl C ProgrammingLanguage 说明 1 每一个case的常量表达式的值必须互不相同 以免程序执行的流程产生矛盾 2 switch后面的 表达式 ANSI允许它为任何类型 3 各个case和default的出现次序不影响执行结果 4 若要在执行一个case分支语句后 使程序执行流程退出switch结构 那么可以加入break语句 如 switch grade case A cout 85 100 endl break case B cout 70 84 endl break case C cout 60 69 endl break case D cout 60 endl break default cout error endl C ProgrammingLanguage 5 多个case语句可以共用一组执行语句 如 case A case B case C cout60 endl C ProgrammingLanguage 选择结构程序设计举例 例3 8 写一程序 判断某一年是否是闰年 闰年的条件是符合下面二者之一 能被4整除 但不能被100整除 能被100整除 又能被400整除 算法如下 说明 year为年 leap代表是否是闰年 若leap 1代表闰年 若leap 0代表非闰年 C ProgrammingLanguage ex3 8 cpp includeintmain intyear leap cin year if year 4 0 if year 100 0 if year 400 0 leap 1 elseleap 0 elseleap 1 elseleap 0 if leap cout is year elsecout isnot year cout aleapyear endl return0 判断是否是闰年 C ProgrammingLanguage 可以将判断是否是闰年的条件语句改为 if year 4 0 leap 0 elseif year 100 0 leap 1 elseif year 400 0 leap 0 elseleap 1 也可用一个逻辑表达式包含闰年条件 改为 if year 4 0 C ProgrammingLanguage 例3 9 求解一元二次方程ax2 bx c 0的根 包括实根和虚根 C ProgrammingLanguage ex3 9 cpp include include includeintmain doublea b c p x1 x2 real imag cin a b c if a 0 C ProgrammingLanguage elseif p 0 cout Complexroots n cout setw 8 real imag i endl cout setw 8 real imag i endl else x1 real imag x2 real imag cout Realroots n cout setw 10 x1 and x2 endl elsecout Itisillegalornomeaning endl return0 C ProgrammingLanguage 例3 10 用switch结构编写一个可以处理四则运算的程序 源程序 ex3 10 cpp includeintmain floatv1 v2 charop cout v1 op v2 C ProgrammingLanguage switch op case cout v1 op v2 v1 v2 endl break case cout v1 op v2 v1 v2 endl break case cout v1 op v2 v1 v2 endl break case if v2 0 cout divisionbyzero endl elsecout v1 op v2 v1 v2 endl break default cout v1 op v2 v1 v2 endl break return0 C ProgrammingLanguage 7循环语句结构 循环结构是结构化程序设计的基本成分之一 其特点是 在给定条件成立时 反复执行某程序段 直到条件不成立为止 给定的条件称为循环条件 反复执行的程序段称为循环体 C 主要提供以下三种循环结构 1 while循环结构 2 do while循环结构 3 for循环结构另外 还可以用goto语句和if语句构成循环 C ProgrammingLanguage while循环结构while循环结构也称为 当型 循环 其特点先判断循环条件 而后决定是否执行循环体 一般形式为 while 表达式 语句其中表达式称为循环条件 语句称为循环体 循环体可以是简单语句 也可以是复合语句 其执行过程如下图所示 a b C ProgrammingLanguage 例3 11 用while循环把26个大写字母显示出来 源程序 ex3 11 cpp includeintmain charch A while ch Z cout ch ch cout endl return0 C ProgrammingLanguage 例3 12 求1 2 3 100之和 思路 C ProgrammingLanguage 源程序 ex3 12 cpp includeintmain intsum 0 i 1 while i 100 sum i i cout sum sum endl return0 C ProgrammingLanguage 例3 13 求1 2 3 n即n ex3 13 cpp includeintmain intfac 1 i 1 n cin n while i n fac fac i i cout n fac endl return0 C ProgrammingLanguage 使用while语句时应注意 1 循环体如果包含一个以上的语句 应该用花括弧括起来 以复合语句的形式出现 如果不加花括弧 则while语句的范围只到while后面第一个分号处 2 在循环体中应该有使循环趋向于结束的语句 否则会形成 死循环 C ProgrammingLanguage do while循环结构do while循环结构称为 直到型 循环 因为它先执行循环体 而后判断循环条件 其一般形式为 do语句while 表达式 执行过程如下图所示 C ProgrammingLanguage 例3 14 用do while循环改写 例3 11 源程序 ex3 14 cpp includeintmain charch A docout ch while ch Z cout endl return0 C ProgrammingLanguage 例3 15 用do while循环改写 例3 12 源程序 ex3 15 cpp includeintmain intsum 0 i 1 dosum i while i 100 cout sum sum endl return0 C ProgrammingLanguage 课堂练习 用do while循环改写 例3 13 C ProgrammingLanguage 在一般情况下 用while循环和do while循环处理同一问题时 若二者的循环体部分是一样的 他们的结果也一样 但如果while后面的表达式一开始就为假 0值 时 两种循环的结果是不同的 由于do while循环是先执行循环体后判断循环条件的 所以它至少要执行一次循环体 而while循环是先判断循环条件后执行循环体的 可以一次都不执行循环体 C ProgrammingLanguage 例3 16 while和do while循环的比较 ex3 16 1 cpp includeintmain intsum 0 i cin i while i 10 sum sum i i cout sum sum return0 ex3 16 2 cpp includeintmain intsum 0 i cin i do sum sum i i while i 10 cout sum sum return0 C ProgrammingLanguage for循环结构C 中的for循环使用最灵活 它完全可以取代while语句 它的一般形式为 for 表达式1 表达式2 表达式3 语句其执行过程如下图所示 C ProgrammingLanguage for语句最简单的应用形式也是最容易理解的形式 for 循环变量赋初值 循环条件 循环变量增量 语句例如 for i 1 i 100 i sum sum i 相当于 i 1 while i 100 sum sum i i C ProgrammingLanguage 对于for循环中语句的一般形式 就是如下的while循环形式 表达式1 while 表达式2 语句表达式3 说明 1 for循环中的 表达式1 循环变量赋初值 表达式2 循环条件 和 表达式3 循环变量增量 都是都可以省略 但 不能缺省 C ProgrammingLanguage 2 省略了 表达式1 循环变量赋初值 表示不对循环控制变量赋初值 3 省略了 表达式2 循环条件 则成为死循环 例如 for i 1 i sum sum i 相当于 i 1 while 1 sum sum i i C ProgrammingLanguage 4 省略了 表达式3 循环变量增量 则不对循环控制变量进行操作 这时可在语句体中加入修改循环控制变量的语句 例如 for i 1 i 100 sum sum i i 5 省略了 表达式1 循环变量赋初值 和 表达式3 循环变量增量 例如 for i 100 sum sum i i C ProgrammingLanguage 相当于 while i 100 sum sum i i 6 3个表达式都可以省略 例如 for 语句相当于 while 1 语句 C ProgrammingLanguage 7 表达式1可以是设置循环变量的初值的赋值表达式 也可以是其他表达式 例如 for sum 0 i 100 i sum sum i 8 表达式1和表达式3可以是一个简单表达式也可以是逗号表达式 for sum 0 i 1 i 100 i sum sum i 或 for i 0 j 100 i 100 i j k i j C ProgrammingLanguage 9 表达式2一般是关系表达式或逻辑表达式 但也可是数值表达式或字符表达式 只要其值非零 就执行循环体 例如 for i 0 c getchar n i c 又如 for c getchar n cout c C ProgrammingLanguage 循环可以嵌套使用 例3 17 打印九九乘法表 教材 例3 19 ex3 17 cpp include includeintmain inti j for i 1 i 9 i for j 1 j 9 j cout setw 3 i j cout endl return0 C ProgrammingLanguage 例3 18 百钱百鸡 问题 教材 例3 20 ex3 18 cpp include includeintmain intx y z for x 1 x 100 x for y 1 y 100 y z 100 x y if 15 x 9 y z 300 cout x setiosflags ios left setw 10 x cout y setw 10 y z cout setw 10 z endl return0 C ProgrammingLanguage 几种循环的比较 1 四种循环都可以用来处理同一个问题 一般可以互相代替 但一般不提倡用goto型循环 2 while和do while循环 循环体中应包括使循环趋于结束的语句 for语句功能最强 3 用while和do while循环时 循环变量初始化的操作应在while和do while语句之前完成 而for语句可以在表达式1中实现循环变量的初始化 C ProgrammingLanguage 8无条件控制语句 break语句continue语句goto语句 C ProgrammingLanguage break语句break语句通常用在循环语句和开关语句中 当break用于开关语句switch中时 可使程序跳出switch而执行switch以后的语句 break语句用于循环语句 用来跳出循环 提前结束循环 把程序转移到循环结构的下一句继续执行 例3 19 求1 2 3 直到和值首次大于10000 C ProgrammingLanguage ex3 19 cpp includeintmain inti 1 sum 0 for sum i i if sum 10000 break cout sum sum endl return0 C ProgrammingLanguage 例3 20 求整数m是否是素数 质数 ex3 20 cpp includeintmain intm i cin m for i 2 i m i if m i 0 break if i m cout m isaprimenumber endl elsecout m isnotaprimenumber endl return0 C ProgrammingLanguage 例3 21 求300 330之间的所有素数 ex3 21 cpp include includeintmain intm i k for m 301 mk cout m isaprimenumber endl return0 C ProgrammingLanguage 注意 1 break语句对if else的条件语句不起作用 2 在多层循环中 一个break语句只向外跳一层 continue语句continue语句的作用是结束本次循环 即跳过循环体中尚未执行的语句 直接进行循环条件的判断 continue语句只用在for while do while等循环体中 常与if条件语句一起使用 用来加速循环 例3 22 把100 200之间不能被3整除的数输出 C ProgrammingLanguage ex3 22 cpp include includeintmain intn for n 100 n 200 n if n 3 0 continue cout n endl return0 C ProgrammingLanguage goto语句goto语句为无条件转向语句 它的一般形式为 goto语句标号 其中语句标号要用标识符表示 而不能用数值 此语句的作用是程序无条件跳转到有该标号的语句上继续执行 带标号的语句形式为 语句标号 语句此语句不是goto语句的目标语句 其作用范围是当前函数 结构化程序不提倡使用goto语句 C ProgrammingLanguage 例3 23 求1 100间的奇数和 即1 3 5 99 ex3 23 cpp includeintmain inti 1 sum 0 for i 00 i i 2 sum sum i cout sum sum endl return0 课堂练习 将该例用while循环或do while循环或for循环改写 C ProgrammingLanguage 循环程序设计举例 例3 24 求两整数的最大公约数 greatestcommondivisor gcd 和最小公倍数 leasecommonmultiple lcm 算法 辗转相除法又名欧几里德算法 设两整数为a和b 1 a除以b得余数c 若c 0 则b为两数的gcd 并退出循环 2 若c 0 则a b b c 转 1 继续 据数学知识 lcm a b gcd C ProgrammingLanguage ex3 24 cpp includeintmain inta b c intgcd lcm cout a b lcm a b c a b C ProgrammingLanguage while c 0 a b b c c a b gcd b lcm gcd cout Thegreatestcommondivisor gcd endl cout Theleasecommonmultiple lcm endl return0 C ProgrammingLanguage 例3 25 用p 4 1 1 3 1 5 1 7 公式求p的近似值 直到最后一项小余10 6为止 P55练习3 4 C ProgrammingLanguage ex3 25 cpp include includeintmain ints floatn t pi t 1 pi 0 n 1 s 1 while fabs t 1e 6 pi pi t n n 2 s s t s n pi pi 4 cout pi pi endl return0 C ProgrammingLanguage 例3 26 求Fibonacci数列的前20项 这个数列有如下特点 第1 2个数为1 1 从第3个数开始 该数是其前两个数之和 即 F1 1 n 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 视觉感知行业面临的机遇分析
- 山东省济宁市任城区2024-2025学年下学期期中质量检测六年级数学试题(含部分答案)
- 江苏省常州市2024-2025学年七年级下学期期末模拟练习英语试卷(含答案)
- 河北省保定市定州市2024-2025学年八年级下学期4月期中数学试题(含答案)
- 2024-2025学年四校联合教学质量检测高一地理
- 部编版三年级上册第三单元《去年的树》教案
- 建筑施工特种作业-建筑起重机械司机(塔式起重机)真题库-4
- 建筑施工特种作业-建筑起重机械安装拆卸工(施工升降机)真题库-2
- 入队教育考核题目及答案
- 2023-2024学年四川省泸州市江阳区高二下学期6月期末数学试题(解析版)
- 2025年安全生产月主题培训课件
- 2024北京朝阳区四年级(下)期末语文试题及答案
- 劳务报酬扣税计算器(excel自带公式版)
- 护理不良事件警示教育
- 广西水利安全员C证考试复习题(附答案)
- 托育服务政策法规与职业伦理 课件全套 黄鑫 第1-8章 绪论、托育服务政策法规概述-托育职业伦理教育、修养与评价
- 中学历史教学中存在的问题与对策建议
- 安徽省历年中考作文题与审题指导(2001-2024)
- 定点零售药店医保管理制度
- 铁路设计专业毕业论文
- 数字频率计的设计与实现课程设计
评论
0/150
提交评论