




已阅读5页,还剩87页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 第3章算法和控制语句 2 教学目标 初步理解算法的概念和特点掌握常用问题的算法掌握用流程图表示算法了解结构化程序设计的方法掌握格式化输入输出函数的用法掌握分支结构的程序设计 理解分支语句的嵌套掌握循环结构的程序设计及其相互嵌套理解break和continue的控制能够编写较复杂的程序 3 3 1算法初步3 2C语言的标准输入和输出3 3条件语句3 4多分支语句3 5循环语句3 6转移语句3 7综合应用 4 3 1算法初步 算法的概念算法的表示算法举例三种基本结构 5 算法的概念 算法 解决问题的方法和步骤沃斯公式 数据结构 算法 程序改进的沃斯公式 数据结构 算法 程序设计方法 开发工具 程序 6 算法的表示 自然语言传统流程图N S流程图伪代码计算机语言 7 传统流程图 8 计算机语言 includeintmain inti n s 0 scanf d 9 算法举例 例3 1用流程图表示求两个数a b的最大值 10 例3 2 求n 11 例3 3 判断某一年是否为闰年 12 例3 4 输入一个正整数 将它反位输出 如输入12345 输出54321 13 例3 5 判断一个整数n是否为素数 14 例3 6 对三个整数a b c按从小到大排序 15 算法的特点有穷性确定性有零个或多个输入有一个或多个输出可行性 16 三种基本结构 顺序结构 根据操作的先后顺序执行 17 选择 分支 结构 根据某个给定条件进行判断 条件为真或假时分别执行不同的操作 18 循环结构 根据条件的真或假反复执行某些操作 19 三种基本结构的特点 只有一个入口和一个出口结构内的每一部分都有可能被执行到结构内不存在 死循环 20 3 2C语言的标准输入和输出 3 2 1格式化输入输出3 2 2其它输入输出3 2 3C语言语句3 2 4顺序结构程序设计 21 3 2 1格式化输入输出 格式化输出函数printf 把信息输出到标准输出设备显示器上格式 printf 控制字符串 输出项列表 include 22 输出项常量 变量 表达式类型与个数必须与控制字符串中格式字符的类型 个数一致有多个输出项时 各项之间用逗号分隔控制字符串必须用双引号括起格式说明普通字符 23 格式说明符 24 修饰符 确定数据输出的宽度 精度 小数位数 对齐方式 25 普通字符 打印字符和转义字符 includeintmain intx 1234 y 3 z 4 floatf 123 456 doublem 123 456 charch a a Hello world printf d d n y z printf y d z d n y z printf 8d 2d n x x printf f 8f 8 1f 2f 2e n f f f f f printf lf n m printf 3c n ch printf s n 15s n 10 5s n 2 5s n 3s n a a a a a return0 26 程序运行结果 34y 3 z 41234 1234123 456001 123 456001 123 5 123 46 1 23e 002123 456000aHello world Hello world HelloHelloHel 27 格式化输入函数scanf 从标准输入设备键盘上输入信息一般形式 scanf 控制字符串 地址表列 include控制字符串 28 例scanf 4d 2d 2d 输入19991015 则1999 yy 10 mm 15 dd 例scanf 3d 4d f 输入12345678765 43 则123 k 8765 43 f 例scanf 2d 3d 2d 输入12 345 67 则12 a 67 b 例scanf 3c 2c 输入abcde 则 a c1 d c2 29 输入分隔符的指定一般以空格 TAB或回车键作为分隔符其它字符做分隔符 格式串中两个格式符间字符 例scanf d o x 输入123123123 输出a 123 b 83 c 291 例scanf d d d 输入12 30 45 则12 h 30 m 45 s 例scanf d d a b 输入3 4 则3 a 4 b 例scanf a d b d c d 输入a 12 b 24 c 36 30 说明 用 c 格式符时 空格和转义字符作为有效字符输入 scanf c c c 若输入a b c 则a c1 c2 b c3 输入数据时 遇以下情况认为该数据结束 遇空格 TAB 或回车遇宽度结束遇非法输入 scanf d c f 若输入1234a123o 26 则1234 a a b 123 c 31 输入函数留下的 垃圾 例intx charch scanf d 执行 123 输出 x 123 ch 10 解决方法 1 用getchar 清除 2 用函数fflush stdin 清除全部剩余内容 3 用格式串中空格或 c 来 吃掉 32 例intx charch scanf d 执行 123 输出 x 123 ch 10 例intx charch scanf d 33 3 2 2其它输入输出 putchar 函数 向标准输出设备输出一个字符格式 putchar ch ch为一个字符变量或常量 includeintmain charc c B putchar c putchar x42 putchar 0 x42 return0 BBB 34 getchar 函数 从键盘输入的一个字符格式 getchar includeintmain charch ch getchar putchar ch printf d n ch return0 35 3 2 3C语言语句 控制语句 用来完成控制功能 if elsefor while do whilecontinuebreakswitchreturn函数调用语句 用来实现函数调用 由函数调用加一个分号构成表达式语句 由一个表达式加一个分号构成 最典型的是赋值表达式加一个分号构成赋值语句空语句 复合语句 当一个语句不能完成某一功能 需要用多个语句才能实现 这时用 把这些语句括起来 构成复合语句 36 3 2 4顺序结构程序设计 例3 10 编写一个程序 从键盘上输入两个整数 输出其中最大者 includeintmain intx y max scanf d d 37 3 3条件语句 3 3 1if语句3 3 2ifelse语句3 3 3ifelseif语句3 3 4条件语句的嵌套3 3 5条件语句的应用 38 3 3 1if语句 格式 if 表达式 语句序列 39 说明 表达式可以是任何类型的表达式 只要值是非0就是真 是0就是假 语句序列既可以为单条语句 也可以是单条语句if语句表达式必须书写在小括号 内 如果省略编译会出现语法出错 40 例3 12 从键盘输入一个整数 如果该整数为奇数则将其乘3加1后输出 如果为偶数则直接输出 41 例3 13 从键盘输入三个整数a b c 对这三个数从小到大排序 includeintmain inta b c t scanf d d d if a c t a a c c t if b c t b b c c t printf d d d n a b c return0 42 3 3 2ifelse语句 格式 if 表达式 语句序列1 else 语句序列2 43 例3 14 从键盘上输入两个整数 求它们的最大值 includeintmain inta b max scanf d d 44 例3 15 从键盘输入一个整数 如果该整数为奇数则将其乘3加1后输出 如果为偶数则除以2输出 includeintmain intn b scanf d 45 3 3 3ifelseif语句 格式 if 表达式1 语句序列1 elseif 表达式2 语句序列2 else 语句序列n 46 说明 语句序列为单条语句 可以省略 if elseif满足完全排斥的特性 绝不会出现某次执行了其中两路分支以上的情况 if elseif语句中的elseif可以有有限多个 取决于编程的实际需求 47 例3 16 从键盘上输入字符 判断输入字符的种类 includeintmain charc printf 输入一个字符 c getchar if c 0 输入一个字符 ctrl回车 是控制字符输入一个字符 A回车 是字母输入一个字符 9回车 是数字字符输入一个字符 回车 是其它字符 48 例3 17 已知2010年12月1日为星期三 从键盘上输入1 31之间的整数 按下述格式输出该日是星期几的信息在对应栏下 2010年12月日历SunMonTueWenTurFriSta 1 49 if weekday 0 printf 2d n date elseif weekday 1 printf 7d n date elseif weekday 2 printf 12d n date elseif weekday 3 printf 17d n date elseif weekday 4 printf 22d n date elseif weekday 5 printf 27d n date elseprintf 32d n date return0 includeintmain intdate weekday original date 3 scanf d 50 例3 18输入学生的成绩 输出学生的等级 90 100 优 80 89 良 70 79 中 60 69 及格 60分以下 不及格 include includeintmain intcj scanf d 51 3 3 4条件语句的嵌套 嵌套具有else子句的if语句if 表达式1 if 表达式2 语句序列1else语句序列2 嵌套不含else子句的if语句if 表达式1 语句序列1elseif 表达式2 语句序列2 一般形式if 表达式1 if 表达式2 语句序列1else语句序列2elseif 表达式3 语句序列3else语句序列4 52 if else配对原则 缺省 时 else总是和它上面离它最近的未配对的if配对 53 例 if a b if b c printf a b c elseprintf a b 修改 if a b if b c printf a b c elseprintf a b 实现if else正确配对方法 加 54 例3 19 判断两个数的大小关系 includeintmain intx y printf 输入两个整数x y scanf d d 输入两个整数x y 12 23回车xy输入两个整数x y 12 12回车x y 55 3 3 5条件语句的应用 例3 21 输入年份 判断是否为闰年 例3 22 从键盘输入一元二次方程的系数a b c 求它的根 56 57 3 4多分支语句 3 4 1switch多分支语句3 4 2多分支语句的嵌套3 4 3多分支语句应用 58 3 4 1switch多分支语句 多分支语句switch的格式 switch 表达式 caseE1 语句序列1 caseE2 语句序列2 caseEn 语句序列n default 默认语句序列 59 说明 switch后面表达式的值必须是整型或字符型 E1 E2 En是常量表达式 且值必须互不相同 每个case语句的冒号后面可以是0条或多条语句 多条语句时 可以不加 各case的顺序可以是任意的 允许多个case语句使用同一语句序列default语句不是必须的每个case后面语句序列里的break语句可有可无 但执行效果不同 60 include includeintmain intscore scanf d 61 3 4 2多分支语句的嵌套 switch语句嵌套if语句 switch if else 语句序列 if语句嵌套switch语句 62 3 4 3多分支语句应用 例3 24 已知银行整存整取存款不同期限的年利率分别为 2 25 期限1年2 79 期限2年月息 3 33 期限3年3 60 期限5年4 14 期限8年要求输入本金和期限 求到时候能从银行得到的利息与本金的合计 63 includeintmain intyear doublemoney rate total printf 输入存款和存期 scanf lf d 64 例3 25 从键盘上输入年份和月份 求该月有多少天 65 3 5循环语句 3 5 1while循环语句3 5 2dowhile循环语句3 5 3for循环语句3 5 4循环语句的嵌套 66 3 5 1while循环语句 格式 while 表达式 语句序列 语句序列称为循环体 当为一条语句时 表示复合语句的 可以省略 表达式可以为任何类型先判断 后执行 若条件不成立 有可能一次也不执行 语句序列中必须有改变while后面括号的表达式值的语句 否则有可能死循环 67 例3 26 从键盘上输入多个整数 计算机它们的和并输出 输入0表示数据输入结束 68 例3 27 输入一个正整数 将它反位组成一个新的数输出 如输入12345 组成54321输出 69 3 5 2dowhile循环语句 格式 do 语句序列 while 表达式 语句序列称为循环体 当为一条语句时 表示复合语句的 可以省略 表达式可以为任何类型 其特点是先执行 后判断 若条件不成立 就跳出循环 语句序列中必须有改变while后面括号的表达式值的语句 否则有可能死循环 while 表达式 后面的 不能少 70 用do while语句重新编写例3 26的问题 includeintmain intx sum 0 do scanf d 71 例3 29 从键盘上输入两个整数 求它们的最大公约数 72 while语句和do while语句比较while语句是先判断后执行 只要不满足条件 循环体语句根本不会执行do while语句是先执行后判断 不管条件是否满足 循环体语句总会执行一次 includeintmain inti sum 0 scanf d includeintmain inti sum 0 scanf d 73 3 5 3for循环语句 格式 for 语句序列 语句序列称为循环体 当语句序列只有单条语句 表示复合语句的 可以省略 表达式1一般为赋值表达式 给控制变量赋初值 如果省略表达式1 这时for语句为如表达式2一般为关系表达式或逻辑表达式 称为循环控制条件表达式3一般为赋值表达式 给控制变量增量或减量for 74 include includeintmain inti sum 0 p 1 n scanf d 例3 30 计算 75 例3 31 从输入一个正整数 判断该数是否为素数 include include includeintmain inti m n scanf d 76 例3 32 求所有水仙花数 includeintmain inti m n k for i 100 i 1000 i m i 100 k i 10 n i 100 m 10 if i m m m n n n k k k printf d i return0 77 3 5 4循环语句的嵌套 循环语句的嵌套 一个循环语句的循环体中又包含循环语句 while while do do while while while do while for do while while 三种循环可互相嵌套 层数不限 外层循环可包含两个以上内循环 但不能相互交叉 嵌套循环的执行流程 外层循环执行一次 内层循环要执行完 嵌套循环的跳转 只能跳转出本层循环 禁止从外层跳入内层 禁止跳入同层的另一循环和向上跳转 78 例3 33 编写C语言程序 输出乘法九九表 乘法九九表 123456789 1123456789224681012141618336912151821242744812162024283236551015202530354045661218243036424854771421283542495663881624324048566472991827364554637281 79 80 includeintmain inti j printf n n for i 1 i 10 i printf 4d i printf n n for i 1 i 10 i 外循环 printf d i for j 1 j 10 j 内循环 printf 4d i j printf n printf n return0 81 编写C程序 实现10元人民币换成1角 2角 5角的所有兑换方案 设i j k分别代表1角 2角和5角的数量则 i 2j 5k 100 includeintmain inti j
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水电气安全知识培训内容课件
- 2025版建筑行业安全生产合作协议
- 二零二五年度第四章:跨境电商合同履行风险防范协议
- 二零二五年度城市综合体最高额典当借款协议
- 二零二五年度建筑工程劳务零工合同模板
- 水电厂消防安全培训课件
- 二零二五版公司向自然人提供个人信用贷款合同
- 2025版加油站智慧能源管理与节能改造合同
- 二零二五年度会展中心安保服务合同书范本
- 2025版矿泉水产品运输与仓储合同范本
- 幼儿思维培训课件
- 岗前安全培训课件
- 数字经济产业组织-洞察及研究
- 2025年中国美甲贴片行业市场全景分析及前景机遇研判报告
- mcn公司管理制度
- 儿童腹痛的课件
- 会计常用的130个函数公式
- 国家保安员模拟考试题(含答案)
- 校招项目管理笔试题目及答案
- 2025年中国微功率模块电源项目投资可行性研究报告
- 《肩关节解剖学》课件
评论
0/150
提交评论