§1.3 基本的算法语句教学目标:1.理解学习基本算法语句的意义;2.理解算法步骤、程序框图和算法语句的关系,学会算法语句的写法;3.学会输入语句、输出语句和赋值语句的基本用法;4.学会条件语句的基本用法;5.学会循环语句的基本用法.教学重点:1.输入语句、输出语句和赋值语句的基本用法;2.条件语句的基本用法;3.循环语句的基本用法.教学难点:1.算法语句的写法;2.程序中条件语句的写法;3.理解两种循环语句的表示方法、结构和用法,程序中循环语句的写法.教学过程:一、引入前面我们学习了程序框图的画法,为了让计算机能够理解算法步骤、程序框图,我们开始学习算法的语句.程序设计语言有很多种.如BASIC,Foxbase,pascal,C语言,C++,J++,VB,VC,JB等.为了实现算法中的三种基本的逻辑结构:顺序结构、条件结构和循环结构,各种程序设计语言中都包含下列基本的算法语句:输入语句、输出语句、赋值语句、条件语句和循环语句.今天,我们一起用类BASIC语言学习输入语句、输出语句、赋值语句、条件语句和循环语句.二、讲授新课(一)输入语句、输出语句和赋值语句1.输入语句(1)格式:INPUT “提示内容”;变量(2)功能:可以一次为一个变量或多个变量赋值,实现算法中的输入功能.(3)说明:①又称“键盘输入语句”,在程序运行过程中,停机等候用户由键盘输入数据,而不需要在写程序时指定;②“提示内容”是提示用户输入什么样的信息,“提示内容”和它后面的“;”可以省略;③程序框图中的输入框转化为算法语句就是输入语句;④一个语句可以给多个变量赋值,中间用“,”分隔;⑤无计算功能;⑥用户由键盘输入的数据必须时常量,输入多个数据时,用“,”分隔,且个数要与变量的个数相同.2.输出语句(1)格式:PRINT “提示内容”;表达式(2)功能:先计算表达式的值,然后输出结果,实现了算法中的输出功能.显示在计算机屏幕上,也就输出信息,可以是常量、变量的值或系统信息.(3)说明:①又称“打印语句”,将表达式的值在屏幕上显示出来;②“提示内容”是提示用户想输出什么样的信息,“提示内容”和它后面的“;”可以省略;③程序框图中的输出框转化为算法语句就是输出语句;④表达式可以是变量、计算公式或系统信息;⑤一个语句可以输出多个表达式,不同的表达式之间用“,”分隔;⑥有计算功能,能直接输出计算公式.3.赋值语句(1)格式:LET 变量=表达式(2)功能:先计算表达式的值,然后吧结果赋值给“=”左边的变量,此步完成后,“=”右边变量的值就改变了.(3)说明:①在程序运行过程中给变量赋值;②赋值语句中“=”叫做赋值号,它和数学中的等号不一样.计算机执行赋值语句时,先计算“=”右边表达式的值,然后把这个值给“=”左边的变量;③“LET”可以省略,“=”的右侧必须是表达式,左侧必须是变量;④一个语句只能给一个变量赋值;⑤有计算功能;⑥将一个变量赋值给另一个变量,前一个变量的值保持不变,可先后给一个变量赋多个不同的值,但变量的去职总是最后被赋予的值.4.用BASIC语言编写计算机程序是由若干语句组成,计算机按语句行排列的顺序一次执行程序中的语句,每个完整的程序最后一行是END语句(又称结束语句)表示程序(二)条件语句 1.格式1 (1)框图(2)格式(3)功能:当计算机执行上述语句时,首先对IF后面的条件进行判断,如果满足条件P,那么执行语句A,否则执行END IF 2.格式2 (1)框图(2)格式(3)功能:当计算机执行上述语句时,首先对IF P,那么执行语句体1,在执行END IF 之后的语句,即结束条件语句;如果不满足条件P,那么执行语句体2,再执行END IF 之后的语句,即结束条件语句.3.两种格式的比较(1)相同点:首先对IF 后的条件进行判断,如果复合条件就执行THEN 后面的语句. (2)不同点:对于“IF —THEN —ELSE ”语句,若不符合条件,则执行ELSE 后面的“语句体2”;对于“IF--THEN ”语句,若不符合条件则直接结束该条件语句,转而执行其他后面的语句.4.程序中的条件语句与程序框图的条件结构存在一一对应的关系.(三)循环语句1.当型(WHILE 型)循环语句 (1)框图(2)格式(3)功能:计算机执行此程序时,遇到WHILE 语句,先判断条件是否成立,如果成立,则执行WHILE 和WEND 直接的循环体;然后返回到WHILE 语句再判断上述条件是否成立,如果成立,再执行循环体,这个过程反复执行,直到一次返回到WHILE 语句判断上述条件不成立为止,这时不再执行循环体,而是跳到WEND 语句后,执行WEND 后面的语句.因此当型循环又称“前测试型”循环,也就是我们经常讲的“先测试后执行”、“先判断后循环”.2.直到型(UNTIL 型)循环语句 (1)框图(2)格式(3)功能:计算机执行UNTIL 语句时,先执行DO 和LOOP UNTIL 之间的循环体,然后判断LOOP UNTIL 后面的条件是否成立,如果条件不成立,返回DO 语句重新执行循环体.这个过程反复执行,知道一次判断LOOP UNTIL 后面的条件成立为止,这时不再返回执行循环体,而是跳出循环体执行LOOP UNTIL 条件下面的语句.因此直到型循环又称“后测试型”循环,也就是我们经常讲的“先执行后测试”、“先循环后判断”.3.两种格式的比较(1)都是反复执行循环体的语句.(2)当型循环语句时先判断后循环,直到型循环语句时先循环后判断. 4.程序中的循环语句与程序框图中的循环结构存在一一对应的关系.(四)编写程序思维步骤1.根据问题设计算法分析(算法的自然语言形式);2.将算法分析转化为程序框图,形象直观地把算法分析描述出来(算法的图形语言形式);3.将程序框图用算法语句表述出来,即逐步把程序框图中的算法步骤用算法语句表达出来,即编写出了程序(算法的符号语言形式).三、典例剖析(一)输入语句、输出语句和赋值语句例1判断下列给出的输入语句、输出语句和赋值语句是否正确?为什么?(1)输入语句 INPUT a;b;c(2)输出语句 A=4(3)赋值语句 3=B(4)赋值语句 A=B=2解: (1)错,比例直接应用“,”分隔;(2)错,PRINT语句不能用赋值号“=”;(3)错,赋值语句中“=”号左右不能互换;(4)错,一个赋值语句只能给一个变量赋值.点评:输入语句、输出语句和赋值语句基本上对应于算法中的顺序结构.输入语句、输出语句和赋值语句都不能包括“控制转移”,由他们组成的程序段必然是顺序结构.例2 请写出下面运算输出的结果.(1) a=5b=3c=(a+b)/2d=c*cPRINT “d=”;d(2) a=1b=2c=a+bb=a+c-bPRINT “a=,b=,c=”;a,b,c(3) a=10b=20c=30a=bb=cc=aPRINT “a=,b=,c=”;a,b,c解:(1)16;语句c=(a+b)/2是将a,b 和的一半赋值给变量c,语句d=c*c 是将c 的平方赋值给d,最后输出d 的值;(2)1,2,3;语句c=a+b 是将a,b 的和赋值给c,语句b=a+c-b 是将a+c-b 的值赋值给了b;(3)20,30,20;经过语句a=b 后a,b,c 的值是20,20,30.经过语句b=c 后a,b,c 的值是20,30,30.经过语句c=a 后a,b,c 的值是20,30,20.点评: 语句的识别问题是一个逆向性思维,一般我们认为我们的学习是从算法步骤(自然语言)至程序框图,再到算法语言(程序).如果将程序摆在我们的面前时,我们要先识别每个语句,在整体把握并概括出程序的功能.例3 用描点法作函数3024323+-+=x x x y 的图象时,需要求出自变量和函数的一组对应值.编写程序,分别计算当5,4,3,2,1,0,1,2,3,4,5-----=x 时的函数值. 解:程序:INPUT “x ”;x y=x^3+3*x^2-24*x+30 PRINT y END例4 编写一个程序,计算一个学生数学,语文,英语三门课的平均成绩. 解:程序:INPUT “Maths=,Chinese=,English=”;a,b,c PRINT “The average=”;(a+b+c)/3 END例5 变换两个变量A 和B 的值,并输出交换前后的值. 解:程序:INPUT A,B PRINT A,B x=A A=B B=x PRINT A,B END例6 已知一个三角形的三边长分别是c b a ,,,它的面积可用海伦—秦九韶公式计算.))()((c p b p a p p S ---=,其中2cb a p ++=.为计算机设计一个算法,输入三角形的三条边长c b a ,,,解:该算法用自然语言表述为Step1:输入三角形三边边长c b a ,,;Step2:计算2cb a p ++=; Step3:计算))()((c p b p a p p S ---=;Step4:输出三角形的面积S . 程序框图为 程序: INPUT a,b,c P=(a+b+c)/2s=SQR(s*(s-a)*(s-b)*(s-c)) PRINT “area=”;s END例7 写出求三个数c b a ,,的方差的程序. 解:程序:INPUT a,b,c d=(a+b+c)/3s=((a-d)^2+(b-d)^2+(c-d)^2)/3 PRINT s END例8 编写一个程序,要求输入两个正数a 和b 的值,输出b a 和ab 的值. 解:程序1:INPUT “a,b:”;a,b A=a^b B=b^aPRINT “a^b=,b^a=”;A,B END程序2:INPUT “a,b:”;a,b A=a^bPRINT “a^b=”;A x=a a=b b=x A=a^bPRINT “b^a=”;A END(二)条件语句例1 分析下面的程序,当输入x 的值为3时,程序的输出结果为________. INPUT x IF x<-1 THEN y=x^2 ELSEIF x<=1 THEN y=0 ELSE y=(-2)^x END IF END IF PRINT y END 答案:8-例2 给出下列程序,如果输入8,26,10--,那么输出的是________. INPUT a,b,c IF a>b THEN a=b END IFIF a>c THEN a=c END IF PRINT a END 答案:26-例3 编写一个程序,求实数x 的绝对值. 解:程序1:INPUT x IF x>=0 THEN PRINT x ELSE PRINT –x END IF END 程序1: INPUT x IF <0 THEN x=-x END IF PRINT x END类型题1: 给计算机编写一个算法,输入一个自变量x 的值,求分段函数⎩⎨⎧<≥+=002)(2x x x x x f 的函数值.解:该算法用自然语言表述为Step1:输入x 的值.Step2:进行判断,如果0≥x ,则2)(+=x x f ,否则2)(x x f =.Step3:输出)(x f 的值.程序框图为 程序: INPUT x IF x>=0 THEN y=x+2 ELSE y=x^2 END IFPRINT “f(x)=”;y END类型题2: 函数⎪⎩⎪⎨⎧<-=>=010001x x x y ,编写一个算法,输入x 的值,输出y 的值. 解:该算法用自然语言表述为Step1:输入x 的值.Step2:进行判断,如果0>x ,则输出1=y ,结束;否则进入Step3. Step3:进行判断,如果0=x ,则输出0=y ,结束;否则输出1-=y ,结束. 程序框图为: 程序1: INPUT x IF x>0 THEN y=1 ELSEIF x=0 THEN y=0 ELSE y=-1 END IF END IF PRINT “y=”;y END 程序1:INPUT x IF x>0 THEN y=1 END IF IF x=0 THEN y=0 END IF IF x<0 THEN y=-1 END IF PRINT “y=”;y END点评: (1)条件结构的差异,造成程序执行的不同.当输入x 的数值时,“程序1”先判断外层条件,依次执行不同的分支,随后再判断内层条件;而“程序2”中执行了对“条件1”的判断,同时也对“条件2”进行判断,是按程序中条件语句的先后依次判断所有的条件,满足哪个条件就执行哪个语句.(2)条件语句的嵌套可多于两层,可以表达算法步骤中的多重限制条件.类型题3 乘坐火车时,可以托运货物,从甲地到乙地,规定每张火车客票托运费计算方法是:行李质量不超过kg 50时按25.0元kg /;超过kg 50而不超过kg 100时,其超过部分按35.0元kg /;超过kg 100时,其超过部分按45.0元kg /.编写程序,输入行李的质量,计算出托运的费用.解:算法分析:数学模型实际上为:y 关于x 的分段函数.关系式为:⎪⎩⎪⎨⎧>-+⨯+⨯≤<-+⨯≤<=100)100(45.05035.05025.010050)50(35.05025.050025.0x x x x x xy , 算法步骤:第一步 输入行李质量x .第二步 当50≤x 时,计算x y 25.0=,否则,执行下一步.第三步 当100≤x 时,计算535.0-=x y ,否则,计算1545.0-=x y . 第四步 输出托运费y . 程序框图为:略程序为: INPUT x IF x<=50 THEN y=0.25*x ELSEIF x<=100 THEN y=0.35*x-5 ELSEy=0.45*x-15 END IF END IF PRINT “y=”;y END例4 判断一元二次函数)0(02≠=++a c bx ax 是否有根. 分析:ac b 42-=∆,当0≥∆时,方程有实根;当0<∆时,方程无实根. 解:该算法用自然语言表述为Step1:输入三个系数c b a ,,. Step2:计算ac b 42-=∆.Step3:判断0≥∆是否成立.若是,则输出“方程有实根”;程序框图为: 程序为:INPUT “a,b,c=”;a,b,c d=b^2-4*a*c IF d>=0 THENPRINT “Have real root ELSEPRINT “No real root ” END IF END变形题1: 设计一个求解一元二次方程)0(02≠=++a c bx ax 的算法,并画出程序框图表示.解:算法:第一步:输入三个系数c b a ,,. 第二步:计算ac b 42-=∆.第三步:判断0≥∆是否成立.若是,则计算;2,2aq a b p ∆=-= 否则,输出“方程无实根”,结束算法.第四步:判断0=∆是否成立,若是,则输出p x x ==21; 否则,计算q p x q p x -=+=21,,并输出21,x x . 程序框图:略 程序为:INPUT “a,b,c=”;a,b,c d=b^2-4*a*c IF d>=0 THEN p=-b/(2*a) q=SQR(d)/(2*a) IF d=0 THENPRINT “x1=x2=”;p ELSEPRINT “x1=,x2=”;p+q,p-q END IF ELSEPRINT “No real root ” END IFEND变式题2: 设计算法,求0=+b ax 的解,并画出流程图. 解:算法:第一步:判断0≠a 是否成立.若成立,输出结果“解为ba-”. 第二步:判断0,0==b a 是否成立.若成立,输出结果“解集为R ”.第三步:判断0,0≠=b a 是否成立.若成立,输出结果“方程无解”,结束算法. 程序框图:略 程序为:INPUT “a,b=”;a,b d=b^2-4*a*c IF a=0 THEN IF b=0 THENPRINT “All real ” ELSEPRINT “No root ” END IF ELSEPRINT “x=”;-b/a END IFEND变式题3: 设计算法,找出输入的三个不等实数c b a ,,的最大值,并画出流程图. 解:算法:第一步:输入c b a ,,的值.第二步:判断b a >是否成立,若成立,则执行第三步;否则执行第四步. 第三步:判断c a >是否成立.若成立,则输出a ,并结束;否则输出c ,并结束. 第四步:判断c b >是否成立,若成立,则输出b ,并结束;否则输出c 并结束. 程序框图:略 程序为: INPUT a,b,c IF a<b THEN a=b END IFIF a<c THEN a=c END IF PRINT END例5 编写一个程序,使任意输入的3个整数按从大到小的顺序输出.解:算法分析:用c b a ,,表示输入的3个整数.为了节约变量,把他们重新排列后,仍用c b a ,,表示,并使c b a ≥≥.具体操作步骤如下:第一步,输入3个整数c b a ,,.第二步,将a 与b 比较,并把小者赋给b ,大者赋给a .第三步,将a 与c 比较,并把小者赋给c ,大者赋给a (此时a 已是三者中最大的). 第四步,将b 与c 比较,并把小者赋给c ,大者赋给b (此时c b a ,,已按从大到小的顺序排列好).第五步,按顺序输出c b a ,,.程序:INPUT “a,b,c=”;a,b,c IF b>a THEN t=a a=b b=t END IF IF c>a THEN t=a a=c c=t END IF IF c>b THEN t=b b=c c=t END IF PRINT a,b,c END(二)循环语句例1 下列程序执行后输出结果为________.i=11S=1DOS=S*ii=i-1LOOP UNTIL i<9PRINT SEND答案:990例2 下列程序输出的结果是( )i=1S=0WHILE i<=4S=S*2+1i=i+1WENDPRINT SENDA.3B.7C.15D.19答案: C例3 已知以下程序,则( )x=-1DOx=x*xLOOP UNTIL x>10PRINT xENDA.输出结果是1B.能执行一次C.能执行10次D.是“死循环”,有语法错误答案: D例7 饿汉吃饼,下面是描述描述一个饿汉吃饼的情况,如果饥饿的话就吃一张饼,直到探究: 找出当型和直到型的区别(1)当型:先判断条件,再执行循环体;直到型:_________________________. (2)当型和直到型的条件_________.(3)当型:满足条件时执行循环体;直到型____________________________. 点评: (1)当型型循环结构在执行循环体之前,对循环条件进行判断,当条件满足时执行循环体,不满足则停止循环,(2)对循环条件进行判断,行循环体,满足则停止循环,后面的步骤.例8 设计一个计算100321++++Λ的算法解:算法如下:第一步:输入n (这里100=n ). 第二步:0=sum ,1=i . 第三步:i sum sum +=.第四步:1+=i i .第五步:如果i 不大于n ,返回第三步;否则,算法结束.最后得到的sum 值就是100321++++Λ的值.程序框图为:点评: 这里我们用的是当型循环结构,那么本题如果用直到型循环结构,其算法又该如何?类型题1: 已知有一列数1,,43,32,21+n nΛ,设计一个算法实现该列数的前20项和. 解:算法如下:第一步:输入n (这里20=n ).第二步:0=sum ,1=i .第三步:1++=i isum sum ,1+=i i . 第四步:如果i 不大于n ,返回第三步;否则,算法结束.最后得到的sum 值就是该列数的前20项和.程序框图为:略类型题2: 设计一个算法计算100642++++Λ. 解:算法如下:第一步:输入n (这里100=n ).第二步:0=sum ,2=i .第三步:i sum sum +=,2+=i i .第四步:如果i 不大于n ,返回第三步;否则,算法结束.最后得到的sum 值就是100642++++Λ的值.程序框图为:略类型题3: 设计一个算法计算2222100321++++Λ. 解:算法如下:第一步:输入n (这里100=n ).第二步:0=sum ,1=i .第三步:2i sum sum +=,1+=i i .第四步:如果i 不大于n ,返回第三步;否则,算法结束.最后得到的sum 值就是2222100321++++Λ的值.程序框图为:略类型题4: 设计一个算法计算632421++++Λ.解:算法如下:第一步:输入n (这里63=n ).第二步:0=sum ,0=i .第三步:isum sum 2+=,1+=i i .第四步:如果i 不大于n ,返回第三步;否则,算法结束.最后得到的sum 值就是632421++++Λ的值.程序框图为:略类型题5: 设计一个算法计算100321⨯⨯⨯⨯Λ. 解:算法如下:第一步:输入n (这里100=n ).第二步:0=sum ,1=i . 第三步:i sum sum ⨯=,1+=i i .第四步:如果i 不大于100,返回第三步;否则,算法结束.最后得到的sum 值就是100321⨯⨯⨯⨯Λ的值.程序框图为:略例9 高中某班一共有40名学生,浙江算法流程图,统计班级学生成绩良好(分数80>)和优秀(分数90>)的人数.分析:用循环结构实现40个成绩的输入,每循环一次就输入一个成绩s ,然后对s 的值进行判断.设两个计数器n m ,,如果90>s ,则1+=m m ,如果80>s ,则1+=n n .设计数器i ,用来控制40个成绩的输入,注意循环条件的确定.解: 略例10 任意给定一个大于1的整数n ,试设计一个算法对n 是否为质数做出判断. 分析:(1)质数是只能被1和自身整除的大于1的整数.(2)要判断一个大于1的整数n 是否为质数,只要根据质数的定义,用比这个整数小的数去除n ,如果它只能被1和本身整除,而不能被其它整数整除,则这个数便是质数.解:算法用自然语言表述为:第一步:判断n 是否等于2.若2=n ,则n 是质数;若2>n ,则执行第二步. 第二步:令2=i .第三步:用i 除n ,得到余数r .第四步:判断0=r 是否成立.若是,则n 不是质数,结束算法;否则,将i 的值增加1,仍用i 表示.第五步:判断1->n i 是否成立.若是,则n 是质数,结束算法;否则,返回第三步. 程序框图为:略说明:本算法是用自然语言的形式描述的.设计算法一定要做到以下要求:(1)写出的算法必须能解决一类问题,并且能够重复使用. (2)要使算法尽量简单、步骤尽量少. (3)要保证算法正确,且计算机能够执行.例11 用二分法设计一个求方程)0(022>=-x x 的近似根的算法. 分析:该算法实质是求2的近似值的一个最基本的方法. 解:设所求近似根与精确解的差的绝对值不超过d ,算法:第一步:令()22-=x x f .因为()()02,01><f f ,所以设2,121==x x .第二步:令221x x m +=,判断)(m f 是否为0.若是,则m 为所求;若否,则继续判断()()m f x f ⋅1大于0还是小于0.第三步:若()()01>⋅m f x f ,则m x =1;否则,令m x =2.第四步:判断d x x <-21是否成立?若是,则21,x x 之间的任意值均为满足条件的近似根;若否,则返回第二步.程序框图为:略例12 写出一个求有限整数序列中的最大值的算法. 解: 算法如下:S1 先假定序列中的第一个整数为“最大值”.S2 将序列中的下一个整数值与“最大值”比较,如果它大于此“最大值”,这时你就假定“最大值”是这个整数. S3 如果序列中还有其他整数,重复S2.S4 在序列中一直到没有可比的数为止,这时假定的“最大值”就是这个序列中的最大值. 程序框图为:略例13 求444344421Λ4104141414个共++++,画出程序框图.分析: 如果采用逐步计算的方法,利用顺序结构来实现,则非常麻烦,由于前后的运算需要重复多次相同的结果,所以应采用循环结构,可用循环结构来实现其中的规律.观察原式中的变化的部分及不变的项,找出总体的规律是x14+,要实现这个规律,需设初值为4解: 算法步骤:第一步 输入10,4==n x第二步 1=i 第三步 xx 14+=,1+=i i 第四步 判断n i ≥是否成立.若成立,则输出x ,结束算法;否则,返回第三步. 程序框图为:略例15 某厂2005年的生产总值为200万元,技术革新后预计以后美年的年生产总值都比上一年增长%5,设计一个程序框图,输出预计年生产总值超过300万元的最早年份.解:算法步骤:第一步 输入2005年的年生产总值200.第二步 计算下一年的年生产总值.第三步 判断所得的结果是否大于300,若是,则输出该年的年份,结束算法; 否则,返回第二步.程序框图为:略。