Evaluation Warning: The document was created with Spire.Doc for .NET.中学信息学奥林匹克竞赛培训教程Pascaal语言言和程序序设计基基础(第一部分分)第一部分 Passcall语言和和程序设设计基础础预备知识基本程序结结构和几几个概念念::标识符 保留字字 常量量 变量 运运算符 表表达式 标准数数据类型型Pacall语言程程序结构构Progrram proog_nnamee;var变量量申明;;beginn程序体;end.例如:progrram pnaame;;constt n==4;type arrr=arrrayy [11..44] oof iinteegerr;var ii:inntegger;; a::arrr;beginnfor ii:=11 too n do reead((a[ii]);;readlln;for ii:=nn doowntto 11 doo wrritee(a[[i]::4);;writeeln;;endd.以上是一个个PASSCALL程序。
从从键盘读读入4个数据据,逆序序输出一般来说,一一个PAASCAAL程序序包括以以下几个个部分::程序头:pproggramm pnnamee; 其中,pproggramm是保留留字,表表示程序序从这个个地方开开始,ppnamme是标标识符,是是程序的的名字,可可由程序序员自定定保留留字是PPASCCAL选选定的,具具有固定定意义和和用法的的专用单单词或缩缩写,这这些单词词不允许许作其它它使用如如上,“pproggramm”就有有“程序从从这里开开始”这样一一种特别别的意义义,而“cconsst”就就有“常量说说明从这这里开始始”的意义义我们们不能再再用“pproggramm”、“coonstt”来作作为其它它变量、常常量等的的名字标标识符是是以字母母开头的的字母数数字串,其其长度最最大为88个字符符用来来表示常常量、变变量、类类型、文文件、过过程、函函数和程程序的名名字如如“pnnamee”、“i”、“j”、“a11”就是是合法的的标识符符;但“11a”、“#aa”是非非法的标标识符有有一点要要注意的的是,在在PASSCALL中,字母母除了作作为字符符值或字字符串值值之外,其其大小写写是无关关的。
如如标识符符“A11”和“a11”在PASSCLAA看来是是同一标标识符在在PASSCALL中除了了保留字字和自定定义的标标识符外外,还有有一类有有特殊含含义的标标识符,这这类标识识符称为为标准标标识符它们是用来标记程序中经常引用的处理对象,如常量、函数PASCAL定义的保留字和标准标识符附后) 标识符在在命名的的时候要要注意::1、名字要要易记易易读,有有意义如如8皇后后问题程程序名可可以是“queeen”也可以以是“huaanghhou”等;2、不能用用保留字字、标准准标识符符作为自自定义的的标识符符说明部分::constt n==4;type ar==arrray [1...4]] off inntegger;;var ii:inntegger;; a::ar;;其中,coonstt部分是是常量说说明,说说明一些些在以下下部分用用到的,在在整个程程序执行行过程不不改变值值的量这这些量PPASCCAL称称为常量量在程程序中用用到这个个值的地地方均用用常量名名来代替替如上上题中定定义“n=44”指本程程序处理理4个数数值,在在下面的的程序体体中就用用“n”来代替替具体的的值(如如forr i::=1 to n)。
如如果要改改变处理理数据个个数,则则只在常常量说明明部分修修改“n=44”这一句句就行了了,而不不用在程程序中每每一个用用到的地地方都加加以修改改这样样不但在在编写程程序的时时候很方方便,也也增加了了程序的的可读性性,修改改时更方方便常量说明在在保留字字“connst”下开始始可以以有多个个语句常常量说明明语句的的格式是是:“常量名名=值;;”如“n=44;”n是是常量名名,4是是该常量量的值,“;”是语句分隔符type部部分是类类型说明明,说明明一些在在以下部部分用到到的数据据类型如如数组、记记录、指指针等类型说明在在保留字字“typpe”下开始始可以以有多个个语句类类型说明明语句的的格式是是:“类型名名=类型型说明;;”如“ar==arrray [1...4]] off inntegger;;”arr是类型型名,aarraay [[1...4] of inttegeer是类类型说明明,“;”是语句句分隔符符var部分分是变量量说明变变量是指指在程序序执行过过程中可可以通过过赋值语语句或读读语句来来改变值值的量所所有在程程序中使使用的变变量都应应该先在在变量说说明部分分说明PPASCCAL中中引用的的每个变变量都有有“名字”和“类型”属性。
变变量说明明“说明”的主要要工作是是告诉PPASCCA下面面程序中中要用到到这个名名字的量量,同时时这个量量的类型型是什么么变量说明在在保留字字“varr”下开始始可以以有多个个语句变变量说明明语句的的格式是是:“变量名名:变量量类型;;”其中中,如果果有多个个变量同同一类型型,则变变量名与与变量名名之间用用逗号分分隔,变变量名与与变量类类型之间间用冒号号分隔如如“i:iinteegerr;”(i是是变量名名,inntegger是是类型名名)、“i、jj:inntegger;;”(i、jj是变量量名,iinteegerr是类型型名)………变量说明要要注意::1、有有效变量量名称不不能大于于8个字字符;22、变量量名称必必须以字字母开头头;3、在在同一个个有效范范围内变变量名称称必须唯唯一各个说明部部分均以以该部分分的保留留字开始始如“connst”开始常常量说明明;“typpe”开始类类型说明明;“varr”开始变变量说明明一个个程序包包含多少少种类型型的说明明,看需需要而定定,不是是每一个个程序都都必须同同时包含含这三种种说明如如果程序序不须要要用到常常量,则则常量说说明部分分可以省省略;如如果不须须要用到到类型说说明,则则类型说说明可省省…… PPASCCAL还还有一条条规则::先说明明后引用用。
即所所有在程程序体中中用到的的“名字”必须都都在说明明部分说说明过才才能引用用,否则则就会出出错,通通不过编编译,也也执行不不了如如上,类类型“ar”先在类类型说明明中定义义,然后后在变量量说明中中引用;;变量ii在变量量说明中中定义,在在程序中中引用 程序体:beginnfor ii:=11 too n do read((a[ii]);;readlln;for ii:=nn doowntto 11 doo writee(a[[i]::4);;writeeln;;end.程序体是以以beggin eend..括起来来的语句句系列end”后面是一个小圆点,标识着程序结束,整个程序只有一个是一个程序的主要部分编程要完成的工作大部分都在这里完成程序体中每一语句均以“;”作为结束符在书写程序时,以“分层缩进”的风格来写,以便提高程序的可读性所谓的“分层缩进”是指在逻辑上同一级的语句其起始点对齐,下一级的语句向右缩进运算符 表达式式PASCAAL中的的运算符符有算术术运算符符和关系系运算符符和我我们在数数学课中中学的基基本一样样但在写写法上有有些不同同,在写写程序时时要特别别注意写写法的不不同: + 加加号;-- 减号号;* 乘号(( 数学学中写为为 × );;/ 除除号( 数学中中写为 ÷);MMOD 取余余 如::8 MMOD 2=00,7 MODD 2==1,22 MOOD 33=2;;DIVV 取整整 如::8 DDIV 2=44,7 DIVV 2==3,22 DIIV 33=0。
在在PASSCALL只有上上面6种种数学运运算其其它的就就只能利利用这66种运算算的组合合通过语语句来实实现如如a^22(a的的平方)可可以化成成a*aa> 大于;;< 小于;;<> 不等于于(数学学中写为为 ≠);<<= 小小于等于于(数学学中写为为≤);>>= 大大于等于于(数学学中写为为 ≥),变量、常量量通过运运算符连连接起来来的式子子我们称称为表达达式一一个单独独的变量量或常量量也是表表达式如如a、aa+3、aa*3++b都是是表达式式写表表达式时时要注意意PASSCALL表达式式跟我们们已经熟熟悉的数数学表达达式在格格式上的的区别::数学表达式式PASCAAL表达达式注意2a2*a*号不能省省略a÷ba/b除号的写法法a≠ba<>b不等号的写写法a≤ba<=b小于等于号号的写法法标准数据类类型:整整型 实型型 字符符型 布尔尔型 数数据类型型可以理理解为一一个取值值范围和和定义在在这取值值范围上上的运算算规则想想一想我我们对于于数的理理解:小小学学自自然数,范范围是从从0开始始,那时时候不知知道有小小数,也也不知道道有负数数,允许许的运算算是+、--、×、÷,而且且对于减减法规定定被减数数要大于于减数。
到到了中学学,数的的范围扩扩大了,整整数包括括正数和和负数,减减法运算算也不再再有额外外的规定定的了同同理,在在PASSCALL中“数据类类型”也是一一个取值值范围和和在它上上面定义义的运算算规则PPASCCAL中中定义好好的标准准数据类类型一共共有4个个:整型型、实型型、字符符型、布布尔型,分分别用保保留字iinteegerr、reeal、ccharr、boooleean来来标记它它们其其取值范范围和运运算如下下: 整整型(iinteegerr):范范围 -3327668———327767;;运算 + - * / mood diiv 实实型(rreall):范范围 运算算 + - * /字符型(ccharr):范范围 可显显示的AASCIII字符符 布尔型((boooleaan)::范围 trrue faalsee 运算算 annd orr noot在PASCCAL中中可使用用的基本本符号有有: (11)大写写字母 A—Z ;;小写字字母a——z ;数数字0——9 (22)其它它字符 + — ** / = > < >== <== <<> :== ( ) [ ] . , :‘ $ ^ (** *) { }其中,有些些符号是是以双字字符作为为一个整整体,拆拆开后就就失去原原有的意意义。
如如“<>”是一个个表示“不等于于”的关系系运算符符,如拆拆开后就就变成了了两个关关系运算算符,分分别表示示“小于”、“大于”PASCAAL使用用的保留留字有:: AND、ARRRAY、BEGGIN、CASSE、CONNST、DIVV、DO、DOWWNTOO、ELSSE、ENDD、FILLE、FORR、FUNNCTIION、GOTTO 、IF、IN、LABBEL、MODD、NILL、NOTT、OF、PACCKEDD、PROOCEDDUREE、PROOGRAAM、RECCORDD、REPPEATT、SETT、THEEN、TO、TYPPE、UNTTIL、VARR、WHIILE、WITTH、FORRWARRD常用的标准准标识符符有: 标标准常量量:FAALSEE TTRUEE MMAXIINT MAAXLOONGIINT 标准类类型:IINTEEGERR BBOOLLEANN RREALL CCHARR TTEXTT 标准准文件::INPPUT OUUTPUUT 标标准函数数:ABBS ACTTAN CHHR COSS EEOF ELLON EXPP LLN ODDD OORD PREED ROUUND SIIN SQRR SSQRTT SSUCCC TTRUNNC 标标准过程程:ASSSIGGN GETT NNEW DIISPOOSE PAACK PUTT RREADD RREADDLN RESSET REEWRIITE UNNPACCK WRIITE WRRITEELN函数格式::functtionn fuun_nnamee(参数数表)::数据类类型;var 变变量声明明;beginn函数体;end;例题:写出出计算两两个整数数a,bb的和函函数addd(aa,b))。
过程格式::proceedurre pprocc_naame((参数表表);var 变变量声明明;beginn 过程体;end;例题:写出出在屏幕幕打印一一行文字字:”hhelllo,PPasccal lannguaage is verry eeasyy!”函数和过程程的调用用:例题:从键键盘输入入:a,,b两个个数,输输出由这这两个数数为直角角边的三三角形的的面积xoi00_01.pas】progrram xoii00__01;;functtionn arrea((connst a,bb:reeal)):reeal;;var ss:reeal;;beginn s:==a*bb/2..0; areea:==s;end;proceedurre mmyprroc;;var aa,b::reaal; ss:reeal;;beginn writte(''Pleeasee innputt twwo nnumbber a,bb:')); readdln((a,bb); s:=aareaa(a,,b);; writtelnn('tthe areea oof ttriaan iis: ',ss:5::2);;end;{================= maain proograam ======================}beginn mypprocc;end.练习:一、 判断以下标标识符的的合法性性:a3 3aa a117 aabcdd exx9.55 α β λλ二、 将下列的数数学表达达式改写写成PAASCAAL表达达式:b^2-44ac 三、 求下列表达达式的值值:20 mood 119, 一五五 mood 99, 7 divv 8 ,19 divv 3,(4>>5) andd (77<8)),(8>>9) or ( 99<100),2 aand ((33=3)) orr (33<7)))第一节顺序序结构操作一操作二顺序结构是是程序设设计中最最简单的的结构,也也是最基基本的结结构,它它就是按按照程序序书写的的顺序逐逐句执行行程序中中的指令令。
流程程图如下下:例题:计算算圆的周周长的过过程:输入圆的半半径;(操操作一)计算圆的周周长;(操操作二)输出圆的周周长;(操操作三)基本的程序序语句::赋值语句::赋值语句是是最简单单的语句句,其一一般形式式为:<变量>::=<表表达式>>;“:=”称称为赋值值号,赋赋值语句句的作用用是计算算表达式式的值,并并赋给变变量对对于任何何一个变变量必须须首先赋赋值,然然后才能能引用,否否则,未未赋初值值的变量量将以一一个随机机值参与与运算另另外,赋赋值号两两边的类类型必须须相同,但但表达式式值为整整数时,它它可自动动化为实实型后赋赋给该实实型变量量,即符符合赋值值相容如:Pi::=3..14;; R:==2; Agee:=220; S:==Pi**R*RR例:关于赋赋值的例例子prssoograam eexammplee;var aa,b::inttegeer;beginna:=3;;b:=2;;a:=a++b;writeeln((a);;writeeln((b);;end.输入语句通过计算机机的外设设把数据据送到计计算机内内存的过过程称为为输入Turbo Pascal语言的输入语句有如下两种形式:read((<变量量名表>>);readlln(<<变量名名表>));<变量名表表>是一个个或几个个由逗号号隔开的的变量标标识符,他他们必须须在程序序说明部部分预先先说明,他他们可以以是整型型、实型型或字符符型,布布尔型不不可以直直接读入入。
例如如a,b,c为整型型变量,read(a,b,c)之后,键盘输入:20 30 40 (表示回车),结果: a=20,b=30,c=40readlln语句句和reead语语句不同同之处在在于输入入数据到到各变量量之后,readln自动换行,从下一行开始再输入数据一个read语句执行完后,数据行中多余的未读数据可以被下一个输入语句读入;而一个readln于执行完后,数据行中多余未读数据就没有用了readln语句中可以不包含变量名表即有以下等价情况:read((a,bb);rreaddln等等价于rreaddln((a,bb)输入语句输输入的数数据类型型必须和和变量一一一对应应如果果输入的的是一串串整数或或实数,数数据间用用空格或或回车分分隔;若若输入的的是一串串字符,则则不用分分隔输出语句输出是将内内存中的的数据送送到外设设的过程程Tuurboo Paascaal的输输出语句句有两种种形式::writee(<输输出项表表>);;writeeln((<输出出项表>>);其中<输出出项表>>是一串串用逗号号分隔的的常量、变变量、函函数名、表表达式或或字符串串如果果是变量量、函数数名、表表达式,则则将其计计算结果果输出;;如果是是常量或或字符串串,则直直接输出出其值。
writee和wriitelln的区区别在于于:wrritee语句是是输出项项输出后后,不换换行,光光标停留留在最后后一项后后,wrriteeln语语句按项项输出后后,自动动换行,光光标则停停留在下下一行的的开始位位置writeeln语语句允许许不含有有输出项项,即仅仅wriitelln;表表示换行行Turboo Paascaal语言言把输出出项的数数据显示示占用的的宽度称称为域宽宽,你可可以根据据输出格格式的要要求在输输出语句句中自动动定义每每个输出出项的宽宽度定定义宽度度时分为为单域宽宽和双域域宽单域宽输出出格式::wriitelln(II:n);;在n个字符符宽的输输出域上上按右对对齐方式式输出II的值,若若n大于I的实际际位数,则则在I值前面面补(nn-I的的实际位位数)个空格格若II的实际际位数大大于n,则自自动突破破限制n必须是整数双域宽输出出格式::wriitelln(aa:n:m);;双域宽主要要用于实实型数据据的输出出n的用法法同上在在n个字符符宽的输输出域上上按右队队齐方式式用小数数点形式式输出aa的数值值,m是小数数点后的的位数原原来的数数据按该该该格式式指定的的小数位位数四舍舍五入。
若若m=0 ,则不不输出小小数部分分和小数数点,原原数据四四舍五入入取整n,m必须是整数例:输出语语句的例例子progrram shuuchuu;constt s=='paascaal';;var ii:inntegger;;r:rreall;c::chaar;bb:boooleean;;beginni:=1223455;r:=1223.445c:='aa';b:=trrue;;writeeln(('i==');;writeeln((i:66);writeeln(('r==',rr,r::6:11);writeeln(('c==',cc,c::10));writeeln(('b==',bb,b::10))end. 复合语句复合语句是是由若干干语句组组成的序序列,语语句之间间用分号号“;”隔开,并并且以bbegiin和endd括起来来,作为为一条语语句复复合语句句的一般般形式::beginn语句1;语句2;……语句n;end;例:变量值值的交换换progrram swaap;vara,,b,tt:inntegger;;beginn a:=100;b::=200;beginnt:=a;;a:=b;;b:=t;;end;writeeln(('a==',aa,'bb=',,b)end. 例题1:输输入圆的的半径,求求出圆的的周长和和面积::Progaam CCalCCirccle;;var RR,C,,S:RReall;{变变量声明明}beginnwritee(‘输输入圆的的半径::’);;readlln(RR);C:=2**Pi**R;writee(‘周周长=’’,C));readlln;S:=Pii*sr(RR);{{sqrr(R))=R**R}writee(‘面面积=’’,S));readlln;end.例题2:找找出下面面程序中中的语法法错误。
Progrram Exaamplle1;;{计算圆环环面积的的程序,R2表示示外圆环环的半径径,R1表示示内圆环环的半径径,R2>>R1}}var RR1,RR2:RReall;beginn S==(R22+R11)*((R2--R1))*Pii {PPi=33.144为常数数} wrriteeln((s)end;纠正以后的的程序Progrram Exaamplle1;;{计算圆环环面积的的程序,R2表示示外圆环环的半径径,R1表示示内圆环环的半径径,R2>>R1}}var RR1,RR2:rreall; S:rreall;{每每一个变变量都必必须声明明}beginn S==(R22+R11)*((R2--R1))*Pii; {Pii=3..14为为常数}} wrriteeln((s);; {语句必必须以“;”结束}end.{{主程序序必须以以“.”结结尾}练习:编写程序实实现以下下功能::1、输入三三角形三三边的长长,计算算三角形形的面积积计算公式::Pascaal程序序中计算算平方根根的函数数为:ssqrtt(x));{xx:reeal;; x00}基本要求::有友好好的输入入输出界界面,不不需要考考虑输入入的a,,b,cc是否可可以构成成三角形形,假设设输入的的数据符符合要求求。
第二节 IIF分支支结构例题:输入入一个考考试分数数,如果果大于等等于600就说恭恭喜你考考试及格格,如果果小于660就说说真差劲劲,要努努力哦!!progrram JuddgeSScorre;输入分数→→scoore;;如果Scoore≥≥60那么么输出“恭喜喜你考试试及格”否则输出“真差差劲,要要努力哦哦”“如果....那么么”形式的的判断在在Passcall中使用用If语句句来实现现IFF语句是是由一个个布尔表表达式和和两个供供选择的的操作序序列组成成运行行时根据据布尔表表达式求求值结果果,选取取其中之之一的操操作序列列执行有有两种形形式的IIF语句句:if<布尔尔表达式式>theen <<语句>;if<布尔尔表达式式>theen <<语句1>>else <<语句2>>;当布尔表达达式的值值为真,则则执行tthenn后面的的语句,值值为假时时有两种种情况::要么什什么也不不做,要要么执行行elsse后面面的语句句注意意elsse前面面没有分分号,因因为分号号是两个个语句之之间的分分隔符,而而elsse并非非语句如如果在该该处添了了分号,则则在编译译的时候候就会认认为iff 语句句到此结结束,而而把ellse当当作另一一句的开开头,输输出出错错信息。
前面例题的的Passcall程序代代码:Progrram JuudgeeScoore;;var sscorre:rreall;{声声明分数数变量sscorre}beginnreadlln(sscorre);; {{输入分分数}if sscorre>==60 theen beginn {sccoree代表分分数的变变量}writeeln((‘恭喜喜你,考试及及格!’);;end elsse bbegiinwriteeln((‘真差差劲,要努力力哦!’);;end; {ennd iif sscorre>==60}}end.例:求y==f(xx),当当x>00时,y==1,当当x=00时,y==0,当当x<00时,y==-1progrram liaanxii;var xx,y::reaal;beginnif x>>0 tthenn y::=1;;if x==0 tthenn y::=0;;if x<<0 tthenn y::=-11;writeeln(('y==',yy);end.在Turbbo PPasccal语语言iff语句中中被构造造的语句句只能是是一条语语句,当当条件选选择某个个分支的的计算要要用多个个语句描描述时,就就必须把把该分支支用beeginn和 ennd括来来,写成成复合语语句。
在在用iff语句连连续嵌套套时,如如果你插插入适量量的复合合语句,有有利于程程序的阅阅读和理理解例:当x>>0时候候,计算算x*xx,并且且输出xx和x*xxprogrram liaanxii;var xx,x11:reeal;;beginnreadlln(''x='',x));iff x>>= tthenn beeginnx1::=x**x;wwrittelnn('xx*x==',xx1);;wriitelln(''x='',x));ennd;eend..当if 语语句嵌套套时,TTurbbo PPasccal约约定ellse总总是和最最近的一一个iff配对前前面介绍绍了Iff语句的的使用情情况,下下面来概概括iff判断语语句的使使用方法法分支结构的的基本情情况:if 条件件成立 theen beginn 处理;end;下一语句;;if 条件件成立 theen beginn操作B;end eelsee {iif 条条件不成成立 tthenn }beginn 操作A;end;下一语句;;练习:写出下列关关系表达达式和逻逻辑表达达式的PPasccal语语句:1、 区分合格和和不合格格:x >= 602、 60分到770分之之间:(( x >= 60 ) aand ( xx <==70 )3、判别闰闰年的条条件(年年份能被被4整除,并并且不能能被1000整除除;或者者能被4400整整除的整整数年份份):((y modd 4 = 00) annd (y mmod 1000 <>> 0 )) oor (y mmod 4000 = 0)编写程序实实现下列列功能::1、从键盘盘读入一一个数,判判断它的的正负。
是是正数,则则输出""+",是是负数,则则输出""-"2、输入aa,b,,c三个个不同的的数,将将它们按按由小到到大的顺顺序输出出3、铁路托托运行李李规定::行李重重不超过过50公斤斤的,托托运费按按每公斤斤0.一一五元计计费;如如超500公斤,超超过部分分每公斤斤加收00.100元编编一程序序完成自自动计费费工作4、打印某某年某月月有多少少天提提示:AA、闰年年的计算算方法::年数能能被4整除,并并且不能能被1000整除除;或者者能被4400整整除的整整数年份份B、利用用MODD运算可可以判断断一个数数能否被被另一个个数整除除)5、从键盘盘输入33个数a,,b,cc输出其其中最大大的数第三节 CCasee分支结结构case语语句是由由一个表表达式和和众多可可选择的的操作序序列组成成运行行时,根根据表达达式的求求值结果果,在众众多的分分支中选选取一个个分支执执行其其形式为为:case 表达式式 off常量1:语语句1;;常量2:语语句2;;……常量n:语语句n;;else 语句 n+11; {可选选项}end;表达式只能能是顺序序类型(除除了实型型以外的的简单类类型),其其值必须须是唯一一确定并并且和表表达式类类型相同同。
caase语语句执行行和表达达式值相相匹配的的casse常数数所指向向的那条条语句,如如果没有有相匹配配的值,则则执行eelsee部分(如如果有的的话)或或者什么么也不做做在eelsee前面的的语句末末尾有分分号,这这是和iif语句句不同的的Case表表达式的的应用::例题:输入入一个考考试分数数(整数数),根根据分数数情况报报告相应应的信息息要求:假设设输入的的分数为为[0,,1000]之间间的整数数Progrram JuddgeSScorre2;;var xx:reeal;;beginn reaad(xx);{{输入一一个分数数}case x oof 0..599:{}}writeeln((‘不及及格’;;60..889:{{}writeeln((‘及格格’);;90..1100;;{}writeeln((‘优秀秀’);;elsewriteeln((‘错误误的分数数’);;end;{{casse xx off}end.例:根据学学生的成成绩给予予相应的的等级,对对应关系系如下:: 990———1000 A 800——899 BB 660———79 C 600以下 Dprrogrram cheengjji;vvar s:rreall;chh:chhar;;begginwwritte(''inpput thee sccoree: '');rreaddln((s);;if((s>==0)aand((s<==1000)thhenccasee s divv 100 off10,,9:cch:=='A'';8::ch::='BB';77,6::='CC';eelsee chh:=''D';;endd;wrriteeln((s,''--'',chh);eend..练习:1、我们把把字母作作如下的的分类::大写字字母:’’A’...’ZZ’;小小写字母母:’aa’...’z’’;数字字:’00’...’9’’;其他他字母,编编写一个个程序,根根据上述述分类的的方法,输输入一个个字母,报报告该字字母所属属的类型型。
2、某超市市为了促促销,规规定:购购物不足足50元的的按原价价付款,超超过500不足1000的按按九折付付款,超超过1000元的的,超过过部分按按八折付付款编编一程序序完成超超市的自自动计费费的工作作第四节 ffor循循环结构构程序设计时时我们经经常要做做一些重重复的任任务通过过反复的的执行某某一个动动作来完完成任务务,编写写这一类类程序我我们使用用循环结结构来实实现如如计算11+2++3+…….+1100Passcall中循环环结构通通过使用用Forr、Whiile、Reppeatt三种语语句来实实现For语句句是形式式最简单单的循环环语句例题1:输输入正整整数N,计算算分析:=11+2++3+……+N,,因此我我们必需需重复的的执行SS:=SS+i,其其中S代表和和,S=1 {i==1}S=1+22 {i==2}S=1+22+3 {i==3}S=1+22+3++4 {i==4}….S=1+22+3++4+……+N {i==N}i从1变化化到N,计算算前I项的和和:1++2+33+…++I,写写成Paascaal代码码如下::For ii:=11 too N DO S:==S+ii;{ii从1变化到到N重复执执行S::=S++i}完整的程序序如下::Progrram Exaamplle1__4Var N,II,S::inttegeer;Beginn Wriite((‘输入入正整数数N:’’);RReaddln((N);; S:==0; Forr I::=0 to n ddo SS:=SS+I;; Wriitelln(‘‘1+22+3++…+’’,n,,’=’’,s));End.FOR 循循环有两两种形式式:升序形式::forr <控控制变量量>:==<初值值> tto <<终值> do <语句句>降序形式::forr <控控制变量量>:=<<初值> dowwntoo <终终值> do <语句句>for语句句功能描描述:虽然forr循环形形式简单单,但是是执行的的机制却却很复杂杂。
其基基本过程程如下::1. 计算初值并并记忆2. 判断初值是是否超出出终值、如如果超过过则执行行步骤77,否则则执行步步骤33. 把初值赋给给控制变变量4. 执行do后后面的语语句(循循环体))5. 判断控制变变量的值值是否达达道终值值,如果果是则执执行步骤骤6,否则则执行步步骤76. 控制变量取取下一个个值(升序取取后继,降降序取前前驱)7. (循环结束束)执行下下一语句句.例题:编写写程序输输出序号号从322到1266的ASCCII字字符与对对应代码码之间的的对应关关系每每行输出出5个字符符,输出出结果如如下如所所示Exaamplle4__2)progrram exaamplle4__2;var i, j: bytte;beginn forr i := 32 to 1266 doo bbegiin iff (jj mood 55 = 0) theen wwrittelnn; wrritee(i:: 5,, chhr(ii): 2);; j := j ++ 1;;end;end. 程序说明::标准函数cchr((i)可可以得到到代码为为i的字符符。
j modd 5 求 j模5的余数数语句句if (j modd 5 = 00) tthenn wrriteeln;;用于控控制换行行,每行行写5个字符符的对应应关系语语句wrritee(i:: 5,, chhr(ii): 2);;用于格格式化输输出结果果编程完成下下列计算算:1、2、3、 把数码1,2,3,4,…,9分成3组,每每组构成成一个33位数,使使这3个3位数恰恰好成11:2:3,该怎怎样分??求出所所有的解解答来如如:1992,3844,5766就是一一组解答答)4、 求出所有的的三位数数,它除除以111所得余余数等于于它的三三个数字字的平方方和第五节 wwhille、reppeatt循环结结构Whilee语句是是另外一一种实现现循环的的语句,一一般形式式如下::Whilee <条条件> do <语句句>Whilee循环的的执行过过程如下下:1. 判断条件是是否成立立,条件件成立时时执行步步骤2,,否则执执行步骤骤42. 执行do后后面的语语句(循循环体))3. 返回步骤114. 结束循环,执执行下一一语句注意:一定定要有使使条件取取假(FFalsse)的的时候,否否则会出出现死循循环。
例题:从键键盘输入入一批学学生考试试数据,统统计这些些数据中中大于880的数数的个数数分析:因为为学生的的人数没没有确定定,因此此不方便便用foor循环环来完成成此项工工作,但但是用wwhille循环环比较容容易实现现eexammplee4_33)whilee sccoree>=00 doo输入一个学学生成绩绩→scoore;;计算总总分;Pascaal代码码: whiile scoore >= 0 ddo bbegiin reeadlln(sscorre);; tootall :== tootall + scoore;; eend;;完整的程序序代码::progrram exaamplle4__3;var scoore:: inntegger;; tottal:: inntegger;; c: chaar;beginn wriitelln(''输入学学生分数数:')); reaadlnn(sccoree); tottal::=0;; whiile scoore >= 0 ddo bbegiin reeadlln(sscorre);; tootall :== tootall + scoore;; eend;; wwrittelnn('总总分为::',ttotaal);; rreadd(c));end.Repeaat语句句与whhilee语句基基本类类类似,只只是whhilee先判断断条件,reapeat语句先执行循环体然后再判断。
Repeaat <语句句>;{{循环体体部分}}Untill <条条件>;;{循环环结束条条件}执行过程如如下:1. 执行循环体体2. 判断条件,如如果布满满足重复复1,否则则执行步步骤33. 结束循环,执执行下一一语句例题:改写写Exaamplle4__3程序序使用RRepeeat循循环语句句实现Example4_4)progrram exaamplle4__4;var scoore:: inntegger;; tottal:: inntegger;; c: chaar;beginn wriitelln(''输入学学生分数数:')); tottal := 0; reppeatt rreaddln((scoore)); ttotaal ::= ttotaal ++ sccoree; unttil scoore < 00; wriitelln(''总分为为:',, tootall); reaad(cc);end.练习:1、 计算下列式式子的值值:(1) 1+3+55+…++99(2) 1+2+44+8++…+1128++2566+5112+110244(3) 1+(1++2)++(1++2+33)+……+(11+2++3+44+…++N)2、 有一分数序序列:求求出这个个数列的的前200项的和和。
3、 求水仙花数数所谓谓水仙花花数,是是指一个个三位数数,如果果满足,则则abcc是水仙仙花数4、 输入一个整整数,计计算它各各位上数数字的和和注注意:是是任意位位的整数数)5、 输入一整数数A,判断断它是否否质数提提示:若若从2到A的平方方根的范范围内,没没有一个个数能整整除A,则A是质数数6、 求两个数的的最小公公倍数和和最大公公约数提提示:公公约数一一定小于于等于两两数中的的小数,且且能整除除两数中中的大数数公倍倍数一定定大于等等于两数数中的大大数,且且是大数数的倍数数,又能能给两数数中的小小数整除除7、 编写一个译译码程序序,把一一个英语语句子译译成数字字代码译译码规则则是以数数字1代替字字母A,数字字2代替字字母B,……,26代替替字母ZZ,如遇遇空格则则打印一一个星号号‘*’’,英文文句子以以‘.‘‘结束8、 “百钱买买百鸡”是我国国古代的的著名数数学题题题目这样样描述::3文钱可可以买11只公鸡鸡,2文钱可可以买一一只母鸡鸡,1文钱可可以买33只小鸡鸡用1100文文钱买1100只只鸡,那那么各有有公鸡、母母鸡、小小鸡多少少只?与与之相似似,有""鸡兔同同笼"问题9、 输入一个正正整数NN,把它它分解成成质因子子相乘的的形式。
如如:366=1××2×2×3×3; 199=1××19(提提示:设设因子为为I,从2开始到到N,让N重复被被I除,如如果能整整除,则则用商取取代N,I为一个个因子;;如果不不能整除除,再将将I增大,继继续以上上操作,直直到I等于N10、 编程实现::求之值值,其中中a是一一个数字字例如如:(当当n=55时),nn由键盘盘输入11、 一个数如果果恰好等等于它的的因子之之和,这这个数就就称为“完数”例如如:6的的因子为为1、22、3,而而6=11+2++3,因因此6是是“完数”编程程序找出出10000以内内的所有有完数12、 编一程序,输输入a,b,c,d,e,f,然后后解出方方程组的的解第六节数据据类型简单数据类类型Pascaal语言言基本数数据类型型由:iinteegerr(loongiint,,shoortiint,,bytte),,reaal,ccharr,Boooleean..等构成成自定义数据据类型::我们可以在在基本数数据类型型的基础础上定义义新的数数据类型型,类型型定义的的保留字字为“Typpe”,格式为为:TYPE <类型型标识符符>=<<数据类类型>如:Type MyLLongg=Loongiint;;枚举类型::“枚举”的的意思就就是把所所需要的的对象都都一个一一个的列列举出来来。
比方方说星期期是一个个只有77个元素素的数据据,因此此我们可可以定义义一种数数据类型型TWeeekDDay代代表星期期,如果果一个变变量定义义为TWWeekkDayy类型,那那么他的的取值范范围就是是Sunndayy..SSatuurdaay,另另外颜色色TCoolorr也一样样习惯惯上我们们在自定定义类型型名称前前加上“T”,如TCColoor,TTWeeekDaay,而而且单词词以大写写字母开开始Type TWeeekDDay==(Suundaay,MMondday,,Tueesdaay,WWednnesdday,,Thuursdday,,Friidayy,Saaturrdayy); TCoolorr=(RRed,,Yellloww,Bllue,,Greeen..Purrplee,Whhitee,Bllackk);枚举变量的的第一个个代表00,第二二个代表表1,以此此类推,如如上面定定义的TTweeekDaay类型型,Suundaay=00,Monndayy=1,…,Satturdday==6例题:输入入今天的的日期数数字:00=Sunndayy,1=Monndayy,…6=Satturdday,输输出明天天的日期期,用英英文单词词表示。
xoi00_02.pas】progrram xoii00__02;;Type TWeeekDDay==(Suundaay,MMondday,,Tueesdaay,WWednnesdday,,Thuursdday,,Friidayy,Saaturrdayy);var ttodaay,ttomoorroow:TTWeeekDaay; nuumbeer,ii:inntegger;;beginn wriite(('Ennterr toodayy nuumbeer:'');rreaddln((nummberr); if (nuumbeer<00) oor ((nummberr>6)) thhen wwrittelnn('EErroor nnumbber'') elsse bbegiin ttodaay:==Sunndayy; ffor i:==0 tto nnumbber--1 ddo ttodaay:==succc(ttodaay);; iif ttodaay=SSatuurdaay tthenn ttomoorroow:==Satturdday eelsee ttomoorroow:==succc(ttodaay);; wwritte(''Tommorrrow is::');; ccasee toomorrroww off Suundaay:wwrittelnn('SSundday''); Moondaay:wwrittelnn('MMondday''); Thhurssdayy:wrriteeln(('Thhusdday''); Weedneesdaay:wwrittelnn('WWednnesdday''); Thhurssdayy:wrriteeln(('Thhurssdayy');; Frridaay:wwrittelnn('FFridday''); Saaturrdayy:wrriteeln(('Saaturrdayy');; eend;;{iff toodayy=saaturrdayy thhen}} endd;{iif ((nummberr<0)) orr (nnumbber >6))}end.子界类型::子界类型是是在其它它的离散散类型的的值域中中取出一一部分构构成独立立的类型型。
子界类型的的一般定定义形式式如下::TYPE <子界类型型标识符符>=<<下界常常量>...<上上界常量量>;如: TTYPEE Tmmontth=11..112;TYPE Tsccoree=0...1000;例 按月、日日、年顺顺序读入入一日期期,输出出该日期期是这一一年中的的第几天天。