[工学]C语言第二章
* 算法的概念 2.1 第二章 算法 2.2 简单算法举例 算法的表示方法 2.4 2.3 算法的特性 许昌学院 结构化程序设计方法 2.5 2.1 算法的概念 所谓算法,就是指为解决特定问题而采取的有限操作步骤。 许昌学院 程序=数据结构+算法 描述问题处理的对象及其关系 描述对问题处理对象的处理规则 完整的程序设计应该是: 数据结构+算法+程序设计方法+语言工具 2.1 算法的概念 广义的说:为解决一个问题而采取的方法和步骤,就称为“算法”。 对同一个问题,可有不同的解题方法和步骤: 比如: 许昌学院 例: 求 方法1:1+2,+3,+4,一直加到100 加99次 方法2:100+(1+99)+(2+98)+…+(49+51)+50 = 100+49×100+50 加51次 2.1 算法的概念 为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量,选择合适的算法。希望方法简单,运算步骤少。 许昌学院 计算机算法可分为两大类别: 数值运算算法:求数值解,例如求方程的根、求函数的定积分等。 非数值运算:包括的面十分广泛,最常见的是用于事务管理领域,例如图书检索、人事管理、行车调度管理等。 2.2 简单算法举例 例2.1: 求1×2×3×4×5 : 步骤1:先求1×2,得到结果2 步骤2:将步骤1得到的乘积2再乘以3,得到结果6 步骤3:将6再乘以4,得24 步骤4:将24再乘以5,得120 如果要求1×2×…×1000,则要写999个步骤 太过于麻烦了。 许昌学院 2.2 简单算法举例 许昌学院 可以设两个变量:一个变量代表被乘数,一个变量代表乘数。不另设变量存放乘积结果,而直接将每一步骤的乘积放在被乘数变量中。设p为被乘数,i为乘数。用循环算法来求结果, 算法可改写: S1:使p=1。 S2:使i=2。 S3:使p×i,乘积仍放在变量p中,可表示为: p×i→p S4:使i的值加1,即i+1→i。 S5:如果i不大于5,返回重新执行步骤S3以及其后的步骤S4和S5;否则,算法结束。最后得到p的值就是5!的值。 2.2 简单算法举例 许昌学院 如果题目改为:求1×3×5×……×11,则算法只需作很少的改动: S1:1→p S2:3 → i S3:p×i → p S4:i+2 → p S5:若i≤11,返回S3。否则,结束。 2.2 简单算法举例 许昌学院 用这种方法表示的算法具有通用性、灵活性。S3到S5组成一个循环,在实现算法时 要反复多次执行S3,S4,S5等步骤,直到某一时刻,执行S5步骤时经过判断,乘数i已超过规定的数值而不返回S3步骤为止。此时算法结束,变量p的值就是所求结果。 2.2 简单算法举例 许昌学院 例2.2 有50个学生,要求将他们之中成绩在80分以上者输出出来。设n表示学号, n1代表第一个学生学号, ni 代表第i个学生学号。用G代表学生成绩 , gi代表第i个学生成绩,算法表示如下: S1:1 → i S2:如果gi >80,则输出ni和gi ,否则不输出。 S3:i+1 → i S4:如果i≤50,返回S2,继续执行。否则算法结束 变量i作为下标,用来控制序号(第几个学生,第几个成绩)。当i超过50时,表示已对50个学生的成绩处理完毕,算法结束。 2.2 简单算法举例 许昌学院 例2.3 判定2000~2500年中的每一年是否闰年,将结果输出。 分析:闰年的条件是: (1)能被4整除,但不能被100整除的年份都是闰年,如1996,2004年是闰年; (2)能被100整除,又能被400整除的年份是闰年。如1600,2000年是闰年。不符合这两个条件的年份不是闰年。 2.2 简单算法举例 许昌学院 设y为被检测的年份,算法可表示如下 : S1:2000 → y S2:若y不能被4整除,则输出y “不是闰年”。然后转到S6。 S3:若y能被4整除,不能被100整除,则输出y “是闰年”。然后转到S6。 S4:若y能被100整除,又能被400整除,输出y“是闰年然后转到S6。 S5: 输出y “不是闰年”。 S6:y+1 → y S7:当y≤2500时,转S2继续执行,如y>2500,算法停止。 2.3 算法的特征 一个算法应该具有以下特点: 有穷性:包含有限的操作步骤。 确定性:算法中的每一个步骤都应当是确定的。 有零个或多个输入:输入是指在执行算法时需要从外界取得必要的信息。 有一个