Pascal基础知识复习(一)

内容:标准数据类型、基本运算符、基本语句、数组、字符串、常用标准函数或过程、记录

1标准数据类型:

整数

类 型

单 词

范  围

分配的空间

短整数

Shortint

-128..127

1个字节

整 数

Integer

-32768..32767

2个字节

长整数

Longint

-2147483648..2147483647

4个字节

字节型

Byte

0..255

1个字节

字 型

Word

0..65535

2个字节

FP中Dword类型

Dword

0..4294967295

4个字节

FP中Qword类型

Qword

0..18446744073709551615

8个字节

FP中Int64类型

Int64

-9223372036854775808.. 9223372036854775807

8字节

 

、实数类型:

   Pascal中有以下几种实数类型:(其中后4种必须用{$Sn+}编译才可用)

类型

单词

范围

有效数字

分配的空间

基本实数类型

Real

2.9×10-39—1.7×1038

11—12

6

单精度

Single

1.5×10-45—3.4×1038

7—8

4

双精度

double

5.0×10-324—1.7×10308

15­—16

8

扩展型

extended

1.9×10-4951—1.1×104932

19—20

10

装配十进制型

comp

-9.2×1018—9.2×1018

19—20

 

 

、字符类型(Char)

字符类型对应一个英文字符、数字、符号等字符,在Pascal中为其分配1个字节的空间,每一字符对应一个编号,我们称之为ASCII码(美国国家标准信息交换码),我们可以用函数Ord( )来求出某个字符的ASCII码,如:

Ord(’A’)=65,Ord(’B’)=66,……,Ord(’Z’)=90。

Ord(’a’)=97,Ord(’b’)=98,……,Ord(’z’)=122

Ord(’0’)=48,Ord(’1’)=49,……,Ord(’9’)=57

我们也可以用函数Chr( )来求出某个ASCII码对应的字符,如:

Chr(65)= ’ A’,Chr(66)= ’B’……,

由此可以看出:Chr与Ord是两个互逆运算:如:

Chr(Ord(’1’))= ’1’     ord(chr(99))=99

若要将小写字母’y’转换成大写字母,我们可以Chr(ord(’y’)+32)实现;也可以用函数Upcase( )来实现:Upcase(’y’)=’Y’。

、布尔类型(Boolean

布尔类型表示一种判断的结果,其值只有True(正确)和 False(错误)两个,如5>3的判断结果是True,而3>5的判断结果是False。

在Pascal中规定:Ord(false)=0ord(true)=0;

 

 

2、基本运算符

数学运算:   +、-、*、/ 、Div、Mod;

   布尔运算:   Not、And、Or;

   关系运算符: =、<>、>、<、>=、<=

这些运算符优先顺序规则是:

       I 括号内的表达式先计算

       II运算符的优先级有4级,排列如下

           最高级 Not

第一级 * 、/、div、 mod、 and

第二级 + 、-、 or

第三级 =、<>、>、<、>=、<=

   根据上面运算符的顺序,请写出下列表达式的值:

not 5>3=                27+8 div 3 =7-6 mod 4=               

   思考题:

5 and 3=               7 or 0=               

 

   

3、基本语句:

   输入语句:Read和Readln

格式:Read(x1,x2,…,xn); 或Readln(x1,x2,…,xn);

功能:从输入文件中(即Input)中读入数据,如果没有特别地用过程Assign将Input指明具体的用户输入文件时,Input就是“键盘”。

注意:一次读入多个数据时,数据之间用空格隔开,但字符类型则字符见不用空格;

      readln语句后可不跟变量,表示输入任意键或者换一行;

      readln语句输入完后,自动跳到下一行行首,后面的输入语句从下一行行首开始读数据;

例如:给整型变量x,y,z输入值。

程序1:从键盘输入

程序2:从文件data.in中输入

Var x,y,z:Integer;

Begin

Readln(x,y,z);

End.

缺省的输入文件是键盘

Var x,y,z:integer;

Begin

 Assign(input,’data.in’);{指明从其他文件读}

reset(input);             {读方式}

 Readln(x,y,z);            {读数据}

 Close(input);             {关闭文件}

End.

 

 

  输出语句: write和writeln

格式:write(V1,V2,…,Vn); 或writeln(V1,V2,…,Vn);

功能:将括号中的实际内容写到标准文件(Output)中,如果没有特别地用过程Assign将output指明具体的用户输入文件时,Output就是“显示器的屏幕”。

注意:如果是变量或表达式,则应输出他们的值,如果是常量或字符串,则照原样输出。

      Write语句输出后光标不换行,writeln语句输出后,光标换一行,writeln语句后可不跟仁任何内容,表示输出一个换行符。

      可以用场宽来控制输出的位置:

      单场宽:假设变量a=56;则语句write(a:8)和 语句write(a:1)分别输出为:

              □□□□□□56     占用8个格子     

56              由于56本身必须占用2个格子,而指定的场宽1小于2,故照原样输出

双场宽:主要针对实数,第一个场宽表示整个实数占用的格子,第2个场宽指明小数位数。

        假设a=54.098;则语句write(a:8:2); 和语句write(a:1:0);分别输出

□□□54.10  

54

 

  赋值语句: :=

格式:变量:=表达式;

功能:计算表达式的值并赋值给变量。

注意:赋值号两边的数据类型必须相同或相容,对于这一点的理解:变量:=表达式

          左边是整数类型,则右边表达式计算结果的类型必须是整数类型;

          左边是字符类型,则右边表达式计算结果的类型必须是字符类型;

          左边是实数类型,则右边表达式计算结果可以是整数类型、也可以是实数类型。

          左边是boolean,则右边表达式计算结果的类型boolean;

 由此可见:只有实属可以兼容整数,所以整数类型与实数类型是相容的。

      两变量a,b值交换的代码:c:=a; a:=b; b:=c;

                          或:c:=a+b; a:=c-a; b:=c-b;

 

   分支语句:If 条件 Then 语句;

格式一: If (条件)then 语句; <——如果条件成立,则执行语句;

 

格式二: If (条件)then 语句1 else 语句2;

<—如果条件成立,则执行语句1,否则执行语句2;

 

分情况语句

 

Case <情况表达式> of

   情况1:语句1;

   情况2:语句2;

    ……

   情况n:语句n;

 else 语句n+1 {者条语句可省略}

End;

 

If 情况表达式=情况1 then 语句1;

If 情况表达式=情况2 then 语句2;

……

If 情况表达式=情况n then 语句n;

 

   循环语句

        For 循环

格式一:For 变量:=初值 to 终值 do 循环体;

格式二:For 变量:=初值 downto 终值 do 循环体;

说明:◆格式一的循环次数是:终值-初值+1、格式二的循环次数是:初值-终值+1;

      ◆是一个枚举型循环:例如:

For I:=1 to 10 do s:=s+I;

变量i分别取:1 2 3 4 5 6 7 8 9 10;每取得一个值,循环语句执行一次;

◆该循环是先判断后执行,循环有可能依次也不执行。

                           

        While循环

             格式: While (条件) do 循环体; {当条件满足,则循环执行,知道条件不满足为止}

        Repeat循环

格式: Repeat               

         循环体

       until 条件;        {执行循环知道条件满足为止}

       循环语句中用到的两条命令:Break和Continue:Break推出当前循环、contiune 不执行循环体中Continue后面的语句,直接进行下次循环。

 

4、数组

 定义:一维数组:a:Array[1..50] of Integer;,相当于50 个整型单变量,用下标来区分,例如:a[1]、a[2]、a[30]等,理解一维数组时可用表格的方式来形象理解:比如上面的数组图示为:

二维数组:g:Array[1..10,1..5] of integer,相当于10*5=50个整型单变量,用双下标区分,依次为:a[1,1]、a[1,2]、a[1,3]、a[1,4]、a[1,5]、a[2,1]、a[2,2]、…、a[10,5]。理解二维数组可以用表格来形象理解,g数组可以图示为:

注意:

◆关于Fillchar过程在给数组所有元素赋值的运用:比如要对上面一维数组a全部清0时的使用方法:

           Fillchar(a,sizeof(a),0); 对于数组g:Fillchar(g,sizeof(g),0)。

 

◆数组元素存储地址的计算:假设a数组元素类型是Integer,第一个元素a[1]的地址是100,则a[2]的存储地址是102、a[3]的存储地址是104、……如下图示。

可以推导出公式:a[I]的地址=第一元素地址+(I-1)*2;

如果a的元素是Longint,则a[I]的地址=第一元素地址+(I-1)*4;

 

5、字符串

   所谓字符串,就是一串字符,与字符是有本质区别的。

   定义形式:Var s:String;

或 s:String[n];这里的n是常数,如果n=5则字符串s的长度不能超过5。但这里的n不能超过255,即字符串string类型的变量,最长长度不能超过255。

 例如:Var s:string[10];

注意:

 ◆字符串的理解可以一维字符数组来理解,例如:

     Var s:string[50]; 相当于Var s:Array[1..50] of char;

 ◆String的最长长度不超过255,FP中的ansistring的长度几乎没有限制,可以达到2GB的长度。

     字符串中常用的的函数:如下:


求长度length :    定义:function Length(S: String): Integer;

例子:var

S: String; L:Integer;

begin

Readln (S);

L:=Length(s);

end.

---------------------------------------------------------------------------------------

复制子串copy: 定义: function Copy(S: String; Index: Integer; Count: Integer): String;

注意:S 是字符串类型的表达式。Index和Count是整型表达式。Copy 返回S中从Index开始,Count个字符长的一个子串。

例子: var S: String;

begin

S := 'ABCDEF';

S := Copy(S, 2, 3); { 'BCD' }

end.

---------------------------------------------------------------------------------------

插入子串insert: 定义:procedure Insert(Source: String; var S: String; Index: Integer);

注意:Source 是字符串类型的表达式。 S 是任意长度字符串类型变量。Index 是整型表达式。Insert 把 Source插在S中Index处。如果结果字符串的长度大于255,那么255之后的字符将被删除。

例子: var

S: String;

begin

S := 'Honest Lincoln';

Insert('Abe ', S, 8);    {s= 'Honest Abe Lincoln' }

end.

--------------------------------------------------------------------------------------

删除子串delete

定义:procedure Delete(var S: String; Index: Integer; Count:Integer);

注意:S 是字符串类型变量。 Index和Countare是整型表达式。Delete 删除S中从Index开始的Count个字符。如果Index大于S的长度,则不删除任何字符;如果Count大于S中从Index开始的实际字符数,则删除实际的字符数。

例子:var

s: string;

begin

s := 'Honest Abe Lincoln';

Delete(s,8,4);

Writeln(s); { 'Honest Lincoln' }

Delete(s,9,10);

Writeln(s); { 'Honest L' }

end.

-------------------------------------------------------------------------------------

字符串转为数值val: 定义: procedure Val(S; var V; var Code: Integer);

在这里:   S 是由一系列数字字符构成的字符串类型变量;。

V 是整型或实型变量;

Code 是Integer型变量

注意:Val将S转为它的数值形式。

例子:

var s:string;I, Code: Integer;

begin

s:='1234';

val(s,i,code);

writeln(i); { 1234 }

end.

---------------------------------------------------------------------------------

数值转为字符串str:   定义: procedure Str(X [: Width [: Decimals ]]; var S:string);

注意:将数值X转成字符串形式。

例子: var

S: string[11];  

I:Integer;

R:Real;

Begin

    I:=123; r:=34.78;

Str(I, S);   {s='123’}

Str(I:5,S); {s='□□123’}

Str(r,s);    {s='3.478000000000E+01’}

Str(r:8:3,s);{s='□□34.780’}

end;

---------------------------------------------------------------------------------------

求子串起始位置pos: 定义:function Pos(Substr: String; S: String): Byte;

注意:Substr和S字符串类型表达式。Pos在S中搜索Substr并返回一个integer值。这个值是Substr的第一个字符在S中的位置。如果在S中没有找到Substr,则Pos返回0。

例子:var S: String; p:Byte;

begin

S:= '123.5'; 

P:=pos('2’,S); {p=2}

P:=pos('6’,s); {p=0}

end.

-------------------------------------------------------------------------------------

字符完全串连 +   定义:操作符+把两个字符串联在一起。

例子: var s1,s2,s:string;

begin

s1:='Turbo ';

s2:='pascal';

s:=s1+s2; { 'Turbo pascal' }

end.

-----------------------------------------------------------------------------------

字符串压缩空格串连 - : 定义:操作符-去掉第一个字符串最后的空格后,将两个字符串联在一起。

例子: var s1,s2,s:string;

begin

s1:='Turbo ';

s2:='pascal';

s:=s1-s2; { 'Turbopascal' }

end.

 

 

常用的其它过程或函数:

abs(x)=|x|、    sqr(x)=x2、       sqrt(x)=

exp(x)=ex、ln(x)=(这里的e=2.1234) 

pred(x)

{求前驱、如pred(1)=0、prd(0)=-1、pred(‘1’)=’0’、pred(‘b’)=’a’}、

succ(x)

 {求后继、如succ(‘1’)=2、succ(‘1’)=’2’、succ(true)=false} 、

ord(x)

{求序号、如ord(1)=1、ord(‘1’)=49、ord(’8’)-ord(‘0’)=8}

chr(x)

{求字符、如chr(65)=’A’、chr(’48’)=’0’、chr(ord(‘a’)-32)=’A’}

upcase(x)

{求x的大写字母、如upcase(‘a’)=’A’、upcase(‘B’)=’B’}

odd(x)

{若x为奇数则odd(x)=true,若x为偶数则odd(x)=false,如odd(5)=true}

round(x)

{求最接近x的整数、如:round(3.15)=3、round(4.52)=5}

trunc(x)

{去掉x的小数部分、如:trunc(3.15)=3 、trunc(4.52)=4}

取整函数int(x):定义:function Int(X: Real): Real;

注意:X是实型数,返回值也是实型的;返回的是X的整数部分,也就是说,X被截尾了(而不是四舍五入)

例子: var R: Real;

begin

R := Int(123.567); { 123.0 }

R := Int(-123.456); { -123.0 }

end.

取小数函数frac(x): 定义:function Frac(X: Real): Real;

注意:X 是实型表达式. 结果返回 X 的小数部分; 也就是说,Frac(X) = X - Int(_X).

例子:var R: Real;

begin

R := Frac(123.456); { 0.456 }

R := Frac(-123.456); { -0.456 }

end.

 

 

 

下面4道试题,测试数据在“网上邻居jiaoshijib 练习题数据”下:测测自己能得多少分!!!


本 周 测 试 题 目

第1题:分割自然数(文件名:1.pas 100分)

找出N位自然数中(N<=8,且是偶数)具有下列性质的数:如果将这个自然数分为2部分,且位数相等,然后将这两部分相加,所得和的平方等于原来的N位数。

例如整数81分解成8和1两部分,并且(8+1)*(8+1)=81,所以81就是符合上面条件的一个整数

输入文件number.in,文件中只有一个N位整数。

输出文件number.out,文件只有一行,全部符合性质的数(由小到大输出),整数之间用空格隔开。

 

第2题:最大最小整数(文件名:2.aps 100分)

给出4个整数(>=0),编程输出由这4个数组成的最大整数(max)和最小整数(min)。

  例如:

输入文件inp.in:4个整数,用空格分隔;

输出文件oup.out:两个整数,第一个是最大整数,第2个是最小整数,用空格隔开;

输入样例:12 30 8 121

输出样例:83012121 12112308

 

第3题:求最大质数子串(100分)

一个整数的整数子串是由该整数的连续数位的数字构成。

例如6158的子串包括:6、1、5、8、61、15、58、615、158、6158

任务:找出最大的质数子串。

输入文件prime.in:一个正数N,N<=109

输出文件prime.out:N的最长质数子串,若所有子串都是非质数,则输出”NO”。

 

例如:输入样例1:2319  

输出样例1:31

 

输入样例2:6804

输出样例2:NO

 

第4题:计算器改良(100分)

   NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手ZL先生。为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例:

   4+3x=8

   6a-5+1=2-2a

  -5+12y=0

ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数、小写字母及+、-、=这三个数学符号(当然,符号“─”既可作减号,也可作负号)。方程中并没有括号,也没有除号,方程中的字母表示未知数。

   问题求解 :编写程序,解输入的一元一次方程, 将解方程的结果(精确至小数点后三位)输出。

    你可假设对键入的方程的正确性的判断是由另一个程序员在做,或者说可认为键入的一元一次方程均为合法的,且有唯一实数解。

输入文件:computer.in:一个字符串,表示一个一元一次方程(一定有解,不须判错);

输出文件:computer.out:一个保留三位小数的实数,表示方程的解。

 

输入样例:6a-5+1=2-2a

  输出样例:a=0.750

转载于:https://www.cnblogs.com/hebing/articles/1447111.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值