
pascal基础教程.ppt
70页PASCAL基础教程基础教程PASCAL基础教程基础教程 信息学奥林匹克竞赛是一项益智性的竞赛活动,核心是考查选手的智力和使用计算机解题的能力选手首先应针对竞赛中题目的要求构建数学模型,进而构造出计算机可以接受的算法,之后要写出高级语言程序,上机调试通过程序设计是信息学奥林匹克竞赛的基本功,在青少年朋友参与竞赛活动的第一步必须掌握一门高级语言及其程序设计方法 Pascal是一种计算机通用的高级程序设计语言它由瑞士Niklaus Wirth教授于六十年代末设计并创立 以法国数学家命名的Pascal语言现已成为使用最广泛的基于DOS的语言之一,其主要特点有:严格的结构化形式;丰富完备的数据类型;运行效率高;查错能力强 正因为上述特点,Pascal语言可以被方便地用于描述各种算法与数据结构尤其是对于程序设计的初学者,Pascal语言有益于培养良好的程序设计风格和习惯IOI(国际奥林匹克信息学竞赛)把Pascal语言作为三种程序设计语言之一, NOI(全国奥林匹克信息学竞赛)把Pascal语言定为唯一提倡的程序设计语言,在大学中Pascal语言也常常被用作学习数据结构与算法的教学语言。
在Pascal问世以来的三十余年间,先后产生了适合于不同机型的各种各样版本现在NOI和NOIP提倡使用Free Pascal(简称FP),现在最新的版本是2.0.4,官方网站:http://www.freepascal.org FP是编译型程序语言,它提供了一个集成环境的工作系统(IDE),集编辑、编译、运行、调试等多功能于一体 关于关于Pascal语言语言 Free Pascal的启动的启动 1、1、DOSDOS下的启动下的启动( (适用于适用于MS-DOS6.22MS-DOS6.22之后的版本或之后的版本或Win 9X & Win 9X & Win2000/XP/2003 Win2000/XP/2003 的的Command Mode)Command Mode)::DOSDOS下,在装有下,在装有Free Free PascalPascal的文件目录下,键入的文件目录下,键入FPFP即可进入即可进入Free PascalFree Pascal集成环境集成环境 2、2、Win9XWin9X或或Win2000/XP/2003Win2000/XP/2003模式下的启动:如果在模式下的启动:如果在Win9XWin9X或或Win2000Win2000的的“ “开始开始程序程序” ”菜单中通过单击菜单中通过单击Free PascalFree Pascal快捷方式即可快捷方式即可启动启动FPFP的的IDEIDE开发环境。
如果开发环境如果FPFP的的IDEIDE环境出现乱码,可以通过以下环境出现乱码,可以通过以下方式解决:退出方式解决:退出FPFP的的IDEIDE环境,在环境,在FreePascalFreePascal的快捷方式上点选右键,的快捷方式上点选右键,在在“ “选项选项” ”标签里面选择标签里面选择“ “当前代码页当前代码页” ”为为“ “437 437 ((OEM-OEM-美国)美国)” ”,确定后重新启动,确定后重新启动FreePascalFreePascal即可 3 3、工作目录,、工作目录,FreePascalFreePascal默认工作目录为默认工作目录为fp.exefp.exe所在文件夹,所在文件夹,我们可以自定义目录,使我们编写的程序存放于一个固定位置一种我们可以自定义目录,使我们编写的程序存放于一个固定位置一种方式是修改快捷方式里面起始位置,另一种方式是启动方式是修改快捷方式里面起始位置,另一种方式是启动FPFP后选取后选取FileFile菜单里面的菜单里面的” ”Change dir…”Change dir…”命令来更改当前工作目录命令来更改当前工作目录。
FreePascal主界面Pascal程序基本组成程序基本组成例例1.11.1 计算半径为 计算半径为R R的圆面积的圆面积S S programprogram Area; { Area; {程序首部程序首部} } constconst pi=3.14159; pi=3.14159; { {说明部分说明部分————数据描述数据描述} } varvar s,r:reals,r:real; ; beginbegin { {执行部分执行部分} } readln(rreadln(r); ); s:=pi*s:=pi*sqr(rsqr(r); ); writeln('swriteln('s=',s);=',s); end.end.Pascal程序基本组成程序基本组成 program program 程序名;程序名; usesuses 已知单元说明; 已知单元说明; label label 标号说明;标号说明; const const 常量说明; 常量说明; type type 类型说明; 类型说明; varvar 变量说明; 变量说明; function function 函数说明; 函数说明; procedure procedure 过程说明; 过程说明; begin begin …… …… 语句语句 end.end.一个完全的一个完全的PascalPascal程序结构程序结构保留字(关键字) exit exit exports exports false false file file finalization finalization finally finally for for function function gotogoto if if implementation implementation in in inherited inherited initialization initialization inline inline interface interface is is label label library library mod mod absolute absolute and and array array as as asmasm begin begin break break case case class class const const constructor constructor continue continue destructor destructor dispose dispose div div do do downtodownto else else end end exceptexceptnew new nil nil not not object object of of on on on on operator operator or or packed packed procedure procedure program program property property raise raise record record reintroduce reintroduce repeat repeat self self set set shlshl shrshr string string then then threadvarthreadvar to to true true try try type type unit unit until until uses uses varvar while while with with xorxor 共共7575个保留字个保留字保留符号ØØ单元符号:ØØ+ - * / = < > [ ] . , ( ) : ^ @ { } $ #ØØ双元符号:ØØ<= >= := += -= *= /= (* *) (. .) //ØØ注释符号:{ } (* *) //标识符 1)表识符的定义:标识符就是以字母开头的字母数字序列,可以包含1)表识符的定义:标识符就是以字母开头的字母数字序列,可以包含“ “_” _” 。
有效长度为有效长度为6363个字符,并且大个字符,并且大小写等效可以用来标示常量、变量、自定义变量名、程序名、函数名、过程名等例如例小写等效可以用来标示常量、变量、自定义变量名、程序名、函数名、过程名等例如例1.11.1中的中的Area(Area(程序程序名名) ),,pi(pi(符号常量符号常量) ),,s s、、r( r(变量名变量名) )都是标识符都是标识符2)表识符的分类2)表识符的分类 A、标准标识符:指 A、标准标识符:指PascalPascal语言预先定义的表识符,具有特殊含义语言预先定义的表识符,具有特殊含义 以下列举了 以下列举了Free PascalFree Pascal语言部分常用的标准表识符:语言部分常用的标准表识符: 标准常量 标准常量 False False MaxintMaxint True True MaxLongintMaxLongint 标准类型 标准类型 Boolean Char Real Integer StringBoolean Char Real Integer String 标准函数 标准函数 Abs Abs ArctanArctan ChrChr CosCos EofEof EolnEoln Exp Exp LnLn Odd Odd OrdOrd PredPred Round Sin Round Sin SqrSqr SqrtSqrt SuccSucc TruncTrunc 标准过程 标准过程 Dispose Get New Pack Page Put Read Dispose Get New Pack Page Put Read ReadlnReadln Reset Rewrite Unpack Write Reset Rewrite Unpack Write WritelnWriteln 标准文件 标准文件 Input OutputInput Output B、用户自定义表识符:由你来根据需要定义。
B、用户自定义表识符:由你来根据需要定义 选用的表识符不能和保留字相同 选用的表识符不能和保留字相同 语法上允许预定义的标准标识符作为你定义的的表识符使用,但最好还是不要用 语法上允许预定义的标准标识符作为你定义的的表识符使用,但最好还是不要用 字母_字母数字_Pascal数据类型数据类型 数据是程序设计的一个重要内容,其重要特征 数据是程序设计的一个重要内容,其重要特征--------数据类型,确数据类型,确定了该数据的形、取值范围以及所能参与的运算定了该数据的形、取值范围以及所能参与的运算 Free Pascal Free Pascal 提供了丰富的数据类型,这些数据类型可以分为三提供了丰富的数据类型,这些数据类型可以分为三大类:简单类型、构造类型和指针类型,其中简单类型可以分为标准大类:简单类型、构造类型和指针类型,其中简单类型可以分为标准类型(整型、实型、字符型和布尔型)和自定义类型(枚举型和子界类型(整型、实型、字符型和布尔型)和自定义类型(枚举型和子界型),构造类型可以分为数组类型、集合类型、记录类型和文件类型型),构造类型可以分为数组类型、集合类型、记录类型和文件类型。
这些数据类型中除了指针类型是动态数据类型外,其他的都是静态数这些数据类型中除了指针类型是动态数据类型外,其他的都是静态数据类型在这些数据类型中简单类型都是有序类型,除了实型以外的据类型在这些数据类型中简单类型都是有序类型,除了实型以外的简单类型都是顺序类型,所谓顺序类型就是他们的值不仅是有序的而简单类型都是顺序类型,所谓顺序类型就是他们的值不仅是有序的而且是有顺序号且是有顺序号 在这里主要介绍整型、实型、字符型和布尔型四种常用的数据类 在这里主要介绍整型、实型、字符型和布尔型四种常用的数据类型Pascal数据类型数据类型 1、整型1、整型 一个整型数据用来存放整数 一个整型数据用来存放整数Free PascalFree Pascal支持十种预定义整型,常用的有支持十种预定义整型,常用的有shortintshortint(短整型)、(短整型)、 integerinteger(整型)、(整型)、 longintlongint(长整型)、(长整型)、 bytebyte(字节型)和(字节型)和 wordword(字类型)、(字类型)、longwordlongword(无符号长整(无符号长整型)、型)、Int64Int64((8 8字节长整型)、字节长整型)、QwordQword((8 8字节无符号长整型),字节无符号长整型),Free PascalFree Pascal分别用不同的名字作为分别用不同的名字作为他们的标识符。
每一种类型规定了相应的整数取值范围以及所占用的内存字节数他们的标识符每一种类型规定了相应的整数取值范围以及所占用的内存字节数类型类型数值范围数值范围占字节数占字节数Byte 0 .. 2551Shortint -128 .. 127 1Word 0 .. 65535 2Integer -32768 .. 32767 2Longint -2147483648 .. 2147483647 4Longword 0..4294967295 4Int64 -9223372036854775808 .. 9223372036854775807 8QWord 0 .. 18446744073709551615 8 Free PascalFree Pascal规定了两个预定义整型常量表识符规定了两个预定义整型常量表识符maxintmaxint和和maxlonintmaxlonint,他们各表示确定的常数值,,他们各表示确定的常数值,maxintmaxint为为3276732767,, maxlongintmaxlongint为为21474836472147483647,他们的类型分别是,他们的类型分别是integer integer 和和longintlongint。
Pascal数据类型数据类型 2、实型 2、实型 一个实型数据用类存放实数 一个实型数据用类存放实数Free PascalFree Pascal支持五种预定义实型,它们是支持五种预定义实型,它们是realreal(基(基本实型)、本实型)、 singlesingle(单精度实型)、(单精度实型)、doubledouble(双精度实型)、(双精度实型)、extendedextended(扩展实型)、(扩展实型)、compcomp(装配实型),(装配实型),Free PascalFree Pascal分别用不同的名字作为它们的表识符每一种类型规分别用不同的名字作为它们的表识符每一种类型规定了相应的实数取值范围、所占用的内存字节数以及它们所能达到的精度定了相应的实数取值范围、所占用的内存字节数以及它们所能达到的精度 类型 类型 数值范围 占字节数 有效位数数值范围 占字节数 有效位数 realreal 2.9e-39..1.7e382.9e-39..1.7e38 6 6 11..12 11..12 singlesingle 1.5e-45..3.4e381.5e-45..3.4e38 4 4 7..8 7..8 doubledouble 5.0e-324..1.7e3085.0e-324..1.7e308 8 8 15..16 15..16 extendedextended 3.4e-4932..1.1e4932 3.4e-4932..1.1e4932 10 10 19..20 19..20 compcomp -2**63+1..2**63-1-2**63+1..2**63-1 8 8 19..20 19..20 Free PascalFree Pascal支持两种用于执行实型运算的代码生成模式:软件仿真模式和支持两种用于执行实型运算的代码生成模式:软件仿真模式和80x8780x87浮点模式。
除了浮点模式除了realreal可以在软件仿真模式下直接运行以外,其他类型必须在可以在软件仿真模式下直接运行以外,其他类型必须在80x8780x87浮点浮点模式下运行模式下运行Pascal数据类型数据类型 3、布尔型 3、布尔型 一个布尔型数据用来存放逻辑值(布尔值)布尔型的值只有两个: 一个布尔型数据用来存放逻辑值(布尔值)布尔型的值只有两个:falsefalse和和truetrue,,并且并且falsefalse的序号是的序号是0 0,,truetrue的序号是的序号是1 1false false 和和truetrue都是预定义常数表识符,分别表示都是预定义常数表识符,分别表示逻辑假和逻辑真并且逻辑假和逻辑真并且true>falsetrue>falsebooleanboolean是布尔型的表识符是布尔型的表识符 4、字符型4、字符型 字符型用 字符型用charchar作为表识符字符型必须用单引号括起来,字母作为字符型时,大作为表识符字符型必须用单引号括起来,字母作为字符型时,大小写是不等价的,并且字符型只允许单引号中有一个字符,否则就是字符串。
小写是不等价的,并且字符型只允许单引号中有一个字符,否则就是字符串 5 5、字符串、字符串 字符串用字符串用stringstring或或ansistringansistring作为标识符字符串是用单引号括起来的字符序列,定作为标识符字符串是用单引号括起来的字符序列,定义标例义标例 :: s:strings:string;//;//字符串的最大长度为字符串的最大长度为255255 s:string[10];// s:string[10];//长度为长度为1010的字符串的字符串 s:ansistrings:ansistring;//;//字符串的长度无限制字符串的长度无限制常量常量 1)常量:在某个程序的整个过程中其值不变的量 1)常量:在某个程序的整个过程中其值不变的量 2)常量定义:常量定义出现在说明部分它的语法格式是: 2)常量定义:常量定义出现在说明部分。
它的语法格式是: constconst < <常量标识符常量标识符>=<>=<常量常量>;>; ...... 常量表识符的类型由定义它的常量的类型决定例如: 常量表识符的类型由定义它的常量的类型决定例如:const a=12 const a=12 隐含隐含说明说明a a是整型;是整型;const r=3.21 const r=3.21 隐含说明隐含说明r r是实型是实型............ 3)常量定义部分必须以保留字 3)常量定义部分必须以保留字constconst开头,可以包含一个或几个常量定开头,可以包含一个或几个常量定义,而且每个常量均以分号结束义,而且每个常量均以分号结束 4) 4)Free PascalFree Pascal类型常量类型常量 类型常量,又称变量常数,它是 类型常量,又称变量常数,它是Free PascalFree Pascal的一个扩充特性类型常量的一个扩充特性类型常量的定义与标准的定义与标准PascalPascal规定的常数定义和变量说明有所区别类型常量定义的规定的常数定义和变量说明有所区别类型常量定义的语法格式:语法格式: const
它的语法格式是: 2)变量说明:变量说明出现在说明部分它的语法格式是: varvar < <变量标识符列表变量标识符列表>:<>:<类型类型>;>; ...... < <变量标识符列表变量标识符列表>:<>:<类型类型>;>; 其中,保留字 其中,保留字varvar表示开始一个变量说明部分变量标识符列表是一个用逗表示开始一个变量说明部分变量标识符列表是一个用逗号隔开的标识符序列,冒号后面的类型是类型标识符每个变量说明均以分号结号隔开的标识符序列,冒号后面的类型是类型标识符每个变量说明均以分号结束 例如: 例如: varvar a,b,c:integera,b,c:integer; ; m,n:realm,n:real; ;自定义变量ØØ定义形式:定义形式:ØØTypeTypeØØ标识符标识符= =自定义变量类型;自定义变量类型;ØØ例:例:ØØTypeTypeØØ listtypelisttype=array[0..999]of integer;=array[0..999]of integer;ØØVarVarØØ list:listtypelist:listtype; ;ØØ等同于声明等同于声明listlist为一维数组类型。
为一维数组类型标准函数标准函数 1、算术函数1、算术函数 函数标识符 自变量类型 意义 结果类型 函数标识符 自变量类型 意义 结果类型 absabs 整型、实型 绝对值 同自变量整型、实型 绝对值 同自变量 arctanarctan 整型、实型 反正切 实型 整型、实型 反正切 实型 coscos 整型、实型 余弦 实型整型、实型 余弦 实型 expexp 整型、实型 指数 实型 整型、实型 指数 实型 fracfrac 整型、实型 小数部分 实型整型、实型 小数部分 实型 intint 整型、实型 整数部分 实型整型、实型 整数部分 实型 lnln 整型、实型 自然对数 实型 整型、实型 自然对数 实型 pipi 无自变量 圆周率 实型 无自变量 圆周率 实型 sinsin 整型、实型 正弦 实型整型、实型 正弦 实型 sqrsqr 整型、实型 平方 同自变量整型、实型 平方 同自变量 sqrtsqrt 整型、实型 平方根 实型 整型、实型 平方根 实型 例: 例:abs(-4)=4abs(-4)=4、、abs(-7.49)=7.49abs(-7.49)=7.49、、arctan(0)=0.0arctan(0)=0.0、、sin(pisin(pi)=0.0)=0.0 frac(-3.71)=-0.71frac(-3.71)=-0.71、、int(-3.71)=-3.0int(-3.71)=-3.0、、sqr(4)=16sqr(4)=16、、sqrt(4)=2 sqrt(4)=2 标准函数标准函数 2、标量函数 2、标量函数 函数标识符 自变量类型 意义 结果类型 函数标识符 自变量类型 意义 结果类型 oddodd 整型 判断奇数 布尔型整型 判断奇数 布尔型 predpred 离散类型 求前趋 同自变量 离散类型 求前趋 同自变量 succsucc 离散类型 求后继 同自变量 离散类型 求后继 同自变量 例: 例:odd(1000)=falseodd(1000)=false、、odd(3)trueodd(3)true、、pred(2000)=1999 pred(2000)=1999 succ(2000)=2001 succ(2000)=2001、、pred('xpred('x')='w'')='w'、、succ('xsucc('x')='y' ')='y' 标准函数标准函数 3、转换函数3、转换函数 函数标识符 自变量类型 意义 结果类型 函数标识符 自变量类型 意义 结果类型 chrchr bytebyte型型 自量对应的字符自量对应的字符 字符型 字符型 ordord 离散类型 离散类型 自量对应的序号自量对应的序号 longintlongint roundround 实型 四舍五入 实型 四舍五入 longintlongint trunctrunc 实型 截断取整 实型 截断取整 longintlongint 标准函数标准函数 4、杂类函数 4、杂类函数 函数标识符 自变量类型 函数标识符 自变量类型 意义 意义 结果类型结果类型 random random 无自变量 无自变量 [0,1)[0,1)之间的随机实数 之间的随机实数 real real randomrandom wordword [0,[0,自变量自变量) )之间的随机整数 之间的随机整数 word word randomizerandomize 无自变量无自变量 用一随机值初始化内部随机数产生器用一随机值初始化内部随机数产生器 longintlongint upcaseupcase 字符型字符型 使小写英文字母变为大写使小写英文字母变为大写 字符型字符型 运算符和表达式运算符和表达式1、运算符和优先级1、运算符和优先级 1)运算符 1)运算符 A、算术运算符 A、算术运算符 运算符 运算 运算对象 结果类型 运算符 运算 运算对象 结果类型 + + 加 整型、实型 实型、整型 加 整型、实型 实型、整型 - - 减 整型、实型 整型、实型减 整型、实型 整型、实型 * * 乘 整型、实型 整型、实型 乘 整型、实型 整型、实型 / / 除除 整型、实型整型、实型 整型、实型整型、实型 divdiv 整除 整除 整型 整型 整型 整型 modmod 取余 取余 整型 整型整型 整型 B、逻辑运算符 B、逻辑运算符 运算符 运算 运算对象 结果类型 运算符 运算 运算对象 结果类型 notnot 逻辑非 逻辑非 布尔型 布尔型布尔型 布尔型 andand 逻辑与 布尔型 布尔型逻辑与 布尔型 布尔型 oror 逻辑或 布尔型 逻辑或 布尔型 布尔型布尔型 xorxor 逻辑异或 逻辑异或 布尔型 布尔型 布尔型布尔型运算符和表达式运算符和表达式 C、关系运算符 C、关系运算符 运算符 运算符 运算 运算对象 结果类型 运算 运算对象 结果类型 = = 等于等于 简单类型 简单类型 布尔型布尔型 <><> 不等于 简单类型 不等于 简单类型 布尔型 布尔型 < < 小于 简单类型 布尔型小于 简单类型 布尔型 > > 大于 简单类型 布尔型大于 简单类型 布尔型 <=<= 小于等于小于等于 简单类型 布尔型 简单类型 布尔型 >=>= 大于等于 大于等于 简单类型 简单类型 布尔型布尔型 2)优先级2)优先级 操作符优先级Not, @ 1* / div mod and shl shr as 2+ - or xor 3< <> < > <= >= in is 4同优先级别的运算符从左向右运算运算符和表达式运算符和表达式2、表达式2、表达式 1)算术表达式:算术表达式是由算术运算符连接常量、变量、函数的式 1)算术表达式:算术表达式是由算术运算符连接常量、变量、函数的式子。
算术表达式中各个运算符的次序为:子算术表达式中各个运算符的次序为: ( )-->( )-->函数函数-->*,/,-->*,/,div,moddiv,mod-->+,--->+,- 2)布尔表达式: 2)布尔表达式:Free PascalFree Pascal提供给布尔表达式以下基本操作:逻辑运提供给布尔表达式以下基本操作:逻辑运算和关系运算算和关系运算not, and, or, not, and, or, xorxor, >, >=, <, <=, >, >=, <, <=)) 赋值语句赋值语句 1、赋值语句是最简单的语句,其一般形式为 1、赋值语句是最简单的语句,其一般形式为< <变量变量>:=<>:=<表达式表达式> > 2、赋值语句的作用是计算表达式的值,并赋给变量 2、赋值语句的作用是计算表达式的值,并赋给变量 3、对于任何一个变量必须首先赋值,然后才能引用,否则,未赋初值 3、对于任何一个变量必须首先赋值,然后才能引用,否则,未赋初值的变量将以一个随机值参与运算另外,赋值号两边的类型必须相同,但表的变量将以一个随机值参与运算。
另外,赋值号两边的类型必须相同,但表达式值为整数时,它可自动化为实型后赋给该实型变量,即符合赋值相容达式值为整数时,它可自动化为实型后赋给该实型变量,即符合赋值相容 输入语句输入语句 1、 1、Free PascalFree Pascal语言的输入语句有如下两种形式:语言的输入语句有如下两种形式: 1) 1)read(
一个自动换行,从下一行开始再输入数据一个readread语句执行完后,数据行中多语句执行完后,数据行中多余的未读数据可以被下一个输入语句读入;而一个余的未读数据可以被下一个输入语句读入;而一个readlnreadln于执行完后,数据于执行完后,数据行中多余未读数据就没有用了行中多余未读数据就没有用了readlnreadln语句中可以不包含变量名表即有以语句中可以不包含变量名表即有以下等价情况:下等价情况: read(a,b);readlnread(a,b);readln等价于等价于readln(a,breadln(a,b) ) 输入语句输入语句 3)输入语句输入的数据类型必须和变量一一对应如果输入的是一串整数或实数,数据间用3)输入语句输入的数据类型必须和变量一一对应如果输入的是一串整数或实数,数据间用空格或回车分隔;若输入的是一串字符,则不用分隔一次性读入的数据类型必须要求一致空格或回车分隔;若输入的是一串字符,则不用分隔一次性读入的数据类型必须要求一致. . 例: 例: program program shurushuru; ; varvar x:realx:real; ; c:charc:char; ; beginbegin write(‘pleasewrite(‘please input the number: ($XXX.XX)’); input the number: ($XXX.XX)’); readln(c,xreadln(c,x);//);//错误错误readln(creadln(c);//);//字符与实数分开来读入字符与实数分开来读入readln(xreadln(x); ); writeln('Thewriteln('The price is ', price is ',c,xc,x) ) end. end. 输出语句输出语句 1、 1、Free PascalFree Pascal的输出语句有两种形式:的输出语句有两种形式: 1) 1)write(
如果是变量、函数名、表达式,则将其计算结果输出;如果是常量或符串如果是变量、函数名、表达式,则将其计算结果输出;如果是常量或字符串,则直接输出其值字符串,则直接输出其值 2) 2)writelnwriteln和和writelnwriteln的区别在于:的区别在于:writewrite语句是输出项输出后,不换行,语句是输出项输出后,不换行,光标停留在最后一项后,光标停留在最后一项后,writelnwriteln语句按项输出后,自动换行,光标则停留在语句按项输出后,自动换行,光标则停留在下一行的开始位置下一行的开始位置 writelnwriteln语句允许不含有输出项,即仅语句允许不含有输出项,即仅writelnwriteln; ;表示换行表示换行输出语句输出语句 3)3)Free PascalFree Pascal语言把输出项的数据显示占用的宽度称为域宽,你可以根语言把输出项的数据显示占用的宽度称为域宽,你可以根据输出格式的要求在输出语句中自动定义每个输出项的宽度定义宽度时分据输出格式的要求在输出语句中自动定义每个输出项的宽度定义宽度时分为单域宽和双域宽。
为单域宽和双域宽 A、单域宽输出格式为 A、单域宽输出格式为writeln(Iwriteln(I::n)n) 在 在n n个字符宽的输出域上按右对齐方式输出个字符宽的输出域上按右对齐方式输出I I的值,若的值,若n n大于大于I I的实际位数,的实际位数,则在则在I I值前面补值前面补(n-I(n-I的实际位数)个空格若的实际位数)个空格若I I的实际位数大于的实际位数大于n n,则自动突破,则自动突破限制n n必须是整数必须是整数 B、双域宽输出格式为 B、双域宽输出格式为writeln(awriteln(a::mm::n)n) 双域宽主要用于实型数据的输出 双域宽主要用于实型数据的输出n n的用法同上在的用法同上在n n个字符宽的输出域个字符宽的输出域上按右队齐方式用小数点形式输出上按右队齐方式用小数点形式输出a a的数值,的数值,mm是小数点后的位数原来的数是小数点后的位数原来的数据按该该格式指定的小数位数四舍五入若据按该该格式指定的小数位数四舍五入若m=0 m=0 ,则不输出小数部分和小数,则不输出小数部分和小数点,原数据四舍五入取整点,原数据四舍五入取整n n,,mm必须是整数。
必须是整数 输出语句输出语句 program program shuchushuchu; ; constconst s='s='pascalpascal'; '; varvar i:integeri:integer; ; r:realr:real; ; c:charc:char; ; b:booleanb:boolean; ; beginbegin i:=12345;i:=12345; r:=123.45r:=123.45 c:='a';c:='a'; b:=true;b:=true; writeln('iwriteln('i=');='); writeln(i:6);writeln(i:6); writeln('rwriteln('r=',r,r:6:1);=',r,r:6:1); writeln('cwriteln('c=',c,c:10);=',c,c:10); writeln('bwriteln('b=',b,b:10)=',b,b:10) end.end. 复合语句复合语句 复合语句是由若干语句组成的序列,语句之间用分号复合语句是由若干语句组成的序列,语句之间用分号“ “;;” ”隔开,并且以隔开,并且以beginbegin和和endend括起来,作为一条语句。
复合语句的一般形式:括起来,作为一条语句复合语句的一般形式: beginbegin 语句 语句1 1;; 语句 语句2 2;; ………… 语句 语句n n;; end.end.复合语句复合语句 program program jiaohuanjiaohuan; ; varvar a,b,t:integera,b,t:integer; ; begin begin a:=10;b:=20;a:=10;b:=20; beginbegin t:=a;t:=a; a:=b;a:=b; b:=t;b:=t; end;end; writeln('awriteln('a=',=',a,'ba,'b=',b)=',b) end. end. If 语句语句 If If语句是由一个布尔表达式和两个供选择的操作序列组成运行时根据布语句是由一个布尔表达式和两个供选择的操作序列组成运行时根据布尔表达式求值结果,选取其中之一的操作序列执行。
尔表达式求值结果,选取其中之一的操作序列执行 有两种形式的 有两种形式的IFIF语句:语句: 1、 1、if if < <布尔表达式布尔表达式> > then
在用成复合语句在用if if语句连续嵌套时,如果你插入适量的复合语句,有利于程语句连续嵌套时,如果你插入适量的复合语句,有利于程序的阅读和理解序的阅读和理解 例:当 例:当x>0x>0时候,计算时候,计算x*xx*x,并且输出,并且输出x x和和x*xx*x,, program lianxie3;program lianxie3; varvar x,x1:real; x,x1:real; beginbegin readln('xreadln('x=',x);=',x); if x>= then if x>= then beginbegin x1:=x*x;x1:=x*x; writeln('xwriteln('x*x=',x1);*x=',x1); writeln('xwriteln('x=',x);=',x); end;end; end.end. * *当当if if 语句嵌套时,语句嵌套时,Free PascalFree Pascal约定约定elseelse总是和最近的一个总是和最近的一个if if配对配对* *Case语句语句 CaseCase语句是由一个表达式和众多可选择的操作序列组成。
运行时,根据语句是由一个表达式和众多可选择的操作序列组成运行时,根据表达式的求值结果,在众多的分支中选取一个分支执行其形式为:表达式的求值结果,在众多的分支中选取一个分支执行其形式为: casecase 表达式 表达式 ofof 常量 常量1 1:语句:语句1 1;; 常量 常量2 2:语句:语句2 2;; ………… 常量 常量n n:语句:语句n n;; elseelse 语句 语句 n+1 n+1 {可选项}{可选项} end;end; 表达式只能是顺序类型(除了实型以外的简单类型),其值必须是唯一 表达式只能是顺序类型(除了实型以外的简单类型),其值必须是唯一确定并且和表达式类型相同确定并且和表达式类型相同casecase语句执行和表达式值相匹配的语句执行和表达式值相匹配的casecase常数所常数所指向的那条语句,如果没有相匹配的值,则执行指向的那条语句,如果没有相匹配的值,则执行elseelse部分(如果有的话)或部分(如果有的话)或者什么也不做在者什么也不做在elseelse前面的语句末尾有分号,这是和前面的语句末尾有分号,这是和if if语句不同的。
语句不同的 Case语句语句 例:根据学生的成绩给予相应的等低,对应关系如下: 例:根据学生的成绩给予相应的等低,对应关系如下: 90----100 A90----100 A 80----89 B80----89 B 60----79 C60----79 C 6060以下 以下 D D program program chengjichengji; ; varvar s:real;ch:chars:real;ch:char; ; beginbegin write('inputwrite('input the score: '); the score: ');readln(sreadln(s); ); if(sif(s>=0)and(s<=100)then>=0)and(s<=100)then case s div 10 ofcase s div 10 of 10,9:ch:='B';10,9:ch:='B'; 8:ch:='B';8:ch:='B'; 7,6:='C';7,6:='C'; else else chch:='D';:='D'; end;end; writeln(s,'--',chwriteln(s,'--',ch); ); end.end. 条件语句练习题条件语句练习题 1 1、从键盘上读入长方形的边长、从键盘上读入长方形的边长a,ba,b,计算它的面积和周长,输出。
计算它的面积和周长,输出 2 2、输入一个时、分、秒,把它转换为一个秒数输入一个时、分、秒,把它转换为一个秒数 3 3、从键盘读入一个数,判断它的正负是正数,则输出、从键盘读入一个数,判断它的正负是正数,则输出"+""+",是负数,则输出,是负数,则输出"-""-" 4 4、输入两个数、输入两个数a,ba,b,输出较大数的平方值输出较大数的平方值 5 5、铁路托运行李规定:行李重不超过、铁路托运行李规定:行李重不超过5050公斤的,托运费按每公斤公斤的,托运费按每公斤0.150.15元计费;如超元计费;如超 5050公斤,超过部分每公斤加收公斤,超过部分每公斤加收0.100.10元编一程序完成自动计费工作编一程序完成自动计费工作 6 6、某超市为了促销,规定:购物不足、某超市为了促销,规定:购物不足5050元的按原价付款,超过元的按原价付款,超过5050不足不足100100的按九折的按九折 付款,超过付款,超过100100元的,超过部分按八折付款编一程序完成超市的自动计费的工作元的,超过部分按八折付款。
编一程序完成超市的自动计费的工作 7 7、输入、输入a,b,ca,b,c三个不同的数,将它们按由小到大的顺序输出三个不同的数,将它们按由小到大的顺序输出 8 8、当前小学生的成绩单由以前的百分制改为优秀、良好、合格、不合格四个等级的等级、当前小学生的成绩单由以前的百分制改为优秀、良好、合格、不合格四个等级的等级 制编一程序完成分数的自动转换工作转换规则如下:制编一程序完成分数的自动转换工作转换规则如下:6060分以下的为不合格;分以下的为不合格;60 60 到到6969分为合格;分为合格;7070到到8989分为良好;分为良好;9090分以上的为优秀提示:可以利用分以上的为优秀提示:可以利用DIVDIV运算运算 来使程序更简明)来使程序更简明) 9 9、打印某年某月有多少天提示:、打印某年某月有多少天提示:A A、闰年的计算方法:年数能被、闰年的计算方法:年数能被4 4整除,并且不能整除,并且不能 被被100100整除;或者能被整除;或者能被400400整除的整数年份。
整除的整数年份B B、利用、利用MODMOD运算可以判断一个数能否运算可以判断一个数能否 被另一个数整除)被另一个数整除)For语句语句 for for 语句用来描述已知重复次数的循环结构语句用来描述已知重复次数的循环结构 for for 语句有两种形式:语句有两种形式: 1、 1、for for 控制变量:=初值 控制变量:=初值 toto 终值 终值 dodo 语句; 语句; 2、 2、for for 控制变量:=初值 控制变量:=初值 downtodownto 终值 终值 dodo 语句; 语句; 第一种形式的 第一种形式的for for 语句是递增循环首先将初值赋给控制变量,接着判断语句是递增循环首先将初值赋给控制变量,接着判断控制变量的值是否小于或等于终值,若是,则执行循环体,在执行了循环体控制变量的值是否小于或等于终值,若是,则执行循环体,在执行了循环体之后,自动将控制变量的值该为它的后继值,并重新判断是否小于或等于终之后,自动将控制变量的值该为它的后继值,并重新判断是否小于或等于终值当控制变量的值大于终值时,退出值。
当控制变量的值大于终值时,退出forfor循环,执行循环,执行forfor语句之后的语句第语句之后的语句第一种形式的一种形式的for for 语句是递减循环首先将初值赋给控制变量,接着判断控制变语句是递减循环首先将初值赋给控制变量,接着判断控制变量的值是否大于或等于终值,若是,则执行循环体,在执行了循环体之后,量的值是否大于或等于终值,若是,则执行循环体,在执行了循环体之后,自动将控制变量的值该为它的前趋值,并重新判断是否大于或等于终值当自动将控制变量的值该为它的前趋值,并重新判断是否大于或等于终值当控制变量的值小于终值时,退出控制变量的值小于终值时,退出forfor循环,执行循环,执行forfor语句之后的语句语句之后的语句for for 语句语句中的初值、终值、控制变量的数据都必须是顺序类型当初值和终值确定后,中的初值、终值、控制变量的数据都必须是顺序类型当初值和终值确定后,重复的次数就确定不变了,并且控制变量在重复语句内不能施加任何赋值操重复的次数就确定不变了,并且控制变量在重复语句内不能施加任何赋值操作 For语句语句 例:计算 例:计算1+2+3+……+99+1001+2+3+……+99+100 program program jiajia; ; varvar i,sum:integeri,sum:integer; ; beginbegin sum:=0;sum:=0; for i:=1 to 100 dofor i:=1 to 100 do sum:=sum:=sum+isum+i; ; writeln(sumwriteln(sum); ); end. end. FOR循环练习题 1 1、计算下列式子的值:、计算下列式子的值:int64int64((1 1))1+2+……+1001+2+……+100((2 2))1+3+5+……+97+99 1+3+5+……+97+99 2 2、输入一个四位数,求它各位上数字的和。
输入一个四位数,求它各位上数字的和3 3、求水仙花数所谓水仙花数,是指一个三位数、求水仙花数所谓水仙花数,是指一个三位数abcabc,如果满足,如果满足a^3+b^3+c^3=a^3+b^3+c^3=abcabc,则,则abcabc是水仙花数是水仙花数4 4、宰相的麦子:相传古印度宰相达依尔,是国际象棋的发明者有一次,国王、宰相的麦子:相传古印度宰相达依尔,是国际象棋的发明者有一次,国王因为他的贡献要奖励他,问他想要什么达依尔说:因为他的贡献要奖励他,问他想要什么达依尔说:“ “只要在国际象棋棋盘只要在国际象棋棋盘上(共上(共6464格)摆上这么些麦子就行了:第一格一粒,第二格两粒,格)摆上这么些麦子就行了:第一格一粒,第二格两粒,…………,后,后面一格的麦子总是前一格麦子数的两倍,摆满整个棋盘,我就感恩不尽了面一格的麦子总是前一格麦子数的两倍,摆满整个棋盘,我就感恩不尽了 ”国王一想,这还不容易,刚想答应,如果你这时在国王旁边站着,你会不国王一想,这还不容易,刚想答应,如果你这时在国王旁边站着,你会不会劝国王别答应,为什么?会劝国王别答应,为什么?5 5、打印下列图案:(输入、打印下列图案:(输入N N值来控制图案的规模,下列图案均以值来控制图案的规模,下列图案均以N=3N=3为例)为例) & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & * * * * * * * * * * * * * * * * * * # @ * # @ * # # @ @ * * # # @ @ * * # # # @ @ @ * * * # # # @ @ @ * * * While语句语句 whilewhile语句用于语句用于“ “当满足某一条件时进行循环当满足某一条件时进行循环” ”的情况。
的情况 whilewhile语句的语法格式:语句的语法格式:while while 布尔表达式 布尔表达式 dodo 语句; 语句; 循环结束条件在进入循环体之前测试,若最初的测试值为 循环结束条件在进入循环体之前测试,若最初的测试值为falsefalse,则根本,则根本不进入循环体,也就是说不进入循环体,也就是说whilewhile循环是是属于当型循环为了能使循环是是属于当型循环为了能使whilewhile重复能重复能终止,循环体中一定要有影响布尔表达式的操作,否则该循就是一个死循环终止,循环体中一定要有影响布尔表达式的操作,否则该循就是一个死循环 While语句语句 例:计算从 例:计算从0 0到某个数之间所有奇数的和到某个数之间所有奇数的和 program program jishujishu; ; varvar odds,limit,sum:longintodds,limit,sum:longint; ; beginbegin readln(limitreadln(limit); ); sum:=0;sum:=0; odds:=1;odds:=1; while odds<=limit dowhile odds<=limit do beginbegin sum:=sum:=sum+oddssum+odds; ; odds:=odds+2odds:=odds+2 end;end; writeln(sumwriteln(sum) ) end. end. WHILE循环练习题1 1、计算下列式子的值:、计算下列式子的值:((1 1))1+3+……+991+3+……+99((2 2))1+2+4+8+……+128+2561+2+4+8+……+128+2562 2、输入一个整数,计算它各位上数字的和。
注意:是任意位的整数)、输入一个整数,计算它各位上数字的和注意:是任意位的整数)3 3、输入一整数、输入一整数A A,判断它是否质数提示:若从,判断它是否质数提示:若从2 2到到A A的平方根的范围内,没的平方根的范围内,没有一个数能整除有一个数能整除A A,则,则A A是质数4 4、求两个数的最小公倍数和最大公约数提示:公约数一定小于等于两数中、求两个数的最小公倍数和最大公约数提示:公约数一定小于等于两数中的小数,且能整除两数中的大数公倍数一定大于等于两数中的大数,且是的小数,且能整除两数中的大数公倍数一定大于等于两数中的大数,且是大数的倍数,又能给两数中的小数整除大数的倍数,又能给两数中的小数整除5 5、编写一个译码程序,把一个英语句子译成数字代码译码规则是以数字、编写一个译码程序,把一个英语句子译成数字代码译码规则是以数字1 1代替代替字母字母A A,数字,数字2 2代替字母代替字母B B,,…………,,2626代替字母代替字母Z Z,如遇空格则打印一个星号,如遇空格则打印一个星号‘*’‘*’,英文句子以,英文句子以‘ ‘.‘ .‘结束6 6、求水仙花数所谓水仙花数,是指一个三位数、求水仙花数。
所谓水仙花数,是指一个三位数abcabc,如果满足,如果满足a^3+b^3+c^3=a^3+b^3+c^3=abcabc,则,则abcabc是水仙花数是水仙花数 7 7、、“ “百钱买百鸡百钱买百鸡” ”是我国古代的著名数学题题目这样描述:是我国古代的著名数学题题目这样描述:3 3文钱可以买文钱可以买1 1只只公鸡,公鸡,2 2文钱可以买一只母鸡,文钱可以买一只母鸡,1 1文钱可以买文钱可以买3 3只小鸡用只小鸡用100100文钱买文钱买100100只鸡,只鸡,那么各有公鸡、母鸡、小鸡多少只?与之相似,有那么各有公鸡、母鸡、小鸡多少只?与之相似,有" "鸡兔同笼鸡兔同笼" "问题Repeat语句语句 repeat repeat 语句用于语句用于“ “重复执行循环体,一直到指定的条件为真时为止重复执行循环体,一直到指定的条件为真时为止” ” 语法格式为: 语法格式为: repeatrepeat 语句 语句1;1; ………… 语句语句n;n; untiluntil 布尔表达式; 布尔表达式; repeatrepeat重复基本上有和重复基本上有和whilewhile重复一样的描述循环计算的能力,但有一些重复一样的描述循环计算的能力,但有一些不同:在不同:在repeatrepeat语句的结构中,布尔表达式求值在计算操作之后,而语句的结构中,布尔表达式求值在计算操作之后,而whilewhile语语句中,布尔表达式求值在计算操作之前,也就是说句中,布尔表达式求值在计算操作之前,也就是说repeatrepeat至少执行一次循环至少执行一次循环体。
体whilewhile语句的成分语句只能是一个语句因此,当重复动作包含多个语句语句的成分语句只能是一个语句因此,当重复动作包含多个语句时,要用时,要用beginbegin和和end end ,使它变成一个复合语句而,使它变成一个复合语句而repeatrepeat语句的保留字语句的保留字repeatrepeat和和untiluntil已经起语句括号作用,可以包含多个语句而无须已经起语句括号作用,可以包含多个语句而无须beginbegin和和endendrepeatrepeat语句中,当布尔表达式为语句中,当布尔表达式为truetrue时结束循环,而时结束循环,而whilewhile语句中,是当表达语句中,是当表达式为式为falsefalse时才结束循环当描述由计算操作后的情况确定重复是否继续进行时才结束循环当描述由计算操作后的情况确定重复是否继续进行的计算时,通常用的计算时,通常用repeatrepeat语句描述语句描述Goto语句语句 gotogoto语句是一种无条件转向语句,它可以控制直接从程序的一条语语句是一种无条件转向语句,它可以控制直接从程序的一条语句转向另一条语句。
句转向另一条语句 gotogoto语句的语法形式为:语句的语法形式为:gotogoto 标号; 标号; 其中标号必须是不超过 其中标号必须是不超过4 4位整数的正整数或标识符组成,但标号必须位整数的正整数或标识符组成,但标号必须在说明语句中先予以说明在说明语句中先予以说明 gotogoto语句会使程序出现一种称为语句会使程序出现一种称为“ “乱面条乱面条” ”的结构,因此你最好还的结构,因此你最好还是不要去用是不要去用 程序设计与算法程序设计与算法 一、算法一、算法一、算法一、算法 算法是解决问题方法的精确描述,但是并不是所有问题都有算法,有些问题经研究可行,算法是解决问题方法的精确描述,但是并不是所有问题都有算法,有些问题经研究可行,则相应有算法,但这并不是说问题就有结果上述的则相应有算法,但这并不是说问题就有结果上述的“ “可行可行” ”,是指对算法的研究是指对算法的研究 1.待解问题的描述1.待解问题的描述 待解问题表述应精确、简练、清楚,使用形式化模型刻划问题是最恰当的例如,使用待解问题表述应精确、简练、清楚,使用形式化模型刻划问题是最恰当的。
例如,使用数学模型刻划问题是最简明、严格的,一旦问题形式化了,就可依据相应严格的模型数学模型刻划问题是最简明、严格的,一旦问题形式化了,就可依据相应严格的模型对问题求解对问题求解 2.算法设计2.算法设计 算法设计的任务是对各类具体问题设计良好的算法及研究设计算法的规律和方法常用算法设计的任务是对各类具体问题设计良好的算法及研究设计算法的规律和方法常用的算法有:穷举搜索法、递归法、回溯法、贪心法、分治法等的算法有:穷举搜索法、递归法、回溯法、贪心法、分治法等 3.算法分析3.算法分析 算法分析的任务是对设计出的每一个具体的算法,利用数学工具,讨论各种复杂度,以算法分析的任务是对设计出的每一个具体的算法,利用数学工具,讨论各种复杂度,以探讨某种具体算法适用于哪类问题,或某类问题宜采用哪种算法探讨某种具体算法适用于哪类问题,或某类问题宜采用哪种算法 算法的复杂度分时间复杂度和空间复杂度算法的复杂度分时间复杂度和空间复杂度 .时间复杂度:在运行算法时所耗费的时间为.时间复杂度:在运行算法时所耗费的时间为f(nf(n)( )(即即 n n的函数的函数) )。
.空间复杂度:实现算法所占用的空间为.空间复杂度:实现算法所占用的空间为g(ng(n) )(也为(也为n n的函数)的函数) 称称O(f(nO(f(n)) ))和和O(g(nO(g(n)) ))为该算法的复杂度为该算法的复杂度程序设计与算法程序设计与算法 二、程序设计二、程序设计二、程序设计二、程序设计 1.程序1.程序 程序是对所要解决的问题的各个对象和处理规则的描述,或者说是数据结构和算法的描程序是对所要解决的问题的各个对象和处理规则的描述,或者说是数据结构和算法的描述,因此有人说,数据结构+算法=程序述,因此有人说,数据结构+算法=程序 2.程序设计2.程序设计 程序设计就是设计、编制和调试程序的过程程序设计就是设计、编制和调试程序的过程 3.结构化程序设计3.结构化程序设计 结构化程序设计是利用逐步求精的方法,按一套程式化的设计准则进行程序的设计由结构化程序设计是利用逐步求精的方法,按一套程式化的设计准则进行程序的设计由这种方法产生的程序是结构良好的所谓这种方法产生的程序是结构良好的。
所谓“ “结构良好结构良好” ”是指:是指: (1)易于保证和验证其正确性;(1)易于保证和验证其正确性; (2)易于阅读、易于理解和易于维护2)易于阅读、易于理解和易于维护 按照这种方法或准则设计出来的程序称为结构化的程序按照这种方法或准则设计出来的程序称为结构化的程序 程序设计与算法程序设计与算法 “ “逐步求精逐步求精” ”是对一个复杂问题,不是一步就编成一个可执行的程序,而是是对一个复杂问题,不是一步就编成一个可执行的程序,而是分步进行分步进行 .第一步编出的程序最为抽象;.第一步编出的程序最为抽象; .第二步编出的程序是把第一步所编的程序(如过程、函数等)细化,较为抽.第二步编出的程序是把第一步所编的程序(如过程、函数等)细化,较为抽象;象; ..………… .第.第i i步编出的程序比第步编出的程序比第i-1i-1步抽象级要低;步抽象级要低; ..………… .直到最后,第.直到最后,第n n步编出的程序即为可执行的程序。
步编出的程序即为可执行的程序 所谓所谓“ “抽象程序抽象程序” ”是指程序所描述的解决问题的处理规则,是由那些是指程序所描述的解决问题的处理规则,是由那些“ “做什么做什么” ”操作组成,而不涉及这些操作操作组成,而不涉及这些操作“ “怎样做怎样做” ”以及解决问题的对象具有什么结以及解决问题的对象具有什么结构,不涉及构造的每个局部细节构,不涉及构造的每个局部细节 程序设计与算法程序设计与算法 这一方法原理就是:对一个问题(或任务),程序人员应立足于这一方法原理就是:对一个问题(或任务),程序人员应立足于全局,考虑如何解决这一问题的总体关系,而不涉及每局部细节在全局,考虑如何解决这一问题的总体关系,而不涉及每局部细节在确保全局的正确性之后,再分别对每一局部进行考虑,每个局部又将确保全局的正确性之后,再分别对每一局部进行考虑,每个局部又将是一个问题或任务,因而这一方法是自顶而下的,同时也是逐步求精是一个问题或任务,因而这一方法是自顶而下的,同时也是逐步求精的采用逐步求精的优点是:的采用逐步求精的优点是: (1)便于构造程序。
由这种方法产生的程序,其结构清晰、易读、(1)便于构造程序由这种方法产生的程序,其结构清晰、易读、易写、易理解、易调试、易维护;易写、易理解、易调试、易维护; (2)适用于大任务、多人员设计,也便于软件管理2)适用于大任务、多人员设计,也便于软件管理 逐步求精方法有多种具体做法,例如流程图方法、基于过程或函数的逐步求精方法有多种具体做法,例如流程图方法、基于过程或函数的方法 程序设计与算法程序设计与算法[ [例例例例] ]求两自然数求两自然数, ,其和是其和是667,667,最小公倍数与最大公约数之比最小公倍数与最大公约数之比是是120:1(120:1(例如例如(115,552) (115,552) 、(、(232,435232,435))) ) [ [解解解解] ]两个自然数分别为两个自然数分别为mm和和667-m(2≤m≤ 333)667-m(2≤m≤ 333) 处理对象:处理对象:m(m(自然数自然数) )、、l( l(两数的最小公倍数两数的最小公倍数) )、、g g(两数的(两数的最大公约数)最大公约数) 处理步骤:对处理步骤:对mm从2到从2到333333检查检查l l与与g g的商为的商为120,120,且余数为且余数为0 0时时, ,打印打印mm与与667-m 667-m 。
程序设计与算法程序设计与算法第一层抽象程序:第一层抽象程序: Program Program TwoNumTwoNum; ; VarVar m,l,g:integerm,l,g:integer; ; Begin Begin for m:=2 to 333 do for m:=2 to 333 do begin begin l:=lcm(m,667-m); l:=lcm(m,667-m); {求最小公倍数}{求最小公倍数} g:=gcd(m,667-m)g:=gcd(m,667-m);; {求最大公约数}{求最大公约数} if (l=g*120)and(l mod g=0) then if (l=g*120)and(l mod g=0) then writeln(m:5,667-m:5); writeln(m:5,667-m:5); end; end; End. End. 程序设计与算法程序设计与算法 第二层考虑函数第二层考虑函数lcmlcm(最小公倍数)、(最小公倍数)、gcdgcd(最大公约数)的细化。
最大公约数)的细化 最大公约数问题是对参数最大公约数问题是对参数a a、、b b,找到一个数,找到一个数i i能整除能整除a a与与b b,,i i就是就是gcdgcd的函数值的函数值 Function Function gcd(a,b:integer):integergcd(a,b:integer):integer; ; varvar i:integeri:integer; ; begin for i:=a begin for i:=a downtodownto 1 do 1 do if if not((anot((a mod i=0)or(b mod i=0)) then mod i=0)or(b mod i=0)) then gcdgcd:=i;:=i; end; end; 程序设计与算法程序设计与算法 最小公倍数的计算是:若干个最小公倍数的计算是:若干个b b之和,若能被之和,若能被a a整除,整除,则该和便是则该和便是a a、、b b的最小公倍数。
的最小公倍数 Function Function lcm(a,b:integer):integerlcm(a,b:integer):integer; ; varvar i:integeri:integer; ; begin i:=b; begin i:=b; while i mod a=0 do i:= while i mod a=0 do i:=i+bi+b; ; lcm:=i; lcm:=i; end; end; 编程入门题例编程入门题例 1 1、位数对调、位数对调、位数对调、位数对调:输入一个三位自然数,把这个数的百位与个位数对调,输出对:输入一个三位自然数,把这个数的百位与个位数对调,输出对 调后的数例如:调后的数例如:Input 3 bit Input 3 bit natruenatrue data:234 data:234 n=432 n=432 [ [解解解解] ]1.1.先确定输入数先确定输入数n n是否三位数,即是否三位数,即n>99n>99且且n<=999n<=999。
2.2.位数对调位数对调:n=:n=abc→cbaabc→cba=x =x ①①百位数百位数a=na=n整除整除100100;;②②十位数十位数b=(n-a*100)b=(n-a*100)整除整除1010;;③③个位数个位数c=nc=n除以除以1010的余数;的余数; 3 3.得对调后的数:.得对调后的数:x=c*100+b*10+a x=c*100+b*10+a [ [程序程序程序程序] ] {$I-} {{$I-} {输入的数据为整数输入的数据为整数} } program program ThreebitThreebit; ; varvar x,n,a,b,c:INTEGERx,n,a,b,c:INTEGER; ; BEGIN BEGIN write('Inputwrite('Input 3 bit nature data:'); 3 bit nature data:'); readln(nreadln(n); ); IF (n>99) and (n<1000) then IF (n>99) and (n<1000) then begin a:=n DIV 100; { begin a:=n DIV 100; {求百位数求百位数} } b:=(n-a*100) DIV 10;{ b:=(n-a*100) DIV 10;{求十位数求十位数} } c:=n mod 10; { c:=n mod 10; {求个位数求个位数} } x:=c*100+b*10+a; { x:=c*100+b*10+a; {得新数得新数X} X} writeln('Numberwriteln('Number=',x:3); =',x:3); end end ELSE ELSE writeln('Inputwriteln('Input error!'); error!');END. END. 编程入门题例编程入门题例 2 2、求三角形面积:、求三角形面积:、求三角形面积:、求三角形面积:给出三角形的三个边长为给出三角形的三个边长为a a,,b b,,c c,求三角形的面积。
求三角形的面积 提示:根据海伦公式来计算三角形的面积:提示:根据海伦公式来计算三角形的面积: S S=;=;AreaArea==[ [解解解解] ]1 1.输入的三角形三边长.输入的三角形三边长a,b,ca,b,c要满足要满足“ “任意两边长的和大任意两边长的和大于第三边长于第三边长” ” 2 2.按海伦公式计算:.按海伦公式计算:s=s=((a+b+ca+b+c))/2/2;;x=s*(s-a)*(x=s*(s-a)*(s-bs-b)*()*(s-cs-c) ) 这时若这时若x>=0x>=0,则求面积:,则求面积:area=area=,并输出,并输出areaarea的值[ [程序程序程序程序] ]PROGRAM hl;PROGRAM hl;VAR VAR a,b,c,s,x,area:reala,b,c,s,x,area:real; ;BEGINBEGIN write('Inputwrite('Input a,b,c:');readln(a,b,ca,b,c:');readln(a,b,c); ); If (a>0) and (b>0) and (c>0) and ( If (a>0) and (b>0) and (c>0) and (a+ba+b> >c)and(a+cc)and(a+c> >b)and(b+cb)and(b+c>a) Then>a) Then Begin s:=(a+b+c)/2; x:=s*(s-a)*( Begin s:=(a+b+c)/2; x:=s*(s-a)*(s-bs-b)*()*(s-cs-c); ); If x>=0 Then Begin Area:= If x>=0 Then Begin Area:=SQRT(x);writeln('AreaSQRT(x);writeln('Area=',area:8:5); End;=',area:8:5); End; End End Else Else writeln('Inputwriteln('Input error!') error!')END.END.编程入门题例编程入门题例 3 3、模拟计算器:、模拟计算器:、模拟计算器:、模拟计算器:试编写一个根据用户键入的两个操作数和一个运算符,由计算试编写一个根据用户键入的两个操作数和一个运算符,由计算机输出运算结果的程序。
这里只考虑加(+)、减(-)、乘(*)、除机输出运算结果的程序这里只考虑加(+)、减(-)、乘(*)、除(/)四种运算/)四种运算 例1:例1:Input Input x,yx,y::15 315 3 Input operator(+,-,*,/): Input operator(+,-,*,/):++ 15.00+ 3.00= 18.0015.00+ 3.00= 18.00 例2:例2:Input Input x,yx,y::5 05 0 Input operator(+,-,*,/): Input operator(+,-,*,/):// divide is zero!divide is zero![ [解解解解] ]该题关键是判断输入的两数是作何种运算该题关键是判断输入的两数是作何种运算( (由输入的运算符由输入的运算符operatoroperator决定,决定, 如如'+''+'、、'-' '-'、、'*''*'、、'/' '/'分别表示加、减、乘、除法的运算分别表示加、减、乘、除法的运算) )。
其中要进行除其中要进行除(/)(/)运算时运算时, ,要先进行合法性检查,即除数不能为要先进行合法性检查,即除数不能为0 0[ [程序程序程序程序] ]PROGRAM PROGRAM OperOper; ;VarVar x,y,n:realx,y,n:real; ; operator:charoperator:char; ;BeginBegin write('Inputwrite('Input x,y:');readln(x,yx,y:');readln(x,y); ); write('Inputwrite('Input operator:');readln(operatoroperator:');readln(operator); ); Case operator of Case operator of '+':n:= '+':n:=x+yx+y; {; {加法运算加法运算} } '-':n:= '-':n:=x-yx-y; {; {减法运算减法运算} } '*':n:=x*y; { '*':n:=x*y; {乘法运算乘法运算} } '/':If y=0 then { '/':If y=0 then {除法运算除法运算} } begin begin writeln('Dividewriteln('Divide is is zero!');halt;endzero!');halt;end Else n:= Else n:=x/yx/y; ; else begin else begin writeln('Inputwriteln('Input operator operator error!');halt;enderror!');halt;end; ; End; End; writeln(x:6:2,operator,y:6:2,'=',n:6:2); writeln(x:6:2,operator,y:6:2,'=',n:6:2);End.End.编程入门题例编程入门题例4 4、念数字:、念数字:、念数字:、念数字:编一个编一个“ “念数字念数字” ”的程序,它能让计算机完成以下工作:当你输入的程序,它能让计算机完成以下工作:当你输入一个0至一个0至9999之间的数后,计算机就会用汉字拼音印出这个数的念结束。
之间的数后,计算机就会用汉字拼音印出这个数的念结束例1:例1:Input data:35Input data:35 SAN SHI WU SAN SHI WU 例2:例2:Input data:0Input data:0 LING LING 如果输入的数不在0到如果输入的数不在0到9999之间,就印出之间,就印出“ “CUO LE”CUO LE”(错了),请求重新输入错了),请求重新输入 零零 LING LING 一一 YI YI 二二 ER ER 三三 SAN SAN 四四 SHI SHI 五五 WUWU 六六 LIU LIU 七七 QI QI 八八 BA BA 九九 JIU JIU 十十 SHISHI[ [解解解解] ]输入数在输入数在0 0~~9999之间,若之间,若x x为两位数则拆分为十位数、个位数。
然后调用念为两位数则拆分为十位数、个位数然后调用念 数过程数过程ReaddigitReaddigit用汉字拼音印出各位数(用汉字拼音印出各位数(0 0~~9 9)的念[ [程序程序程序程序] ]{$I-}{$I-}Program Program NinShuNinShu; ;VarVar x,a,b:Integerx,a,b:Integer; ;Procedure Procedure ReadDigit(n:IntegerReadDigit(n:Integer);{);{念数过程念数过程:n=0:n=0~~9}9}BeginBegin Case n of Case n of 0:write('LING '); 0:write('LING '); ……{ ……{略略} } 9:write('JIU '); 9:write('JIU '); End; End;End; {End; {ReadDigitReadDigit} }Begin {main}Begin {main} Repeat Repeat write('Inputwrite('Input data:');readln(xdata:');readln(x); ); if (x<0) or (x>99) then if (x<0) or (x>99) then writeln('Cuowriteln('Cuo Le'); Le'); Until (x>=0)and(x<=99); Until (x>=0)and(x<=99); If (x>=0)and(x<=9) then If (x>=0)and(x<=9) then ReadDigit(xReadDigit(x) {) {调用念数过程调用念数过程} } Else Begin a:=x DIV 10; b:=x mod 10; { Else Begin a:=x DIV 10; b:=x mod 10; {位数拆分位数拆分} } If a<>1 then If a<>1 then ReadDigit(bReadDigit(b) );; writelnwriteln(' Shi');(' Shi'); if b<>0 then if b<>0 then ReadDigit(bReadDigit(b); ); End; End; writelnwriteln; ;End. End. 编程入门题例编程入门题例5 5、数列找数、数列找数、数列找数、数列找数:数组:数组A(N)A(N)的各下标变量中N个互不相等的数,键盘输入正整数M(M的各下标变量中N个互不相等的数,键盘输入正整数M(M≤ ≤N),N),要求打印数组中第M大的下标变量的值。
要求打印数组中第M大的下标变量的值 例如:数组例如:数组A A((1010)的数据为:)的数据为:运行结果:运行结果:INPUT AN NUMBER:INPUT AN NUMBER:33 A(5)=38 A(5)=38 (即第3大的数是(即第3大的数是A(5)=38A(5)=38)) [ [解解解解] ]该题要从该题要从N N个互不相等的数中找第个互不相等的数中找第MM大的值有以下两种解法:大的值有以下两种解法: A(1)A(1) A(2)A(2)A(3)A(3)A(4)A(4)A(5)A(5)A(6)A(6)A(7)A(7)A(8)A(8)A(9)A(9)A(10)A(10) 1616575720201919383841416 6131325253232解法一解法一解法一解法一:初始时::初始时:A A数组存放数组存放N N个互不相等的数;个互不相等的数;B B数组用于存放数组数组用于存放数组A A的下标 Program Max01;{Program Max01;{冒泡排序法冒泡排序法} }varvar i,j,n,m,x:integeri,j,n,m,x:integer; ; A,B:ARRAY[1..100] of integer; A,B:ARRAY[1..100] of integer;Procedure Init; {Procedure Init; {读数初始化过程读数初始化过程} }……{……{附后附后} }Begin {MAIN}Begin {MAIN} Init;{ Init;{ 读数过程读数过程 } } for i:=1 to N-1 do { for i:=1 to N-1 do {冒泡排序冒泡排序} } for j:=i+1 to N do for j:=i+1 to N do if if A[iA[i]<]N then { If M>N then {表明所找的数表明所找的数MM已超过输入数的总数已超过输入数的总数N}N} begin begin writeln('Inputwriteln('Input error!');halt;enderror!');halt;end; ;End; {Init}End; {Init} 解法二(搜索法):解法二(搜索法):解法二(搜索法):解法二(搜索法):用用B[iB[i] ]表示在表示在A[1]A[1]、、A[2]A[2]、、A[3]A[3]、、…………、、A[N]A[N]中比中比A[iA[i] ]大的个大的个数(数(i=1,2,3,……,Ni=1,2,3,……,N)。
[ [程序程序程序程序] ]VarVar i,j,k,m,n:integeri,j,k,m,n:integer; ; A,B:ARRAY[1..100] of integer; A,B:ARRAY[1..100] of integer;Procedure Init;Procedure Init;{ {具体程序见解法一具体程序见解法一} }Begin {MAIN}Begin {MAIN} Init; { Init; {读数过程读数过程} } for i:=1 to n do for i:=1 to n do begin begin B[iB[i]:=1; {]:=1; {B[iB[i] ]初始值为初始值为1 1,即假定所有,即假定所有A[iA[i] ]都可能为最大数都可能为最大数} } for j:=1 to n do for j:=1 to n do if (i<>j) and ( if (i<>j) and (A[iA[i]<]
这样这样i>5i>5时就不用再搜索下去因时就不用再搜索下去因此,可对解法二的算法优化如下:此,可对解法二的算法优化如下: 1 1、读数至、读数至A A数组数组 2 2、、i=1;fd=false; {i=1;fd=false; {fdfd:判断是否已找到所求数的标志:判断是否已找到所求数的标志} } 3、当3、当 ( (fdfd= =false)and(Ifalse)and(I<=n) <=n) 时,做时,做 ((1 1))B[iB[i]=1 {]=1 {表示数列中比表示数列中比A[iA[i] ]小的数的总个数小的数的总个数+1+1,初始值为,初始值为1}1} ((2 2))j=1j=1 ((3 3)当)当j<=nj<=n时,做时,做 ①①如果如果(i<>(i<>j)and(A[ij)and(A[i]<]
②②j=j+1j=j+1 ((4 4)如果)如果B[iB[i]=M]=M,则输出所求:,则输出所求:A[iA[i] ],且,且fdfd=true=true ((5 5))i=i+1i=i+1 4. 4.程序结束程序结束[ [主程序主程序主程序主程序] ]Begin {MAIN}Begin {MAIN} Init;{ Init;{读数过程读数过程} } i:=1;fd:=false;{ i:=1;fd:=false;{找到所求解的标志值找到所求解的标志值} } while not while not fdfd and (i<=N) do and (i<=N) do begin begin B[iB[i]:=1; {]:=1; {B[iB[i] ]初始值为初始值为1 1,即假定所有的,即假定所有的A[iA[i] ]都可能为最大的数都可能为最大的数} } j:=1; j:=1; while j<=n do while j<=n do begin begin if (i<> if (i<>j)and(A[ij)and(A[i]<]
例如:八进制、十六进制数例如: INPUT N(-32767INPUT N(-32767~~32767):22232767):222 222 TURN INTO 2 222 TURN INTO 2::1101111011011110 222 TURN INTO 8 222 TURN INTO 8::336336 222 TURN INTO 16 222 TURN INTO 16::DEDE[ [解解解解] ]十进制数转化为某进制数的转换方法,如下图示:十进制数转化为某进制数的转换方法,如下图示: 除除x x逆序取余法逆序取余法 十进制数十进制数 x x进制数(进制数(x=2,8,16x=2,8,16等)等)变量定义变量定义变量定义变量定义varvar N,k:integerN,k:integer; ; B:array[1..1000] of integer; B:array[1..1000] of integer;过程定义过程定义过程定义过程定义1 1、转换、转换、转换、转换Procedure chg10(N,x:integer); {Procedure chg10(N,x:integer); {将十进制数将十进制数将十进制数将十进制数N N转换成转换成转换成转换成x x进制数进制数进制数进制数} }Begin k:=0; {Begin k:=0; {转换后的转换后的转换后的转换后的x x进制数位的长度进制数位的长度进制数位的长度进制数位的长度} } while N<>0 do {N while N<>0 do {N不为不为不为不为0 0时时时时} } begin begin B[kB[k]:=N mod x; {]:=N mod x; {除以除以除以除以x x取余数取余数取余数取余数} } N:=N Div x; { N:=N Div x; {取最大商取最大商取最大商取最大商N}N} k:=k+1; {x k:=k+1; {x进制数位加进制数位加进制数位加进制数位加1}1} end; end;end;{chg10}end;{chg10}2 2、输出、输出、输出、输出Procedure Procedure Sput(N,x:integerSput(N,x:integer);{);{进制数输出进制数输出进制数输出进制数输出} }VAR VAR i:integeri:integer; ; A:stringA:string; ; Begin A:='0123456789ABCDEF'; {Begin A:='0123456789ABCDEF'; {表示表示表示表示x x进制数的位数串进制数的位数串进制数的位数串进制数的位数串} } write(N:6,' Turn into ',x:2,':'); write(N:6,' Turn into ',x:2,':'); for i:=k-1 for i:=k-1 downtodownto 0 do write(copy(A,B[i]+1,1));{ 0 do write(copy(A,B[i]+1,1));{逆序输出逆序输出逆序输出逆序输出x x进制数进制数进制数进制数} } writelnwriteln; ;end; {end; {SputSput} }主程序主程序主程序主程序begin {MAIN} begin {MAIN} write('Inputwrite('Input N(-32767 to 32767):');readln(N); N(-32767 to 32767):');readln(N); if (N<=-32767)or(N>32767) then if (N<=-32767)or(N>32767) then begin begin writeln('Inputwriteln('Input error!');halt;enderror!');halt;end; ; chg10(N,2);Sput(N,2); { chg10(N,2);Sput(N,2); {十进制数转换成十进制数转换成十进制数转换成十进制数转换成2 2进制数,并输出进制数,并输出进制数,并输出进制数,并输出} } chg10(N,8);Sput(N,8); { chg10(N,8);Sput(N,8); {十进制数转换成十进制数转换成十进制数转换成十进制数转换成8 8进制数,并输出进制数,并输出进制数,并输出进制数,并输出} } chg10(N,16);Sput(N,16); { chg10(N,16);Sput(N,16); {十进制数转换成十进制数转换成十进制数转换成十进制数转换成1616进制数,并输出进制数,并输出进制数,并输出进制数,并输出} }end.end. 。
