信息学编程 认识Pascal.docx
《信息学编程 认识Pascal.docx》由会员分享,可在线阅读,更多相关《信息学编程 认识Pascal.docx(27页珍藏版)》请在冰豆网上搜索。
信息学编程认识Pascal
第一章认识Pascal
程序设计听起来是不是很高深莫测啊?
是不是认为我们没有能力做这件事情?
其实它没有那么可怕,只要你真正开始接触它,你说不定就会喜欢上它。
那么,程序到底能为我们做什么事呢?
我们又怎么编写程序呢?
先不要急,首先我告诉你,程序其实就是一些指令,它能指挥计算机按照指令进行处理,但这些指令却是需要我们来编写的。
下面我们来简单介绍一下Pascal语言。
在程序设计领域,存在众多的编程语言,Pascal便是其中一种计算机通用的高级程序设计语言。
我们可以把Pascal想象成一个国家的语言,这个国家的语言可以直接和机器交流,所以我们只要学会这种语言,就可以间接指挥计算机做事了。
我们先来看看Pascal的样子吧。
里面全是英文的?
看不懂?
呵呵,不要紧,下面我们会通过一些小程序来了解它是怎么使用的。
首先先新建一个文件,点击“File”菜单,选择“new”。
接着在里面输入代码吧。
接下来需要做的就是检查程序有无错误,按F9就可以知道错不错了,如果有错误,会有红色标记。
然后保存程序,点击“File”菜单,选择“Save”或“Saveas”,输入文件名,如p1_1.pas,pas是扩展名。
大家可以养成一个习惯,就是文件名和程序名起相同的名字。
最后我们运行程序吧,按Ctrl+F9,程序运行结束了,快看看结果吧,按Alt+F5试试看,看到下面的结果了吧。
其中第一行freepascal是由writeln(‘freepascal’)实现的,第二行的200是由writeln(200)实现的。
及时充电
程序首部
1、pascal程序的固定格式如下:
Program程序名;
Var……
Begin
语句系列;
End.
程序体
说明部分
执行部分
2、write与writeln语句
write与writeln为输出语句。
Write()语句的功能是输出括号中指定的内容,括号中必须要有内容;writeln()语句的功能与前者相似,区别是,在输出括号中的内容后,再换行,writeln语句可以单独出现,不需要括号,功能是换行。
在输出内容时,如果是固定的字符,则需要用单引号引住,例如要输出freepascal,则书写成writeln(‘freepascal’);若要输出的是数值,如200、3.14等,则不需加引号,书写成writeln(300)和writeln(3.14);
例:
要让计算机显示“Iam9yearsold”,语句可写成:
writeln(‘Iam’,9,’yearsold’);
这里将‘Iam’、9、’yearsold’分三项输出,之间用逗号隔开,其中9是数值,可不用单引号,其它两个是字符串,需要用引号。
3、书写规范
一般情况下,每条语句写在一行上面,这样看起来很清楚,每条语句结束需要用分号作为结束标志。
程序名命名规则:
以字母开头,后面可以是字母、数字、下划线。
程序结束的End后面是句号”.”。
展示实力
1、模仿本课的实例p1_1,写一个程序,让计算机在屏幕上按以下格式显示你的个人资料。
(姓名和城市用拼音字母表示)
姓名
年龄
城市
2、输出以下图形:
*
**
***
****
第二章常见函数及输入语句
在计算机中,用一种被称作ASCII码的编码表示每一个字符,这些字符中有我们常见的英文字母及标点符号等。
ASCII值
控制字符
ASCII值
控制字符
ASCII值
控制字符
ASCII值
控制字符
0
NUT
32
(space)
64
@
96
、
1
SOH
33
!
65
A
97
a
2
STX
34
”
66
B
98
b
3
ETX
35
#
67
C
99
c
4
EOT
36
$
68
D
100
d
5
ENQ
37
%
69
E
101
e
6
ACK
38
&
70
F
102
f
7
BEL
39
71
G
103
g
8
BS
40
(
72
H
104
h
9
HT
41
)
73
I
105
i
10
LF
42
*
74
J
106
j
11
VT
43
+
75
K
107
k
12
FF
44
76
L
108
l
13
CR
45
-
77
M
109
m
14
SO
46
.
78
N
110
n
15
SI
47
/
79
O
111
o
16
DLE
48
0
80
P
112
p
17
DCI
49
1
81
Q
113
q
18
DC2
50
2
82
R
114
r
19
DC3
51
3
83
X
115
s
20
DC4
52
4
84
T
116
t
21
NAK
53
5
85
U
117
u
22
SYN
54
6
86
V
118
v
23
TB
55
7
87
W
119
w
24
CAN
56
8
88
X
120
x
25
EM
57
9
89
Y
121
y
26
SUB
58
:
90
Z
122
z
27
ESC
59
;
91
[
123
{
28
FS
60
<
92
/
124
|
29
GS
61
=
93
]
125
}
30
RS
62
>
94
^
126
~
31
US
63
?
95
—
127
DEL
ASCII码是有一定规律的,注意观察表中灰色区域,这些是我们常用的数字、大小写字母。
下面是一些关于字符的常用函数:
1、求字符对应的ASCII码
格式:
ord(字符),字符需要用单引号引住。
例如:
ord(‘D’)、ord(‘3’),其值分别是68和51。
2、求ASCII码对应的字符
格式:
chr(ASCII码)
例如:
chr(98)的值是’b’,chr(57)的值是’9’,注意,这里的’9’是字符,不是数值。
3、求前驱和后继
格式:
pred(字符)、succ(字符)
例如:
pred(‘c’)的值是’b’,succ(‘3’)的值是’4’。
实例演示
【例1】
programp2_1;
程序运行结果:
76
102
121
106
begin
writeln(ord(‘G’)+5);
writeln(ord(‘a’)+5);
writeln(ord(‘t’)+5);
writeln(ord(‘e’)+5);
end.
【例2】
programp2_2;
begin
程序运行结果:
Lfyj
write(chr(ord(‘G’)+5));
write(chr(ord(‘a’)+5));
write(chr(ord(‘t’)+5));
write(chr(ord(‘e’)+5));
end.
4、求字符串长度
格式:
length(字符串),它的功能就是求有多少个字符。
例如:
length(‘Freepascal’)的值是11,length(‘145+12’)的值是6。
5、字符串比大小
字符串比大小时,从第一个字符开始比较,按照字符的ASCII码值来确定大小,例如:
‘free’比’pascal’小——从第一个开始比
’man’比’men’小——当第一个字母相同,从下一个字母开始比
‘windows’比’wind’大——当其中一个字符串是另一个的一部分,字符多的值比较大
【例3】输入长方形的长和宽,输出其面积。
Programp2_3;
Vara,b:
integer;
Begin
readln(a,b);
writeln(a*b);
End.
在var定义部分定义了两个整型变量a和b,readln的功能是从键盘读入数据,输出语句writeln中可以书写运算式子,如这里的a*b。
在运行程序时,输入两个数的时候,中间需要用空格隔开,而不能用逗号。
将上例改成:
Programp2_3;
Vara,b,s:
integer;
Begin
readln(a,b);
s:
=a*b
writeln(s);
End.
:
=读作赋值,它的功能是将:
=后面的运算结果发送到前面的变量中,该例中,s将会存储a和b的乘积。
【例4】输入一个圆的半径,输出该圆的周长及面积。
Programp2_4;
Varr:
integer;
Begin
readln(r);
writeln(2*3.14*r,3.14*r*r);
End.
程序运行时,输入一个半径值,比如是10,观察结果。
这是科学计数法,其中E后面的数代表10的多少次方,比如3.14000E+0002就是表示3.14×102,也就是314。
我们可以给这种科学计数法制定输出格式,只要将程序中的输出部分改成:
writeln(2*3.14*r:
0:
2,3.14*r*r:
0:
2);
结果:
它的含义就是:
总位数:
小数位数,总位数如果比最终结果的位数小,则突破总位数的限制,例如writeln(1356.75492:
5:
3)的结果应该是1356.755;如果总位数比最终结果的位数大,则前面加空格,例如writeln(1356.75492:
10:
3)的结果是1356.755,前面有两个空格,要满足总长度为10。
如果将上例中的输出部分改成writeln(2*3.14*r:
0:
2,3.14*r*r:
10:
2);
输出结果是:
,两数中间有4个空格,想一想为什么。
继续将上例作修改,如下:
Programp2_4;
Varr:
integer;
c,s:
real;
Begin
readln(r);
c:
=2*3.14*r;
s:
=3.14*r*r;
writeln(c,s);
End.
实现的效果是一样的,只不过这里用到了另外两个变量c和s,分别用来存储周长和面积的值,由于周长和面积带有小数,所以采用另一种数据类型real,叫做实型。
6、平方函数
格式:
sqr(x)。
例如sqr(3)的值是9。
7、平方根函数
格式:
sqrt(x)。
例如sqrt(9)的值是3.0000000000E+0001。
8、绝对值函数
格式:
abs(x)。
例如abs(-10)的值是10。
9、截尾函数
格式:
trunc(x)。
功能是截取x的整数部分,如trunc(3.75)的值是3。
10、四舍五入函数
格式:
round(x)。
功能是将x四舍五入得整数,例如round(3.75)的值是4。
11、随机函数
格式:
random。
功能是随机产生一个0~1(不含1)之间的小数。
例如,trunc(10*random)则生成一个0~10(不含10)之间的整数,如果要生成5~
15(不含15)之间的整数,则应写成5+trunc(10*random)。
所以要生成p~q之间的整数,应该写成p+trunc((q-p+1)*random)。
想一想,要随机生成一个三位整数,该怎么写表达式?
及时充电
1、赋值语句
格式:
变量名:
=表达式|变量名;
其中表达式可以是我们数学中的四则运算,如a:
=3*4,那么a中存放了12;如a:
=b,则将b中的数据传递给a,a拥有了和b一样的数据。
2、四则运算
常见的四则运算符有+、-、*、/,在pascal中,除法有以下几种:
(1)a:
=8/4,那么a中的值将会是2.000000000E+0001,也就是实型。
(2)b:
=8div4,b中的值是2,为整型;b:
=8div3,b中的值为2。
div的功能就是求整。
(3)b:
=13mod4,b的值为1,mod的功能是求余数。
(4)所有的四则运算中,需要括号时,均使用小括号。
例如:
a:
=(b+7)/(5*(6+c))
【例5】输入一个两位整数,输出十位与个位数之和。
Programp2_5;
Varx,a,b:
integer;
Begin
readln(x);
a:
=xdiv10;
b:
=xmod10;
writeln(a,’+’,b,’=’,a+b);
End.
【例6】输入两个整数a和b,交换a和b中的值,并输出。
Programp2_6;
Vara,b,c:
integer;
Begin
readln(a,b);
c:
=a;
a:
=b;
b:
=c;
writeln(a,b);
End.
【例7】随机生成100以内的两个正整数,进行加法运算,并输出结果。
Programp2_7;
Vara,b:
integer;
Begin
初始化随机函数
randomize;
a:
=trunc(100*random);
b:
=trunc(100*random);
writeln(a,’+’,b,’=’,a+b);
End.
展示实力
1、模仿本课例3、例4编写程序,要求输入梯形的上底、下底以及高,输出它的面积,要求保留两位小数。
2、模仿例5,输入一个三位整数,输出各位数之和,如输入512,则输出格式为5+1+2=8。
3、随机生成两个二位整数,让计算机来求出它们的和、差、积、商、整数商和余数。
输出样例
38+15=53
38-15=23
38*15=570
38/15=2.53
38div15=2
38mod15=8
第三章条件语句
条件语句的格式:
格式1:
if条件then语句;
格式2:
if条件then语句1else语句2;
条件一般是关系表达式,通常就是判断表达式是否成立,如果成立则执行then后面的语句,如果不成立,则执行else后面的语句,如果没有else语句,则什么都不做。
表达关系时,常用的符号有=、>、<、>=、<=、<>等,注意,此处的=区别于:
=,这里用于判断符号两边的关系。
比如:
判断a是否小于b,则用a
判断a是否大于等于3并且小于等于10,则用(a>=3)and(a<=10),而不能用3<=x<=10。
判断a是否为偶数,则用amod2=0;
判断x是否为小写字母,则用(x>=’a’)and(x<=’z’);
判断x是否为字母,则用(x>=’a’)and(x<=’z’)or(x>=’A’)and(x<=’Z’)
【例1】
programp3_1;
begin
if20<18thenwriteln(‘yes’)elsewriteln(‘no’);
End.
程序会判断20<18是否成立,由于不成立,所以执行else部分,运行结果是:
no
【例2】输入一个整数,如果是偶数则输出’yes’,否则输出’no’。
Programp3_2;
varx:
integer;
Begin
read(x);
ifxmod2=0thenwriteln(‘yes’)elsewriteln(‘no’);
End.
【例3】输入一个字母,如果是小写字母,则输出其大写形式,如果是大写字母,则输出小写形式。
Programp3_3;
varx:
char;
Begin
read(x);
if(x>=’a’)and(x<=’z’)thenwriteln(chr(ord(x)-32))
if(x>=’A’)and(x<=’Z’)thenwriteln(chr(ord(x)+32));
End.
【例4】输入一个小写字母,将其按照字母表顺序向后移动5位,例如输入’a’,则输出’f’;输入’x’,则输出’c’。
Programp3_4;
varx:
char;
Begin
read(x);
if(ord(x)+5>122)then
writeln(chr(ord(x)+5-122+96))
else
writeln(chr(ord(x)+5));
End.
此例中,首先用ord函数算出字符变量x中的ASCII码值,将其加5,判断是否超出字母’z’的ASCII码值122,再由于’a’的编码是97,所以ord(x)+5-122+96的功能是实现按字母表循环。
之前的例子中,then和else部分的语句只有一条,若有很多条语句,则需要用begin和end约束。
如下例:
【例5】输入两个整数a和b,如果a>b,则交换两数,输出a,b的值,实现从小到大排列。
Programp3_5;
vara,b,c:
integer;
Begin
read(a,b);
if(a>b)then
begin
c:
=a;a:
=b;b:
=c;
end;
writeln(a,b);
End.
此例中,当条件满足时,则执行三条语句,实现交换,三条语句用begin和end包住。
在很多情况下,程序的结果并不一定是二选一,有可能有多条出路,怎么编写程序呢?
如下例:
【例6】输入一个学生的成绩,如果在80分以上则输出’A’,如果在60分到80分之间,则输出’B’,如果在60分以下,则输出’C’。
用之前的方法可以用三个if语句实现:
Programp3_6;
varx:
integer;
Begin
read(x);
ifx>=80thenwriteln(‘A’);
if(x>=60)and(x<80)thenwriteln(‘B’);
ifx<60thenwriteln(‘C’);
End.
还可以写成这样:
Programp3_6;
varx:
integer;
Begin
read(x);
ifx>=80then
成绩>=80时执行
writeln(‘A’)
else
ifx>=60then
成绩<80时执行
writeln(‘B’)
else
writeln(‘C’);
End.
在该例中,我们用到了if语句的嵌套,其中第一个else隐含的意思是x<80,所以程序中加粗部分是在成绩<80分的情况下才执行的,在这种情况下,再次判断成绩是否>=60,如果成立则输出’B’,否则输出’C’。
【例7】输入一整数x,如果x<5,则算出x的平方并输出,如果x>=5并且x<10,则将其减去6,如果x>=10,则将x减去20。
Programp3_7;
varx:
integer;
Begin
read(x);
ifx<5thenwriteln(x*x)
else
Ifx<10thenwriteln(x-6)elsewriteln(x-20);
End.
加粗部分是一条语句,不需要加begin和end。
如果分支太多,if语句势必存在很多嵌套,给程序的编写和阅读带来不便,我们可以适用下列语句格式来代替if语句。
Case表达式of
常数表1:
语句1;
常数表2:
语句2;
……;
常数表n:
语句n;
else语句n+1
end;
说明:
①case与end成对出现,不能遗漏。
②表达式的值要与常数表中的值类型相同,且只能是整型、字符型、布尔型等有序数据。
③如果不需要,else及其后面所带的语句可以省略。
④所有常数表中的常数不能相同,常数表中有多个常数时用逗号隔开。
例如:
begin
readln(p);
casep*2of
2,4:
s:
=p*p;
6,8,10:
s:
=p*p*p;
elses:
=p+1
end;
如果输入的是4,则p*2为8,执行s:
=p*p*p,结果为64,存入变量s中。
分析下例的执行过程
【例8】
programp3_8;
varn,m:
integer;
y:
real;
begin
readln(n);
casenmod4of
0,1:
m:
=n+1;
2:
m:
=2*n;
3:
m:
=n*n
end;
y:
=sqrt(m);
writeln(y);
end.
运行时输入18,结果为多少?
【例9】输入任意一个1~5之间的阿拉伯数字,让计算机输出它的英文单词。
Programp3_9;
Varnum:
integer;
Begin
Readln(num);
Casenumof
1:
writeln(‘one’);
2:
writeln(‘two’);
3:
writeln(‘three’);
4:
writeln(‘four’);
5:
writeln(‘five’)
end;
end.
及时充电
1、数据类型
整型integer,数据范围-32768~32767。
实型real,数据范围2.9E-39~1.7E+38。
字符型char。
字符串string,长度不超过255。
长整型longint,数据范围-2147483648~2147483647。
短整型shortint,数据范围-128~127。
2、常量与变量
简单的说,一个具体的数(包括数值、字符、字符串等)就是一个常量,常量在程序执行过程中是不能被改变的,字符和字符串常量必须用一对单引号括住。
例如:
整型常量:
1258、0、2658实型常量:
-256、364.485
字符型常量:
’A’、’j’、’#’字符串常量:
’word’、’Lh129’、’3+6’
在程序中可以改变值的量称作变量。
变量用来存放具体数据。
在程序中必须用var定义才能使用,变量名可由字母、数字、下划线构成,但第一个必须是字母,不能使用pascal中的保留字作为变量名,如real、integer、write等。
3、布尔表达式
①布尔常量:
pascal中用两个布尔常量来表示某件事物的两种状态,用true表示真,用false表示假。
②布尔变量的说明:
格式:
var<变量表>:
boolean;
示例:
varfla,rain:
boolean;
③布尔表达式
a、只比较两个数大小时,用前面提到的>、<等运算符就可以了,属于关系表达式。
比如:
(x+1)>100,(amod2)=0等都是关系表达式,当输入x的值是200时,(x+1)>100的值为true,当输入x的值为50时,(x+1)>100的值为false。
b、将几个条件进行逻辑连接的表达式,叫做逻辑表达式。
例如:
(a>0)and(b>0),(name=’zhang’)or(age>=8)等。
逻辑运算符有三种:
not(非)、and(与)、or(或)
参与and运算的值,要两个同时为true,运算结果才是true,否则是false;参与or运算的值,只要有一个是true,运算结果就是true;not运算只有一个操作数,运算结果是该操作数的相反值。
示例:
trueandfalse的值为false、trueorfalse的值为true
(3<5)and(‘boy’<’girl’)