C语言设计(教学).ppt

上传人:max****ui 文档编号:6334811 上传时间:2020-02-23 格式:PPT 页数:470 大小:5.11MB
返回 下载 相关 举报
C语言设计(教学).ppt_第1页
第1页 / 共470页
C语言设计(教学).ppt_第2页
第2页 / 共470页
C语言设计(教学).ppt_第3页
第3页 / 共470页
点击查看更多>>
资源描述
C语言程序设计 教材 c语言程序设计教程孙辉吴润秀编著参考资料 1 c程序设计 第二版 谭浩强著清华大学出版社2 轻松学习C程序设计何勤著中国电力出版社 第1章C语言简介 第2章顺序程序设计 第3章分支结构 第4章循环结构 第8章结构与共用体 第11章Cwindows程序设计简介 第10章预处理命令 第7章指针 第5章函数 第9章文件 第6章数组 计算机系统 硬件系统 软件系统 运算器 控制器 存储器 输入设备 输出设备 系统软件 应用软件 操作系统 程序设计语言如C语言 BASIC VB 第一章程序设计语言概述 2 数据结构指的是数据与数据间存在一种或多种特定关系 在程序设计语言中 与数据结构密切相关的便是数据的类型和数据的存放 一 软件 程序 程序设计 了解几个基本概念 1 数据是计算机程序处理的对象 可以是整数 实数 字符 也可以是图像 声音等的编码表示 3 程序的概念 计算机程序就是由人事先规定的计算机完成某项工作的操作步骤 每一步骤的具体内容由计算机能够理解的指令来描述 这些指令告诉计算机 做什么 和 怎样做 4 软件 程序 文档 5 程序设计及程序设计语言程序设计就是编写程序的过程 编写计算机程序所使用的语言称为程序设计语言 高级语言是相对低级语言而言的 低级语言是计算机能直接识别的语言 机器语言 或符号化的机器语言 汇编语言 高级语言是一种通用的 面向用户的各类需要 其语言格式接近于自然语言或接近于数学函数形式 二 程序设计语言 机器语言 汇编语言 高级语言 要使计算机识别高级语言 必须要解释或编译 C语言是一种高级设语言 用它所编写的程序 必须要经过编译和连接才能执行 1 程序设计语言发展过程 2 高级语言分类 1 面向过程 处理任务时 告诉计算机 怎么做 必须把解题的步骤一步一步事先写好 再让计算机去执行 这种语言称为过程式语言 如 BASIC FORTRAN PASCAL C 2 面向对象 处理任务时 告诉计算机 做什么 不必指出 怎么做 计算机就能完成所要求的任务 这种语言称为非过程式语言 如 C VC VB VF SQL查询语言等 3 常用高级语言 面向过程的语言 它是最早也是最简单的计算机语言 非常实用 BASIC语言 PASCAL语言是一种有着良好结构化特性的高级语言 面向过程的语言 它是在软件危机的70年代所创造的一种完全符合结构化原则 有着严格的语法规则的高级语言 该语言在语言教学中有着良好的声誉 但在实际使用中 利用该语言开发软件并不多 所以许多人认为PASCAL只是一种教学语言 PASCAL语言 FORTRAN语言 FORTRAN是最早出现的高级语言之一 它是针对科学计算而设计的一种高级语言 早期计算机的主要任务就是进行科学计算 到目前为止 FORTRAN仍主要是用于科学计算 C语言出现后 有人给FORTRAN语言判了死刑 但事实上 在科学计算上 尤其是在大规模科学计算上 FORTRAN仍是首选的高级语言 FORTRAN自身也在发展 目前 FORTRAN已发展到90和95版本 VISUALBASIC 是由微软公司开发的 支持WINDOWS平台下开发的BASIC语言 它支持面向对象的开发 是目前WINDOWS平台下流行的开发工具之一 VISUALFOXPRO 在实际应用中 还有许多其它的高级语言或开发工具 一般来说 每一种高级语言或开发工具都有它的使用范围 到目前为止 还没有一种语言能包打天下 JAVA 三 C语言学习中要注意的问题及学习方法 2做大量的习题 4多实践 只有通过上机实践才能真正掌握C语言 1掌握最基本的语法概念 如c程序的组成 标识符 常量 变量 数据类型等 例1 下列描述正确的是 A C语言比其它语言好B C语言可以不用编绎就能被计算机识别C C语言格式接近于自然语言或接近于数学函数形式D C语言出现最晚 有其它高级语言的所有优点 例2 用c语言编写的代码程序A 可立即执行B 是一个源程序C 经过编译即可执行D 经过编译解释后方可执行 结束语 纸上谈兵 学不出程序设计本领 只有大量上机 编程 调试 才能掌握 学好程序设计语言的唯一途径是上机 你的编程能力和你在机器上投入的时间成正比 1C程序由哪几部分组成 2C语言的基本符号 3C语言的数据类型有哪些 4C语言的常量概念 5C语言的变量概念 第二章顺序结构 例1 1最简单的C程序 这也是世界上第一个C程序 exam21 c 最简单的C程序 includemain printf Hello world 输出语句 例1 2已知圆的半径为R R是一个可变的量 求圆的面积和周长 用计算机求解 程序如下 exam22 c 计算圆的面积和周长 includemain floatr area s scanf f 例1 3从键盘输入3个整数 求3个数的和与积 并将结果输出在屏幕上输出 m22 c includemain inta b c s1 s2 scanf d d d 1 注释 4 数据说明 5 数据输入 6 数据处理 7 结果输出 2 头文件 3 主函数 2 1C程序的基本组成 一个完整的C程序包括下面几部分 7 注释 3 变量说明 4 数据输入 5 数据处理 6 结果输出 1 头文件 2 主函数 include main inta b s 或 printf s a b scanf 说明 2 一个C源程序可由一个或多个函数组成 函数是C程序的基本组成单位 3 一个C源程序必须包含一个main函数 main函数可以在程序任意位置 程序的执行总是main函数开始 到main函数结束 1 include为头文件 通常称为命令行 必须用 号开头 最后不加分号 因为它不是C语句 不同的头文件包含不同的信息 5 c语言本身没有输入输出语句 是通过函数scanf 与printf 来完成输入输出的 因此scanf printf 不是c语句 6 说明多个变量时用逗号隔开 最后用分号 也可分多行说明 分号是c语句组成部分 如 inta 1 b c 等价于inta 1 intb intc 4 C程序中 注释语句可以放在程序任意合适的位置 但不能把单词分开 2 2C语言的基本符号基本符号集 ASCII字符集 阿拉伯数字10个 0 1 2 9大小写英文字母各26个 A B C Z a b c z下划线 特殊符号 主要是运算符和操作符 保留字 关键字 32个 是编译系统固有的 用做语句名 类型名的标识符 不允许作为用户标识符使用 标识符字符序列 用作常量 变量 函数 文件指针 类型的名字 用户标识符保留字 关键字预定义标识符 用户标识符 用户根据需要对C程序中用到的变量 符号常量 自己的函数或文件指针进行命名 形成用户标识符 构成规则 由英文字母 数字 下划线组成 且第一个字符不能是数字 英文字母区别大小写 通常识别前8个字符 取名遵循 简洁明了 和 见名知意 预定义标识符允许用户作其他其途 但将失去系统规定的原意 例define include 例1可在C程序中用作用户标识符的一组标识符是A 12abB f at C aw 1eD b6ty 例2以下关于c语言标识符的描述中 正确的是 A 标识符可以由汉字组成B 标识符只能以字母开头C 关键字可以作为用户标识符D IF可以作为用户定义的合法标识符 例3以下不能定义为用户标识符是A scanfB VoidC 3comD int 例4可在C程序中用作用户标识符的一组标识符是A 1vodB as b3C ForD 2cDefine 123 abcDo WORDIFc seSIG 2 3数据的类型 为什么要对数据进行分类 在c语言中 变量的数据的类型一定要先定义后使用 floata b c 定义了a b c为实型变量 inta b c 定义了a b c为整型变量 shortinta b c 短整型 longinta b c 长整型 doublea b c 双精度 unsignedinta b c 无符号整型 chara b c 定义了a b c 为字符型变量 Turboc基本数据类型所占宽度与数据范围 例已知一个的同学的三门成绩分别为68 89 93 求这个学生的总分与平均分 程序如下 a5 c includemain floata1 67 a2 89 a3 93 s1 s2 s1 a1 a2 a3 s2 s1 3 printf s f l f s1 s2 1 注释 2 头文件 4 数据定义 5 数据输入 6 数据处理 7 结果输出 3 主函数 常量 变量 2 4常量 一 直接常量 是在程序中直接引用的数据 分为 整型 实型 字符型 字符串 以数据的原型出现 1 整型常量可以用十进制 八进制 十六进制形式表示 整型常量只有数字 不带小数 如12 1 0 八进制用数字0开头例如 010 011 017等 十六进制用0 x或0X开头 例如 0 x1 0Xde 0 xf等 例1 以下选项中正确整型常量是A 12 B 12C 1 000D 456 例2 以下选项中正确的整型常量是A 10110BB 0386C 0XfaaD x2a2 2 实型常量 二种表现形式 十进制形式 由数字和小数点及正负号组成 指数形式 由 十进制小数 e 或E 十进制数整数 三部分组成 例如 3 44 00 3 十进制小数 e 或E 十进制数整数 例如 12 5e 6表示12 5 10 6 C语言的语法规定 e之前必须要有数字 且E后面的指数必须为整数 如e3 5e3 6 e3等都是不合法的指数形式 例1 以下选项中不正确的实型常量是A 2 607E 1B 0 8103e2C 77 77D 456e 2 例2 以下选项中正确的实型常量是A 5E2 0B E 3C 2 2E1D 1 3E 例3 以下所列的C语言常量中 错误的是 A 0 xFFB 1 2e0 5C 2D 72 3字符型常量 二种表现形式 用单引号括起来的一个字符 用单引号括起来的由反斜杠 引导的转义字符 如 A 1 等 如 n 101 x41 在统计字符个数时 只能记为一个字符 只能是英文的单引号 常用的转义字符常量的含义 一个字符的多种表示方法 65D 十进制 41H 十六进制 101Q 八进制 因此 字符A可以表示为 A x41 101 65 0 x41 0101 要避免的错误 表示单引号 表示双引号 表示斜线 1 下面四个选项中 合法的字符常量是 A B B 101 C 68D D 2 下面四个选项中 正确的字符常量是 A 084 B x43 C ab D 0 3 下面四个选项中 均是合法的转义字符的选项是 A B C 018 D 0 017 f 101 n xab x1f 已知大写字母A的ASCII码值是65 小写字母a的ASCII码是97 则用八进制表示的字符常量 102 是A 字符AB 字符aC 字符cD 字符B 二 符号常量是用标识符来表示一个数据 如 definePI3 14159 字符串常量 用双引号括号 如 STRI ABD N 表示空 等 定义形式 define标识符常量数据 在程序预处理时 凡是出现标识符PI的地方都将用数据3 14159来替换 1 变量的命名规则要符合标识符 见标识符 2 变量的基本类型 整型变量 实型变量 字符变量3 先定义 再使用 如 inta b floatx y chara 4 C语言中定义的变量 代表内存中的一个地址5 变量的赋值符为 赋值表达式为 变量 表达式 t x 5 p q r 9 x x 1 x y 1 z 2 等 但x 9 a b c非法6 赋值表达式加分号就变成赋值语句 2 5变量 变量 在程序运行过程中 其值能被改变的量 如 floata1 67 a2 89 a3 93 s1 s2 2 6运算符及表达式 C语言提供了多种运算符 有些运算符看起来很简单 但不小心很容易出错 18 1 算术运算符 2 自加自减算符 3 关系运算符 6 赋值运算符 7 条件运算符 8 逗号运算符 9 指针运算符 10 求字节运算符 sizeof 11 强制类型转换运算符 类型 12 分量运算符 13 下标运算符 14 其它调用运算符 一 算术运算符 加 减 取负 乘 除 模运算 运算符的优先级为 高 低 在四则运算中 有先乘除 后加减的规则 同样 在程序中 也存在那个运算符先进行运算 那个后进行运算的问题 这些 称为运算符的优先级 一 除法a b b不能为0 1 ab两数都是或一个是实数结果是实数7 2 0 3 500 2 ab两数都是整数结果是整数7 2 3 9 2 4 13 3 4 取模运算即取余运算 运算符两边必须是整型数据 否则出错 例 6 2 5 2 输出结果为 01 关于取模运算的说明 对a b 若a或b有负数 则对a与b的绝对值取余 余数符号与a的符号相同例 7 5余数为 27 5余数为2 二 算术表达式 用算术运算符和括号将常量 变量及函数连起来的式子称为算术表达式 例1代数式3x2 x 2 在计算机中 不能直接对代数式进行运算 而要将它转化成相应的算术表达式 相应的算术表达式为 3 pow x 2 x 2 例2代数式 相应的算术表达式为 a 2 6 y 5 x 三 自加自减运算符 作用 使变量的值增1或减1 形式 i i i i 注意 i i 是先将i加1 减1 后再对i运算i i 是先对i运算再将i加1 减1 例 exam14 cmain inta b a 5 b 5 printf a d a Printf b d b 输出结果 a 6b 5 i i 1 i i 1 四 赋值运算符及赋值表达式 赋值运算符 赋值表达式 变量 表达式 例 t 5 复合运算符 在赋值运算符前加上某些特定的运算符 p q r 9 x y 1 z 2 表达式的值为 9 表达式的值为 1 10种复合运算符 注意 赋值运算符按自右而左的结合顺序 t x 5 例 i j 8 i i j 8 x j 4 x x j 4 注意 复合运算符相当于赋值号后有一括号 实际上是自右至左进行运算的 赋值语句 赋值表达式加上分号 例 将赋值表达式改为赋值语句 i j 8 x y 1 z 2 注意 赋值表达式与赋值语句是两个不同的概念 i j 8 x y 1 z 2 五 逗号运算符 逗号运算符 表达式1 表达式2 计算过程 先计算表达式1的值 再计算表达式2的值 逗号表达式的值为表达式2的值 例 x 3 5 4 6 x的值为8 例 x 3 5 4 6 x的值为 10 例 x 3 5 x 6 逗号表达式的值为 14 x 3 5赋值表达式 4 6算术表达式 赋值运算符优先 例 y 3 5 8 9 例 y x 6 x 8 表达式的值为10 则y 17 则y 14 六 运算符的优先级 书30页 高 低 例 i 5 i i 4 2 i的值为 26 i 5 i i 4 2 i的值为 23 左边的例子的结果很难解释 碰到此类问题 只要上机试一试就知 太多的解释并无多大的帮助 程序本身就是一些规则 逻辑运算符和逻辑表达式 一 逻辑量的概念 逻辑值 真 假 或T F表示方式 0表示 假 非0表示 真 系统真值 1 二 关系运算符 关系运算符含义例子结果优先级 大于4 6 9 大于或等于6 5 小于或等于8 7 等于2 3 6 不等于9 3 12 TTTFFF 相同 高 相同 低 四 逻辑运算符 非 与 或 1 运算符 2 运算法则 T真 F假 书24页表2 5 值逻辑非逻辑与逻辑或XY XX YX YTTTFFTFF FTT FFT TFT TFF 五 逻辑表达式 用逻辑运算符连接关系表达式的式子称逻辑表达式 例用逻辑表达式表达下述数学式 1 080 3 10 x 30 50 x 90 相应的逻辑表达 1 0 x x 10 2 x180 或 x 60 x 80 3 x 10 x 50 x 90 x 10 0 60 80 x 10 50 90 x 30 x x 六 逻辑表达式中的优先级 1 逻辑运算符的优先级 高 低 条件运算符 格式 表达式1 表达式2 表达式3 1 若表达式1的值为真 非0 则条件表达式的值为表达式2的值2 若表达式1的值为假 0 则条件表达式的值为表达式3的值3 条件运算符的结合方向为 自右至左 4 条件运符优先于赋值运算符 低于关系运算符 例 y 6 9 2 6 18则y 例 a 5 b 3y a b a b b a则y 18 8 2 7C程序的类型转换 在表达式中出现不同的类型的数据时 系统要将不同类型数据转换成同一种类型 然后才能进行运算 1转换规则 double long unsigned int char short float 高 低 说明 1运算时 表达式的类型以最高类型为准 2为保证精度 两个float类型运算 先转换成double类型再运算 2赋值表达式中的类型转换 在赋值表达式中 表达式的类型为表达式左侧变量的类型 如果右侧的类型与左侧不一致 则系统强制将右侧化成与左侧一致的类型 3强制类型转换 可以利用类型转换符将表达式的类型强制转换成指定的类型 格式 类型名 表达式 例 float 4 将整型量4强制转换成单精度 注意括号 例 char 23 2 45 将表达式结果强制转换成字符 运算符及表达式汇总 1 算术运算符 3 复合运算符 4 关系运算符 5 自加自减运算符 6 逻辑量 T真 1 F假 0 7 逻辑运算符 8 赋值运算符 9 条件运算符 10 逗号运算符 11 自动类型转换 高 double char 12 强制类型转换运算符 float 类型 习题 例2 4以我国1992年工业产值为100 如果以9 的年增长率增长计算到2000年时的工业产值 1算法分析 要找出问题的数学模型 设r为年增长率 n为年数 s为第n年的总产值 则有s 100 1 r n 2数据结构 年增长率r 年数n 第n年的总产值s 而这几个量中 年增长率肯定是小数 浮点 型数据 年数是整数 整型 总产值不会是整数 应为浮点数 这些数据都要放在相应的变量中 intn floatr s exam24 c include includemain intn floatr s n 2000 1992 r 0 09 s 100 pow float 1 r float n printf 2000年的产值为 f s pow为求幂的函数格式pow 底 指数 底 指数均为浮点数 强制类型转换 3源程序代码 此例中 只能算到2000年 且年增长率为9 时的工业产值 如果将工业产值改为10 或者要算到其它年份 必须要修改源程序 使用不便 方法2 用scanf函数重新编写程序 exam24 c include includemain intn year floatvalue rate printf 请输入年份和年增长率 scanf d f 例3 1求一元二次方程 的根 1 算法分析 2 数据结构 由于问题简单 只需用到一些单精度实数 3 伪代码 输入方程系数a b c计算判别式d b b 4 a cif判别式大于等于0then 计算两个实根定位输出光标打印结果 else 计算实部计算虚部定位输出光标打印结果 endprogram include includemain floata b d c x1 x2 p q printf 输入方程系数 scanf f f f 求平方根的函数 例2 4小写字母转盘 用户输入一个小写字母 如输入a 则显示b 输入b则显c 以此类推 输入z则显示a 1 先定义字符变量c来接受从键盘输入的值时charc 2 通过c a 求出c中的字母在字母序列中的序号 a为0 z为25 c a 1得出下一个字母序号 表达式 c a 1 26 使序号26变成0 这样字母z的序号变成0 再加上 a 就转成字母a 即转换公式为 c a 1 26 a includemain charc scanf c 例2 5鸡兔同笼 已知鸡兔总头数为H Heads 总腿数为F Feet 问鸡兔各有多少只 1算法分析 1 建立数学模型设鸡为x只 兔为y只 由题意有 x y h 1 2 x 4 y f 2 2 求解方程 找出x y的具体求解公式 以下用消元法找出方程的解 2 式 2 1 式 注意 计算机不会自己建数学模型 也不会自己解方程 2 y f 2 h y f 2 h 2 4 1 式 2 式 2 X 4 H F X 4 H F 2 2数据结构 程序中要用的数据 存放头H 脚数量F的变量 存放方程解 鸡x 兔y数量 的变量 存放方程判别式的变量等 对于头 脚的数量 肯定是整型变量 方程的解理论上讲是整型 但在求解方程时要进行运算 为了避免发生错误 最好是用浮点数据 3伪代码 由于此问题比较简单 也可直接编写程序 说明变量x y f h输入数据f h计算x y打印结果 伪代码是一种程序设计工具 介于程序语言与自然语言之间 伪代码不能被计算机编译 但它很容易翻译成高级语言 exam25 c includemain floatx y intf h printf InputtheHeadsandFeet scanf d d 4源程序代码 提示输入数据的内容 例2 6 从键盘输入字母 若输入小写转化为大字母输出 输入大写原样输出 分析 1 小写字母与大写字母的ASCII值相差32 2 小写字母的范围表示为 x a x z 3 要使用条件运算符 includemain charx printf pleaseinputachar n scanf c 分支结构 问题 1 从键盘输入一个数 如果该数为正 打印 否则不打印 2 将考试成绩不及格的学生名单打印出来 3 解一元二次方程 求出相应的实根或复根 对于上述或类似问题 需要进行某种判断 并根据不同情况进行不同的处理 怎样进行程序设计 第三章分支结构程序设计 解决办法 1 引入新的程序结构 分支结构 有时也称判断结构或选择结构 2 有三种形式可进行分支结构的程序设计 A if结构B 多重选择结构 switch语句 C 无条件转移结构 goto语句 if语句 if条件 真 语句块1else语句块2 if else为关键字如果语句块超过一条语句 则要用一对大括号将语句块括起作为复合语句esle可省 语法 说明 includemain charx printf pleaseinputachar n scanf c if 逻辑表达式 真 复合语句1 else 复合语句2 真否 复合语句1 复合语句2 执行复合语句后的语句 F T 执行复合语句后的语句 if else的执行过程 分支结构if语句 if 逻辑表达式 例 求 y 2 x x 0 x2 x 0 includemain floaty x scanf f 例3 6将输入的字母转化为小写字母 1算法分析 在计算机中 处理英文字母 其实是处理它的ASCII码值 将大写字母变成小写字母 就是将大写字母的ASCII码值变为相应的小写字母的ASCII码值 大写字母的ASCII值比小写字母的ASCII值小32 故将相应字母的ASCII值加32就变成了小写字母 程序设计时 要注意如果输入的不是大写的字母 则不用转换 源代码 includemain charx printf pleaseinputachar n scanf c 例 从键盘输入某一年 如1956 判断这一年是否是闰年 若是就显示yes 若不是就显示no 注 闰年的条件为 1 能被4整除 但不能被100整除或 2 能被4整除 且又能被400整除 includemain intb printf pleaseinputyears n scanf d if 逻辑关系表达式 用关系运符 7 8 if b 7 7 3 例 includemain inta b a 10 5 6 b 10 5 6 printf d d n a b 输出结果 0 1 例 includemain inta b a 6 7 7 8 b 7 7 3 printf d d n a b 输出结果 1 1 if语句的变形及嵌套 一 if语句的变形 1 省略else语句语法 if逻辑表达式 真 语句体 2 增加elseif语句 语法 if逻辑表达式1 真 语句体1 elseif逻辑表达式2 真 语句体2 else 语句体N if 逻辑表达式 真 复合语句1 真否 复合语句1 执行复合语句1后的语句 F T if的执行过程 if语句两种变形 if 逻辑表达式 例 从键盘输入一个整数 若为正 则输出该数的平方 否则不输出 即 y x2 x 0 includemain intx y scanf d 第一种变形 省略else语句 执行复合语句1后的语句 if 逻辑表达式1 真 复合语句1 if 逻辑表达式2 真 复合语句2 if 逻辑表达式n 真 复合语句n 第一种变形 省略else语句 从键盘输入一个数 求y的值 y 2 x x 0 0 x 0 x2 x 0 当条件较多时 可用多个省略了else的if语句 includemain floaty x scanf f 第二种变形 增加elseif语句 语法 if逻辑表达式1 真 语句体1 elseif逻辑表达式2 真 语句体2 elseif逻辑表达式3 真 语句体3 else 语句体N if elseif的执行过程 例 求 y 2 x x 0 x2 x 0 0 x 0 例 求 y 2 x x 0 x2 x 0 0 x 0 includemain floaty x scanf f 演示1 例3 2商店售货 按购买货物款的多少分别给予不同的优惠折扣 编程计算实际应付货款 购货不足250元 没有折扣 购货250元 含250元 下同 不足500元 减价5 购货500元 不足1000元 减价7 5 购货1000元 不足2000元 减价10 购货2000元及以上 减价15 1 算法分析 设购物款为M 折扣为D 则D可表示为 D 0 M 250 D 0 05 250 M 500 D 0 075 500 M 1000 D 0 1 1000 M 2000 D 0 15 2000 M 2 源程序清单 includemain floatm d t printf 请输入购物金额 scanf f 输入购物款 249 实际应付款 249 输入购物款 500 实际应付款 462 5 演示2 例3 3用elseif购物折扣程序的另一个写法 改写后 程序更清晰 执行时间更省 includemain floatm d t printf 请输入购物金额 scanf f if 逻辑表达式 真 复合语句1 else 复合语句2 分支结构if语句 第一种变形 省略else语句 if 逻辑表达式 真 复合语句1 第二种变形 增加elseif语句 语法 if逻辑表达式1 真 语句体1 elseif逻辑表达式2 真 语句体2 elseif逻辑表达式3 真 语句体3 else 语句体N if 逻辑表达式1 真 复合语句1 if 逻辑表达式2 真 复合语句2 if 逻辑表达式n 真 复合语句n 当条件较多时 可用多个省略了else的if语句 二 if语句的嵌套 在一个if语句中可以包含另外一个if语句 if逻辑表达式 T if逻辑表达式 T 语句块2 else 语句块3 else 语句块4 else语句与最近的if语句配套 大括号要配对 语句块1 以下程序的输出结果是 inlcudemain intx 2 y 1 z 2 if x y if y 0 z 0 elsez 1 elseprintf d n z A 3B 2C 1D 0 语句块1 注意 演示3 二 if语句的嵌套 在一个if语句中可以包含另外一个if语句 if逻辑表达式 T 语句块1 elseif逻辑表达式 T 语句块3 else 语句块4 else语句与最近的if配套 大括号要配对 语句块2 以下程序的输出结果是 inlcudemain intx 2 y 1 z 2 if x y z 0 elseif y 0 z 1 elsez 2 printf d n z A 3B 2C 1D 0 语句块2 注意 演示4 includemain intx y z printf Iputx y z scanf d d d 例3 5 演示5 嵌套不能太深 一般以三层为限 嵌套太深 容易出错 嵌套演示程序 例2 4小写字母转盘 用户输入一个小写字母 如输入a 则显示b 输入b则显c 以此类推 输入z则显示a includemain charc c getchar c c a 1 26 a printf c n c includemain charc c getchar if c a 用if语句编写 例2 8输入一个正整数 判断是否是5又是7的倍数 如是显示yes 否则显示no includemain intx printf pleaseinputdate n scanf d 演示6 main charch scanf c 注意 条件运算符的结合方向为 自右至左 a b a c d c da b a c d c d 此处使用了条件运算符 main charch scanf c 例 输入大写字母 转成小写字母输出 includemain inti printf 输入数字1 7 scanf d 例 输入星期中的某一天 1 7天 显示对应的英文星期几 演示7 例3 4从键盘输入一字符 如果为Y 则打印是 为N 打印否 其它字符 打印输入错误 includemain chara printf 输入一个字符 a getchar if a Y a N if a Y printf 是 elseprintf 否 elseprintf 输入数据不合要求 演示8 编写程序 从键盘输入整数a与b 如果a2 b2大于100 则输出百位以上的数字 否则输出两位数之和 分析 要输出百位以上的数 对100取整即可 includemain inta b s printf pleaseinputaandb scanf d d includemain inta b s printf pleaseinputdate scanf d d 演示9 switch 表达式 case常量表达式1 语句1case常量表达式2 语句2case常量表达式3 语句3 default 语句N 1 多重选择语句switch 语法 当条件较多时 除了使用多个if或elseif外 还可以使用switch语句 说明 2 表达式主要是char int等类型 1 switch是用 括起来的语句体 3 case后的表达式与switch的表达式相等时 执行case后的语句 5 case后的表达式须不相同 6 case与default出现的顺序不影响执行结果 4 执行完一个case语句块后 流程转到下一个case语句继续执行 7 在执行过程中碰到break语句 程序退出switch结构 1 从键盘输入一百分制成绩 输出相应的五分制成绩 设90 100分为 A 80 89为 B 70 79为 C 60 69为 D 60分以下为 E includemain ints c chargrade scanf d 演示10 5 从键盘输入两个数和一个运算 完成加 减乘 除运算 输出运算结果 includemain charc floatx y s scanf f f c 用elseif来编程 includemain charc floatx y s scanf f f c 用switch来编程 演示12 演示11 4 从键盘输入年和月 计算并输出这一年的这一月有几天 includemain inty m d printf pleaseinputyearandmonth scanf d d 用switch来编程 演示13 includemain inty m d scanf d d 用if来编程 演示14 7 已知银行整取存款不同期限的年息利率分别为 1 98 期限一年2 15 期限二年2 25 期限三年2 45 期限五年2 65 期限八年编序 输入存钱的本金和期限 求到期时从银行到的利息与本金合计 年息利率 includemain intn floatm d t printf inputdate n scanf f d 用IF语句 演示15 includemain intn floatm d t printf inputdate n scanf f d case后面要空格 用switch语句 演示16 2 从键盘输入三个数 从小到大排序输出 includemain floata b c t scanf f f f 分析 两个数互换 要通过中间变量 如x 6 y 8 现要使x y的值互换 可以定义中间变量s 再通过 s x x y y s 使x 8 y 6 演示17 includemain inti printf 输入数字1 7 scanf d 例3 8用switch语句重写打印星期程序 includemain inti printf 输入数字1 7 scanf d 演示18 例3 9用switch语句重写例4 4的程序 main chara printf 输入一个字符 a getchar if a Y a N if a Y printf 是 n elseprintf 否 n elseprintf 字符不合要求 n 显然 改写后的程序更清晰 更简短 main chara printf 输入字符 a getchar switch a case Y printf 是 n break case N printf 否 n break default printf 字符不合要求 n 演示19 无条件转移语句 goto语句 语法 goto语句标号 有效的C标识符 不能是整数 功能 改变程序执行的顺序 无条件转移到语句标号所指定的语句行 includemain inti fs j 0 Loop scanf d 例3 11统计某班级中计算机课程中考试成绩高于80分的数 假设学生人数为10 统计已读入的数据个数 本章小结 1 分支结构 改变程序的执行流程 或有选择地执行程序 2 if else及两种变形 if的嵌套 3 多重分支结构使用swtich语句 4 块if语句中的条件可以是复杂逻辑表达式 而多重分支中的条件只能是简单表达式 5 块if与goto语句结合 可以构造任何复杂的循环 但用专门的循环语句更方便 返回目录 在人们所需处理的运算任务中 常常需要用到循环结构 所谓循环是指对同一个程序段重复执行若干次 被重复执行的部分 由若干语句组成 称为循环体 循环结构又称重复结构 本章主要内容while循环语句do while循环语句for循环语句循环嵌套及注意的问题程序的流程图 第四章循环结构 while语句 while 表达式 循环体 do while语句 do 循环体 while 表达式 for循环语句 for 表达式1 表达式2 表达式3 循环体 break和continue语句 语法 while 表达式 循环体 先判断while表达式 真执行循环体 假退出while循环体 while语句 说明 1 while是c语言的关键字 2 循环体包含多条语句 应用 括住 3 在循环体中应有使循环结束的语句 while表达式 表达式 执行循环体 执行循环体后面语句 T F while循环执行过程 while 表达式 循环体 例1 main inti 0 while i 10 printf i 例2 main inti 1 sum 0 while i 100 sum sum i i printf sum d sum 演示1 演示2 例2 main intn i 1 sum 0 printf pleaseinputn n scanf d 演示3 一 语法 do 循环体 while 表达式 二 说明 1 该循环先执行循环体 然后再判断循环条件 故循环至少执行一次 2 while后的分号不能省略 do while语句 while表达式 真否 执行循环体 执行循环后面的语句 T F do while循环执行过程 Do 循环体 while 表达式 例1 main inti 0 do printf i while i 10 例2 main inti 1 s 0 do s s i i while i 100 printf s d s 演示4 演示5 例4 1统计某班级中计算机课程中成绩高于95分的学生人数 假定 10人 1算法分析 将该班每人计算机课程成绩输入计算机 每输入一个成绩 就与95进行比较 如果大于95 计数器加1 直到输完10个人成绩为止 最后显示出统计的人数 2数据结构 用个变量fs存放输入的数据 用变量j记录输入数据的个数 数据输完成时 j 10 用变i统计高于95分学生的人数 当成绩输完后 输出i累加后的结果 源程序代码 includemain inti 0 j 1 floatfs while j95 i printf 95分人为 d i includemain inti 0 j 1 floatfs do printf 输入第 d个数 j scanf f 演示6 演示7 例2 2从键盘输入5个学生的语文 数学 英语3门成绩 输出每个学生的总分与平均成绩 includemain intj 1 floata b c sum aver while j 5 printf 输入第 d个学生三门成绩 n j scanf f f f 演示8 一 语法 for 表达式1 表达式2 表达式3 循环体 例for n 1 n 100 n 循环体 for循环语句 计算表达式1的值 表达式2真否 执行循环体 计算表达式3的值 执行循环后面的语句 T F for循环执行过程 for 表达式1 表达式2 表达式3 循环体 控制循环是否结束 改变循环条件 for语句最简单的形式是 for 循环变量赋初值 循环条件 循环变量增值 语句 例for n 1 n 100 n sum sum 1 for 表达式1 表达式2 表达式3 循环体 改写成While循环的形式 表达式1While 表达式2 循环体表达式3 n 1 While n 100 sum sum 1 n 说明 1 表达式1可以是逗号表达式 可省略但其后的分号不能省 for n 100 n sum sum 1 2 表达式2也可省略 此时循环为无穷循环 for n 1 n sum sum 1 3 表达式3也可省略 一般情况下要在循环体内保证循环有结束的条件 for n 1 n 100 sum sum 1 例如 for i 1 i sum sum i 表达式1是一个赋值表达式 表达式2空缺 它相当于 i 1 while 1 sum sum 1 i 4 for n 1 n 100 n n sum sum 1 相当于for n 1 n 100 n 2 sum sum 1 循环变量初值 循环条件真否 执行循环体 循环变量循环变量 步长 执行循环后面的语句 T F 常用for循环执行过程 for i 0 i 9 i 循环体 main intn s 1 for n 1 n 100 n s s n printf n d s 例4 5统计某班级中计算机课程中考试成绩高于80分的人数 10人 用for循环语句写该程序 main intfs sum j i 0 for j 1 j80 i printf i d n i 给循环变量j赋初值1 循环变量j加1 循环控制条件 while语句 while 表达式 循环体 do while语句 do 循环体 while 表达式 for循环语句 for 表达式1 表达式2 表达式3 循环体 1 三种循环可用来处理同一问题 一般情况可互相代替2 dowhile语句至少执行一次循环 3 while与for可能一次也不执行 4 while 1 与for 或for 式1 式3 或for 式1 1 式3 都为死循环 几种循环的比较 1算法分析 找出通项 s s 1 i 例4求数列s 1 1 2 1 3 1 n的和 includemain intn i 1 floats 0 printf pleaseinputn scanf d while for includemain inti n floats 0 printf pleaseinputn scanf d 1算法分析 找出通项 s s 1 i i 例求数列s 1 12 1 22 1 32 1 n2的和 includemain intn i 1 floats printf pleaseinputn scanf d while for includemain intn i floats printf pleaseinputn scanf d 例4 7求 的近似值 精确到 公式为 1算法分析 找出 sqrt s 6 inclduemain inti 1 doublepi t 1 s 0 while t 0 0000000001 t 1 0 i i s s t i pi sqrt s 6 printf pi lf pi includemain doublepi t 1 s 0 inti for i 1 t 0 000000000001 i t 1 0 i i s s t pi sqrt s 6 printf lf n pi break语句前面介绍过用break语句可以使流程跳出Switch结构 继续执行Switch语句下面的一个语句 实际上 break语句还可以用来从循环体内跳出循环体 即提前结束循环 接着执行循环下面的语句 如 for r 1 r100 break printf f area 演示9 计算r 1到r 10时的圆面积 直到面积area大于100为止 从上面的for循环可以看到 当area 100时 执行break语句 提前结束循环 即不再继续执行其余的几次循环 break语句的一般形式为 break break语句不能用于循环语句和Switch语句之外的任何其他语句中 continue语句一般形式为 continue 其作用为结束本次循环 即跳过循环体中下面尚未执行的语句 接着进行下一次是否执行循环的判定 continue语句和break语句的区别是 continue语句只结束本次循环 而不是终止整个循环的执行 而break语句则是结束整个循环过程 不再判断执行循环的条件是否成立 1 while 表达式1 if 表达式2 break 2 while 表达式1 if 表达式2 continue 例5 5把100 200之间的不能被3整除的数输出 main intn for n 100 n 200 n if n 3 0 continue printf d n Continue演示 当n能被3整除时 执行continue语句 结束本次循环 即跳过printf函数语句 只有n不能被3整除时才执行printf函数 当然 例5 5中循环体也可以改用一个语句处理 if n 3 0 printf d n 我们在程序中用continue语句无非为了说明continue语句的作用 main intn 2 while n 10 if n 3 continue if n 5 break n 以下程序执行后描述正确的是 A n 10B n 9C n 5D 死循环 main inta b for a 1 b 1 a 20 break if b 3 1 b 3 continue b 5 printf d a A 7B 8C 9D 10 演示10 演示11 1算法分析 找出通项 s s 1 i 例4求数列s 1 1 2 1 3 1 4 1 5 1 n的和 includemain intn i 1 m 1 floats 0 printf pleaseinputn scanf d while for includemain inti n m 1 floats 0 printf pleaseinputn scanf d 例4 2将输入的正文复制到输出 每次一个字符 1算法分析 本题的含义是从键盘上连续输入字符 然后将这些字符在屏幕上输出 故用循环来控制连续输入 但要考虑不想输入时如何使循环结束 结束循环条件 可以自已假定 如 设ctrl z或回车 Esc等 includemain charc c getchar putchar c 输入good 输出g 2源程序代码 includemain charc printf inputatextendofctrl z n c getchar while c EOF putchar c c getchar 加入循环来连续输入 输入ctrl z来结束循环 main charc printf inputatextendofctrl z n while c getchar EOF putchar c 演示13 演示12 1 分析 该数列中每一项的分母都有规律 后一项为前一项加5 分母的通式为 An An 1 5 A1 1 程序 includemain inti floatsum 0 for i 0 i 100 i sum sum 1 0 1 i 5 printf f sum 例 下面程序是统计从键盘输入的数字字符的个数 用换行结束循环 请填空 includemain intn 0 charc c getchar while if n c getchar c n c 1 c 9 例 下面程序是计算3 33 333 3333 3333333 7个3 的和 请填空 includemain longintt 0 n 1 s 0 while n 7 s s n printf s ld n s t t 10 3 s s t 循环的嵌套一个循环体内又包含另一个完整的循环结构 称为循环的嵌套 内嵌的循环中还可以嵌套循环 这就是多层循环 各种语言中关于循环的嵌套的概念都是一样的 三种循环 while循环 do while循环和for循环 可以互相嵌套 例如 下面几种都是合法的形式 1 while while 2 do do while while 3 for for 4 while do while 5 for while 6 do for while 演示14 includemain inti 1 while i 10 printf i 输出 输出 includemain inti 1 j while i 10 j 1 while j 10 printf j printf n i 演示15 includemain inti 1 j while i i printf j i printf n includemain inti 1 j while i 10 j 1 while j i printf j printf n i 演示16 演示17 循环的嵌套 演示18 includemain intn m for n 0 n 3 n for m 0 m 5 m if n 0 m 0 n 3 m 5 printf elseprintf printf n 输出图形 循环的嵌套 演示19 includemain inti j k for i 0 i 4 i for j 1 j 4 i j printf for k 0 k 2 i k printf printf n inlcudemain intn m k for n 0 n 4 n for m 0 m 4 n m printf for k 0 k 2 2 n k if n 0 n 4 k 0 k 10 k 6 演示20 例3从键盘输入20名学生的6门成绩 分别统计出每个学生的平均成绩 分析 有两种方法 一种是用单循环 循环20次 每次输6个成绩 一种是用双循环 循环20次 每次输1个成绩 输6次 includemain intj floata b c d e f sum 0 aver for j
展开阅读全文
相关资源
相关搜索

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


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

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


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