C面向对象程序第3章.ppt

上传人:max****ui 文档编号:6335408 上传时间:2020-02-23 格式:PPT 页数:82 大小:590KB
返回 下载 相关 举报
C面向对象程序第3章.ppt_第1页
第1页 / 共82页
C面向对象程序第3章.ppt_第2页
第2页 / 共82页
C面向对象程序第3章.ppt_第3页
第3页 / 共82页
点击查看更多>>
资源描述
C 面向过程程序设计 授课老师 李晓平 第3章程序结构和流程控制语句 本章要点3 1程序的三种基本结构和语句3 2分支语句3 3循环语句3 4控制程序执行顺序的语句3 5程序设计举例 3 1程序的基本结构和语句 3 1 1程序的基本结构1 顺序结构顺序结构程序的执行顺序就是程序的书写顺序 是三种程序结构中最简单的程序结构 也是最基本的结构其他结构完成后最终要回归至顺序结构上继续执行 直到程序结束 其程序的书写格式为 S1 S2 Sn 该程序的执行顺序是 S1 S2 Sn 图3 1 a 为顺序结构流程图 图3 1 b 为其N S流程图 2 分支结构 在两种可能的操作中按一定条件选取一个执行的结构称为分支结构 图3 2 a 为分支结构流程图 图3 2 b 为其N S流程图 3 循环结构 被重复执行的语句或复合语句称为循环体 每重复执行一次 都必须做出是否继续重复或是停止的决定 这个决定所依据的条件称为循环控制条件或循环控制表达式 其中关键性的变量又称为循环控制变量 图3 3 a 为循环结构流程图 图3 3 b 为其N S流程图 3 2选择结构 思考 编程实现从键盘上输入一个数 编程实现从键盘上输入一个数 判断其正负 是正数则输出 正数 结论 在程序中如果需要根据判断条件才能确定做什么时我们要用到选择结构 3 2 1选择结构中if语句 3 2 1if语句if语句是专门用来实现选择型结构的语句 if语句有3种形式 1 单分支语句语句格式 if 表达式 语句 执行过程 当表达式的值为非0 真 时 执行语句 否则不执行语句 说明 1 表达式必须用 括起来 2 语句只能是单个语句或复合语句 图3 5单分支语句流程图 例3 1 编写一个if语句的简单程序 include stdafx h include stdio h include iostream h voidmain intx cout x if x 0 cout此数为正整数 2 双分支语句 语句格式 if else 例3 2 编写一个判断闰年的程序 include stdafx h include stdio h include iostream h voidmain intyear cout year if year 4 0 程序执行后输出结果如下 请输入一个年份 20062006年不是闰年 3 多分支语句 多分支语句的格式为 if elseif elseif else 4 if语句的嵌套 在if语句中又包含一个或多个if语句称为if语句的嵌套 一般形式如下 If 条件 if 条件 语句1 else语句2 Elseif 条件 语句3 else语句4 注意 else总是与离它最近的没有配对的if配对 也可以加括号确定配对关系 知识点总结 If语句中条件必须用括号括起来 而必须是一个关系表达式或逻辑表达式If语句与else必须配对当要执行的语句是多条时要用大括号括起形成复合语句 习题巩固 例题巩固分析此程序的结果是否正确 如不正确该如何改写程序1 includeVoidmain intx y cin x If x 0 y 1 Elseif x 0 y 0 Elsey 1 Cout x y 例题巩固分析此程序的结果是否正确 如不正确该如何改写 includeVoidmain intx y cin x if x 0 if x 0 y 1 elsey 0 Elsey 1 例题巩固分析此程序的结果是否正确 如不正确该如何改写 includeVoidmain intx y cin x Y 1 if x 0 if x 0 y 1 elsey 0 例题巩固分析此程序的结果是否正确 如不正确该如何改写 includeVoidmain intx y cin x y 0 if x 0 if x 0 y 1 elsey 1 3 2 2switch语句 1 switch语句switch语句是多分支选择语句 switch语句的语法形式如下 switch 表达式 case常量表达式1 语句1break case常量表达式2 语句2break case常量表达式n 语句nbreak default 语句n 1 实例程序 当情况变量i为1时 输出字符串case1 为2时输出字符串case2等 当情况不是1或2或3时 输出字符串default include stdafx h include stdio h include iostream h voidmain inti cout i switch i case1 cout case1 endl break case2 cout case2 endl break case3 cout case3 endl break default cout default endl getchar 知识点总结 1 switch后面括号内的表达式只能是整型表达式或字符型表达式 与其对应 case之后的常量表达式也应为整型常量表达式或字符型常量表达式 2 每个case后面的常量表达式的值必须互不相同 3 各个case和default的出现次序不影响执行结果 4 一个case后可以包含多个语句 并且这多个语句不必用花括号括起来 程序会自动顺序执行该case后面的所有语句 一个case后面也可以没有任何语句 2 break语句在switch语句中的作用 当在switch case语句中使用break语句时 会引起程序流程由switch结构体退出 控制转向switch结构末尾的第一条语句 如果没有使用break语句 控制转向下一个case语句 执行switch结构中其余的语句 switch语句的嵌套使用 include stdafx h include stdio h include iostream h voidmain inta b typewhattobuy flowercolorcolor cout a switch a case0 cout b switch b case0 cout redflower endl break case1 cout blueflower endl break case2 cout whiteflower endl break case3 cout blackflower endl 4 cout greenflower endl break default cout Sorry whichcolor endl break default cout Sorry whatdoyouwant endl getchar 运行结果 选择结构习题 输入两个运算量及一个运算符 输出运算结果 这相当于计算器计算 1 某运输公司的运费标准如下 1 当运输距离s 300公里时 货重w 6时 按92 收费 2 当运输距离s 6时 按94 收费 写程序前 设p为每吨每公里的运费 s w p为输入数据 均为整数 cost 输出 为向用户收取的费用 2 输入两个正整数a b b最大不超过三位数 a不大于31 使a在左 b在右 拼接成一个新的数c 例如 a 2 b 16 则c 216 若a 18 b 476 则c 18476 3 任意输入三个数代表三角形的三边长 看这三边能否组成三角形 3 3循环语句 思考 如何实现在屏幕上输出1个星型符号 如何实现在屏幕上输出5个星型符号 如何实现在屏幕上输出100个星型符号 结论 当重复执行相同语句时 要进行循环 3 3 1while循环语句 while 循环语句又称为前判循环语句或while 循环语句 while 语句的一般格式 while 条件表达式 循环体语句 while循环由4个部分组成 1 循环变量初始化 2 继续条件 3 循环体 4 改变循环变量的值 例 求1 2 3 100 i 1 循环变量初始化while i 10 继续条件 循环体sum sum i i 改变循环变量的值 用while语句求累加和 S 1 2 2 4 n 程序流程图 程序代码 include stdafx h include stdio h include iostream h voidmain inti n sum cout n sum 0 i 1 while i n sum sum i i cout sum sum endl getchar 程序执行后提示 Pleaseinputaninteger 100sum 5050 知识点总结 1 while语句是先判断表达式i n是否成立 若条件成立 则将sum加i后赋给sum及i增加1 若条件不成立 则不执行相应语句 退出循环 2 当表达式的值一开始不成立 语句一次也不执行 如当输入n为0时 i n不成立 语句sum sum i 和i 一次也不执行 3 在循环体中应有能不断修改循环条件的语句 最终能使循环结束 否则会形成 死循环 如i 语句 使i不断加1 直到大于n为止 例题巩固编写检验一个正整数n是否为素数的程序 分析 素数就是除了1和其本身之外 不能被其他数整除的数 要检验一个正整数n是否是素数 可以用2到n 1对n进行模除 取余运算 如果余数为零则表明该数被某个数整除了 不是素数 否则表明该数是素数 如果一个正整数n不是素数 除了输出 这个数不是个素数 的提示字符串外 还应用break语句从循环体内退出 在循环语句的后继语句还要判定循环控制变量i是否与n相等 如果相等 表示n是个素数 输出 这个数是个素数 的字符串 否则不是素数 而是中途从循环体内退出来的 程序代码 include stdafx h include stdio h include iostream h voidmain intn i 1 cout n while i n if n i 0 cout 这个数不是个素数 endl break if i n cout 这个数是个素数 endl getchar 3 3 2do while语句 1 do while循环语句其一般格式 do 循环体语句 while 表达式 2 do while循环语句的执行过程 do while循环语句的执行过程 1 先执行循环体 在循环体内应有对循环控制变量进行修改的操作 2 检测循环控制表达式的值 若其值为非零 真 则再一次执行循环体 否则退出循环 控制流程转向do while语句的后继语句继续执行 例题巩固 1 输入一个非负数 将各位数字反转后输出 include stdafx h include stdio h include iostream h voidmain intn x cout n cout 此数反转后为 endl do x n 10 cout x n 10 while n 0 cout endl getchar 2 求一个由键盘输人的整数的阶乘程序 分析 2 1 2 3 1 2 3 n 1 2 3 n 1 n 求一个由键盘给定数的阶乘就是以给定n作为循环控制变量 达到计算阶乘的目的 程序代码 include stdafx h include stdio h include iostream h voidmain inti 1 f 1 n cout n do f f i i i 1 while i n cout n f endl getchar 3 3 3for语句 1 for循环语句for语句的一般格式 for 表达式1 表达式2 表达式3 循环体语句 其中 for是for循环语句的关键字 表达式1通常是赋值语句 可以实现对多个变量 用逗号运算符分隔成逗号运算表达式 进行赋初值 表达式2通常是关系表达式或逻辑表达式 它在每次循环之前 用于对循环控制条件的检测 表达式2为非零时执行循环体 否则退出循环 执行该循环语句的后继语句 表达式3是一般表达式用于循环控制条件变量的修改 循环体语句是for循环语句的循环体 可以是单个语句 也可以是复合语句 2 for语句的执行过程 for语句的执行过程 1 先对表达式1进行计算 一般是赋值 2 检测表达式2 如果循环控制条件表达式值为真 则执行循环体 否则退出循环 3 表达式3一般不在循环体内 而在for后的括号内 每次执行完循环体就转入对表达式3的修改操作 接着对表达式2进行检测以决定是否继续进行循环 例 使用for循环求1 100之间的质数 include stdafx h include stdio h include iostream h voidmain inti j k flag for i 2 i 100 i flag 1 k i 2 for j 2 j k j if i j 0 flag 0 break if flag cout i cout endl getchar 3 3 4三种循环语句的比较 1 while语句和for语句都是先判断循环条件表达式的值 后执行循环体语句 而do while语句是先执行循环体语句 后判断循环条件表达式的值 2 while语句 do while语句和for语句都是循环条件表达式为真时重复执行循环体语句 循环条件表达式为假时结束循环 3 当第一次执行while语句或for语句时 循环条件表达式就是假 则一次也不执行循环体语句 而当第一次执行do while语句时 循环条件表达式就是假 也要执行一次循环体语句 也就是说 do while语句至少执行一次循环体 而while语句和for语句有可能一次也不执行循环体 4 while语句和for语句用来构成 当型 循环结构 do while语句用来构成 直到型 循环结构 5 在循环体语句至少执行一次的情况下 三种循环语句构成的循环结构可以相互转换 实际上 用得最多的是for语句 其次是while语句 而do while语句相对于前两种语句则用得较少 while和do While循环语句的比较 include stdafx h include stdio h include iostream h voidmain intsum 0 k cout k while kSum 5511Sum 0 include stdafx h include stdio h include iostream h voidmain intsum 0 k cout k do sum k k while kSum 5511Sum 11 3 3 5循环语句的嵌套 循环语句中又包含有循环语句的结构称为循环语句的嵌套 循环语句的嵌套又称多重循环 当一个循环语句的循环体中只含一层循环语句时 称双重循环 若第二层循环语句的循环体中还包含一层循环语句时 称三重循环等 三种循环语句可以互相嵌套 编写程序 按下列格式输出九九乘法表 12345678911224336944812165510152025661218243036771421283542498816243240485664991827364554637281 分析及流程图 分析 用双循环完成 外层用for语句构成循环 用于控制共输出九行 内层也用for语句构成循环 用于控制每行的输出 程序流程图如图所示 程序代码 include stdafx h include stdio h include iostream h voidmain inti j cout t for i 1 i 9 i cout i t 输出标题行 1234 9 cout endl for i 1 i 9 i 外循环控制第一个乘数i从1 9 cout i t for j 1 j i 1 j 内循环控制第二个乘数j从1 icout i j t 计算并输出每一项i jcout endl 输出完一行后换行 getchar 程序运行结果 编写一程序输出一个菱形图案 include stdafx h include stdio h include iostream h voidmain inti j n 4 for i 1 i n i 输出前4行 for j 1 j 20 j cout 图案左侧空20列for j 1 j 8 2 i j cout for j 1 j 4 i 3 j cout cout endl for i 1 i n 1 i 输出后3行 for j 1 j 20 j cout 图案左侧空20列for j 1 j 2 i j cout for j 1 j 13 4 i j cout cout endl getchar 运行结果 3 4流程控制语句 3 4 1break语句break语句是一种具有特殊功能的无条件转移语句 其一般形式是 break 其中 break是关键字 其后的分号是系统要求的 break语句由两个用途 一是可以使流程跳出switch结构 继续执行switch语句下面的语句 二是用在循环语句中 当在循环体执行过程中遇到break语句时 终止循环的执行 中途退出循环 转去执行循环体后的语句 编程将从键盘上输入的若干个正数求和 遇到负数则终止程序 并且输入的数不超过10个 include stdafx h include stdio h include iostream h voidmain inti num sum sum 0 cout num if num 0 break sum num cout sum sum endl getchar 程序执行结果如下 245 2Sum 11 3 4 2continue语句 continue语句又称为继续语句 其一般形式是 continue continue是其关键字 后边的分号是系统要求的 继续语句也是一种具有特殊功能的无条件转移语句 continue语句功能 使循环体内的控制流程转移到包含它的while for do while语句的下个循环周期 并根据循环控制表达式的值决定是否再进行循环 也就是说 在循环语句的循环体中 如果执行到continue语句 则跳过循环体中位于continue语句下边的其他语句 将流程转移到下一轮循环周期 continue语句在三种循环语句中的作用 while for do continue continue continue while Continue语句应用举例 include stdafx h include stdio h include iostream h voidmain charc while c q 按下q则退出 cout c if c c 当按下c 返回到循环体的开始处continue cout Theletteris c cout endl getchar 程序运行界面 3 4 3语句标号和goto语句 1 语句标号其一般形式为 例如 label 1 begin2 goto语句C 语言中的goto语句又称为无条件转移语句 其一般形式是 goto语句标号 找到满足乘积为50的两个小于10的整数后即输出该数 include stdafx h include stdio h include iostream h voidmain inti j for i 1 i 10 i for j 1 j 10 j if i j 50 gotoEnd End cout i j 50 endl getchar 程序执行结果如下 5 10 50 3 4 4流程控制函数 exit 函数和abort 函数都是C 的库函数 其功能都是终止程序的执行 将控制返回给操作系统 通常 exit 函数用于正常终止程序的执行 而abort 函数用于异常终止程序的执行 显然 执行到两个函数中的任一个时 都将改变程序的执行次序 当使用这两个函数中的任一个函数时 都应包含头文件stdlib h 1 exit 函数exit 函数的格式为 exit 循环结构习题 求两个正整数的最大公约数 3 5程序设计举例 3 5 1选择结构语句应用示例分支语句用于实现分支结构程序设计 能够用分支结构程序解决的常见问题有 比较数的大小 找出若干数中最大值与最小值 分段函数 解一元二次方程 判断闰年 多分支问题 分支语句有if语句和switch语句 1 if语句if语句又有单选 双选与多选if语句 格式分别为 单选if语句双选if语句多选if语句if if if elseelseif else 把键盘上输入的整数按从大到小的次序输出 include stdafx h include stdio h include iostream h voidmain inta b c temp cout a b c if a b temp a a b b temp if a c temp a a c c temp if b c temp b b c c temp cout a b c endl getchar 程序执行结果及C 程序设计的一般步骤 程序执行结果如下 374743由上例可知 C 程序设计的一般步骤为 进行数学分析建立求解数学模型 根据数学模型确定程序框架及所用语句 根据数学模型确定所要定义的变量及其数据类型 给变量输入数据 编写计算程序 执行程序得到运算结果 输出运算结果 从键盘上输入一个学生的三门功课的考试成绩 计算其平均成绩 当平均成绩大于等于90分时 输出优秀 在80 89分时输出良好 在70 79分时输出中等 在60 69分时输出及格 在平均成绩不及格时输出不及格 并提示每门还差多少分才能达到及格分数线 include stdafx h include stdio h include iostream h voidmain intp1 p2 p3 sum ave corr need cout p1 p2 p3 sum p1 p2 p3 ave sum 3 corr 2 sum 3 3 if corr 0 ave cout 该学生三门功课考试成绩的平均值是 ave endl cout 该学生的分数等级是 switch ave 10 case9 cout 优秀 endl break case8 cout 良好 endl break case7 cout 中等 endl break case6 cout 及格 endl break default cout 不及格 endl need 60 ave cout 每门还差 need 分才能达到及格线 endl getchar 3 5 2循环结构语句应用示例 循环语句用于实现循环结构程序设计 循环语句有while语句 do while语句和for语句 三种语句的格式如下 while语句do while语句for语句while dofor while 1 while语句 用do while循环编程求1 2 3 50之和 include stdafx h include stdio h include iostream h voidmain inti 0 s 0 do s i i while i 50 cout s s endl getchar 2 do while语句 s 用累加和的方法求s值 直到最后一项 0 00001为止 include stdafx h include stdio h include iostream h voidmain inti t1 1 floats 1 0 t 1 p i 1 do t t i t1 1 t1 p t1 t s s p i while 1 t 0 00001 cout s s endl getchar 程序执行后输出 s 0 367879 3 for语句 验证哥德巴赫猜想 分析 1 哥德巴赫猜想 任意大于等于6的偶数都可以分解成两个素数之和 2 编写一个C 语言程序对这一猜想进行验证 而不是证明 3 对于任意给定的大于6的偶数 先确定一个值较小的素数 再用已确定的素数去减这个偶数 验证其差是否为素数 若其差是素数 即得到了可以分解成两个素数之和的结果 若其差不是素数 应取另一个次小的素数 再验证其差是否是素数 依次类推直到得到验证为止 由于素数属于奇数范畴 所以取奇数作为验证素数的待验证数 程序代码 include stdafx h include stdio h include iostream h voidmain inti j n m f1 f2 cout m for i 3 i m 2 i 2 f1 f2 0 for j 2 j i j if i j 0 f1 1 break if f1 1 continue n m i for j 2 j n j if n j 0 f2 1 break if f2 1 continue elsebreak cout 大于等于6的正偶数 m 可以分解为两个素数 i n 之和 endl getchar 分析 有一个等式 A B3 C 2 8DE9 其中A不等于1 编写一个程序求出上述等式成立时A B C D E的值 由 A B3 C 2 8DE9可知 只有93的平方的千位是8 个位是9 即93 93 8649 由此得知D 6 E 4 由A B3 C 93 又由于A 1 只有A 3 由3 B3 C 3 31 得知B3 C 31 所以只有C 8 B 2 即求得A 3 B 2 C 8 D 6 E 4 上述求值是用推理的方法得到的 而用计算机求A B C D E的值 可以用 凑 的方法 即用五层循环 不断改变每层循环控制变量的值 若在对应的A B C D E的值符合等式要求时 将其输出即可 程序代码 include stdafx h include stdio h include iostream h voidmain inta b c d e j k cout A B3 C A B3 C 8DE9等式成立时A B C D E的值 endl for a 2 a 10 a for b 1 b 10 b for c 1 c 10 c for d 0 d 10 d for e 0 e 10 e k a b 10 3 c a b 10 3 c j 8 1000 d 100 e 10 9 if j k gototo to cout a a b b c c d d e e endl getchar 执行结果与说明 程序的执行结果是 A B3 C A B3 C 8DE9等式成立时A B C D E的值 a 3 b 2 c 8 d 6 e 4说明 上述程序中 用goto语句从五层循环的最内层退出循环体 当然也可以用break语句从循环体内退出 但是要设一个标志 如f 在最内层判断k j成立时设置标志 用break语句退出最内层循环 以后逐层判断逐层退出 这样退出是很麻烦的 由此可以看出用goto语句在多层循环体内退出的简洁性 本章小结 1 if语句和switch语句都能够处理分支问题 但if语句的适应范围更广 所有能够用switch处理的问题都能够转换为if语句 反过来则不一定行 2 任一种需要重复进行的循环问题 都可以采用for while do while等循环结构进行处理 但可能不进入循环体执行就离开循环时则只能采用do循环 3 计算机最擅长做循环处理 所以要针对要解决的问题 分析出有规律的进行简单操作的步骤 特别要注意确定好各种变量的初值和进行循环的次数 4 break语句只能使用在switch语句和各种循环语句中 当执行到它时就使执行过程离开所在的语句 自动转向到所在的语句的后面 注意 break只能自动跳转一层分支或循环 5 continue语句只能使用在各种循环语句中 它被执行时就自动结束一次循环体的整个执行过程 或者说 从它开始到循环体结束之间的语句都被忽略 接着进行下一次的循环过程 6 return语句是函数调用过程的返回语句 执行它时就立即结束所在函数的执行过程 自动返回到原调用语句的位置继续向下执行 7 对于一个void函数 在函数体中可以不出现return语句 当该函数执行到函数体最后的右花括号时将自动返回到原来位置 8 按照结构化程序设计的要求 所有处理过程都要组织成顺序 分支和循环这三种结构 本章所学的内容就是实现后两种结构的语句 而顺序结构是通过复合语句把先后按序执行的一组语句组合起来实现的 本章小结
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!