第四章程序设计初步 输入语句、复合语句(pg30) 输入语句 在程序中变量获得一个确定的值,固然可以用赋值语句,但是如果需要赋值的变量较多,或变量的值经常变化,则使用本节介绍的输入语句──读语句,将更为方便。读语句是在程序运行时由用户给变量提供数据的一种很灵活的输入动作,它有两种格式: 1、 read(<变量名表>); 2、 readln[(<变量名表>)]; 其中变量名表是用逗号隔开的若干个变量名组成的。 功能:从标准输入文件(即INPUT,一般对应着键盘)中读入数据,并依次赋给相应的变量。
第四章程序设计初步 输入语句、复合语句 说明: ①read和readln是标准过程名,它们是标准标识符。 ②执行到read或readln语句时,系统处于等待状态,等待用户从键盘上输入数据,系统根据变量的数据类型的语法要求判断输入的字符是否合法。如执行read(a)语句,a是整型变量,则输入的字符为数字字符时是合法的,当输入结束时,则自动将刚接受的一串数字字符转换为整数赋给变量a。
第四课 输入语句、复合语句 ③在输入数值型(整型或实型)数据时,数据间要用空格或回车分隔开各个数据,输入足够多个数据,否则仍要继续等待输入,但最后一定要有回车,表示该输入行结束,直到数据足够,该读语句执行结束,程序继续运行。 设a、b、c为整型变量,需将它们的值分别赋以10、20、30,写出对应下列语句的所有可能输入格式。 Read(a,b,c); 根据③,即可列出所有可能输入格式: (a)10□20□30↙ (b)10□20↙ 30↙ (c)10↙ 20□30↙ (d)10↙ 20↙ 其中“↙”表示回车键。 ④read语句与readln语句的第一个区别是:read语句是一个接一个地读数据,在执行完本Read语句(读完本语句中变量所需的数据)后,下一个读语句接着从该数据输入行中继续读数据,也就是说不换行。例如: Read(a,b); Read(c,d); Read(e); 如果输入数据行如下: 1□2□3□4□5□6□↙ 则a、b、c、d、e的值分别为1、2、3、4、5,如果后面无读语句则数据6是多余的,这是允许的。 Readln则不同,在读完本Readln语句中变量所需的数据后, 该数据行中剩余的数据多余无用,或者说,在读完本Readln语句中变量所需数据后,一定要读到一个回车,否则多余的数据无用。 例如: readln(a,b); readln(c); 则对于上述4种输入格式只有(b)(d)是有效的。
第四课 输入语句、复合语句 例3-7 关于输入功能的例子,设有下列语句: read(a,b,c); 例3-7 关于输入功能的例子,设有下列语句: read(a,b,c); readln(d,e); readln; readln(f,g); 其中,所有变量均为整型。再设输入的数据如下: 1□2↙ 3□4□5□6□7□8↙ 9□10↙ 11↙ 12□13↙ 列表给出每个变量的值. ⑤readln语句与read语句的第二个区别是:read 后一定要有参数表,而readln可以不带参数表,即可以没有任何输入项,只是等待读入一个换行符(回车)。经常用于暂停程序的运行,直到输入一个回车。 变量名 A B c D e f g 值 1 2 3 4 5 11 12
第四课 输入语句、复合语句 ⑥为了避免可能出现的错误,建议在程序中按下列原则使用读语句: (A)如果没有特殊需要,在一个程序中尽量避免混合使用read语句和readln语句; (B)尽量用readln语句来输入数据, 一个数据行对应一个readln语句; (C)由于执行read或readln语句时,系统不会提供任何提示信息,因此,编程时最好在readln语句之前加以适当提示,例如: write(‘Input a,b,c:’); readln(a,b,c); 在执行时,屏幕上显示: Input a,b,c:_ 其中,“_”为光标。 执行readln语句后,系统处于待待输入状态,只有输入了所需数据后才继续往下执行。
第四章 输入语句、复合语句 45 BEGIN read (a,b,c); 输入:123(回车) read(x,y,z); abc(回车) 规定 1:输入数据的时候,整型和实型之间用空格隔开,字符之间不能用空格,因为它本身也是字符 2:字符输入之前一定用readln自动换行,否则可能会有意外。 例:分析下面程序结果: PROGRAM READ_TEST; VAR A,B,C:Integer; x,y,z:Char; BEGIN read (a,b,c); read(x,y,z); End. 输入:123(回车) abc(回车) 利用DEBUG中的WATCH,观察X,Y,Z的值,并分析。
复合语句由若干语句组成序列,语句之间用分号“;”隔开,并以begin与end括起来,作为一条语句。 第四课 输入语句、复合语句 例3-8 变量值交换 var a,b,t : integer; begin a := 10; b := 20; writeln(‘a = ',a,‘ b = ’,b); t := a; a := b; b := t; end; readln end. 程序中的复合语句完成变量a,b中值的交换,整个复合语句作为一条语句,程序执行时,按其中语句依序执行,即完成一个复合动作。在本例中当然去除复合语句的begin和end后,结果是一样的。复合语句常用在某些控制语句语法上规定只能是一条语句的情况下。 复合语句 复合语句由若干语句组成序列,语句之间用分号“;”隔开,并以begin与end括起来,作为一条语句。 复合语句的一般形式: begin 语句1; 语句2; … 语句n end
习题 1、用realn语句输入两个四位整数,求出它们相加之和,要求用加法竖式表示。例如: 4357 + 2124 ───── 6481 + 2124 ───── 6481 2、输入两个正整数a、b(a,b<=100000),输出a除以b的商和余数。 3、输入一个字符,输出与其对应的ASCII码。(提示:用ord(x)函数求字符x的ASCII码,例如ord(‘A’)的值为65) 4、已知某梯形的上底A=13,下底B=18,高H=9,求它的面积S。 5、某机关组织游泳比赛。将一堆西瓜分给前三名,把该堆西瓜中的一半又半个西瓜奖给第一名;剩下的一半又半个西瓜给第二名;把最后剩下的一半又半个西瓜给第三名,但每次分时并没切开任何一个西瓜,且刚好西瓜分完。问前三名各分到多少个西瓜?
习题 6、已知三角形三边长为a、b、c,求三角形的面积公式为: s=√p (p-a) (p-b) (p-c) 其中: p=(a+b+c)÷2 7、 写出程序,以摄氏为单位读入温度值,并以华氏为单位将它输出。摄氏——华氏的转换公式是:F= ×C+32. 其中C表示摄氏,F表示华氏。 8、写一程序,读入以秒为单位读入角度,将其转换为度、分、秒(用°、‘、”表示)形式输出。转换关系: 1°=60’ 1’=60” (提示:°、’、”符号的字符转换函数分别为chr(248)、chr(39)、chr(34))
习题 49 1:REAL型变量R的值为18。437 按18。437的形式输出,则语句为———————— 2:CH 为字符型,判断正确: CH:=‘ABCD’ CH:=CHR(ORD(SUCC(‘C’)+1)) CH:=ORD(‘B’)+ORD(‘A’) CH:=PRED(SUCC(SUCC(‘F’))) Writeln(R:6:3)
习题 3:已知a,b,c,d,e都是整形变量,由键盘输入以下三行数据, 4 8 12 能使a=2,b=4,c=8,d=10,e=12的是 Read(a,b);readln(c,c);readln(d,e);
习题 4:求该语句的结果 F:=Trunc(-sqrt(sqr(15 mod 4)*3/(17 div 7))) -3 5:设a,b,c,d 为INTERGER 型 A:=0;b:=0; Read(a,b);readln(c );readln(d); 若从键盘输入 7 6 5 4 3 2 1 则有a,b,c,d中的数是 7,6,5,3
习题 6:输入 1 2 3 4 5 6 7 8 9 可使x,y,z的值分别为1,4,5的是———————— readln(x);read(y);readln(z); 7:变量说明为var s:char;b:boolean;x,y,z:integer; R1,r2:real 判断合法性: S:=‘abc’ z:=r1+r2 b:=x+y+z x:=y/z
习题 7:输入为 A B C 1 2 3 4 5 6 求输出结果 Var a,b,c:char; D,e,f:integer; 4 5 6 求输出结果 Var a,b,c:char; D,e,f:integer; Begin readln; Read(a,b,c); Reaadln(d,e,f); Writeln(a.b.c); Writeln(d:2,e:2.f:2); End.
习题 gec 设有程序: Var a,b,c:char; Begin Readln(a,b,c); Readln(a,b); Writeln(a,b,c) End. 运行以上程序 如果输入为 abc def ghi 则输出是 gec
习题 1 4 8 7:输入为 A B C为INTEGER变量,求输出结果 readA; 若运行时输入 Readln; 1 2 3 Reaadlnb Readc Writeln(a:2,b:2,c:2) 若运行时输入 1 2 3 4 5 6 7 8 9 1 4 8
习题 8:求表达式Trunc(-sqrt(sqr(17 mod 5)*2*(15 div 2)+sqr(1/2))的值———————————— -7 Var a,b,c:char; D,e,f:integer; Begin readln; Read(a,b,c); Reaadln(d,e,f); Writeln(a.b.c); Writeln(d:2,e:2.f:2); End.