Pascal程序结构Word格式.docx
- 文档编号:17183841
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:16
- 大小:26.72KB
Pascal程序结构Word格式.docx
《Pascal程序结构Word格式.docx》由会员分享,可在线阅读,更多相关《Pascal程序结构Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
打个比方,我们沏功夫茶用的是小茶杯,装饭时用饭碗。
如果用饭碗来泡功夫茶,用小茶杯来装饭,那情形一定很滑稽而且是不可行的。
回到PASCAL中来,赋值号左边变量如果是整型,右边表达式的值的类型也要是整型;
赋值号左边变量如果是字符型,右边表达式的值的类型也要是字符型……否则的话,也要出错了。
这是数据类型相同的情况。
对于数据类型相容的,我们也可以用一个例子来帮助理解。
我们都喝过功夫茶,也喝过大杯茶。
把功夫茶倒在大茶杯里,一般不会出什么问题;
但如果把大杯里的茶倒在功夫茶杯里呢?
可能小茶杯装不下大茶杯里的茶,茶“溢出”了。
在PASCAL中也会出现这种情况。
当一种数据类型的取值范围包含着另一种数据类型的取值范围时,就可能出现类型相容的情况。
如实型与整型,整型、字符型与它们各自的子界类型……如果把整型值赋给实型变量,把整型子界值赋给整型变量,不会出错;
但如果反过来,就会出现“溢出”,出错了。
因些,我们在写赋值语句时,要注意两边的类型是否匹配。
有程序如下:
vara,b:
c:
real;
d:
0..100;
a:
=100;
b:
=a;
{-------------以上是相同数据类型进行赋值}
d:
=d;
c:
=b;
{-------------以上是相容数据类型进行赋值}
=c;
{-------------以上两个赋值语句都出现溢出,编译时出错}
end.
3.2 读语句
读语句(read语句)和赋值语句一样,能够改变变量的值。
与赋值语句不同,读语句从键盘或文件接收值赋予变量,而赋值语句则直接由程序语句获得。
读语句格式如下:
read(变量名表);
readln(变量名表);
readln;
读语句是编程中用得最多的语句之一。
在使用时有几点要注意:
1、变量名表。
写在括号中的变量,都要在变量说明中先预以说明;
变量与变量之间,以“,”分隔;
vara,b:
integer;
read(a,b);
2、从键盘接收数据时,要注意各种不同数据类型数据的分隔符不同。
所谓分隔符就是两个完整的数值之间的标记,也可以这样理解,当计算机从键盘读入数据时,一旦碰到分隔符,就认为当前的数据读入已完成,可以把它赋给相应的变量了。
各种数据类型的分隔符如下:
数值型(包括整型、实型以及它们的子界类型)以空格或回车符作为分隔符;
字符型不需分隔符(因为字符型数据的长度固定,只有一个);
字符串以回车符作为分隔符。
3、注意read与readln的区别
有两段程序有相同的变量说明如下,不同的读语句,我们可以通过比较它们执行结果的异同来理解read与readln的区别。
变量说明
vara,b,c,d:
执行结果
a
b
c
d
程序段一
read(a);
readln(b,c);
read(d);
1
2
3
6
程序段二
readln(a);
read(b,c);
read(d)
7
8
输入数据
12345
678
在程序段一执行时,“read(a);
”语句接收了第一个数据1并将它赋给变量a;
接着执行第二个语句“readln(b,c);
”,接收了第一行数据中的2、3并把它们分别赋给变量b,c,同时,把本行其它数据全部屏蔽掉,也就是宣布它们全部作废。
程序段二的执行情况也是如此。
因此,我们可以得出结论:
语句read只管接收数据,语句readln接收完数据后,还把同行的其它数据全部宣布作废。
4、“readln;
”语句从键盘接收一个回车符。
这个语句通常用在需要暂停的地方。
如输出时用来等待程序员看清结果。
3.3写语句
写(write)语句是Pascal中唯一能将运算结果送出显示在显示器屏幕的语句。
格式如下:
write(输出量表);
{输出后不换行}
writeln(输出量表);
{输出后换行}
writeln;
{输出一个回车符}
使用写语句时也有一些小问题需要注意。
1、输出量可以是:
变量。
输出变量的值。
输出多个变量时,变量间用“,”分隔。
表达式。
输出的是表达式的值。
常量。
直接输出常量值。
2、场宽的限制在输出不同格式的数值时的作用:
例1:
输出多个空格。
write('
'
:
n);
句子的意思是以n个字符宽度输出冒号前数据项,如果数据项长度不足n,则前面以空格补齐;
如果数据项长度大于n,则以实际长度输出。
如上语句句输出n个空格。
例2:
数据项间隔。
如输出最多四位的数据:
write(x:
5)。
则数据间至少分隔一个空格。
例3:
实型数据小数位数的确定。
实型数据不带格式限制时,以科学计数法的形式输出,和我们的一般书写习惯不同。
如果加上场宽的限制,则可以有不同的效果:
vara:
real;
a:
=15/8;
writeln(a);
{输出1.8750000000E+00}
wiiteln(a:
0:
2);
{输出1.88整数部分按实际位数输出,小数部分保留两位小数,末位四舍五入.}
writeln(a:
0):
{输出2只输出整数部分,小数部分四舍五入}
3、“writeln;
”语句通常用于输出多组数据时在屏幕上输出空行来分隔数据组。
4.1IF语句
条件语句用于响应一个条件的两个方面。
例如:
今天如果下雨,我们就在家;
否则(不下雨)我们就去旅游。
又如:
如果已经搜索得到结果,就打印出答案;
否则(还没得到结果)就继续搜索。
IF语句的一般格式是:
IF条件
THEN语句1{条件为真时的响应、处理}
ELSE语句2;
{条件为假时的响应、处理}
使用条件语句时要注意:
1、条件语句是一个语句。
IF、THEN、ELSE都是语句的一个部分。
所以它只能有一个“;
”作为分隔符,放在句子的结束,特别要注意不能放在ELSE之前。
2、如果我们的程序只需对条件为真的情况作出处理,不需要处理条件为假的情况,则IF语句省略ELSE分句,格式变成:
IF条件
THEN语句1;
{条件为真时的响应、处理}
如:
如果数a大于等于0则输出它的平方根。
ifa>
=0thenwriteln(sqrt(a));
对以上的例子,条件为假时不需处理,于是我们干脆省去ELSE分句。
3、if语句可以多层嵌套。
嵌套时为了避免误解,可以用begin,end括起嵌套部分;
else分句一般和最近的if分句配套:
THENBEGIN
if条件1then……else……;
END
ELSEBEGIN
if条件2then……else……;
end;
例1、输入两个数a,b,输出较大的数。
programtt;
pleaseinputa,b:
);
readln(a,b);
ifa>
bthenwriteln(a)
elsewriteln(b);
end.
4.2CASE语句
分情况语句适用于对一个条件的多种情况的响应。
格式:
case表达式of
标号1:
语句1;
标号2:
语句2;
……
标号n:
语句n;
else语句n+1
end;
case语句在使用时有几点要注意:
1.end与case对应;
标号与语句之间用“:
”分隔;
else与语句之间不用分隔符。
2.标号必须是一常量,其类型与表达式的类型一致
某全自动加油站a,b,c三种汽油的单价(元/kg)分别是1.50、1.35和1.18,也提供了“自己加”或“协助加”两个服务等级,这样用户可以得到5%或10%的优惠。
编一个程序,用户输入加油量、汽油品种和服务类型(f-自动,m-自己,e-协助),然后计算应付款。
programpcase1;
var
oil,help:
char;
kg,total:
write('
Entertheamountinkilograms(kg):
readln(kg);
Whichtypeofthegasoline(a,b,c):
readln(oil);
wirte('
Whichtypeforservice(f,m,e):
readln(help);
caseoilof
'
a'
:
total:
=1.50*kg;
b'
=1.35*kg;
c'
=1.18*kg;
elsewriteln('
InputError!
)
end;
{——————处理汽油的类型}
casehelpof
f'
;
m'
=total*(1-0.05);
e'
=total*(1-0.10);
{——————处理服务类型}
writeln;
writeln('
Totalis'
total:
10:
3.可以多个标号对应同一条语句
4.语句可以是多个语句,但必须用语句括号(begin……end)括起
5.case语句也可以嵌套
例3:
从键盘上读入年和月,输出该月有多少天。
programpcase2;
year,month,day:
runnian:
boolean;
Enteryearandmonth:
readln(year,month);
casemonthof
1,3,5,7,8,10,12:
day:
=31;
4,6,9,11:
=30;
{————以上处理31天和30天的情况}
2:
=(yearmod400=0)or((yearmod4=0)and(yearmod100<
>
0));
caserunnianof
true:
=28;
false:
=29;
{————以上处理2月的情况:
闰年28天,平年29天}
5.1For语句
1.递增型FOR循环。
FOR循环控制变量:
=循环初值TO循环终值DO循环的语句(或语段)
FORI:
=5TO10DOWRITELN(I);
输出的结果为:
5678910即循环一共执行了6次
如果要重复多个语句,一定要用BEGIN-END形式:
FORI:
=1TO10DO
BEGIN
WRITELN(I);
WRITELN(10-I);
END;
2.递减型FOR循环
=循环初值DOWNTO循环终值DO循环语句
递减型FOR循环与递增型FOR循环基本相同,只是循环控制变量每次递减。
3.FOR循环的几点注意内容:
(1)循环控制变量必须是顺序类型的变量。
所谓顺序类型的变量,就是指整型,字符型,枚举型,子界型,不允许是实型。
(2)不允许在循环体内再对循环控制变量赋值。
A:
=10;
B:
=50;
FORK:
=ATOBDO
K:
=K+1;
{这一句是错误的!
!
}
WRITELN(K);
(3)当循环初值或循环终值中包含变量时,允许在循环体内改变这些变量的值,但并不改变原定的循环次数。
=1;
=5;
=4;
在上面例子中,A,B的值在循环的内部发生了变化,但并不影响循环的次数,依然是10次。
4.多重循环循环体由PASCAL语句构成,当然也可以包含FOR语句,这就构成了循环的嵌套,形成多重循环。
例如,以下FOR循环输出5行,每行输出10个星号(*)
FORi:
=1to5DO
FORj:
=1TO10DO
Write('
*'
初学者应当特别注意,内层的循环变量不能和外层的循环变量相同。
也就是说,嵌套的各层循环应当使用不同的变量作为循环变量。
5.2While语句
1.WHILE循环的执行形式WHILE布尔表达式DO语句
例如:
k:
WHILEk>
0DO
BEGIN
Writeln(k);
=k-1
END;
其中
(1)WHIlE和DO是PASCAL保留关键字,是WHILE循环语句的组成部分。
(2)保留关键字DO后面的“语法”只能是一条语句,称为“循环体”;
如果循环体中需要包含多个语句则应该如上例所示,采用一条复合语句。
2.WHILE循环的执行功能
当执行到WHILE语句时
(1)求出布尔表达式的值
(2)若布尔表达式的值为真,则执行循环体内的语句;
若为“假”,执行步骤4
(3)重复步骤1和2
(4)循环结束,执行循环后面的语句。
5.3Repeat-Until语句
1.REPEAT-UNTIL类型的循环的执行形式
REPEAT
语句1
语句2
……
语句n
UNTIL布尔表达式
以下循环求n=1+2+3+……+100
n:
=0;
t:
=i;
=n+t;
t:
=t+1;
UNTILt>
100;
其中
(1)REPEAT和UNTIL是PASCAL保留关键字。
(2)在REPEAT和UNTIL之间的语句构成循环。
在它们之间可以有任意多个语句,这一点和FOR,WHILE循环不同,FOR,WHILE循环体在语法上只允许一条语句。
2.REPEAT-UNTIL循环的执行功能
(1)遇到REPEAT语句后,即进入循环体,顺序执行循环体内的语句。
(2)遇到UNTIL语句后,求布尔表达式的值。
若值为假,则返回步骤1;
若为“真”,执行步骤3
(3)循环结束,执行UNTIL后面的下一条语句。
6.1一维数组
1、定义:
a:
array[1..10]ofinteger;
其中:
a是这一批数据的名称,称为数组名;
array、of是定义数组的保留字;
中括号中的数字是数据编号的下限和上限,财时也说明了数据的个数(上限-下限);
最后一个是数据的基类型,如integer,char,real,boolean。
2、数组元素的输入:
数组名代表的并不是一个变量,而是一批变量,因而,不能直接整个数组读入,而是要逐个数组元素读入,通常用循环结构来完成这一功能。
下面是几个常用输入数组元素的例子:
fori:
=1to10doread(a[i]);
{————从键盘读入数组元素的值;
最常用的方法}
=1to10doa[i]:
{————数组元素a[1]到a[10]的值分别为1到10;
数据赋初值}
{————数组元素清0;
最常用的数据初始化的方法}
=random(100);
{————随机产生10个100以内的数,赋给各数组元素}
3、数组元素的输出:
和数组元素的输入相同,数组元素的输出也不能由一个write语句直接完成。
同样要逐个数组元素输出。
通常也用循环结构来完成这一功能:
=1to10dowrite(a[i],'
{————数组元素之间用空格分隔}
writeln;
4、数组的应用:
从键盘输入10个数,将这10个数逆序输入,并求这10个数的和,输出这个和。
programp1;
i,s:
fori:
=10downto1dowrite(a[i],'
s:
=1to10dos:
=s+a[i];
writeln('
s='
s);
用筛法求100以内的素数(质数)。
分析:
素数是除了1和它本身以外没有其它约数的数。
用筛法求素数的方法是:
用质数筛去合数:
从第一个素数2开始,把它的倍数去掉;
这样2以后的第一个非0数就一定也是素数,把它的倍数也删了……重复这个删数过程,直到在所找到的素数后再也找不到一个非0数。
把所有非0数输出。
programp2;
array[1..100]ofinteger;
i,j,k:
=1to100doa[i]:
a[1]:
i:
=2;
whilei<
=100do
begin
whilek<
=k+i;
a[k]:
{————上面将所有a[i]的倍数清0}
i:
=i+1;
whilea[i]=0doi:
{————查找接下来的第一个非0数}
=1to100doifa[i]<
0thenwrite(a[i],'
6.2二维数组
一维数组在编程中多用于描述线性的关系:
如一组数;
一组成绩;
一组解答等。
数组元素只有一个下标,表明该元素在数组中的位置。
二维数组在编程中多数用于描述二维的关系:
如地图、棋盘、城市街道、迷宫等等。
而二维数组元素有两个下标:
第一个下标表示该元素在第几行,第二个下标表示在第几列。
1.二维数组的定义:
array[1..10,1..5]ofinteger;
其中:
a是数组名,由程序员自定;
array和of是定义数组的保留字;
(这两点和一维数组定义的格式一样)中括号中的两个范围表示二维数组共有多少行、多少列(第一个范围表示行数,第二个范围表示列数);
最后一个表示数组元素的类型,规定和一维数组一样。
如上例,定义了一个二维数组a,共有10行5列。
2.使用二维数组:
1、数组元素的指称:
数组名[行号,列号]。
如第三行第四个元素:
a[3,4]。
对某一行进行处理。
如累加第4行的数据。
则固定行号为4。
=1to5dos:
=s+a[4,i];
对某一列进行处理。
如累加第4列的数据。
则固定列号为4。
=s+a[i,4];
2、二维数组的输入输出要用双重循环来控制:
=1to10do{————控制行数}
forj:
=1to5doread(a[i,j]){————第一行读入5个元素}
readln;
{————读入一个换行符}
{————最常用的方法:
从键盘读入数据初始化二维数组}
=1to10do
forj:
=1to5doa[i,j]:
将二维数组清0}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Pascal 程序结构