c语言程序设计 算法初步

第3讲 算法初步 一、解题方法 二、算法举例---穷举法 三、算法举例---递推与迭代法 四、良好的编程风格 一、解题方法 分析问题,想出策略;自顶向下,逐步求精。 例如,编写一个通讯录程序 通讯录需要存储什么数据?存在什么地方? 程序的功能 输入一个新名字 删除一个名字 显示整个通讯录 搜索一个名字 进入、退出程序等 ……。具体到每一项功能 菜单,将这些功能分类别设计 用计算机解决问题的步骤 分析问题 选择解决方案 编写程序 调试程序 测试程序 数据结构 数据对象:分析所研究问题,提炼出性质相同的数据元素。 对象之间的关系 通讯录数据 用于管理的数据 在此基础上,想出处理的方法---算法 算法 算法是指用计算机解决问题的程序或步骤,这些程序或步骤必须是明确和有效的,而且能够在有限步之内完成。 算法的特征: 确定性 逻辑性 有穷性 用程序流程图描述算法 描述算法的方法有很多 程序流程图:图形化的描述程序执行过程(图是工程师的语言) 使得思想集中于算法设计,不受语言细节干扰 再依据算法,用语言编写程序 程序流程图的图形符号:P60 例:求一元二次方程ax2+bx+c=0 的解

#include #include main( ) { int a, b, c,t; printf( "Input a,b,c:" ); scanf( "%d%d%d", &a, &b, &c ); t = b*b - 4*a*c; if (t<0) printf( "No solution\n" ); else if ( t==0 ) printf( "X = %lf\n", -b/(2.0*a) ); else { double t0; t0 = sqrt( (double)t ); printf( "X1 = %lf, X2= %lf\n", (-b+t0)/(2*a), (-b-t0)/(2*a) ); } }

二、算法举例---穷举法 列出所有可能情况,逐个排查,从中找出符合条件的解。 关键是明确问题所有可能性,注意可能情况是有限的。 用什么基本控制结构? 优点?缺点? 例:判断给定整数是否是素数 问题分析 利用素数的定义来判别。对于给定整数x,用2~x-1之间的每个整数试除,若都不能整除则是素数,否则不是素数。 一次试除成功(不能整除),并不能说明x是素数,只有所有试除都成功,才能断定x是素数;但一次试除失败(能整除),则可断定x不是素数 例:判断给定整数是否是素数 解决方案 数据结构设计 整型变量存储素数:int x ; 算法设计 穷举的范围---循环开始和结束:2~x-1 数据元素的关系---循环的步进:1 逐个排查的过程---循环的内容

:试除 #include main( ) { int x, t; printf( "Enter an integer: " ); scanf( "%d", &x ); for (t = 2; t main( ) { int x, y, z;/* 公鸡、母鸡、小鸡的个数 */ for( x=0; x<=100/5; x++ ) for( y=0; y<=100/3; y++ ) for( z=0; z<=100; z++ )