INPUT[;][“〈提示字符串〉”{,丨;}]〈变量名1〉[,〈变量名2〉]…
例:
INPUT X,Y
INPUT“N=“;N
INPUT;“A,B,C=“,A,B,C
其中
[;]:任选。有此分号时,当用户输入完数据并回车后,光标仍停留在同一行上。没有此分号,则换行。
〈提示字符串〉:可选。用于说明输入的内容,必须用双引号括起来。
{;丨,}:任选其一,当选择分号时,在显示出提示字符串之后,跟有"?";当选择逗号时,提示字符串之后没有"?"。
程序执行到此语句时暂停执行,屏幕显示“?”(如果语句中选有提示字符串,将原样显示字符串),表示向用户索要准备给变量赋值的数据。这时用户从键盘上输入数据并回车后,变量则被赋值。
该语句的特点是在程序运行中,通过键盘给变量赋值。输入数据的规则是:
(1)对于一个包含有多个变量的INPUT语句,必须在一行将所有数据按变量的个数和排列的顺序依次输入,并用逗号分隔。数据个数多于或少于变量的个数都将产生错误信息:Redo from start,此时用户应重新输入数据。
(2)输入的数据必须与变量的类型一致。
(3)从键盘输入字符串时,不要求用双引号括起来。但是,当字符串本身包含有逗号或空格时,必须用双引号括起来。
(4)最后一个数据项输入完之后必须回车。
[例5-13] 任给三角形的三个边,求三角形的面积。
算法:
先求出三边和的半值:p=(a+b+c)/2
再计算三角形的面积:s=
源程序:
REM EXAMPLE 13
INPUT A,B,C
P=(A+B+C)/2
S=SQR(P*(P-A)*(P-B)*(P-C))
PRINT "A=";A,"B=";B,"C=";C。"S=";S
END
运算结果:
?3,6,2
A=3 B=
显然,用INPUT语句给变量提供数据要比LET语句灵活得多。
[例5-14] 任意输入某一同学的数学、物理、化学3门课的考试成绩,计算平均分。
源程序:
REM EXAMPLE 14
INPUT "MATHFMATICS:",A
INPUT "PHYSICS: ",B
INPUT "CHEMISTRY: ",C
T=(A+B+C)/3
PRINT "AVERAGE:";SPC(5);
PRINT USING"###.##";T
EMD
运行结果:
MATHEMATICS:78
PHYSICS: 90
CHEMISTRY: 86
AVERAGE: 84.67
程序说明:
(1)第2、3、4行语句是有提示字符串的键盘输入语句。能提示用户输入相应的单科成绩。为使输出形式整齐美观,提示字符串用空格补齐长度,且提示字符串后用逗号,执行时不显示“?”。
(2)第6行语句中的SPC(5)也是为了补齐空格,保持字符串等长。该语句最后加有分号,是为了使下一个PRINT USING语句的输出项接在后面。
(3)第7行语句采用了自选格式输出。
请读者仔细理解此程序的提示符设计技巧。
用键盘输入语句给变量赋值,虽然比较灵活,但每次输入时,计算机都处于等待状态,当输入数据较多时,占用时间较长,并且容易出错;用LET语句给一个变量赋值,输入数据多时,语句必然增多,使得程序很长,也不理想。现在,我们再介绍第3种输入数据的方法,即使用读数、置数语句。该方法是把输入数据按顺序放在程序的置数语句中,把被赋值的变量按与数据对应的顺序放在程序的读数语句中。程序运行时计算自动把置数语句中的数据按顺序赋值给读数语句中的变量。
读数语句:READ〈变量名1〉[,〈变量名2〉]…
置数语句:DATA〈数据项1〉[,〈数据项2〉]…
用存放在置数语句中的数据给读数语句中的变量赋值。
[例5-15] 源程序:
REM EXAMPLE 15
READ A,B,C,D
READ E,F,G,H
RPINT A,B,C,D,E,F,G,H
READ X$,X,Y$,Y,Z$,Z
RPINT X$;X,Y$;Y,Z$;Z
DATA -1,8,0,6,4
DATA 3,-5,2
DATA X=,8.26,,,Z=,-4.3
END
(1)在程序中READ与DATA语句必须配合使用。READ语句是执行语句;DATA语句是非执行语句,放在程序中任何位置都可以。习惯上集中放在程序的最后,END语句之前。
(2)无论程序中有多少个DATA语句,计算机都按DATA语句出现的先后顺序,以及在每个DATA语句中数据排列的顺序,依次把每一个数据置于内存贮器的一个数据区中,并设一数据指针,开始时向第一个数据,如图5-3所示。
|
-1 |
8 |
0 |
6 |
4 |
3 |
-5 |
2 |
x= |
8.26 |
|
|
z= |
-4.3 |
图5-3 内存贮器中的数据区
(3)当开始执行READ语句时,指针首先指向第一个数据,将该数据读入第1个变量中,然后指针后移,指向第2个数据,再把第2个数据读入第2个变量中,依此类推,直到所有READ语句中的所有变量被赋值。
(4)由于所有DATA语句中数据的存放是连续的,所以各个READ语句的变量相互之间也都是连续的。因此,数据与被赋值变量的位置顺序与类型要严格对应,但DATA语句与READ语句的个数不必一一对应。如第20行的READ语句中有4个变量,而第70行的DATA语句中只有五个数据。
(5)DATA语句中的数据只能是常量,不允许出现变量、表达式或函数;DATA语句中的字符串常量可以不加双引号,但是,当字符串中包含有空格、逗号等一些特定字符时,应加双引号;DATA语句中允许有空的数据项,如果空项被读入到数值变量中,则变量值为0,如果空项被读入到字符串变量中,则变量为空字符串。
当用READ语句从DATA语句中读出一批数据后,数据指针也跟着移到这批数据的后面。如果需要将这些数据重新再赋值给另外一批变量,按照数据和变量顺序对应规则,应该把这些数据再用DATA语句重写一遍,并接在前一个DATA语句的后面。这样重复写数据非常繁琐。为了简化程序和节省内存,可利用恢复数据区语句。
(1)格式
RESTORE
(2)功能
将数据指针恢得到数据区的初始位置。即重新指向第1个DATA语句中的第1个数据。
[例5-16] 利用RESTORE语句重读数据。源程序:
REM EXAMPLE 16
READ A,B,C
RESTORE
READ P,Q,R
RESTORE
READ U,V,W
PRINT A,B,C,P,Q,R,U,V,W
DATA 7,11,15
END
运行结果:
7 11 15 7 11
15 7 11 15
程序说明:
第2行变量A、B、C读完数据7、11、15之后,第3行的RESTORE语句使数据指针又指向数据7,于是第4行的变量P、Q、R仍读数据7、11、15,如此重复下去。重复使用的数据越多,该语句的优越性就越明显。
[例5-17] “虚读”方法。
有时重复使用的数据并不在数据区的开始位置,也就是需要跳过几个数据再进行重复。这时可使用“虚读”方法,即有意设置一些无意义的变量(称之为虚读变量):去读那些不需要的数据。源程序:
REM EXAMPLE 17
READ A,B,C,D,E
RESTORE
READ Z,Z,P,Q,R
RESTORE
READ U,Z,Z,V,W
PRINT A,B,C,D,E,P,Q,R,U,V,W
DATA 7,11,15,21,30
END
运行结果:
7 11 15 21 30
15 21 30 7 21
程序说明: