1.2.1基本算法语句——输入语句、输出语句和赋值语句 【探究新知】我们知道,顺序结构是任何一个算法都离不开的基本结构. 语句n+1 语句n 输入、输出语句和赋值语句基本上对应于算法中的顺序结构. 计算机从上而下按照语句排列的顺序执行这些语句. 输入语句和输出语句分别用来实现算法的输入信息,输出结果的功能. (如右图) 这就是这一节所要研究的主要内容——基本算法语句.今天,我们先一起来学习输入、输出语句和赋值语句. 程序设计语言有很多种.如BASIC,Foxbase,C语言,C++,J++,VB等.为了实现算法中的三种基本的逻辑结构:顺序结构、条件结构和循环结构,各种程序设计语言中都包含下列基本的算法语句: 输入语句 输出语句 赋值语句 条件 语句 循环 语句 输入语句和输出语句分别用来实现算法的输入信息,输出结果的功能. 例1 用描点法作函数y=x3+3x2-24x+30的图象时,需要求出自变量和函数的一组对应值.编写程序,分别计算当x=-5,-4,-3,-2,-1,0,1,2,3,4,5时的函数值. INPUT "x=";x y=x^3+3*x^2-24*x+30PRINT xPRINT yEND 程序: 输入语句 赋值语句 输出语句 输出语句 表示结束 一.输入语句 INPUT "提示内容";变量 输入语句的一般格式 说明:(1)输入语句的作用是实现算法的输入信息功能;(2)"提示内容"提示用户输入什么样的信息,变量是指程序在运行时其值是可以变化的量;(3)输入语句要求输入的值只能是具体的常数,不能是函数、变量或表达式;(4)提示内容与变量之间用分号";"隔开,(5)"提示内容"和它后面的 ";"可以省略;如INPUT "x=";x 或INPUT x 例如,输入一个学生数学,语文,英语三门课的成绩,可以写成: INPUT "数学,语文,英语";a,b,c 注意:INPUT语句还可以给多个变量赋值,变量与变量之间用逗号","隔开.其格式为: INPUT "提示内容1,提示内容2,…";变量1,变量2,… 练一练:1、给定一个任意正整数n.2、给定三角形的三条边长 1 INPUT "n="; n 2 INPUT a, b, c 二.输出语句 PRINT "提示内容";表达式 ①输出常量,变量的值和字符串等系统信息.②输出数值计算的结果. (1)输出语句的用途: 输出语句的一般格式 (3)同输入语句一样,表达式前也可以有"提示内容". 〖思考〗:在课本P7页图1.1-2程序框图中的输出框的内容怎样用输出语句来表达? 参考答案:输出框:PRINT "n是质数.PRINT "n不是质数." 如P9页的输出框 可以转化为输出语句: 输出S PRINT "S="; S 【例题解析】〖例2〗:编写程序,计算一个学生数学、语文、英语三门课的平均成绩. 分析:先写出算法,画出程序框图,再进行编程. 结束 开始 输入a,b,c 输出y 程序框图 程序: INPUT "Maths= ";aINPUT "Chinese= ";bINPUT "English= ";cPRINT "The average= ";(a+b+c)/3END y=(a+b+c)/3 输出y 结束 开始 例2、编写程序,计算一个学生数学、语文、英语三门课的平均成绩. INPUT "a,b,c";a,b,c y=(a+b+c)/3PRINT "y=";yEND 输入a、b、c INPUT "a,b,c";a,b,c PRINT "y=";(a+b+c)/3END 程序2 程序3 三.赋值语句 (1)赋值语句的一般格式: 变量=表达式 (2)作用:先计算出赋值号右边表达式的值,然后把这个值赋给左边的变量,使该变量的值等于表达式的值.(3)赋值语句左边只能是变量名字而不是表达式,如:2=x是错误的;右边表达式可以是一个数据、常量或算式;不能利用赋值语句进行代数式的演算.(如化简、因式分解、解方程等)(4)一个语句只能给一个变量赋值.(5)对于一个变量可以多次赋值,但变量的取值总是最近被赋值的. (1) 错,变量之间应用","号隔开; (2) 错,INPUT语句中只能是变量,而不能是表达式; (3) 错,PRINT语句不能用赋值号"="; (4) 正确 ,PRINT语句可以输出常量、表达式的值; (5) 错,赋值语句中"="号左右不能互换; (6) 错,不能给一个表达式赋值; (7) 错,一个赋值语句只能给一个变量赋值; (8) 正确 ,该句的功能是将当前T的值平方后再赋给变量T. 练习: 练习:读下列两个程序,回答问题. ①X=3 y=4 x=y PRINT x, y END 上述程序最后输出的x ,y 分别是为: ② X=3 y=4 y=x PRINT x, y END 4,4 3,3 返回 三、课后练习1: p.24练习第一题程序 程序:INPUT "F= ";FC=(F-32)*5/9PRINT "C= ";CEND 取余数 MOD 取商 \ <> <= >= 幂运算 ^ 除法运算 / 乘法运算 功能 运算符 * Inx |x| 功能 LOG(x) SQR(x) ABS(x) 注意事项 函数名 BASIC语言中的常用运算符号 〖例3〗:给一个变量重复赋值. 程序: A=10A=A+15PRINT AEND A的输出值是多少? 分析:此程序给变量A赋了两次值.A的初值为10,第二次赋值后,初值被"覆盖",A的值变为25,因此输出值是25. [变式引申]:在此程序的基础上,设计一个程序,要求最后A的输出值是30. A=10A=A+15PRINT AA=A+5PRINT AEND 程序: 〖例3〗:给一个变量重复赋值. 程序: A=10A=A+15PRINT AEND 对于一个变量可以多次赋值,但变量的取值总是最近被赋值的. 〖例4〗交换两个变量A和B的值,并输出交换前后 的值. 分析:引入一个中间变量X,将A的值赋予X,又将B的值赋予A,再将X的值赋予B,从而达到交换A,B的值.(比如交换装满水的两个水桶里的水需要再找一个空桶) INPUT AINPUT BPRINT A,BX=AA=BB=XPRINT A,BEND 程序: 问题:能否用下列赋值语句交换A,B的值? A=BB=A 不能!!!!!! 1:下列给出的输入,输出语句正确的是( ) ①输入语句INPUT a;b;c ②输入语句INPUT x=3③输出语句PRINT A=4④输出语句PRINT 20,3*2 2:当x的值为5时, "PRINT "x=";x"在屏幕上输出的结果是(A: 5=5 B: 5 C: 5=x D: x=5 练习1 INPUT "A,B=";A,BB=A+BA=B-AB=B-APRINT "A,B=";A,BEND(运行时从键盘输入3,7) (1) (2) A=-1000A=A+100PRINT"A=";AEND 将一个变量的值赋给另一个变量,前一个变量的值保持不变;可先后给一个变量赋多个不同的值,但变量的取值总是最近被赋予的值 . A=-900 A,B =7 3 练习2.分析下列程序,考虑输出的结果是什么? (3)a=1 b=a+3 b=b+1 PRINT "b=";b运算结果是 ( b=5 ) (4)a=2 b=3 c=4 b=c+2 c=b+4 d=(a+b+c)/3 PRINT "d=";d 运算结果是( d=6 a=2b=3c=a+bb=a+c-bPRINT "a=,b=,c=";a,b,cEND运算结果是 (5) (6) x=1x=x*2x=x*3x=x*4PRINT x*5END运算结果是 a=2,b=4,c=5 60 三、课后练习2: p.24练习第二题程序 程序:INPUT "a=,b= ";a,bsum=a+bdiff=a-bmul=a*bdiv=a/bPRINT sum,diff,mul,divEND 三、课后练习3: p.24练习第三题程序 程序:INPUT "a= ";aINPUT "b= ";bINPUT "c= ";cp=(a+b+c)/2s=SQR(p*(p-a)*(p-b)*(p-c))PRINT "s= ";sEND 三、课后练习4: p.24练习第四题程序 程序:INPUT "a,b,c= " ;a,b,cx=10.4*ay=15.6*bz=25.2*csum=x+y+zPRINT "sum= ";sumEND 〖练习1〗:编写一个程序,要求输入一个圆的半径,便能输出该圆的周长和面积.( π取3.14) 分析:设圆的半径为R,则圆的周长C=2πR,面积S=πR2,可以利用顺序结构中的INPUT语句,PRINT语句和赋值语句设计程序. INPUT "R=";RC=2*3.14*RS=3.14*R^2PRINT "C=";CPRINT "S="; S END 读下列两个程序语句回答问题. (1)上述两个程序有何区别.(2) 写出两个程序的运行结果; (a)INPUT X INPUT Y X=2009 Y=2008 X=Y PRINT X , Y END (b)INPUT X INPUT Y X=2009 Y=2008 Y=X PRINT X , Y END 能力提升 (a) 2008 2008 (b) 2009 2009 归纳总结 巩固提高 水果店的老板忙极了,小新设计了一个程序帮助老板算账.已知水晶梨2.4元/千克,葡萄8.6元/千克,哈密瓜4.2元/千克,某顾客分别买这三种水果a,b,c 千克.请你将程序补充完整.INPUT A=2.4*a B=8.6*b C=4.2*c S=PRINT END a, b, c A+B+C S 〖练习2〗P20页T1. 程序: INPUT "F=";F C=(F-32) 5/9 PRINT "C=";C END * 〖练习3〗P16页T2. INPUT "a,b(a,b≠0)=";a ,bX=a+bY=a-bZ=a bQ=a/bPRINT X,Y,Z,QEND * 程序: 注:BASIC语言中的标准函数SQR(x),表示数x的算术平方根,ABS(x)表示x的绝对值等. 程序: p=(2+3+4)/2 t=p (p-2) (p-3) (p-4)S=SQR(t)PRINT "S=";S END * * * 〖练习4〗P16页T3. ABS(x)=|x|. INPUT "a,b,c=";a ,b,cX=10.4*aY=15.6*bZ=25.2*csum=X+Y+ZPRINT "sum=";sumEND 程序: 〖作业1〗P16页T4. INPUT "a,b,h=";a ,b,hp=a+bs=p*h/2PRINT "s=";sEND 程序: 〖作业2〗P25页A组T2. 【课堂小结】 (1)本节课介绍了输入语句、输出语句和赋值语句的结构特点及联系.(2)掌握并应用输入语句,输出语句,赋值语句编写一些简单的程序解决数学问题,特别是掌握赋值语句中"="的作用及应用. (3)编程一般的步骤:先写出算法,再进行编程.我们要养成良好的习惯,也有助于数学逻辑思维的形成. 比较下列各组语句的区别,再判断它们是否正确.(1)① 输入语句 INPUT "a=" ;a ② 输入语句 INPUT "a=" ,a √ (2)① 输入语句 INPUT "a,b,c=";a,b;c ② 输入语句 INPUT a,b, c √ "提示内容"与变量之间用分号隔开. "提示内容"与后面的";"可省略. 变量与变量之间用逗号隔开 出PRINT 出出出PRINT PRINT PRINT 比较下列各组语句的区别,再判断它们是否正确.(3)① 输出语句PRINT "S=";7 ② 输出语句PRINT S=7 √ √ 赋值号左边是变量,只能给一个变量赋值. 输入、输出语句中不能用赋值号. (4)① 赋值语句 r=9 ② 赋值语句 9=r ③ 赋值语句 R=r=9 作业: 1.2.2基本算法语句 ——条件语句 算法中的条件结构是由条件语句来表达的, 条件语句是处理条件分支逻辑结构的算法语句 . 条件语句的一般格式 满足条件? 语句 是否只含一个"分支"的条件结构 写成条件语句为 IF 条件 THEN 语句体END IF 当计算机执行这种形式的条件语句时,首先对IF后的条件进行判断,如果条件符合,就执行THEN后的语句体,否则执行END IF之后的语句. 满足条件? 语句1 语句2 是否含两个"分支"的条件结构 写成条件语句为 IF 条件 THEN 语句体1ELSE 语句体2END IF 当计算机执行上述语句时,首先对IF后的条件进行判断,如果条件符合,就执行THEN后的语句体1,否则执行ELSE后的语句体2. 条件语句的作用 在程序执行过程中,根据判断是否满足约定的条件而决定是否需要转换到何处去.需要计算机按条件进行分析、比较、判断,并按判断后的不同情况进行不同的处理. 【例题解析】 〖例1〗:编写程序,输入一元二次方程ax2+bx+c=0的系数,输出它的实数根. 算法分析: 一元二次方程的根有三种不同情况: 设判别式=b2-4ac (1)当>0时,一元二次方程有两个不等的实数根. (2)当=0时,一元二次方程有两个相等的实数根. (3)当<0时,一元二次方程没有实数根. 是 【程序框图】 开始 输入a,b,c =b2-4ac ≥0? 原方程无实根 2 2 结束 否11=0? 输出p 是否x1=p+q x2=p-q 输出x1,x2 【程序】 INPUT " a,b,c =";a,b,c d=b*b-4*a*c IF d>=0 THEN p=-b/(2*a) q=SQR(d)/(2*a) IF d=0 THEN PRINT "One real root:";p ELSE x1=p+q x2=p-q PRINT "Two real roots:";x1,x2 END IFELSE PRINT "No real root!"END IFEND 〖例2〗:编写程序,使得任意输入的3个整数按从大到小的顺序输出. 算法分析:用a,b,c表示输入的3个整数;为了节约变量,把它们重新排列后,仍用a,b,c表示,并使a≥b≥c.具体操作步骤如下.第一步:输入3个整数a,b,c.第二步:将a与b比较,并把小者赋给b,大者赋给a.第三步:将a与c比较. 并把小者赋给c,大者赋给a,此时a已是三者中最大的.第四步:将b与c比较,并把小者赋给c,大者赋给b,此时a,b,c已按从大到小的顺序排列好.第五步:按顺序输出a,b,c. c=b b=t b=t c=t a=c 【程序框图】 开始 输入a,b,c b>a? 是t=a a=b 否c>a? 是t=a 否c>b? t=c 是否输出a,b,c 交换a,b的值 【程序】 INPUT "a,b,c =";a,b,cIF b>a THEN t=a a=b b=tEND IFIF c>a THEN t=a a=c c=tEND IF IF c>b THEN t=b b=c c=tEND IF PRINT a,b,cEND 【课堂小结】 本节课主要学习了条件语句的结构、特点、作用以及用法,并懂得利用它解决一些简单问题.条件语句使程序执行产生的分支,根据不同的条件执行不同的路线,使复杂问题简单化.条件语句一般用在需要对条件进行判断的算法设计中,如判断一个数的正负,确定两个数的大小等问题,还有求分段函数的函数值等,往往要用条件语句,有时甚至要用到条件语句的嵌套. 【课堂练习】 1.课本P29页T2.读程序,说明程序的运行过程. INPUT "x=:";xIF 9
c AND a+c>b AND b+c>a THEN PRINT "Yes."ELSE PRINT "No."END IFEND 参考答案: 3.课本P29页T3.编写求一个数是偶数还是奇数的程序,从键盘输入一个整数,输出该数的奇偶性. INPUT "a="; aIF a MOD 2 =0 THEN PRINT "Even."ELSE PRINT "Odd."END IFEND 参考答案: 4.课本P29页T1.闰年指年份能被4整除但不能被100整除,或者能被400整除的年份.编写一个程序,判断输入的年份是否为闰年. INPUT "Please input a year:";y b=y MOD 4 c=y MOD 100 d=y MOD 400IF b=0 AND c< >0 THEN PRINT "Leap year."ELSEIF d=0 THEN PRINT "Leap year."ELSE PRINT "Not leap year." END IFEND IFEND 参考答案: 表示c≠0 地球绕太阳公转,每年并不是365天,而是多出来5个多个小时,这样的话,每四年就会多将近1天,所以就放在2月的第29天了,闰年由此诞生.由于不是准确地多出来24小时,所以基本上每经过24个闰年就不会多出1天了,但还是会多出几分钟的,如果从公元元年开始计的话正好也就是逢100的年份大多数时候不是不闰年,这样把多出的那几分钟再攒着,经过400年后,就会有一个逢100的年份是闰年,比如公元1600年是闰年,1700、1800、1900年都不是,2000年才是闰年,下一次是2400年5.编写一个程序,输入两个整数a,b,判断a是否能被b整除. INPUT "a,b="; a,bIF a MOD b =0 THEN PRINT "b divides a."ELSE PRINT "b does not divide a."END IFEND 参考答案: 6.(P25页B组T2) INPUT "x=";xIF x<1 THEN y=xELSE IF x>=1 AND x<10 THEN y=2*x-1ELSE y=3*x-11 END IFEND IFPRINT"y=";yEND 参考答案: 1.2.3基本算法语句 ——循环语句 算法中的循环结构是由循环语句来实现的 . 循环结构有两种-----当型与直到型. 满足条件? 循环体 是否当型循环结构(当条件满足时反复执行循环体) 直到型循环结构(反复执行循环体直到条件满足) 循环体 是否满足条件? 对应于程序框图中的两种循环结构,一般程序设计语言中也有当型(WHILE型)和直到型(UNTIL型)两种语句结构. (1)WHILE语句的一般格式是 WHILE 条件 循环体WEND 当计算机遇到WHILE语句时,先判断条件的真假,如果条件符合,就执行WHILE与WEND之间的循环体;然后再检查上述条件,如果条件仍符合,再次执行循环体,这个过程反复进行,直到某一次条件不符合为止.这时,计算机将不执行循环体,直接跳到WEND语句后,接着执行WEND之后的语句. 满足条件? 循环体 是否当型循环结构 WHILE——当……时候 WEND—— 朝……方向行走 (2)UNTIL语句的一般格式是: DO 循环体LOOP UNTIL 条件 循环体 是否满足条件? 直到型循环结构 DO——做什么 LOOP UNTIL——绕环回线走,直到达到某种 条件为止 思考:参照其直到型循环结构对应的程序框图,说说计算机是按怎样的顺序执行UNTIL语句的? 提问:通过对照,大家觉得WHILE型语句与UNTIL型语句之间有什么区别呢? 区别:在WHILE语句中,是当条件满足时执行循环体,而在UNTIL语句中,是当条件不满足时执行循环体. WHILE语句的一般格式 WHILE 条件 循环体WEND UNTIL语句的一般格式 DO 循环体LOOP UNTIL 条件 例1.编写程序,计算自然数1+2+3+…+99+100的和. 分析:这是一个累加问题.我们可以用WHILE型语句,也可以用UNTIL型语句. WHILE语句 开始 结束 i=1 S=0 i=i+1 S=S+i 输出S i≤100? 是否当型循环结构 i=1S=0 WHLIE i<=100 S=S+i i=i+1 WEND PRINT S END UNTIL语句 开始 结束 i=1 S=0 i=i+1 S=S+i 输出S i>100? 否是直到型 i=1S=0 DO S=S+ii=i+1 LOOP UNTIL i>100 PRINT S END 开始 i=1 S=0 i≤100? 是S=S+i i=i+1 否 输出S 结束 当型循环结构 变式训练(1):编写程序求:n!=1*2*3*4*5*……*n的值. 如何修改? 输入n WHILE语句 i=1S=0 WHLIE i<=100 S=S+i i=i+1 WEND PRINT S END INPUT "n=";n S=1 S=S*i i≤n? S=1 n S=S*i 变式训练(2):编写程序求:1*3*5*7*……*101的值. 如何修改? UNITL语句 i=1S=0 DO S=S+i i=i+1 LOOP UNTIL i>100 PRINT S END S=1 101 S=S*i i=i+2 是 开始 结束 i=1 S=0 i=i+1 S=S+i 输出S i>100? 否 直到型 S=1 S=S*i i=i+2 i>101? 例2:根据P7页图1.1-2,将程序框图转化为程序语句. 分析:仔细观察,该程序框图中既有条件结构,又有循环结构. INPUT "n=";ni=2DO r=n MOD i i=i+1LOOP UNTIL i>=n OR r=0IF r=0 THEN PRINT "n is not a prime number."ELSE PRINT "n is a prime number."END IFEND 程序 程序框图 程序 a=1 b=2 e=0.005 DO m=(a+b)/2 f=m^2-2 g=a^2-2 IF g*f>0 THEN a=m ELSE b=m END IF LOOP UNTIL ABS(a-b)0? 程序框图 开始 f(x)=x2-2 输入误差ε和初值a,b a=m 否b=m |a-b|<ε或f(m)=0? 输出m 结束 返回 P33页B组题1 程序框图 程序 INPUT a1,b1,c1,a2,b2,c2 IF a1<>0 THEN u=-a2/a1 b=b2+b1*u c=c2+c1*u y=c/b x=(c2-b2*y)/a2 ELSE y=c1/b1 x=(c2-b2*y)/a2 END IF PRINT x,y END 继续 开始 程序框图 输入a1,b1,c1,a2,b2,c2 a1≠0? 是u=-a2/a1 b=b2+b1u c=c2+c1u y=c/b x=(c2-b2y)/a2 否y=c1/b1 输出x,y 结束 返回