C语言教学习题课.ppt_第1页
C语言教学习题课.ppt_第2页
C语言教学习题课.ppt_第3页
C语言教学习题课.ppt_第4页
C语言教学习题课.ppt_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

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

文档简介

C语言教学习题课1学习目的 对于很多专业的学生来讲 c语言是门很重要基础语言 也是我们专业基础课 它是现今应用最为广泛的几种语言之一 在实际编程中 它有其他语言无法比拟的优势 在学习的同时 其主要是培养自己的优良的编程风格 掌握几种基本的编程方法和基本算法 同时开拓自己的思维方式 控制流程语句1 教学要求 熟练掌握if语句的三种形式 掌握switch语句的一般形式 并能把复杂的分支结构化成switch语句 熟练掌握while循环语句和do while循环的使用 熟悉for循环的使用 了解各循环的不同点 学会使用goto语句和if语句构成循环 2 教学内容 控制流程语句C语言提供了丰富 灵活的控制流程语句 主要有 条件语句 循环语句和开关语句 if else条件语句 do while while和for循环语句 下面将对这些语句作详细介绍 一 算法概论就一个具体的应用而言 总是要求它能解决特定的问题 达到预定的目的 换句话说 就是要保证程序的 正确性 和 可行性 因此 在设计程序前 根据实际问题的特点和需求 再考虑计算机的工作特性 确定解决某个问题所需的方法和步骤是至关重要且是不可缺少的 这一步骤称为 算法设计 1 算法的概念 广义地讲 算法是解决某个问题或处理某件事的方法和步骤 狭义地讲 专指计算机解决某个问题的方法和步骤 即一个算法就是一个有穷规则的集合 其中的规则规定了一个解决某一特定类型问题的运算系列 计算机算法分为两类 数值计算算法和非数值计算算法 数值计算算法如微分方程的数值解等 非数值计算算法如排序和查找等 非数值计算算法已经成为一门专门的学科 计算方法 计算机算法分为两类 数值计算算法和非数值计算算法 数值计算算法如微分方程的数值解等 非数值计算算法如排序和查找等 非数值计算算法已经成为一门专门的学科 计算方法 2 算法举例例1 求两个自然数的最大公约数的欧几里德算法 S1 输入两个自然数M N S2 求M除以N的余数R S3 使M N 即用N代换M S4 使N R 即用R代换N S5 若R不等于零 则重复执行S2 S3 S4 循环 否则转S6 S6 输出M M即为M和N的最大公约数 这是一个数值计算算法 例2 在N个字符串数据集合中 查找有无特定的字符串S 模式匹配 S1 输入N个字符串和要查找的字符串S S2 使I 1 I用于计数 S3 从N个字符串数据集合读一个字符串X S4 若X S 输出 找到S 的信息 算法结束 否则转S5S5 使I I 1 计数器计数 S6 若I N 则重复S3 S4 S5 循环 否则转S7 S7 输出 找不到S 的信息 算法结束 这是一个非数值计算算法 顺序查找算法 的 3 算法的特征 1 确定性即算法本身无二义性 2 可行性 3 有穷性即算法必须是在有限步骤里完成 4 输入性 5 输出性一个算法必须有一个或多个输出 4 算法的描述算法可以采用多种方式来表示 自然语言 如英语 汉语等 用图形或符号类描述等 用于描述算法的图形使用较多的是流程框图 简称流程图 它是使用规定的图形符号来描述算法的 流程图使用的符号如下 输入 输出 处理 判断 起点和终点 特定过程 流程线 连接点 下图分别是前面介绍的两个算法的流程图 开始 输入M N 求R M N M N N R 输出M N R 0 结束 是 开始 输入N S 输入M N X S 结束 是 I 1 读入X I I 1 I N 输出找到S 是 5 基本算法结构 根据结构化程序设计的要求 有三种基本算法结构 1 顺序结构 2 分支结构 3 循环结构 当型循环和直到型循环 三种基本结构的共同特点 1 单入单出 2 结构中的每个部分都有可能被执行 3 在给出合理的e条件后 结构内不存在死循环 A B 顺序结构 e A B 真 假 分支结构 e A True False e A False True 当型循环 直到型循环 循环结构 6 算法的实现 算法的实现是指使用某种计算机程序设计语言把算法描述出来 具体地说 也就是使用某一种程序设计语言所提供的语言成分 根据语言的特点 并利用语言提供的各种工具和手段 遵循规定的语法规则去实现算法 编码 c就是一种实现算法的程序设计语言 并且它完全支持结构化程序设计开发方法 并提供相应的语言成分做支持 如提供三种基本算法结构的语言成分等 二 赋值语句1 赋值语句是程序中最简单 最常用的语句 赋值语句的一般形式是 Var 例如 x 123s HelloWorld 这里的 号不是数学上的等号 它只是把右边表达式的值送给左边的变量 没有相等的含义 赋值时左边和右边一般数据类型应一致 例1 分析下面程序 include stdio h main inta b 4 a b printf d d n a b 分析 main a b 4 a b printf d d d n a b b 如果加一句 printf d d a b 结果如何 再加一句 printf d d d n a b b 请大家上机验证 2 数据的输入 输出 主要是由格式输入 出函数printf 和scanf 与字符数据的输入 出函数putchar 和getchar 用户在程序中直接使用 例2 include stdio h main intc chara c 65 a A putchar c putchar a 例3 输入单个字符 include stdio h main charc c getchar putchar c 例4 用 号输出字母C的图案 1 程序分析 可先用 号在纸上写出字母C 再分行输出 2 程序源代码 include stdio h main printf HelloC world n printf n printf n printf n printf n 讨论 分析程序 include stdio h main printf d n 25 printf x n 25 printf o n 25 printf f n float 25 三 条件语句象其它语言一样C语言也提供条件语句 在C语言中条件语句的一般形式为 if 表达式 语句1 else语句2 上述结构表示 如果表达式的值为非0 TURE 即真 则执行语句1 执行完语句1从语句2后开始继续向下执行 如果表达式的值为0 FALSE 即假 则跳过语句1而执行语句2 所谓表达式是指关系表达式和逻辑表达式的结合式 关于表达式前面已作过介绍 这里不再重复 注意 1 条件执行语句中 else语句2 部分是选择项 可以缺省 此时条件语句变成 if 表达式 语句1 表示 若表达式的值为非0 则执行语句1 否则跳过语句1继续执行 注 这是if语句的一种形式 2 如果语句1或语句2有多于一条语句要执行时 必须使用 和 把这些语句包括在其中 此时条件语句形式为 if 表达式 语句体1 else 语句体2 1 if else结构语句形式 Ife A组语句 Else B组语句 分支结构有多种变形 如不对称分支和多分支结构 表达式 语句 语句 真 假 分支结构 例1 分析 include stdio h main inta printf 输入一个整数 n scanf d 注意 表达式if a 等价于if a 0 表达式 语句 真 假 If 表达式 语句执行过程 如果表达式的值为真时 则执行后面的语句 否则不执行该语句 直接执行if下面的语句 不对称分支结构 实现 例2 求较大数的平方值 include stdio h main inta b s printf inputa b scanf d d 分析程序执行过程 例3 分析main intx printf 请输入一个数 scanf d printf 输入的是负数 作业 编程计算a b 的值 3 阶梯式if else if结构 阶梯式结构的一般形式为 if 表达式1 语句1 elseif 表达式2 语句2 elseif 表达式3 语句3 else语句n 这种结构是从上到下逐个对条件进行判断 一旦发现条件满点足就执行与它有关的语句 并跳过其它剩余阶梯 若没有一个条件满足 则执行最后一个else语句n 最后这个else常起着 缺省条件 的作用 同样 如果每一个条件中有多于一条语句要执行时 必须使用 和 把这些语句包括在其中 e1 e2 e3 A1 A2 A3 True False True False True False 多分支结构 ife1A1组语句elseIfe2A2组语句Elseife3A3组语句 实现 例4 完成下列程序代码 要求输入成绩 给出相应的等级 include stdio h main floatx chary printf 请输入学生成绩 scanf f x Ifx 90y A Elseifx 80 例5 输入三个整数x y z 请把这三个数由小到大输出 1 程序分析 我们想办法把最小的数放到x上 先将x与y进行比较 如果x y则将x与y的值进行交换 然后再用x与z进行比较 如果x z则将x与z的值进行交换 这样能使x最小 2 程序源代码 main intx y z t scanf d d d include stdio h main intx y z t scanf d d d 思考题 有5个人坐在一起 问第五个人多少岁 他说比第4个人大2岁 问第4个人岁数 他说比第3个人大2岁 问第三个人 又说比第2人大两岁 问第2个人 说比第一个人大两岁 最后问第一个人 他说是10岁 请问第五个人多大 1 程序分析 利用递归的方法 递归分为回推和递推两个阶段 要想知道第五个人岁数 需知道第四人的岁数 依次类推 推到第一人 10岁 再往回推 2 程序源代码 age n intn intc if n 1 c 10 elsec age n 1 2 return c main printf d age 5 例6 输出特殊图案 请在c环境中运行 看一看 1 程序分析 字符共有2562 程序源代码 include stdio h main chara 176 b 219 printf c c c c c n b a a a b printf c c c c c n a b a b a printf c c c c c n a a b a a printf c c c c c n a b a b a printf c c c c c n b a a a b 4 开关语句在编写程序时 经常会碰到按不同情况分转的多路问题 这时可用嵌套if else fi语句来实现 但if else if语句使用不方便 并且容易出错 对这种情况 C语言提供了一个开关语句 开关语句格式为 switch 变量 case常量1 语句1或空 case常量2 语句2或空 case常量n 语句n或空 default 语句n 1或空 执行switch开关语句时 将变量逐个与case后的常量进行比较 若与其中一个相等 则执行该常量下的语句 若不与任何一个常量相等 则执行default后面的语句 注意 1 switch中变量可以是数值 也可以是字符 2 可以省略一些case和default 3 每个case或default后的语句可以是语句体 但不需要使用 和 括起来 下例的switch中变量为整数型 例7 main inttest for test 0 test 10 test switch test 变量为整型数的开关语句 case1 printf d n test break 退出开关语句 case2 printf d n test break case3 printf d n test break default puts Error break 下例的switch中变量为字符型 例8 includemain charc c getchar while c 27 循环直到按Esc键结束 c getchar 从键盘不回显接收一个字符 switch c case A 接收的字符为 A putchar c break 退出开关语句 case B putchar c break default 接收的字符非 A 和 B printf Error break 例9 输入1 7的整数 将其转换成对应的星期几 include stdio h main intx printf 请输入1 7的整数 scanf d 关于 运算符 例如 include stdio h main inta b c a 4 b 5 if c a b 12 13 a 12 else a 13 printf d d a c 例10 利用条件运算符的嵌套来完成此题 学习成绩 90分的同学用A表示 60 89分之间的用B表示 60分以下的用C表示 1 程序分析 a b a b这是条件运算符的基本例子 2 程序源代码 main intscore chargrade printf pleaseinputascore n scanf d 四 循环结构与循环结构语句循环也是程序的基本算法结构 所谓循环 就是重复执行某些操作 循环结构主要包括 当型结构和直到型结构 并且每种结构又有两种不同的执行方式 先判断再执行和先执行再判断 C语言提供三种基本的循环语句 for语句 while语句和do while语句 循环体语句 e True False 形式1 While 表达式 语句执行过程 计算表达式的值 当值为真时 执行循环体语句 其特点是 先判断 后执行 注 循环体可能一次都不执行 循环结构语句 三种形式 循环体语句 e True False 形式2 Do语句While 表达式 执行过程 先执行循环体语句一次 再判断表达式的值 注 循环体至少要执行一次 例1 指出程序执行后 结果是什么 main intx x 1 while x 20 x x 3 printf x d x 例2 输入一个n的值求n main ints i n i 1 s 1 scanf d 分析程序执行过程 例3 分析下面程序运行情况 并解决了什么问题 1main inta b x printf inputa b scanf d d 例4 输出几个 westudyC语言 main inti 0 while i 5 printf d n i printf westudyC语言 例5 求1 100之间偶数之和 下面程序是否可行 include stdio h main intx sum x 0 sum 0 while x 100 x x 2 sum sum x printf 2 4 6 100 d sum 例6 includemain charc c 0 初始化c while c X0D 回车结束循环 c getche 带回显的从键盘接收字符 上例中 while循环是以检查c是否为回车符开始 因其事先被初始化为空 所以条件为真 进入循环等待键盘输入字符 一旦输入回车 则c X0D 条件为假 循环便告结束 与for循环一样 while循环总是在循环的头部检验条件 这就意味着循环可能什么也不执行就退出 注意 1 在while循环体内也允许空语句 例如 while c getche X0D 这个循环直到键入回车为止 2 可以有多层循环嵌套 3 语句可以是语句体 此时必须用 和 括起来 例7 求1 99之间奇数之和 可行否 main intx sum x 1 sum 0 do x x sum sum x while x 99 printf 1 3 5 99 d sum 例8 include stdio h main inta b x do scanf d d 注 与前面例3有何不同 While循环与do while循环分别在什么情况下使用 作业 例9 下例程序功能是什么 作业 include stdio h include conio h main inti 0 charc while 1 c 0 变量赋初值 while c 13 if c 27 break 判断若按Esc键则退出循环 i printf TheNo is d n i printf Theend 2 for循环它的一般形式为 for 语句 初始化总是一个赋值语句 它用来给循环控制变量赋初值 条件表达式是一个关系表达式 它决定什么时候退出循环 增量定义循环控制变量每循环一次后按什么方式变化 这三个部分之间用 分开 计算表达式1 表达式2 计算表达式3 循环体 false true 例如 for i 1 i10时 结束循环 例10 main intp s for p 1 p 5 p s p 10 printf p d s d n p s printf p d s d p s 分析这个程序运行情况 注意最后一行输出的p与s的值 注意 1 for循环中语句可以为语句体 但要用 和 将参加循环的语句括起来 2 for循环中的 初始化 条件表达式 和 增量 都是选择项 即可以缺省 但 不能缺省 省略了初始化 表示不对循环控制变量赋初值 省略了条件表达式 则不做其它处理时便成为死循环 省略了增量 则不对循环控制变量进行操作 这时可在语句体中加入修改循环控制变量的语句 3 for循环可以有多层嵌套 例11 main inti j k printf ijk n for i 0 i 2 i for j 0 j 2 j for k 0 k 2 k printf d d d n i j k 输出结果为 ijk000001010011100101110111 例12 分析下列程序代码 main inti s for i 0 i 50 i i i 3 s s i if i 10 printf s d s 对这题进一步分析 include stdio h main inti n s s 0 for i 0 i 50 i i i 3 s s i if i 10 printf s d s printf s d s 例13 一球从100米高度自由落下 每次落地后反跳回原高度的一半 再落下 求它在第10次落地时 共经过多少米 第10次反弹多高 程序源代码 main floatsn 100 0 hn sn 2 intn for n 2 n 10 n sn sn 2 hn 第n次落地时共经过的米数 hn hn 2 第n次反跳高度 printf thetotalofroadis f n sn printf thetenthis fmeter n hn 例14 输出9 9口诀 1 程序分析 分行与列考虑 共9行9列 i控制行 j控制列 2 程序源代码 include stdio h main intI j result printf n for i 1 i 10 i for j 1 j 10 j result i j printf d d 3d i j result 3d表示左对齐 占3位 printf n 每一行后换行 3 循环嵌套 循环嵌套 即大循环中套小循环 无论是Do Loop循环 还是For Next循环 都可以进行循环嵌套 注意 小循环一定要完整地包含在大循环内 不得相互交叉 示例 Fori e1Toe2 Stepe3 Forj d1tod2 Stepd3 Nextj Nexti 思考题 Pressanykeytochangecolor doyouwanttotryit Pleasehurryup 1 程序分析 2 程序源代码 includevoidmain void intcolor for color 0 color 8 color textbackground color 置文本的背景颜色 cprintf Thisiscolor d r n color cprintf Pressanykeytocontinue r n getch 输入字符看不见 例15 分析下列程序代码 main inta 1 j while a 6 if a 2 1 for j 1 j a j printf printf n a a 1 为什么会出现这样结果 请问如何修改 include stdio h main inta 1 j while a 6 if a 2 1 for j 1 j a j printf printf n a a 1 4 多重循环例15 include stdio h main inti j k for i 1 i 3 i for j 1 j i j for k j k 3 k a a 1 printf a d a 例14 main inttest for test 0 test 10 test switch test 变量为整型数的开关语句 case1 printf d n test break 退出开关语句 case2 printf d n test break case3 printf d n test break default puts Error break 关于break continue和goto语句1 break语句break语句通常用在循环语句和开关语句中 当break用于开关语句switch中时 可使程序

温馨提示

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

评论

0/150

提交评论