大学C语言课件及复习答案.ppt

上传人:w****2 文档编号:6702541 上传时间:2020-03-02 格式:PPT 页数:50 大小:925.56KB
返回 下载 相关 举报
大学C语言课件及复习答案.ppt_第1页
第1页 / 共50页
大学C语言课件及复习答案.ppt_第2页
第2页 / 共50页
大学C语言课件及复习答案.ppt_第3页
第3页 / 共50页
点击查看更多>>
资源描述
1 C语言程序 C语言函数的一般结构 数据类型 运算符和表达式 2 从实例分析着手 使同学们了解并掌握C语言三种基本流程控制结构 顺序 选择 循环结构 加深对C语言程序开发设计过程的感性认识 强化培养编程思路 为进一步进行C语言程序设计打下基础 C语言的程序结构 3 若要使a 6 b 7 c 9 以下语句的如何输入 scanf d d d 4 若有如下定义 inta 5 以下语句的输出分别是什么 1 printf Iamastudent n 2 printf d a 2 3 printf a d b d n a a 14 5 C语言的程序结构 程序 源代码 C程序的基本结构算法结构化程序设计方法选择结构 6 程序 NikiklausWirth 沃思 提出的公式 程序 数据结构 算法程序 算法 数据结构 程序设计方法 语言工具和环境算法 即 Algorithm 对操作的描述 即操作步骤 解决问题的方法 算法是程序的灵魂 数据结构 datastructure 对数据的描述 在程序中要指定数据的类型和数据的组织形式 程序设计方法 结构化程序设计 面向过程程序设计 面向对象程序设计 模块化程序设计 分布式程序设计 多层程序设计 XP极限程序设计 程序 Program 对算法的具体实现 程序的效率不可能超过算法的限制 7 算法Algorithm 为解决一个问题而采取的方法和步骤 就称为算法 计算机算法 计算机能够执行的算法 简单算法举例 求1 2 3 4 5 最原始方法 步骤1 先求1 2 得到结果2 步骤2 将步骤1得到的结果2乘以3 得到结果6 步骤3 将6再乘以4 得24 步骤4 将24再乘以5 得120 这样的算法虽然正确 但太繁 改进的算法 S1 使t 1S2 使i 2S3 使t i 乘积仍然放在在变量t中 可表示为t t iS4 使i的值 1 即i i 1S5 如果i 5 返回重新执行步骤S3以及其后的S4和S5 否则 算法结束 如果计算100 只需将S5 若i 5改成i 100即可 8 求1 3 5 7 9 11 算法也只需做很少的改动 S1 1 tS2 3 iS3 t i tS4 i 2 iS5 若i 11 返回S3 否则 结束 求2 4 6 8 10 12 该算法不仅正确 而且是计算机较好的算法 因为计算机是高速运算的自动机器 实现循环轻而易举 9 算法的特性 有穷性 一个算法应包含有限的操作步骤而不能是无限的 确定性 算法中每一个步骤应当是确定的 而不能应当是含糊的 模棱两可的 输入 有零个或多个 输出 有一个或多个 有效性 算法中每一个步骤应当能有效地执行 并得到确定的结果 对于程序设计人员 必须会设计算法 并根据算法写出程序 10 怎样表示一个算法 1 用自然语言表示算法 除了很简单的问题 一般不用自然语言表示算法 2 用流程图表示算法 流程图表示算法 直观形象 易于理解 说明 各类框表示相应操作 带箭头的流程线 框内外必要的文字说明 11 求5 的算用流程图表示 12 C程序三种基本算法结构 顺序结构 逐条执行 选择结构 分支结构 循环结构 重复结构 当型循环 While型循环 直到型循环 Until型循环 结构化算法 由基本结构顺序组成的算法结构 13 顺序结构 includevoidmain floatx y z s v scanf x f y f z f x y z s x y v x y z printf s f v f s v 14 选择结构 当p为 真 当p为 假 15 循环结构 A a b p1 Y While型循环 N 当p1为 真 当p1为 假 A a b p1 N Until型循环 Y 当p1为 真 当p1为 假 16 两种循环结构的比较 While型循环 Until型循环 两个循环结构的判断条件相反 A一次也没有执行 A执行了一次 当首次判断p即为 假 p为 真 当执行一次A后 判断p为 假 p为 真 A执行了一次 17 三种基本算法结构的共同特点 只有一个入口只有一个出口结构内每一部分都有机会被执行到结构内不存在 死循环 18 选择结构程序设计 要设计选择结构程序 要考虑两个方面的问题 一是在C语言中如何来表示条件 二是在C语言中实现选择结构用什么语句 在C语言中表示条件 一般用关系表达式或逻辑表达式 实现选择结构用if语句或switch语句 回顾 关系运算及其表达式逻辑运算及其表达式if语句switch语句选择结构程序举例 19 关系运算 所谓 关系运算 实际上就是 比较运算 即将两个数据进行比较 判定两个数据是否符合给定的关系 关系运算符C语言提供6种关系运算符 大于 大于或等于 等于 不等于 关系运算符的优先级 低于算术运算符 但高于赋值运算符 c a b 20 关系表达式 1 关系表达式的概念所谓关系表达式是指 用关系运算符将两个表达式连接起来 进行关系运算的式子 例如 下面的关系表达式都是合法的a ba b c d a 3 b a b b c 2 关系表达式的值 逻辑值 非 真 即 假 由于 语言没有逻辑型数据 所以用整数 表示 逻辑真 用整数 表示 逻辑假 21 例如 假设num1 3 num2 4 num3 5 则 num1 num2值 0 num1 num2 num3值 1num1 num2 num3值 1 num1 num2 num3值 6再次强调 C语言用整数 1 表示 逻辑真 用整数 0 表示 逻辑假 所以 关系表达式的值 还可以参与其它种类的运算 例如算术运算 逻辑运算等 22 逻辑运算及其表达式 关系表达式只能描述单一条件 例如 x 0 如果需要描述 x 0 同时 x 0 x5 x 0 假定x 5 则 x 0 x5 的值为 假 23 2 逻辑运算符的运算优先级 1 同类中逻辑非的优先级最高 逻辑与次之 逻辑或最低 即 非 与 或 2 其它种类运算符的优先关系 算术运算 关系运算 赋值运算逻辑表达式 所谓逻辑表达式是指 用逻辑运算符将1个或多个表达式连接起来 进行逻辑运算的式子 在C语言中 用逻辑表达式表示多个条件的组合 例如 闰年 被4整除而不能被100整除或被400整除为闰年 下面就是一个判断一个年份是否是闰年的逻辑表达式 year 4 0 year 100 0 year 400 0 逻辑表达式的值也是一个逻辑值 非 真 即 假 24 1 if语句的一般格式if 表达式 语句组1 else 语句组2 if语句中的 表达式 必须用 和 括起来 else子句 可选 是if语句的一部分 必须与if配对使用 不能单独使用 当if和else下面的语句组 仅由一条语句构成时 也可不使用复合语句形式 即去掉大括号同时也不要中括号 2 if语句的执行过程 1 缺省else子句时当 表达式 的值不等于0 即判定为 逻辑真 时 则执行语句组1 否则直接转向执行下一条 if语句 例 if x y printf d x 25 2 指定else子句时当 表达式 的值不等于0 即判定为 逻辑真 时 则执行语句组1 然后转向下一条语句 否则 执行语句组2 3 if语句的嵌套与嵌套匹配原则if语句允许嵌套 所谓if语句的嵌套是指 在 语句组1 或 和 语句组2 中 又包含有if语句的情况 if语句嵌套时 else子句与if的匹配原则 与在它上面 距它最近 且尚未匹配的if配对 为明确匹配关系 避免匹配错误 强烈建议 将内嵌的if语句 一律用花括号括起来 26 4 说明if后面的 表达式 除常见的关系表达式或逻辑表达式外 也允许是其它类型的数据 如整型 实型 字符型等 if语句允许嵌套 但嵌套的层数不宜太多 在实际编程时 应适当控制嵌套层数 2 3层 语句组1 和 语句组2 可以只包含一个简单语句 也可以是复合语句 务必牢记 不管是简单语句 还是复合语句中的各个语句 每个语句后面的分号必不可少 例如 求二个数中的最大值 if num1 num2 max num1 elsemax num2 说明 if行后面的赋值语句 max num1 分号不能省略 但不要误认为if和else是2个独立的语句 它们都属于if语句中的一部分 else是if语句的子句 27 试说明俩种的区别 28 includemain intx y printf Enteraninteger scanf d 例求一个数的绝对值 运行 Enteraninteger 12 integer 12 absolutevalue 12 29 输入任意三个整数num1 num2 num3 求三个数中的最大值 main intnum1 num2 num3 max printf Pleaseinputthreenumbers scanf d d d 30 main intnum1 num2 num3 max printf Pleaseinputthreenumbers scanf d d d 基本思想 首先取一个数预置为max 最大值 然后再用max依次与其余的数逐个比较 如果发现有比max大的 就用它给max重新赋值 比较完所有的数后 max中的数就是最大值 这种方法 对从3个或3个以上的数中找最大值的处理 非常有效 31 写一程序 从键盘上输入1年份year 4位十进制数 判断其是否闰年 闰年的条件是 能被4整除 但不能被100整除或者能被400整除 关于平年 闰年 简单的说 四年一闰 这个说法是不准确的 天文学 地球绕太阳一周称为一年 但实际上 地球绕太阳转一圈需要365天5时48分46秒 也就是365 2422天 为了方便 一年定为365天 叫做平年 这样每过四年差不多就要多出一天来 把这一天加在2月里 这一年就有366天 叫做闰年 通常 每四年里有三个平年一个闰年 公历年份是4的倍数的 一般都是闰年 不过 每经长期闰年的修正 就会发现修正太多了 按照每四年一个闰年计算 平均每年就要多算出0 0078天 这样经过四百年就会多算出大约3天来 因此 每四百年中要减少三个闰年 所以规定 公历年份是整百数的 必须是400的倍数的才是闰年 不是400的倍数的就是平年 如1796年 1804年都应是闰年 但1800 因为末尾有两个0 就要看能不能被400整除 不能就不是闰年 也就是说 这个时候就不是四年一闰了 而是要过8年 到1804年才是闰年 准确的说 四年一闰 百年不闰 四百年再闰 算法设计要点 如果 能被 整除 则余数为 即如果 的值等于 则表示 能被 整除 2 根据闰年的条件可知 能被4整除 但不能被100整除 表示为 year 4 0 year 100 0 能被400整除 表示为 year 400 0 两个条件之间是逻辑或的关系 year 4 0 year 100 0 year 400 0 32 main intyear leap 0 leap 0 预置为非闰年 printf Pleaseinputtheyear scanf d 33 条件运算符一般格式 表达式1 表达式2 表达式3条件表达式中的 表达式1 表达式2 表达式3 的类型 可以各不相同 条件运算符运算规则 如果 表达式1 的值为非0 即逻辑真 则运算结果等于 表达式2 的值 否则 运算结果等于 表达式3 的值 利用逻辑运算能描述复杂条件的特点 可将上述程序优化如下 main intyear printf Pleaseinputtheyear scanf d 34 从键盘上输入一个字符 如果它是大写字母 则把它转换成小写字母输出 否则 直接输出 main charch printf Inputacharacter scanf c 35 由键盘输入两个整数给变量a和b 然后输出a和b 在交换a和b中的值后 再输出a和b 验证两个变量中的数值是否正确地进行了交换 include stdio h main inta b t printf Enteraandb n scanf d d 程序运行情况如下 Enteraandb 123456a 123 b 456a 456 b 123 36 输入任意三个数num1 num2 num3 按从小到大的顺序排序输出 main intnum1 num2 num3 temp printf Pleaseinputthreenumbers scanf d d d Pleaseinputthreenumbers 11 22 18 Threenumbersaftersorted 11 18 22 37 1 switch语句的一般形式switch 表达式 case常量表达式1 语句组 break case常量表达式2 语句组 break case常量表达式 语句组 break default 语句组 break 2 执行过程 1 当switch后面 表达式 的值 与某个case后面的 常量表达式 的值相同时 就执行该case后面的语句 组 当执行到break语句时 跳出switch语句 转向执行switch语句的下一条 2 如果没有任何一个case后面的 常量表达式 的值 与 表达式 的值匹配 则执行default后面的语句 组 然后 再执行switch语句的下一条 switch语句 38 3 说明switch后面的 表达式 可以是int char和枚举型中的一种 每个case后面 常量表达式 的值 必须各不相同 否则会出现相互矛盾的现象 即对表达式的同一值 有两种或两种以上的执行方案 case后面的常量表达式仅起语句标号作用 并不进行条件判断 系统一旦找到入口标号 就从此标号开始执行 不再进行标号判断 所以必须加上break语句 以便结束switch语句 各case及default子句的先后次序 不影响程序执行结果 多个case子句 可共用同一语句 组 用switch语句实现的多分支结构程序 完全可以用if语句或if语句的嵌套来实现 39 试说明俩种的区别 40 从键盘上输入一个百分制成绩score 按下列原则输出其等级 score 90 等级为A 80 score 90 等级为B 70 score 80 等级为C 60 score 70 等级为D score 60 等级为E 41 main intscore grade printf Inputascore 0 100 scanf d Inputascore 0 100 85 grade B 42 已知某公司员工的保底薪水为500 某月所接工程的利润profit 整数 与利润提成的关系如下 计量单位 元 profit 1000没有提成 1000 profit 2000提成10 2000 profit 5000提成15 5000 profit 10000提成20 10000 profit提成25 算法设计要点 为使用switch语句 必须将利润profit与提成的关系 转换成某些整数与提成的关系 分析本题可知 提成的变化点都是1000的整数倍 1000 2000 5000 如果将利润profit整除1000 则当 profit 1000对应0 11000 profit 2000对应1 22000 profit 5000对应2 3 4 55000 profit 10000对应5 6 7 8 9 1010000 profit对应10 11 12 43 为解决相邻两个区间的重叠问题 最简单的方法就是 利润profit先减1 最小增量 然后再整除1000即可 profit 1000对应01000 profit 2000对应12000 profit 5000对应2 3 45000 profit 10000对应5 6 7 8 910000 profit对应10 11 12 44 main longprofit intgrade floatsalary 500 printf Inputprofit scanf ld 45 选择结构在C语言中 选择结构是由if语句和switch语句来实现的 如下所示 1 if语句if 条件表达式 条件成立时的含义 else 入口条件含义 2 switch语句 说明功能 switch 表达式 case常量表达式1 该入口值的含义 语句组 case常量表达式n 该入口值的含义 语句组 default 该入口值的含义 语句组 如果条件成立时 或入口值 的含义 已经很明确了 也可不再加以注释 46 在C语言中 选择结构是由if语句和switch语句来实现的 二分支选择结构 多分支选择结构 47 if语句 条件选择语句 if语句的三种形式形式一 格式 if expression statement执行过程 例 if x y printf d x 形式二 格式 if expression statement1elsestatement2执行过程 例 if x y max x elsemax y 48 形式三 格式 if expr1 statement1elseif expr2 statement2elseif expr3 statement3 elsestatementn 执行过程 例 if profit 10000 salary profit 0 25 elseif profit 5000 salary profit 0 20 elseif profit 2000 salary profit 0 15 elseif profit 10000 salary profit 0 10 elsesalary profit 0 00 49 if语句嵌套 一般形式 50 includemain charc printf Enteracharacter c getchar if c 0 判断输入字符种类 运行 Enteracharacter Thecharacterisacontrolcharacter 运行 Enteracharacter 8 Thecharacterisadigit 运行 Enteracharacter D Thecharacterisacapitalletter 运行 Enteracharacter h Thecharacterisalowerletter 运行 Enteracharacter F1 Thecharacterisothercharacter
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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