算法初步 计算机程序,c语言程序设计3(算法初步).ppt

利用计算机求解问题的一般过程 1 问题分析阶段 2 数据结构设计阶段 3 算法设计阶段计算机解题的步骤 4 编码与调试阶段用某种程序设计语言描述的解题算法 计算机程序 第3章计算机算法初步 3 1算法的概念 正确 易读 高效 通用 算法描述 例 求n 即1 2 3 n 设两个变量 p存放乘积 i存放乘数 S1 输入nS2 使p 1S3 使i 2S4 使p i 乘积仍放在变量p中 可表示为p i pS5 使i的值加1 即i 1 iS6 判断i n否 是 输出p 不是 返回S4执行步骤S4以及其后的步骤 P65例1 自学 求解一元二次方程 问题分析假设一元二次方程可以书写成ax2 bx c 0 可以看出 任何一个一元二次方程都由三个系数a b c惟一确定 所以 首先需要用户输入三个系数 然后再根据一元二次方程的求解规则计算最终的结果 并将结果显示输出 算法描述 include includemain inta b c t printf Inputa b c scanf d d d 程序代码 3 2穷举法 概述列举出每一个可能性 逐个进行排查 P67例2 判断给定整数是否是素数 所谓素数是指仅能被1和自身整除 且大于等于2的数值 问题分析为了检查一个整数是不是素数 可以采用穷举法 假设给定的整数用x表示 则判断过程就是确认x不能整除以2 x 1之间的任何整数 这就需要一一列举出2 x 1之间的每个整数进行排查 算法描述 includemain intx t printf Enteraninteger scanf d 程序代码 P69例3 百钱买百鸡 问题分析假设 公鸡x只 母鸡y只 小鸡z只 5x 3y z 3 100 x y z 100公鸡数量在0 100 5母鸡数量在0 100 3小鸡数量在0 100 或 100 x y 有钱百枚 希望买一百只鸡 公鸡5枚钱一只 母鸡3枚钱一只 而小鸡3只1枚钱 试问 如果用百枚钱买百只鸡 可以包含几只公鸡 几只母鸡和几只小鸡 算法描述 include includemain intx y z for x 0 x 100 5 x for y 0 y 100 3 y z 100 x y if 15 x 9 y z 300 printf x d y d z d n x y z 程序代码 递推法与迭代法是基于分步递增方式进行求解的解题方法 递推法的基本方法 其基本策略是将复杂的运算划分为可以重复操作的若干个简单的运算 将解决问题的过程分为若干个步骤 每个步骤都产生一个子解 每个子解都是由前面若干个子解生成的 它们均与问题规模相关 且是相关问题规模的完整解 3 3递推与迭代法 采用递推法进行问题求解的关键在于找出递推公式和边界条件 如 求阶乘的递推公式 n n n 1 边界条件 0 1 迭代法的基本方法 迭代法与递推法类似 也是递增求解 但递推法每步得到的解都是对应问题规模的完整解 而迭代法中间步骤得到的解一般只是 近似解 而不代表子问题的解 例如 计算 问题分析等比数列的递推公式为 itemi itemi 1 ratio后项等于前项乘以比例值sumi sumi 1 itemi前i项之和等于前i 1项之和加当前项由于在重复上述递推计算之前 需要将第1项的值累加到sum中 所以 需要先将item存入sum中 P71例4 等比数列求和 所谓等比数列是指在一组数据中 后项和前项之间存在着一个固定的比例关系 本题要求给定等比序列的首项和比例 计算这个数列的前10项之和 算法描述 includemain longitem ratio sum i printf nEnterthefirstitemandratio scanf ld ld 程序代码 P73例5 求圆周率 可以通过迭代 逐个计算出每一个数据项 再将它们累加起来 为了满足要求的精度 可以通过检查数据项的大小来控制循环的终止 问题分析圆周率 的计算公式为 4 4 3 4 5 4 7 4 9 4 11 在这个数列中 每个数据项的取值与该项的序号存在着一定的关系 算法描述 include includemain intsign 1 longi 1 doublePI 0 0 item do item sign 4 0 2 i 1 sign sign PI item while fabs item 1e 4 数据项精度控制循环 printf PI lf n PI 程序代码 P74例6 按位分解整数 问题分析可以利用程序设计语言提供的整除和求余运算实现将整数分解的目的 例如 对于整数7326 用7326 1000就得到了最高位7 而7326 1000得到了其余的位数326 但是 这种方法要求首先获得整数最高位的权 因此 算法应该先求整数最高位的权 然后从高向低逐个分离出每位数字 要求从键盘输入一个整数 然后将它的每一位分解成独立的数字字符并输出之 算法描述 includemain longx y n printf Enteraninteger scanf ld 程序代码 break语句 break的功能是结束当前语句结构的继续执行 将控制转移到当前语句结构的下一条语句处 应用在循环结构中 可以实现提前结束循环的目的 includemain inti sum for i 1 sum 0 i 1000 break sum i printf n d sum d i sum break与continue语句的应用 continue语句 continue语句只能用在循环结构中 其功能是提前终止本次循环体的执行 转去执行下一次循环 includemain inti sum for i 1 sum 0 i 100 i if i 5 0 continue sum i printf nsum d sum 作业 P77习题1 2 3 4 5 P78上级练习题2P79编程题1 2

展开阅读全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值