C语言第二章.ppt_第1页
C语言第二章.ppt_第2页
C语言第二章.ppt_第3页
C语言第二章.ppt_第4页
C语言第二章.ppt_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

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

文档简介

第二章程序基本结构 目录 控制语句 2 1分支结构 2 2关系运算和逻辑运算 2 3循环结构 2 4break和continue语句 2 5语句标号和goto语句 2 6指针程序设计 课后习题5 4 输入3边 求三角形面积 main floata b c s area scanf f f f 题目改进 判断输入的3边是否能构成三角形 main floata b c s area scanf f f f 分支体 复合语句 复合语句 c2 1 1 c 成立 不成立 观察下面分支程序 模仿编程 main floata b printf Pleaseinputa scanf f 预备学习1 单分支 分支体由一条语句构成时 大括号可省略 观察下面分支程序 模仿编程 main floata b printf Pleaseinputa scanf f 预备学习2 双分支 从键盘上输入两个整数 输出较小的那个数 预备练习1 预备练习1 程序源代码 main inta b printf Pleasetwodata scanf d d if语句的三种形式 1 2 格式1 if 表达式 分支体 格式2 if 表达式 分支体1 else分支体2 else后没有表达式 括号后没有分号 分支体里可以包含多条程序语句 用一对 扩起来 做为整体 这种由 扩起来的语句叫做复合语句 括号之外不再加 else必须和if配对使用 不能单独出现 选择条件通常是关系表达式或逻辑表达式 放在括号中 实际使用时可以是任意表达式 表达式值为0代表if条件不成立 假 表达式值为非0代表if条件成立 真 关系运算结果值 成立为0 不成立为1 P47 逻辑运算符 逻辑运算结果为0或1 知识点 如何表达条件 参与逻辑运算的数据理解 值为非零即是真 值为零即是假 例如 3 0结果为0 7 0结果为1 800结果为0算术运算优先级高于关系运算 关系运算优先级高于逻辑运算 它们都高于赋值运算符 逻辑运算符优先级 关系表达式的运算 注意复杂条件表达 例如 100 a 999100 a a 999 注意相等的条件表达 例如 if a 100 if a 100 if语句扩展表达式可为任意表达式 只要值为0就认为条件不成立 值为非0就认为条件成立 例如 if 1 if 4 3 if a flag 3 if flag 编程练习 将卫星离地面高度的习题 加上对周期T的值的判断 如果T值大于5100 则进行高度的求解 否则输出 周期值太小 无法计算高度 从键盘上输入一个字符 判断它是否是小写字母 如果是则转换为对应的大写字母输出 从键盘上输入一个数 判断它是否是三位数 如果是则求其三个位数 如果不是则输出提示信息 不是三位数 多分支结构 表达多种情况的选择常用if语句嵌套实现规则的多分支语句可用switch语句实现 if语句的三种形式 3 格式3 if 表达式1 语句序列1 elseif 表达式2 语句序列2 else语句序列3 例3设有分段函数 1 x0 编一个程序 输入x 输出y 简单算法流程图 includemain intx y scanf d if语句嵌套 注意 if语句或if else语句虽然书写在多行 但语法逻辑上是一条语句 else总是与它上面最近的那个if配对 必要时可加大扩号 改变匹配关系 if语句嵌套 例如 if 表达式1 if 表达式2 语句序列1 else语句序列2 if 表达式3 语句序列3 else语句序列4 if与else的配对关系并不依赖于书写程序时用户根据程序的层次性逐渐内缩的梯形结构 而else总是与它上面最近的那个if配对 举例 求一元二次方程ax2 bx c 0的解 流程图见教材图2 4 本例题学到一个实数的比较方法 实型数据 由于采用浮点数的形式存储于计算机中 在存储与读取的过程中有精度损失 就是说实数经过存储后再读取出来 就不能精确等于原来的数值了 这样一个实数与其他数进行相等比较时 不能用 表达相等关系 例如实数a 0是不能正确比较的 而应该用它与其他数相减的差的绝对值在某一个小数范围内来表示近似相等 如本例中的fabs a 1e 6 表示如果a小于10 6 就算是近似为0了 提问 if语句使用时单分支结构如何表达 双分支结构如何表达 if 条件 条件满足后执行的一系列语句称为分支体 分支体如果由两条以上语句构成时 应该如何处理 if 条件 else 提问 if语句条件表达时可以是任意表达式 如何规定条件成立与否 只要值为0就认为条件不成立 值为非0就认为条件成立 逻辑运算符的运算规则 优先级规则 关系运算和逻辑运算最后的值为哪两个 提问 使用if语句实现3分支以上的多分支算法时 if语句的嵌套格式 else配对的原则 else总和它最近的if配对 如要改变匹配关系 可加大括号 提问 实型数据相等比较的方法 比如判断x和a是否相等 应写做if fabs x a 1e 6 判断x是否为0 应写做 if fabs x 1e 6 注意 仅适用实数 整型数据正常比较即可 分支结构编程if语句嵌套练习 从键盘上输入一个小于10000的数 判断它是几位数 并输出判断结果 大多数多分支结构都是由if else语句嵌套实现的 这种多分支结构通常都有多个条件进行判断选择 有时多分支结构仅由一个条件判断形成 对同一个条件进行判断时有多种取值可能情况 此时可用switch语句实现 多分支结构 switch 多分支 语句 使用形式 switch 表达式 case常量1 语句序列1 break case常量2 语句序列2 break case常量n 语句序列n break default 语句序列n 1 观察语法格式 说明 switch语句的执行部分是由若干个case语句和一个可缺省的default语句组成的复合语句 整个要用大括号括起来 语句序列1 n 1中 如果某个语句是由两个以上的语句组成 可以不用大括号 switch后的表达式和case后的常量值可以为任何类型 但一般情况下为整型和字符型 当表达式的值与case后的常量值相等时 则执行该case后的语句序列 执行完后退出switch语句 跳转到整个switch语句之后的下一个语句执行 如果所有的case语句的常量值与switch之后的表达式不匹配 则执行default之后的语句序列 各case语句之后的常量值不能相同 如果某个case语句最后的break语句被省略 则执行完该case语句之后 系统则会继续执行下一个case语句 多个case语句可以共用一组执行语句 分析 成绩的可能取值是多种多样的 但case后面的常量值只能是一个具体的值 不能表达为一个值的范围 因此需将原成绩值进行某种运算转换为相应的一个具体值 这样才能进行case的匹配 请大家思考 例5在学生成绩管理中 经常要将成绩的百分制转换成对应的等级制 90分以上为A等 80 89为B等 70 79为C等 60 69分为D等 其余为E等 编制程序 根据输入的百分制成绩 输出对应的等级 提示 将原成绩值与10做整除运算 可得到一个具体值 includemain intscore temp printf Inputscoreofstudent scanf d 参考程序 条件运算符 简单的条件选择可以使用条件运算符 格式 表达式1 表达式2 表达式3例如 a b a b b a 条件运算符的优先级高于赋值运算符 低于关系运算符和算术运算符 例如 max a b a b详细语法见P43页 例 输入一个字符 如果是大写字母 转换为小写 如果不是则不转换 main charch scanf c 小节分支语句使用形式 单分支 if 双分支 if else 三分支和多分支 用if语句嵌套实现 规整的多分支形式 switch语句简单的双分支结构也可以同条件运算符实现 循环语句 2 2 2 2循环语句 while语句dowhile语句for语句循环嵌套 实验2 5题改进 main floata b c s area scanf f f f 循环体 随机次数循环 例题从键盘上输入一串字符 统计其中小写字母的个数 输入0时程序结束 voidmain chara intnum 0 while a getchar 0 if a 97 先赋值后进行关系比较 循环体 观察学习 观察下面循环程序 模仿编程 求全班同学成绩的平均分 main floata sum 0 inti num scanf d 观察学习 固定次数循环 循环条件 循环体 请找出下列程序中若干处错误 voidmain printf 1英语 n printf 2汉语 n printf 3数字 n printf 4符号 n inti scanf d i switch i case1 printf abcdefg n case2 printf 国标 n case3 printf 123456789 n case4 printf n default printf 选择错误 n 参考程序 voidmain inti printf 1英语 n printf 2汉语 n printf 3数字 n printf 4符号 n scanf d 请找出下列程序中若干处错误 includevoidmain inti a b c printf 请输入若干个整数 以 32767结束 n scanf d 参考程序 includevoidmain inti a 0 b 0 c 0 printf 请输入若干个整数 以 32767结束 n scanf d 参考程序2 includevoidmain inti a 0 b 0 c 0 printf 请输入若干个整数 以 32767结束 n do scanf d 注意这里有分号 请找出程序中的若干处错误 includevoidmain charyear for year 2011 year 2100 year year 12 printf d n year 简述for语句执行顺序 参考程序 voidmain intyear for year 2011 year 2100 year 12 printf d n year voidmain intyear 2011 while year 2100 printf d n year year 12 使用for语句编写 求1 2 3 100 程序填空 main inti sum 0 for i 1 i 100 i i 1 printf sumis d sum sum sum i 循环结构比较适合解决多次重复执行相同的操作运算 分析以上这句话 用循环结构来解决问题的时候我们需要关注哪些 1 如何多次重复 这就需要考虑一个循环的执行条件或次数如何控制 2 相同的操作运算 这就是循环体 就是循环控制结构内的操作语句 循环结构的适用情况 从键盘上输入10个整数 输出每个数的平方 使用for语句编程 编程练习 3分钟 参考程序 main inta i printf inputaninteger for i 1 i 10 i i 1 scanf d 1 for 循环变量 初值 循环变量 终值 循环变量增值 循环体语句 2 while 循环条件 循环体语句 3 do 循环体语句 while 循环条件 三种C语言循环控制结构语句 说明 三种语句的功能大体上是一样的 都能实现循环结构控制 只是具体的语法结构不同 编程时有些细节处理不同 注意分号 使用while和do while循环 注意 1 赋初值 循环变量i 1 累乘之积m 1 2 循环变量要修正值 i 或i 否则造成死循环 总结 编程求30 1 2班用for语句实现3班用while语句实现4班用do while语句实现注意 本道题阶乘值比较大 累乘积变量的类型应慎重选择 可用float double 否则产生值的溢出错误 main floatfact 1 inti for i 2 i 30 i fact i printf 0f fact main floatfact 1 inti 2 while i 30 fact i i printf 0f fact main floatfact 1 inti 2 do fact i i while i 30 printf 0f fact main floata sum 0 inti num scanf d i 1 while i num printf inputscore scanf f i 循环语句转换 main floata sum 0 inti num scanf d 循环语句转换 i 1 do printf inputscore scanf f 变量的自增语句有三种 i i 1 i i 2 i i 1 i 2 循环体如果由两条以上语句构成时 一定要加大括号 以复合语句的形式出现 例如 for i 10 i 1 i for i 3 i10 i i 10 补充 循环控制过程中 步长的修正是灵活多样的 可正 可负 步长可为1 也可为2 3 10等 使用while语句或do while语句实现随机次数的循环举例 例2 12 输入一个字符 如果是大写字母 转换为小写 如果不是则不转换 输入 0 结束程序 includevoidmain charch while 1 ch getchar if ch 0 break ch ch A 永真循环 表面上看是死循环 实际在循环体里有if语句进行条件判断 可以执行到break语句退出循环 总结 循环情况分类 固定次数的循环 适合用for语句实现 随机次数的循环 适合用while和do while语句 举例 固定次数 for i 100 i 999 i 随机次数 while ch 13 以上只是常用方法 不绝对 例如也可以用for语句实现随机次数的循环 也可用while和dowhile实现固定次数的循环 includevoidmain charch for ch getchar 0 ch ch A 说明 如果在for语句之前已经给循环变量赋初值 则for语句的循环变量赋初值部分可以省略 但其后的分号不省略 例 i 1 for i 10 i m m i 也可以将循环变量修正值的工作纳入到循环体中去做 例 for i 1 i 10 m m i i 第二部分 循环条件表达式 不能缺省 否则将陷入死循环 也可以省略for语句的第一和第三部分例 i 1 for i 10 m m i i 如果有多个循环变量赋初值 或多个循环变量值要修正 应在各变量之间用逗号隔开 例 for i 1 j 10 i j i j k i j main intn max scanf d 编程练习 从键盘输入若干整数 以0结束 判断并输出其中最大的数 分析 循环次数随机 循环条件控制while n 0 求最大值的算法 反复比较 设定一个最大值变量max 则if max n max n 循环语句构成 比较 输入 循环开始前的处理工作 变量n的初值 max的初值 main intn max scanf d main intn max scanf d 比较两种循环实际执行过程中的不同 while循环有可能一次也不执行 而dowhile循环至少要执行一次 自学P55 几种循环的比较 2 4break语句和continue语句 break语句功能 提前结束循环 常和if语句搭配使用 满足某种条件下退出循环 例 从键盘上输入一个数 判断这个数是否是素数 素数是除了1和自身不能被任何数整除的数 分析 循环的初始和终止条件 除数i 2 i m 例题程序 sushu c 参考程序1 main inti m k scanf d 循环语句结束的两种情况 循环满足结束条件终止 此时i值达到m这个数 循环遇到if条件满足提前终止 此时i没有达到m 参考程序 main inti m k scanf d 思考 如下程序逻辑错误在哪里 continue语句功能 结束本次循环 开始下一次循环 整个循环未结束 例如 while 条件 语句1 if 条件 contine 语句3 语句4 main inti for i 1 i 6 i if i 2 printf continue printf printf n 阅读程序 请说出该程序段的功能 循环的嵌套 在一个循环体内又有一个循环语句的循环结构 则称为循环嵌套do while while for三种循环方式可以相互构成循环嵌套 循环嵌套执行过程 外循环每执行一次 内循环执行整个一遍 即n2次 循环次数 内外循环次数的乘积 n1 n2 循环的嵌套 例如 for i 1 i n1 i for j 1 j n2 j 实验作业讲解 请找出实验1程序中若干处错误 includevoidmain intm i for m 2 m m 2 k printf d m printf n共有 d个素数 n k 参考程序1 includevoidmain intm i k 0 for m 2 mm 2 k printf d m printf n共有 d个素数 n k 参考程序2 includevoidmain intm i k 1 printf d 2 for m 3 mm 2 k printf d m printf n共有 d个素数 n k 循环次数减少一半 参考程序3 includevoidmain intm i k 1 flag printf d 2 for m 3 m 100 m 2 for i 2 flag 1 i m 2 i if m i 0 flag 0 break if flag 1 k printf d m printf n共有 d个素数 n k 标志变量法 请找出实验2程序中若干处错误 includevoidmain intm a b c for m 100 m 999 m m 100 a m 10 10 b m 10 c if m a a a b b b c c c printf d n m 实验2参考程序 includevoidmain intm a b c for m 100 m 999 m a m 100 b m 10 10 c m 10 if m a a a b b b c c c printf d n m 实验3参考程序1 includevoidmain intyear 0 floata b a 1 while a 2 a a 1 075 year printf 经过 d年翻一番 n year 实验3参考程序2 includevoidmain intyear 0 floata b scanf f 实验4参考程序1 includevoidmain inta b t i printf 输入两个自然数 scanf d d 倒序循环可提高效率 实验4参考程序2 includevoidmain inta b t i s scanf d d 举例 打印一张九九表 main inti j for i 1 i 9 i for j 1 j i j printf 4d i j printf n main inti j for i 1 i 9 i for j 1 j i j printf 4d i j printf n 右侧程序哪里不正确 例 求3 100之间的全部素数 分析 1 外层循环 n从3到100 2 内层循环 i从2到n 2或sqrt n 例 sushu 2 c 素数编程技巧探讨 1 可否减少循环次数 2 标志变量的使用 sushu 1 c 例 图形编程 分析 1 外层循环 行数 i从1到62 内层循环 每行空格数和每行 个数 空格数 号数 6 i 2 i 1 inti j for i 1 i 6 i for j 1 j 6 i j printf for j 1 j 2 i 1 j printf 外循环的循环体是什么 程序段实际运行还缺少什么 inti j for i 1 i 6 i for j 1 j 6 i j printf for j 1 j 2 i 1 j printf printf n c2 9 c 图形编程的统一规律 1 两重循环嵌套 外循环控制图形的行数 内循环控制图形的列数和空格数 2 内循环完毕通常有一个换行printf n 3 内循环的次数要观察图形的形状 通常和外循环变量i具有一定的运算规律 4 内循环图案的起始位置可用空格控制 因为具有一定的递变规律 通常也用循环实现 图形编程补充 Sy3 4 c 无条件转移语句 goto语句是一种使程序的流程无条件转移的语句使用语句的形式为 goto语句标号语句标号是由用户自行定义的 由字母 数字 下划线组成 且第一个字符必须为字母或下划线 跳转到的那条语句的语句标号和该语句之间用冒号分开 例如 label printf Noresult n goto语句的功能是无条件地跳转到语句标号所指定的本函数内的那条语句 goto c 1 三种循环语句的语法格式2 固定次数的循环如何设计 随机次数的循环如何设计 2 break continue语句的功能3 循环嵌套 4 经典例题 判断素数 求最大 最小值 水仙花数 数列 图形编程 总结 回顾 指针的含义 变量的内存地址 指针类型的变量 定义及使用 2 6指针程序设计 指针类型变量里存放的是什么值 另外一个变量的内存地址使用指针变量的目的 间接访问其它变量使

温馨提示

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

评论

0/150

提交评论