第三课 基本语句(一)
§3.1 程序的三种结构
从程序结构化设计的角度来讲,程序可以分成三种基本结构:顺序结构、分支结构和循环结构,在下面结束基本语句中,将进行详细的介绍。
是 A B A 条件 否 条件 B 是 A 否
顺序结构 分支结构 循环结构 §3.2 赋值语句
赋值语句是程序设计中最基本的语句,其作用是计算表达式的值,并把它赋给一个变量。 赋值语句的一般形式:
<变量标识符> : = <表达式>;
其中表达式可以是算术表达式、布尔表达式、字符表达式或集合表达式。
【例】 (1) a := 200; (2) b := a + 30*2; (3) a := a–50;
200 - 50
200 + 30*2 200 200 a a a b
(1) (2) (3)
使用赋值语句,必须注意:
(1) 任何一个变量必须先赋值,然后才能引用。
(2) “:=”称为赋值号,不要与数学上的等号“=”混淆。
(3) 一个赋值语句只能给一个变量赋值,如:a := b:= 3; 或 a , b := 3.1;都是错的! (4) 赋值号右边的表达式必须是一个能够计算出来的值! (5) 赋值号“ : = ”的左边只能是变量,而不允许是表达式,如
– a : = 0; a + b * c : = a * b; 等都是错误的。
(6) 表达式计算值的类型和变量的类型必须是赋值兼容的:
· 变量和表达式的类型相同;
· 变量是实型,而表达式计算结果为整型,反之则不能;
· 变量是长整型,而表达式计算结果为整型,反之则会引起程序出错; §3.3 写语句
输出计算结果,它有两种形式:
write(<项目名表>); writeln(<项目名表>);
<项目名表>是一串逗号分隔的输出项。若输出项为常量或变量,直接输出常量或变量的
值;若输出项为表达式,则先对表达式进行计算,然后输出计算结果;若输出项为字符串,原样输出。
☆ write和writeln的区别:
执行write语句时,是一项接着一项连续地输出,并不换行。
【例】 x := 20; y := 30;
write(x,’+’,y,’=’); { 输出字符或字符串须用单引号
括起 }
write(x + y);
执行上述语句后,在显示屏输出: 20+30=50
执行writeln语句,也是一项接着一项输出,但输完最后一项后自动换行。 【例】 x := 20; y := 30;
writeln(x,’+’,y,’=’); writeln(x + y);
执行上述语句后,在显示屏输出: 20+30= 50
write语句至少必须输出一项内容,writeln语句允许不输出任何内容,仅仅换行。 即:writeln;是合法的,而write;是不合法的。
write或writeln语句可带有参数,其格式取决于变量的类型,现描述如下: ① write(e:n); n为整数表达式。
在n个字符宽的输出域上,以右对齐方式输出。
② write(R:n:m); n、m为整数
以右对齐方式在n个字符宽的输出域上输出R值,其中小数点之后带m个数字。
【例】:下面的例子,说明如何使用参数。
program form;
var r :real; c :char; begin
c := ’a’; r := 3. 5; writeln(c : 6); writeln(r); writeln(r : 9);
writeln(r : 1); writeln(r : 9 : 3); writeln(r : 2 : 3); end. 输出:
a
3 . 5 0 0 0 0 0 0 0 0 0 e + 0 0 3 . 5 0 e + 0 0
3 . 5 0 0
3 . 5 0 e + 0 0 3 . 5 0 0
* 当输入域宽说明n大于输出数据字符数时,输出时左面自动补空格。
* 当输入域宽n小于所要求的字符数时,输出时将自动突破域宽说明限制,按实际字符数输出。 §3.4 读语句
把键盘输入的数据赋给相应的变量。有两种形式的读语句:
read(<变量名表>); readln(<变量名表>);
<变量名表>是一串用逗号隔开的变量标识符。程序运行时,执行到read或readln语句时,系统处于等待状态,等待用户从键盘输入数据。
输入数值型数据时,数据间用空格分隔,然后按回车键,表示输入结束;输入字符型数据时,数据间不能用空格分隔,可以连续输入。当输入项中的变量为多个时,要求输入的数据不能少于其变量个数,若少于变量个数时,系统仍处于等待状态,接着输入的数据无论是换行输入还是不换行输入均有效。
☆ read 和readln的区别:
readln语句与read语句不同之处是依次读入一串数据到相应变量中去后自动换行。当输入的数据多于变量个数时,readln将忽略同一行输入中多余的数据,后面若还有read或readln语句,将从下一行数据读起。而执行read后,多余的数据要么被忽略,要么被下一个read或readln语句读入。 【例】 read(x , y , z);
表示从键盘上输入三个数,并把它们依次存放到变量x,y,z中去。 当输入: 20 30 40 (然后按回车键表示本行数据输完) 其结果为 x=20,y=30,z=40。
这条语句也可以写成以下三个读语句: read(x);read(y);read(z);
【例】 read(a ,b ,c);
readln(i ,j ,k); readln(x ,y); 当输入数据:
1 2 3 4 5 6 7 8 9 10 11 读入结果为:
1 2 3 4 5 ↓ ↓ ↓ ↓ ↓ a b c i j
6 7 8 ↓ k 9 10 11 ↓ ↓ x y
使用读语句要注意几个问题:
(1)输入数据的类型和顺序必须与该读语句中变量的类型和顺序一致。
(2)读语句中的变量不能是布尔类型和枚举类型。
(3)read语句中必须至少有一个变量,而readln语句允许不含变量,其作用是读入一
个回车换行符。即:readln;是合法的,而read;是不合法的。
★(4)整型和实型变量可以共用一个输入语句,但字符型变量不能与整型、实型变量同
时出现在一个read或readln语句中。
§3.5 标准函数和过程的使用
Pascal中预定义了许多标准函数,在P12页附录3中列出了一些常用的函数。函数就是
系统预先做好的一些程序,能进行一些常用的运算,调用它,函数会根据你给的不同参数,进行运算,然后将运算结果返回给你。函数常用于表达式中,如P7页程序中, s:=pi*sqr(r);
下面,再对随机函数的使用做详细的介绍。
请大家把下列程序输入,并运行几次,比较一下运行结果。
var j:real;
begin
j:=random; { random函数产生一个0-1之间的随机小数(不含1),赋给j } writeln(j); {j以指数的形式输出} end.
大家会发现,几次运行的结果都是一样的,这是因为我们产生的随机数是伪随机数,需要进行初始化,否则每次会产生同样的随机序列。请大家在程序中加入一句:
var j:real; begin 加上这句 randomize;
j:=random; writeln(j); end.
这回产生的随机数每次都不同了。注意,不管程序中使用了多少次random函数,randomize只须写一次!我们再将程序改动一下:
var j:integer; { 这里改为整型 } begin randomize;
j:=random(100); { 加上参数100 } writeln(j); end.
这次,将产生一个0到99的随机整数,注意,加上参数后,产生的是整数! “标准过程”也是系统预先编写好的一些程序,能实现某些常用的功能,例如上面例子中的randomize,就是一个标准过程。标准过程的使用和函数不一样,没有返回值,要作为单独的语句使用。
下面再列出几个常用的标准过程:
inc(x) 给变量x加上1,等价于 x:=x+1 inc(x , n) 给变量x加上n,等价于 x:=x+n dec(x) 将变量x减去1,等价于 x:=x-1
dec(x , n) 将变量x减去n,等价于 x:=x-n exit 从子程序中返回 halt 中断程序运行 课后练习三:
1、下面程序是输入三条边长度,根据海伦公式求该三角形面积,阅读程序回答问题。
var x, y, z, p, s : real ; (1) s 是什么类型的变量:_________
begin
readln (x,y,z); (2) 输出结果时保留几位小数:_____ p:=(x+y+z)/2; s:=sqrt(p*(p-x)*(p-y)*(p-z)); (3) 输入:3 4 5 ↙ writeln (s:10:2); end. 输出:___________ 2、阅读程序,回答问题。
var a,b,c,d,e : char ; begin read(a,b,c); read(d,e); writeln(’e=’, e ); end. 3、计算下列表达式的值: x=4,y= –5,z=9
① sqrt(ord(‘K’)– ord(‘B’))= ② sqr(z – abs(y))=
③ (z + 100)mod(round(37 / 3))=
④ 12 / x = 12 div x = ⑤ chr(103)= pred(‘M’)= 4、将下列数学表达式表示成Pascal表达式:
① sin(x + 0.5)+ 3 cos(2x + 4) ② 1?2?
3 若输入: (↙表示按回车)
UFO↙ ET↙
则输出:__________________ 再想想,为什么?
5、请根据要求完善以下程序: 随机产生一个两位整数x;
将x个位和十位的数字调换,形成 一个新的整数y; 再将y加上1; 输出x和y。
var x,a,b,y:integer; begin x:=_______________________; a:=x div 10; b:=x mod 10; y:=_______________________; inc(y); writeln(x , ’ ’, y); end.
广东省汕头市金山中学高中信息技术 pascal教程03 第三课 基本语句(一)教案



