1、1高中数学 第一章 算法初步 1.2 基本算法语句课堂探究 新人教 B版必修 31两种循环语句的执行原理剖析:(1)for 循环的执行过程:通过 for语句进入循环,将初值赋给循环变量 i,当循环变量的值不超过终值时,则顺序执行循环体内的各个语句,遇到 end,将循环变量增加一个步长的值,再与终值比较,如果仍不超过终值范围,则再次执行循环体,这样重复执行,直到循环变量的值超过终值,则跳出循环温馨提示 只有当循环次数明确时,才能使用本语句步长可以为正、负,但不能是 0,否则会陷入“死循环” 步长为正时,要求终值大于初值,如果终值小于初值,循环将不能执行步长为负时,要求终值必须小于初值for 语句
2、对应的程序框图如下图所示:(2)while语句执行过程:该语句对应于程序框图中的循环结构,先判断条件是否成立,当条件成立时,执行循环体,遇到 end语句时,就返回到 while,继续判断条件,若仍成立,则重复上述过程,若不成立,则去执行 end后面的语句(即退出循环体)温馨提示 当循环次数未知时,只能利用 while循环语句解决累加、累乘问题,循环体结束循环的条件必须是唯一的,若不确定,则无法结束,形成“永不停止”的循环对于循环结束的条件,要注意与“是” “否”后面的处理框相对应while 语句对应的基本框图如图所示:2.Scilab程序语言中常用符号剖析:数学符号 Scilab语言中程序符号
3、(代数运算中的乘法运算符) *(程序里面表示乘法的运算符)(代数运算中的除法运算符) /(程序里面表示除法的运算符)2ab(代数运算中的指数运算符) a b(程序里面表示指数的运算符) (代数中的小于等于符号) (程序里面表示小于等于的符号)(代数中的大于等于符号) (程序里面表示大于等于的符号)(代数中的不等号) (程序里面表示不等于的符号)|x|(代数运算中的取绝对值) abs(x)(程序里面取绝对值的函数)且(逻辑中的“且”运算) and(程序里面表示逻辑中的“且”运算)或(逻辑中的“或”运算) or(程序里面表示逻辑中的“或”运算)【例 1】 读用 Scilab语句编写的程序,根据程序
4、画出程序框图xinput(“x”);yinput(“y”);print(%io(2),x/2);print(%io(2),3*y);xx1;yy1;print(%io(2),x);print(%io(2),y);分析:该程序第 1,2句是 input输入语句,要求从键盘输入 x与 y的值;第 3,4句是print输出语句,要求从屏幕输出 和 3y的值,第 5,6句赋值语句,用 x1 的值代替x2原来 x的值,用 y1 的值代替原来 y的值第 7,8句从屏幕输出 x和 y的值,由此可得程序框图解:3反思 给出程序画框图类的题型,关键是理解程序的功能是什么,然后进行实际操作,在用赋值语句时,可对一
5、个变量重复赋值,变量的值取最后一次的赋值.【例 2】 已知函数 yError!输入 x的值计算 y的值,画出程序框图,并写出程序分析:本题是属于已知分段函数的解析式求函数值的问题本题中分段函数的定义域被分成了三部分,从而在程序中需判定的条件有两个,在使用条件语句时要注意书写顺序及语句间的对应解:程序如下xinput(“x”);if x0y(2* x2)1;elseif x0y2*x1;elsey2*x24endendprint(%io(2),y)程序框图如下图所示:反思 根据本题可画出条件语句的整体书写格式(嵌套式)如下:Error!4【例 3】 用 for语句写出计算 13572 015的值
6、的程序分析:解决这一问题的算法如下:S1 S1;S2 i3;S3 SSi;S4 ii2;S5 如果 i2 015,则执行 S6,否则执行 S3, S4, S5;S6 输出 S.解:程序如下: S 1;for i 3: 2: 2 015S S i;endprint %io 2 , S ;反思 (1)本题中的 S S i是循环体(2)由于是一个累乘问题,如果我们设定 S的初始值为 1, i的初始值为 1,则第二句也可改为 for i1:2:2 015,最后程序的运行结果是一样的(3)注意本程序中分号的作用,如果没有分号,则最后在屏幕上会出现每一步的运行结果;而有分号,则只出现最后的运行结果【例 4
7、】 用循环语句写出求满足 1 10 的最小自然数 n的算法,并写出相12 13 1n应程序分析:本题不等号的左边为 1 ,是有规律的累加运算,故引入累加变量12 13 1nS,而要求 S10 的最小自然数 n,故可用“ while S10”来控制循环,又要引入计数变量 i,通过“ i i1”进行循环解:算法如下:S1 S0;S2 i1;S3 SS ;1iS4 如果 S10,则令 ii1,并返回 S3,否则输出 i.程序如下:S0;i1;S S1/ i;While S105i i1;S S1/ i;endprint(%io(2), i);反思 由于本题中终值预先不清楚,因此才考虑用 while循环,要注意程序与算法一致【例 5】 写出求使 123_2 014 成立的所有正整数的一个程序错解: S1;i1;while S2 014i i1;S S i;endprint(%io(2), i);错因分析:该算法只能输出符合条件的最大正整数加 1后所得的值,故不正确事实上,为了能输出所有符合条件的正整数,必须把“ print(%io(2), i)”移到循环体内正解:解法一:S1;i1;while S2 014print(%io(2), i);i i1;S S i;end解法二:S1;i1;while S2 014i i1;S S i;print(%io(2), i1);6end