Pascal程序结构Word格式.docx

上传人:b****6 文档编号:17183841 上传时间:2022-11-28 格式:DOCX 页数:16 大小:26.72KB
下载 相关 举报
Pascal程序结构Word格式.docx_第1页
第1页 / 共16页
Pascal程序结构Word格式.docx_第2页
第2页 / 共16页
Pascal程序结构Word格式.docx_第3页
第3页 / 共16页
Pascal程序结构Word格式.docx_第4页
第4页 / 共16页
Pascal程序结构Word格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

Pascal程序结构Word格式.docx

《Pascal程序结构Word格式.docx》由会员分享,可在线阅读,更多相关《Pascal程序结构Word格式.docx(16页珍藏版)》请在冰豆网上搜索。

Pascal程序结构Word格式.docx

打个比方,我们沏功夫茶用的是小茶杯,装饭时用饭碗。

如果用饭碗来泡功夫茶,用小茶杯来装饭,那情形一定很滑稽而且是不可行的。

回到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模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1