pascal 教程(完整版)
发布时间:2019-10-06 11:38:38
发布时间:2019-10-06 11:38:38
Pascal笔记
(以下文档为Pascal笔记。可以借鉴复习。不可未经过同 意私自复制、剪切或删除)
目录:
第一天
days 1
基本结构:程序首部、程序体(包括说明部分、执行部分、begin-end)。
在程序基本结构中,执行部分是不能省略的。也就是说,一个程序如果没有执行部分,则此程序就无法执行。
且程序首部书写完毕后,后面需要加分号。必须加!
执行部分是由begin-end.括起来的所有语句。
输出语句执行过程:计算括号内所有表达式的值,然后把表达式的值一个接一个的输出到屏幕上(被单引号(‘ ’)括起来的内容原样输出)。
输出语句格式:
*1:write(输出项1,输出项2,……输出项n);
*2:writeln(输出项1,输出项2,……输出项n);
或:writeln;
write与writeln的区别:
*1:write语句输出完所有的输出项之后不换行,但writeln输出完所有输出项之后自动换行。
*2:write语句必须有输出项,但writeln可以没有输出项,只起到换行的作用。
考点:写程序结果、选择
第二天
days 2
整数是由正号(+)、负号(-)和其他一系列的数字组成的。比如1、32、55、158********、+65、-69都是正规整数(其中,“+”代表正号。就是代表正数的符号。由于平常使用较多,所以正好就不写了,但要认识)。
考点:选择、写输出结果。
实数指带小数点的数,也就是我们平常使用的小数。比如5.632574、3.1415926、-96.3、+641.327455211都是合法的实数。
实数包括正实数,负实数和实数0。
实数的输出还有科学计数法。
科学计数法书写规则:E不当头,E不作尾,E后加整数,E前实数有效。
考点:选择、写输出结果。
场宽类型:单场宽、双场宽
场宽格式:
单场宽:变量名/常量:n1
一般单场宽用于指定整数和字符串的输出格式。
双场宽:变量名/常量:n1:n2
双场宽只能用于指定实数的输出格式。
场宽作用:
场宽可以使输出项按照你想输出的格式来输出。比如你想输出[[34,就可以用“34:4”的格式来输出(“[”代表空格)。
另外,双场宽可以使实数以小数的形式输出,而不是科学计数法的形式。一般来说,输出实数都以两位小数的形式输出,所以双场宽可以定成如下形式:
实型变量名:0:2
(你想输出几位小数,就把n2定成几,n1为0。因为n1的规定位数小于实际位数的话,就原样输出;如果n2的规定位数小于实际位数,就四舍五入到规定位数。这点和n1不同,要注意区分!)
常量指在程序运行过程中其值不会发生改变的量。常量的关系可以用下图表示:
常量的说明格式:const 常量名=表达式;
变量指在程序运行过程中其值可以随时改变的量。变量分为整型变量、实型变量、字符型变量和布尔变量四种。变量的说明格式如下:
整型:变量名1,变量名2,……变量名n:integer;
实型:变量名1,变量名2,……变量名n:real;
字符型:变量名1,变量名2,……变量名n:char;
布尔型:变量名1,变量名2,……变量名n:boolean;
程序中任何一个变量都必须先说明,再赋值,最后使用。否则程序编译会出错。你可以试一试的。
考点:写输出结果。
算数表达式有六种运算符号。分别是+ - * / 和div和mod。
div 和 mod只能用于整数运算。
div是整数除,只留商不留余数。
mod是求余除,只留余数不留商。
div运算的运算规则参照“/”除法运算:正正得正,负负得正,一正一负就是负。得数绝对是整数
mod运算得数绝对是整数。得数的符号取决于被除数。被除数是正数,得数就是正数;被除数是负数,得数就是负数。
算术运算符有
+、-、*、/、div、mod、=、<>、>=、<=
标红的为关系运算符。
算术运算符优先级:
(not、and、or是布尔运算符)
括号-函数-not-*、/、div、mod、and-+、-、or-=、<>、>=、<=
第三天
days 3
给单独的一个变量赋值,或者是改变单独的一个变量的值,可以用赋值语句来执行。
赋值语句格式:
变量名:=表达式;
其中,“:=”代表赋值号。
赋值语句执行过程:
先计算赋值号右边的表达式的值,再把这个值赋值给赋值号左边的变量。
使用赋值语句需要注意的问题:
*1:赋值语句只能把赋值号右边的表达式的值赋值给左边的变量,不能颠倒变量名和表达式的位置。
*2:程序中的任何一个变量都必须先赋值,再使用。
*3:一个赋值语句只能给一个变量赋值。
*4:赋值号右边的表达式必须是一个能计算出值的表达式。
*5:整型变量或常量可以赋值给实型变量,但实型变量或常量不能赋值给整型变量。
正确示范:
a:=1+1; b:=a; b:=a+96; a:=b+6955+a+221;
a:=a+96*8;
错误例子:
a:5; 5:=a; a:=n;(n没有被赋值) a,b,c:=52+69;
考点:写输出结果、判断、选择
用赋值语句给变量赋值有些麻烦,因为一个赋值语句只能给一个变量赋值。如果想让多个变量同时赋值,就要用到输入语句。
输入语句有两种:read和readln。
输入语句格式:
*1:read(变量名1,变量名2,……变量名n);
*2:readln(变量名1,变量名2,……变量名n);
输入语句执行过程:
进入一个输入界面,等待用户输入数据。如果输入的数据少于变量数,则等待输入;如果多于变量数,则多余的数据无用,直接删去。输入完最后一个数据之后必须按一下回车,表示输入完毕。输入的两个数据之间可以用空格分隔,也可以用回车分隔。而且readln语句在读入完自己括号内的所有变量后,必须读到一个回车,否则本行多余的数据无用,直接省略掉,然后强制回车,执行下一条语句。
第四天
days 4
if语句格式:
格式1:if 布尔表达式 then 语句/复合语句;
格式2:if 布尔表达式 then 语句/复合语句 else 语句/复合语句
执行过程:
如果布尔表达式的值为真(true),就执行then后面的语句。如果布尔表达式的值为假,则有以下两种状况:
1:直接执行if语句后面的语句。适用于格式一;
2:执行else后面的语句。适用于格式二。
case 表达式 :
情况1:语句1;
情况2:语句2;
······
情况n:语句n;
else 语句n+1;
end;
执行过程:
判断表达式成立的条件。哪一个条件成立执行那一条语句。
注意:“:”后面如果有多条语句需要用“begin-end”括起来。
例题:
编写一程序,输入一个年份和月份输出这个月份有几天。
源程序如下:
Program qiu_tian_shu;
Var a,s:integer;
Begin
Repeat
Readln(a,b)
Until b<=12;
Case b of
1,3,5,7,8,10,12:s:=31;
4,6,9,11:s:=30;
2:if (a mod 4=0) or (a mod 400=0)and(a mod 100<>0)
then s:=29
else s:=28;
writeln(s);
end.
case语句和if语句的区别:
case语句必须要有明确的情况区分,而if语句如果有多种情况区分就会形成平行结构。
例:
if ......
if ......
if ......
或者利用then-else的分支结构。
第五天
days 5
这一章我们主要学习的是组成程序的三大基本结构中的最后一种:循环结构。
for循环格式:
格式一·递增:
for 初值 to 终值 do
格式二·递减:
for 初值 downto 终值 do
执行过程:
格式一:执行循环体。每执行一次循环体循环控制变量的值+1,也就是初值+1。当初值大于终值时,结束循环。
格式二:执行循环体。每执行一次循环体循环控制变量的值-1,也就是初值-1。当初值小于终值时,结束循环。
使用for循环需要注意的事项:
1 初值和终值可以是表达式,而且初值和终值和循环控制变量的类型必须相同。且仅限于整型和字符型。
2 循环控制变量在循环体内不可以进行赋值操作。
3 循环开始时,初值就超过终值,则程序根本不执行,循环次数为0(在递减循环中,初值如果一开始就比终值小,则不执行,循环次数为0)。
当型循环格式:
While 布尔表达式 do
语句(或复合语句)
执行过程:当while后面的布尔表达式的值为true(真)时,执行do后面的语句,否则退出循环。
使用while语句要注意以下事项:
①循环体可能一次也不执行。因为是否进行循环是在进入循环之前通过测试布尔表达式的值来确定的;若最初的布尔表达式值为False(假),则根本不执行循环体。
②循环体中一定要有能改变布尔表达式值的语句;否则,进入循环体后,由于布尔表达式的值总是True(真),因而循环会一直执行下去,造成“死循环”。
While和for的用法变化:
知道结果求次数用while;
知道次数求结果用for。
格式:
Repeat
语句1;
语句2;
……
语句n;
Until 布尔表达式;
执行过程:执行repeat-until之间的语句序列,执行完最后一条语句之后判断until后面的布尔表达式,若值为假,则继续循环,直到布尔表达式的值为真才结束循环。
另外,在repeat循环中,repeat和until之间如果有多条语句,不需要添加begin-end;。
而且,repeat循环是先执行,后判断,所以即便是第一次判断值就已经是真了,循环体依然会执行1次。也就是说,repeat循环最少执行1次循环体。
Ps:在有多重循环的程序中,循环的总执行次数等于每一个循环的执行次数的乘积。
在学习完三种循环结构之后,我们就可以解决很多实际问题了。在某些程序中,有些地方会用到循环嵌套,这个时候要搞清楚循环和循环之间的执行关系,才可以避免在编译过程中产生错误。
下面是一些经典例题:
1 输入n个数,查找输入的y在不在这n个数中,如果存在,则输出y在这n个数中的序号,不存在就输出“no”。变量m存放y在这n个数中的序号。
2 输入正整数,将其中能把n整除或整除n后余数为x(n<>x)的数输出。
要求:能把n整除的数和整除n后余数为x的数至少各有一个。如果不够则继续输入。
3 输入n个数,当x正好等于最近的一次输入的数时结束程序。
输入要求:先输入x,然后换行再输入n行,每行一个正整数。
输出要求:三行。第一行输出一共输入的正整数的数量(不包括输入的x),第二行输出x,第三行输出x的平方和立方(立方数和平方数之间用空格隔开)。
4 猜数游戏。先由出题者输入答案数,再由猜数者输入猜的数。每人n次机会(n由猜数者自己输入。猜数者觉得自己能用几次猜对就输入几)。当机会耗尽则输出“失败”,如果在机会耗尽前猜对答案数,则输出“成功”,如果正好在最后一次机会猜对,则输出“成功如此巧合”。如果猜数者猜的数和答案数不同,则给予提示(大了输出“>”,小了输出“<”)。
第六天
days 6
在某些题目中,使用整型、实型等标准数据类型是无法解决问题的。比如给你五种颜色的旗帜,让你每次从中选出三种组成序列,问有多少选择方案,那么五种颜色如果都用变量来表示的话,那大家想一想,组成方案该是多么麻烦?而且在编程中,有些地方是有确定的范围的。我们如果超出这个范围我们编程就会产生错误,而且往往还很难发现。那我们这一章就学习一种明确的情况分别类型和范围确定类型——枚举和子界。
枚举值定义格式:
type
枚举类型标识符=(标识符1,标识符2,……标识符n);
枚举类型可以将所有的情况列举出来,对于某些计算机无法直接识别的数据使用枚举类型会更加方便。
使用枚举类型需要注意以下几点:
1 枚举值不能作为变量或常量使用。但是可以把枚举值赋给枚举标识符,俗称“枚举变量”(当然这种叫法是不对的)。
2 枚举值不能用输入语句和输出语句直接进行读写。但是可以使用case语句间接地输入输出。
例如:
type
p=(1,2,3,4,5,6,7);
var a:integer;
……
case a of
1:p:=1;
2:p:=2;
3:p:=3;
……
7:p:=7;
……
case a of
1:write('1');
2:write('2');
3:write('3');
……
7:write('7');
通过这样的方法就可以用case语句来对枚举标识符进行间接地读写操作。
3 在输出枚举值的时候,可以利用一个变量来把枚举值转换成情况来进行输出。
子界的定义:
type
子界类型标识符:下界..上界;
子界可以界定一个范围,如果被定义子界的子界标识符的值超过了下界或上界,程序编译就会发生错误。子界标识符可以用readln、writeln直接进行读写操作,这点和枚举类型不同。子界类型除了实型之外可以是任何类型(枚举型除外)。而且,子界的下界必须小于上界。
子界标识符的类型取决于上下界的类型(上下界的类型必须相同)。例如:a:6..50;由于6和50都是整型,所有子界标识符a的类型就是整型。
在编程中,使用子界类型可以帮助我们避免和检查出许多的错误。比如在使用数组的时候同时使用子界,可以在一定程度上防止数组越界。
第七天
days 7
这一章我们将会学习批量存储数据的类型——数组,还会学习专门批量存储字符型数据的类型——字符串。
一维数组是由只有一个下标的数组元素组成的元素序列。比如a[5],xq[87],只要下标不超出定义数组时所定义的上下界,则该一维数组就是有效的。
一维数组定义格式:
var 数组名:array[下界..上界] of 元素类型;
或:type 数组名=array[下界..上界] of 元素类型;
在定义时元素类型定义的类型是什么,就说明该数组可以存储什么类型的数据。
给一维数组赋值我们通常使用如下格式(下方程序段中的循环控制变量i可以更改成别的变量,但同时方括号中的变量名也要更改成与循环控制变量相同的变量):
Var a:array[1..10] of longint;
……
For i:=1 to 10 do
Readln(a[i]);
在解决许多问题的时候,使用一维数组常常会受到限制,无法表示出数据。所以这个时候我们就要使用二维数组来解决。
二维数组定义格式:
数组名:array[下界1..上界1,下界2..上界2] of元素类型
二维数组的每一个元素都有两个下标,逗号左边的下标叫“行下标”,右边的叫“列下标”。由于有两个下标,所以我们通常都用for的二重循环来为数组赋值。格式如下(数组定义就不写了):
For i:=1 to 100 do
For j:=1 to i do
Readln(i,j);
二维数组通常表示的是表格式的批量数据。在定义数组的上下界时要想清楚到底上下界该定为多少。定少了数组越界可不是闹着玩的。
字符串是专门用来存储字符型数据的,实际上就是变相的字符型数组。不过字符串可以直接被赋值给字符串变量,字符串变量也可以直接通过输出语句输出。
字符串定义格式:
var 字符串标识符:string[最大长度];
如果string后面方括号、最大长度都不写,只写分号,系统默认为该字符串标识符的最大长度为255。255是字符串标识符可定义的最大长度。
所以,a:string[256];就是错误的。
txt:文本文档
doc、docx:Word文档
xls、xlsx:表格文件
ppt、pptx:幻灯片 mp4、avi、flv:视频文件
mp3:音频文件
bmp、png、jpg、jpeg、gif(动图):图片文件
abs:绝对值函数 求自变量的绝对值。
inc:累加函数 自加函数 inc(x,n)=x:=x+n;
inc(x)=x:=x+1
dec:自减函数 同上
trunc:截尾取整函数 设x为2.36,则trunc(x)的值为2
round:四舍五入函数 设x为3.69,则round(x)的值为4
sqr:平方函数 求x的平方
sqrt:平方根函数 求x的平方根
ord:序号函数 求该字符的ascll码
chr:字符函数 求该ascll码对应的字符
pred:前驱函数 求括号内数据的前一项数据
succ:后继函数 求括号内数据的后一项数据
.cn:中国网站
.com:商业化网站
.edu:教育化网站
.gov.cn:政府机构网站
.net:服务器网站
Linux
Windows
Unix
计算机存储单位是字节。
输入设备:键盘,扫描仪,鼠标,摄像头,麦克风
输入设备:显示器,音箱,打印机
一个字节有八个二进制位(bit)。
八个二进制位是一个字节(byte)。
即:
1 byte=8 bit
二进制的进率是2,也就是逢二进一。
空格的ascll码是32
0的ascll码是48
大写A的ascll码是65
大写Z的ascll码是91
小写a的ascll码是97
小写z的ascll码是123
信息技术的简称是IT
多媒体计算机处理的对象是音频,视频,文字,图像。
Emall(地址)的格式:
用户名@服务器名称(.网址后缀)
U盘通过USB接口和电脑交换信息。
信息转换器叫调制解调器。
计算机软件保护法是用来保护计算机软件的著作权。
存储器有两种,一种是ram,一种是rom。
Ram是随机可存储单位。可以随机写入。
计算机病毒的特点:
*1病毒有破坏性。aaaaaaaa
*2 病毒有隐蔽性。
*3 病毒有潜伏性。
*4 病毒有传播性。
Windows xp是窗口化操作系统。它可以多任务图形方式运行。
Windows的第一个32位操作系统是pentium。
CPU(中央处理器)有alu和clu组成。它们分别是算术运算器和逻辑运算器。