C语言第1章程序设计概述.ppt
文本预览下载声明
1.3 算法及其描述 1、 简单算法举例 例2.1 求1×2×3×4×5。 可先写出这样的算法: (1)先求1×2,得到结果2; (2)将步骤1得到的结果再乘以3,得到结果6; (3)将6再乘以4,得到24; (4)将24再乘以5,得到120。 求1×2×3×4×5 上述算法太繁琐,我们找一种通用的表示方法。 S1:设变量p,被乘数,p=1; s2:设变量i,代表乘数,i=2; s3:使p×i,乘积放在被乘数变量p中,可表示为:p× i p; s4:使i的值加1,即i+1 i; s5:如果i不大于5,返回重新执行步骤s3以及其后的s4、s5;否则,算法结束。最后得到的p就是5!的值。 求1×3×5×7×9 ×11 如果题目改为求1×3×5×7×9 ×11。 上述算法稍作改动: s1: 1 ? p; s2: 3 ?i; s3: p ×i ?p; s4: i+2 ?p s5: 若i?11,返回s3;否则,结束。 求1×3×5×7×9 ×11 可以看出,用这种方法表示的算法具有通用性、灵活性。S3到s5 组成一个循环,在实现算法时,要反复多次执行s3、s4、s5等步骤,直到某一时刻,执行s5步骤时经过判断,乘数i已超过规定的数值而不返回s3步骤为止。 计算机实现循环是轻而易举。 求1×3×5×7×9 ×11 请同学们仔细分析循环结束的条件,即s5步骤,如果在求求1×3×5×7×9 ×11时,将s5步骤写成: s5:若I11,返回s3。 这样会有什么问题?会得到什么结果? 例1 有50个学生,要求将他们之中成绩在80分以上者打印出来。 解:用n表示学生学号,n1代表第一个学生学号,ni 代表第i 个学生学号。用g代表学生成绩,gi代表第i个学生成绩,算法表示如下: 例2 S1: 1 ?i; S2: 如果gi?80,则打印ni和gi,否则不打印。 S3: i+1 ?i; S4: 如果i?50,返回s2,继续执行,否则算法结束。 本例中,变量i作为下标,用它来控制序号(第几个学生,第几个成绩)。当 i超过50时,表示已对50个学生的成绩处理完毕,算法结束。 例 3 判断2000年---2500年中的每一年是否闰年,将结果输出。 解:闰年的条件是:(1)能被4整除,但不能被100整除的年份是闰年;如1996,2004年(2)能被100整除,又能被400整除的年份是闰年。如1600,2000年。不符合这两个条件的年份不是闰年。 算法如下:设y为被检测的年份,可采取以下步骤: s1: 2000 ?y; s2: 若y不能被4整除,则输出y “不是闰年”。然后转到s6. S3: 若y能被100整除,又能被400整除,输出y “是闰年”,否则输出“不是闰年”。然后转到s6。 S4: 若y 能被100整除,又能被400整除,输出y “是闰年”,然后转到s6。 S5: 输出 y “不是闰年”。 S6: y+1 ?y; s7: 当y?2500时,转s2继续执行,如y2500,算法停止。 题目:商店结帐,要求将当天100笔收入累加,打印出总和。写出算法: 以上算法计算机重复执行了一些操作,引入计算机“ 循环” 的概念,算法可改写为: (1) 设“ 计数变量” N,使N的初值为零,即N=0; (2) 设“ 累加变量” T,初值为零(T=0); (3) 输入一个数给“ 收入变量” A; (4) 将A和T的值相加,和放在变量T中,即A+T?T; (5)使N的值加1,即N+1 ? N(N的值表示已累加的数据的个数); (6)若N100,则返回(3)继续执行,否则执行(7); (7)打印出总和T的值。 这个算法比上一个简单明确。如果收入不是100笔而是1000笔,只需将(6)中的N100改为N1000即可。 算法中变量T的值是不断改变的,在每次循环中以一个新的值(A+T的原值)代替它的原值,然后再以T的新值作为下一次运算的基础,再求出T的下一次的值,如此一次次地求下去直到达到要求为止,这种方法称为“ 迭代”,即 A+T?T 。T称为迭代变量。 计算机算法的最大特点就是“ 迭代”。利用计算机高速运算的特点,执行多次循环,通过“迭代”实现各种运算。 (1)使S=0(S作为累加变量); (2)使N=1(N代表分母); (3)S+1/N ? S (执行迭代,S为迭代变量); (4)N+1 ? N; (5)若N≤100,转去执行(3)以及其后的各步骤;否则执行(6); (6)打印S的值(即所求之总和)。 2. 算法的描述方法 例如:描述计算并输出z=y/x的流程,可以用自然语言描述如下: (1)输入x,y。 (2)判断x是否为0:
显示全部