用pascal语言编写“ 按dnf任意键连发退出”退出的程序 麻烦详细点!谢谢

帮忙完成1个pascal语言程序的题把,完成程序,谢谢!!!_百度知道
帮忙完成1个pascal语言程序的题把,完成程序,谢谢!!!
data:end,1≤m≤n):=i!;&#39.SIZE]flag:=true,j;end,在1~n中任取m个数;break:=writeln(data[m]):array[1!,i,&#39,m),按字典序从小到大输出所有这样的排列;for i.!, sizeof(used):=j;flag:=data[i]+1 to n do if used[j]=false thenbeginused[j]:=___①___;data[i]:=for i.SIZE] of integer。例如输入32输出12
32constSIZE=25;if flag thenbeginbeginreadln(n:=end(排列数)输入两个正整数n:=___③___,false);used[i]:=i+1 to m dowhile flag dobeginfor i!.!.非常感谢;___⑤___;for j:=1 to m dobegindate[i]:=);flag:=1 to ___④___ do if used[j]=false thenbegindata[k]!:array[1;used[j]:=m downto 1 dobegin__②__;n,k,m;fillchar(used:integer:=1 to m-1 do write(data[i],m(1≤n≤20;varused
提问者采纳
不是很清楚,应该是填break)还有估计今年80分吧;2?= =还是老师啊,百分之80估计是对的)4:=fasle,答案估计星期一能给LZ本人的1:break(估计是找到弹出;3,个人认为:used[date[i]],我不是= =汗,LZ自己估计估计吧 还有LZ作弊,估计是n)5:false,我填的估计错的:j(是j不是i吧今天刚做过了= =第5格很坑爹?还是提前出来了,很多人都这么填的:n(估计是n或者k吧
提问者评价
其他类似问题
为您推荐:
其他2条回答
什么时候发的啊?
今天 14:58 啊
这是18届的题吧!⑤是end
pascal的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁PASCAL1_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
上传于||暂无简介
大小:275.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢[pascal语言]PASCAL语言基础总成(完整版)_pascal语言-牛bb文章网
[pascal语言]PASCAL语言基础总成(完整版)_pascal语言
PASCAL语言基础及基础训练第1页共48页PASCAL语言基础第一章、什么是计算机语言计算机语言是计算机软件中非常独特的一部份,它属于系统软件,但又和应用软件息息相关。它的作用是:使人类能够用某些命令、指令去让计算机为人类进行数值、逻辑运算。计算机语言中,只有一种语言是计算机能自己识别的,就是最底层、最难的机器语言,这是一般人类所无法接受的语言,所以在此基础上,人们发展出了许多高级的语言,这些语言的共同特点是:人类无需去掌握高深的机器语言,只要掌握这些更容易理解、更贴近人类的高级语言,用高级语言编出程序后,再由语言解释、编译系统去把程序解释、编译成机器语言让计算机去执行。目前最常用的高级语言大致有以下几种:BASIC语言:是一般计算机入门者的首选语言,命令少,容易掌握,从BASIC,BASICA,GWBASIC,TRUEBASIC,TURBOBASIC,QUICKBASIC等一直发展到目前的WINDOWS环境下的VB。PASCAL语言:最适合科学计算、数据处理的语言,运行、编译速度最快,从TURBOPASCAL5.5,6.0,7.0一直到现在的WINDOWS环境下的DELPHI以及LAZARUS等面向对象的PASCAL,以及目前信息学竞赛使用的FREEPASCAL各个版本。C语言:主要适用于应用软件的开发,是计算机人员的必修课,但在算法实现、建模方面不如PASCAL方便。从C,C++,一直到现在的WIONDOWS环境下的VC、C++等。实际上,我们日常所用的各种软件,包括Windows,WORD、EXCEL、各种游戏等等,全部都是使用程序设计语言编写出来的软件,我们只有掌握了程序设计语言,才能进行计算机软件的开发。在我们的信息学竞赛中,所有的题目都是非常复杂的数值与逻辑运算,所以世界上广泛采用PASCAL语言作编程工具,我们采用的是FREEPASCAL2.0版本或者相近版本。我们学习信息学竞赛除了要掌握程序设计语言,能够使用程序设计语言编写程序外,还有一部分要掌握的更加重要的内容就是――算法设计,它能够使我们的程序运行速度更快、效率、精度更高,使我们的程序取得快人一步的优势,算法设计在本书中我们将接触一部分。PASCAL语言入门第二章、第二章、PASCAL第一节、PASCAL语言的特点以法国数学家命名的PASCAL语言是世界上使用最广泛,最有效的语言之一。其主要特点是:严格的结构化形式;丰富完备的数据类型;运行能力、效率高;查错能力强等等。与BASIC、C等语言相比,PASCAL语言更适合科学计算,运行速度最快,编译能力最强,编译成的可执行文件也最小。PASCAL语言是编译执行的语言(BASIC语言是解释执行),因此在速度与效率上都比BASIC语言提高了一个档次。所谓解释执行,是在程序环境下编写好程序后,执行它时是一句一句地由语言解释器翻译成机器语言,由计算机去执行,计算机能在程序编辑时就发现程序中错误,但程序运行速度慢;而编译执行是在程序环境中编写好程序后,执行时先由编译器把整个程序编译成机器语言,然后再由计算机执行,计算机必须在编译程序时才能发现程序中的错误,但程序运行速度快。第二节、FREEPASCAL的集成环境一个题目,如果用PASCAL语言来解,在建立好数学模型及完成一定的自然语言描述后,就用PASCAL语言来编辑出程序,编译后再运行(可以作为一个过程),这样才能得到答案。FREEPASCAL提供了一个功能非常强大的集成环境,我们可以利用它来完成上述所有过程。进入这个环境的方法很多,可以根据实际情况自己进入。进入集成环境后屏幕上显示如下:FileEditSearchRunCompileDebugToolsOptionsWindowHelp菜单区程序编辑区1PASCAL语言基础及基础训练第2页共48页F1HelpF3OpenALTF9CompileF9MakeALTF10LocalMenu功能键区用键盘选择菜单的方法是:按F10,激活菜单后,用光标键来选择;或是直接用ALT健加菜单的第一字母,如ALT+F,即能调出FILE菜单。另外,我们也可用鼠标来调用菜单,操作方法与其它软件一样。功能健中定义了:F1可得到帮助;F3打开一个已存盘的程序文件;ALTF9编译当前程序;F9把当前程序编译成EXE(可执行)文件,ALTF10打开菜单,当然,还有一些功能键并没有在这里显示,在后面的学习中我们将逐个涉及,大家自己也可以从菜单中发现。第三节、一个PASCAL程序进入编辑状态:一、一、进入编辑状态:选择菜单[FILE][OPEN](今后涉及到菜单调用时,均以此格式表示,即选择FILE菜单中的OPEN功能)功能,打开一个程序文件,在输入文件名时,输入文件的主名即可进入程序编辑状态。这时可用编辑功能健:光标键:用以上下左右移动光标位置;INSERT:插入/改写状态切换;TAB;光标跳至下一制表位;CAPSLOCK:大小写切换;DELETE:删除光标位一字符;BACKSPACE:删除光标前一字符;CTRL+Y:删除光标处一行;HOME:光标跳至行首;END:光标跳至行未;PAGEUP:上翻一页;PAGEDOWN:下翻一页;ENTER:回车/换行;编辑一个PASCAL程序:二、二、编辑一个[例1、1]输出一句话的小程序:programQ1;beginwriteln(‘YouarewelcometothePASCALworld!’);end.请在编辑状态下编辑输入上述程序,第一行为程序开头,程序名(这一行并不是必须的,今后的程序中我们会经常省略之一行);第二行BEGIN表示程序开始,最后一行END表示程序结束;WRITELN()语句把括号中单引号中的的字符打印在屏幕上;记住,一般每行以分号“;”结束,但END后以句号“.”结束,而BEGIN后没有标点符号。即:除BEGIN外,每一句PASCAL语句后均有分号或句号,只有程序的最后一个END后才用句号,而其它任何行未都是分号!!!在集成环境中运行程序:三、三、在集成环境中运行程序:上述程序[例1、1]编辑好后,如果要运行,只需选择菜单[RUN][RUN]命令(或CRTL+F9),如果程序正确的,就会在屏幕(这个屏幕叫程序输出屏幕)上显示:YouarewelcometothePASCALworld!但是我们看到,输出屏幕上显示的结果一闪而过就又回到了集成环境屏幕显示,我们几乎看不到在屏幕上显示的结果,要查看刚才的屏幕显示,只需选择菜单[RUN][USERSCREEN](或ALT+F5),就又能回到输出屏幕,敲任意键又回到集成环境中。如果程度出错,则程序没有被运行完就会回到集成环境中,并且光标停在错误的这一行,在编辑窗口中的第一行还会显示出错信息,如:2PASCAL语言基础及基础训练第3页共48页Run-timeerror错误代码at错误发生地址保存文件四、四、保存文件把当前编辑的程序文件以当前名存盘,只需运行菜单命令[FILE][SAVE](或F2),即可。关闭当前文件五、五、关闭当前文件当前文件不想现在再编辑了,可把它关闭掉,即运行菜单命令[WINDOWS][CLOSE](或ALT+F3),即可。打开已有文件六、六、打开已有文件欲打开一个已经存在的程序文件,运行菜单命令[FILE][OPEN](或F3),再按TAB键去选择或不按TAB键而直接输入文件名即可。练习七、七、练习在集成环境中输入以下程序,程序的作用是计算圆的面积,圆的半径由用户从键盘输入,编辑运行正确后请存盘:programarea_of_constpi=3.1416;vars:r:beginwriteln(‘Pleaseinputradius:’);readln(r);s:=pi*r*r;writeln(‘s=’,s);end.运行举例:Pleaseinputradius:5s=7.E+01第三章、PASCAL语言程序基本概念第一节、PASCAL程序的组成我们仍以上述程序为例:[例2、1]programarea_of_constpi=3.1416;vars:r:beginwriteln(‘Pleaseinputradius:’);readln(r);s:=pi*r*r;writeln(‘s=’,s);end.每一个PASCAL程序都由程序头部和程序主体组成,最后以“end.”作为整个程序的结束。一、程序头部程序头部毫无疑问是在程序的开头位置,以“program”这个词开始(但经常省略这一),以第3PASCAL语言基础及基础训练第4页共48页一个BEGIN的前一行结束,中间每行后均有分号。以CONST为开始的部分是说明程序中要用到的常量,以VAR为开始的部分是说明程序中要用到的变量。即程序中要用到的所有的常量及变量,我们必需在程序首部加以说明其名称及类型。这些我们将在稍后讲到。二、程序主体以第一个BEGIN开始,以最后一个END结束,中间即为程序命令行,每一行均以分号结束!第二节、PASCAL的数据类型PASCAL语言的常量与变量都必须在程序头部先加以说明,即说明常量、变量的的名称及数据类型。PASCAL语言的数据类型很多,最常用的有以下几种:一、整数类型(没有小数部分)INTEGER:取值范围[-3]。占用内存2个字节(16WORD:取值范围[0,65535]。占用内存2个字节(16位)。BYTE:取值范围[0,255]。占用内存1个字节(8位)。LONGINT:取值范围[-,]。占用内存4个字节(32位)。SHORTINT:取值范围[-128,127]。占用内存1个字节(8位)。二、实数类型REAL:取值范围[2.9E-39,1.7E+38]。占用内存6个字节(48位)。实数的表示法有两种:1、直接表示,如:-0.,-234,02、科学计数法,如:1.234E-4,-3.546E12表示1.234乘10的负4次方;-3.546乘10的12次方。三、字符类型CHAR:单字符型,即取1个字符,如‘A’,‘1’。STRING:字符串型,即多个字符,如‘ABCD!123’,‘%¥#DS12’。如果一个常/变量只要用到1个字符,则可把它定义成CHAR型;如果是多个字符,但不知确切多少个,则定义成STRING型,如果知道确切有N个字符,则定义成STRING[N]型,例如STRING[5],则表示定义的这个字符串变量由5个字符组成。字符串在PASCAL中使用都是加上单引号。四、布尔型BOOLEAN:布尔型即为逻辑型,取值为TRUE、FALSE,即真、假。第三节、常量、变量、标准函数和表达式一、常量和变量常量:程序运行过程中,其值不会改变的量,称为常量。在程序头部中说明,以CONST引导。变量:程序运行过程中,其值可改变的量,称为变量。在程序头部中加以说明,以VAR引导。如,在[例2、1]中说明的常量PI,变量S、R。二、标准函数PASCAL语言提供数量非常大的标准函数供我们使用,这些函数有些可以直接调用,有些放在另外的单元(UNIT)中。PASCAL也提供了大量的标准过程,和标准函数一样供用户直接或间接调用。如果一个函数或过程不在SYSTEM(即默认调用的单元)中,而在其它单元中话,即在程序头部的第一行正式行中加上USES单元名;如,如果要使用CLRSCR(清屏过程,在CRT单元中)的话,就必须在程序头部加上:USESCRT;函数的调用:如:A:=ABS(-34),即把-34的绝对值赋给变量A;(注意:函数只能出现在表达式中,即赋值语句中)。此时:A的数据类型与括号中的参数-34是一致的。函数的语法中都会说明,这个函数的参数的类型及这个函数的值(结果)的类型。过程的调用:过程即命令,如:CLRACR;程序运行结果是清屏。常用标准函数与过程很多,这里只列出最常用的几个。标准函数函数名语法说明AbsAbs(r:real/integer):real/integer返回参数R的绝对值,类型与参数相同4PASCAL语言基础及基础训练ChrCopyCosExpIntLengthLnoddordrandomroundsinsqrtsqrtrunc过程名Delay(CRT单元)DeleteExitGotoxy(CRT单元)haltnosoundSound(CRT单元)strval第5页共48页chr(i:integer):char返回参数所对应的ASCII码值,类型为CHARCopy(s:n,m:integer):string返回字串S的第N个字符开始的M个字符Cos(r:real):real返回参数R的余弦值Exp(r:real):real返回参数R的以e为底的幂Int(r:real):real返回参数R的整数部分,返回的值是实数类型Length(s:string):integer返回字串S的长度Ln(r:real):real返回参数R的自然对数Odd(I:integer):boolean判断参数I是否奇数,如是,则返回TRUEOrd(s:scalar):integer返回任意有序量的序值Random返回0至于间的任意一个小数(随机数)Round(r:real):longint返回参数R的四舍五入取整值Sin(r:real):real返回参数R的正弦值sqrt(r:real):real返回参数R的平方根Sqr(r)返回参数R的平方值,结果类型与R的类型相同Trunc(r:real):integer返回参数R的整数部分,返回的值是整数类型标准过程语法说明Delay(ms:word)延迟发声MS毫秒Delete(s:n,m:integer)ExitGotoxy(x,y:integer)HaltNosoundSound(f:word)Str(I:vars:string)Val(s:varr:varc:word)把串S中的第N个字符开始的M个字符删除从当前执行的程序中退出把光标定位到第X列Y行处中断程序的运行关闭机器喇叭让机器喇叭发出频率为F的声音,直到nosound把数值I转换为字符串S把字符串S转换为数值R,并返回错误代码C三、表达式由算术运算符(+,―,*,/)及数字、常量、变量、标准函数所组成的式子中心表达式。如:5+9;A*B-34*ABS(-34)/INT(B)另外,PASCAL中有两个很有用的运算符,DIV:求商的整数值;MOD:求余数。如:8DIV3的值是2,10DIV3的值是3;8MOD3的值是2,10MOD3的值是1;在PASCAL的表达式中,不允许出现我们日常生活中的那种分式或根号等式子,我们必须按照PASCAL的语法把它们改写成PASCAL表达式。在PASCAL的表达式中,运算顺序是:()?函数?*,/,DIV,MOD?+,-如:把下列算式改写成PASCAL表达式:x2+3y?5(z?2)x?y2改写为PASCAL表达式为:(x*x+3*y-5*(z-2))/(x-y*y)从上例中可以看出:1、PASCAL表达式中没有分式,只能以除号“/”来隔开;2、PASCAL表达式中的分子与分母应该用括号括开;3、PASCAL表达式中只有小括号,不能有中括号或大括号,小括号可以有很多层;4、PASCAL表达式中没有乘幂,只能用乘法来表达(在FP中有平方函数,所以可以使用SQR函数);5、PASCAL*表达式中任意两个常量、变量、数值、括号、函数之间都必须不能缺省运算符,即乘号必不可少;这些要求希望大家记熟,这是我们编写PASCAL程序的必要基础。四、练习5PASCAL语言基础及基础训练第6页共48页1、计算下列表达式的结果:31div(5mod2)31div5mod22、把下列算式改写为PASCAL表达式:31/(5div2)a3?b(c2?abc)+4c1+ab2c+2a第四节、程序头部的说明语句在程序头部的说明语句中,可有以下几种引导词,例:LABEL10,30:说明程序中要用到两处标记(即行号)10和30;此项不用掌握。CONSTp=123;a=12.346;s=’abcdefg’;VARI,j,k:X,y:S1:string[5];P:TYPET=recordTn,tm:Ts:E第四章、PASCAL的顺序程序结构PASCAL是一种结构化的程序设计语言,其包含三种结构:顺序、选择、重复,其中顺序结构是最基础的,即程序是完全从第一句运行到最后一句,中间没有中断,没有分支,没有反复;而选择结构即是给程序设置了分支;重复结构即反复运行某一段(句)程序。第一节、赋值语句赋值语句的一般格式:变量名:=表达式变量名一定要已经在程序头部先说明过,赋值符号其实就是冒号加等于号“:=”,而绝不能只用等于号“=”。冒号的左边(即赋值符号的左边)只能是一个变量名!不能也是表达式,更不能是具体数值。一个赋值语句中只能出现一个赋值符号。例如:以下赋值语句都是正确的:X:=1;把1这个数值赋给X这个变量;A:=B*C+12*INT(D);把B*C+12*INT(D)这个表达式的值赋给变量A;Y:=Y+1;把Y+1的值再赋给Y这个变量,即累加。以下赋值语句都是错误的:S:=T:=1;不能有两个赋值号在一个语句中;X+2:=4;赋值号左边不能是表达式;Z=3;少了冒号;由上可以看出,赋值语句实际上是先把等于号右边的表达式计算出,再赋给赋值号左边的变量。以下[例3、1]程序的作用是先把A,B两个变量赋上值(3和2),打印在屏幕上;然后再交换它们的值,再打印在屏幕上:ProgramL31;这边程序说明、解释,大家不用输入。vara,b,c:这时刚说明A,B,C三个变量,值均为0begin程序开始6PASCAL语言基础及基础训练第7页共48页a:=3;b:=2;writeln(’a=’,a,’c:=a;a:=b;b:=c;writeln(’a=’,a,’end.’,’b=’,b);’,’b=’,b);这时A的值为3这时B的值为2此句为打印语句,结果在输出屏幕上这时C的值为3这时A的值为2这时B的值为3,此时A,B的值已经交换打印语句程序结束上述程序是一个比较简单的顺序结构的程序,希望大家看懂程序每一句的作用,进一步理解PASCAL程序的语法规则。在程序运行过程中各变量数值变化的情况如程序右边。从上述程序中还可以看出,一个变量如果本身已经被赋过值,当再次赋值时,原来的值就不起作用,而被新的值所覆盖。赋值时一定要考虑数据类型的匹配,如下列程序[例3、2]中一些赋值语句就会出错。q32;I,j,k:说明I,J,K三个变量是整数型;R:R是实数型;S:S是字符串型;程序开始I:=123.456;错误:因为I是整数型变量,不能把一个实数型数值赋给它;R:=146;正确:146也是一个实数;R:=trunc();正确:trunc这个函数的返回值是整数型的,可以赋给实数型变量;K:=6/3;错误:6/3虽然得到的值是2,但这个2是实数型,而不整数型的;S:=123;错误:S是字符串型变量,而123是数值型值;S:=’aasd’+1234;错误:表达式中不能把字符串与数值相加。程序结束第二节、输出语句计算机在运行一个程序时,当计算出结果后,是不会自动在屏幕上显示出结果的,而必须由用户用输出(打印)语句把结果显示(打印)到屏幕上。输出语句就是在程序完成计算后,让用户能够控制计算机把结果显示出来。PASCAL语言提供了两个输出语句:WRITE(项目,项目,……);WRITELN(项目,项目,……);两个语句用法完全相同,只不过WRITE在输出所有项目后,光标不换行,停在最后一个输出项目后;而WRITELN在输出所有项目后,光标自动换行,跳到下一行开头位置。PASCAL的输出屏幕与DOS下完全相同,共有25行,80列,即每行可显示80个字符。例:[例3、3]:programq33;vara,b,c:begina:=1;b:=a+1;c:=a+b;write(a);write(b);writeln(c);writeln(a,b,c);writeln(a:4,b:4,c:4);end.输出结果是:7PASCAL语言基础及基础训练第8页共48页123123123由上可以看出,一个WRITE语句输出完内容后,光标没有换行;一个WRITE或WRITELN语句中可输出多个项目;一个空的WRITELN语句的作用是换行(即空一行);在WRITE或WRITELN语句中如果输出数值型数据,可用如“A:4”这种格式来控制变量A在输出时固定占用4个字符位(4个有效数字)。如:WRITELN(X:6:2);表示输出X的值时,给定6个有效数字,其中2个小数位,即另有3个整数位及一个小数点。第三节、键盘输入语句键盘输入语句的作用是,使用户能在程序运行过程中,从键盘对变量进行赋值。PASCAL提供了两个键盘输入语句:READ(变量名,变量名,……);READLN(变量名,变量名,……);其中变量名必须是在程序头部先说明过的,而在键盘输入时输入的数据也必须与其类型相符。READ和READLN都可以一次性从键盘输入多个数据,每个数据用空格隔开。假设READ或READLN要求输入X个数据,而我们输入时也输入了X个数据,这时READ与READLN的功能是完全一样的。但是,如果要求输入X个数据,而我们输入了多于X个数据时(如X+N个),这时READ与READLN都是把前X个数据赋给X个变量,而剩下的多输入的N个数据就有如下情况:如果是READ,则这N个数据被保存下来,到下一个READ/READLN语句时再赋给剩下的变量;而用的是READLN的话,这些数据将被放弃,不会留至下一个READ/READLN。例如如下两个程序[例3、4]:Programq341;Programq342;VarI,j,k,l:VarI,j,k,l:BeginBeginRead(I,j);Readln(I,j);Read(k,l);Readln(k,l);Writeln(I,j,k,l);Writeln(I,j,k,l);End.End.运行上述两个程序时,都会等待用户从键盘上对变量I,J,K,L分两次输入数值(整数型),如果类型不对,或是数据之间不用空格隔开,屏幕上都会显示出错信息。如果我们每个程序的再次键盘输入都只输入两个数据:即:1234这时,两个程序的运行结果都相同:如果我们每个程序都输入以下数据,即:12345这时,两个程序的运行结果是不同的:请大家注意两个结果为什么不同?第四节、程序的调试1、运行程序:CTRL+F9或菜单[RUN][RUN];2、程序运行过程中暂停:CTRL+BREAK;3、继续运行程序:CTRL+F9;4、程序在暂停后取消继续状态:CTRL+F2;8PASCAL语言基础及基础训练第9页共48页5、逐句(单步)执行程序:F7或TRACE;6、逐段运行程序:F8或STEP;7、在当前光标处设置一个断点:CTRL+F8;8、查看内存变量或表达式值:CTRL+F4;9、增加变量查看:CTRL+F7;第五节、练习1、下面三段程序运行结果一样吗?Vara:Vara:Vara:B:B:B:BeginBeginBeginA:=2;A:=2;A:=2;B:=2;B:=2;B:=2;Writeln(b/a);Writeln(a/a);Writeln(adiva);End.End.End.2、如果a,b,c的值分别是2,4,6。执行下列语句后,a,b,c的值各是多少?A:=b;b:=c;c:=a;B:=c;c:=a;a:=b;C:=a;a:=b;b:=c;T:=a;a:=b;b:=c;c:=t;3、请说明下列两个变量的值有何不同:C:=‘’{单引号间没有字符}C:=‘’{单引号间有一个空格}4、写出下列每小段程序的运行结果(只是程序的一部分):A.write(‘*’);write(‘*’);write(‘*’);write(‘*’);B.writeln(‘*’);writeln(‘*’);writeln(‘*’);writeln(‘*’);C.write(‘*’);write(‘*’);write(‘*’);write(‘*’);D.write(‘’);writeln(‘*’);write(‘’);writeln(‘*’);write(‘’);writeln(‘*’);write(‘’);writeln(‘*’);5、编一程序,从键盘输入整数A,B的值,然后把A,B的值交换后输出。6、编一程序,键盘输入整数A,B的值,然后打印A除以B的商的整数部分及余数。7、编一程序,从键盘输入一个实数,然后输出其四舍五入精确到小数点后第3位的数。8、编一程序,从键盘输入一个四位整数,然后把该数的每一位进行交换,即千位换为个位,百位换成十位,然后输出新数。9、random函数可得到0到1之间的随机小数,请编一程序用此函数得到10到100之间的随机整数。(注意:randomize可初始化随机数)。10、从键盘输入一个4位整数,要求打印出它的各位数之和。11、从键盘输入两个整数,打印出更小的那个数。第五章、选择结构本章讨论程序的分支结构,其主要知识是布尔运算(逻辑运算)。第一节、布尔运算(逻辑运算)要判断“A&B”是否成立,其结果不是一个具体的数值,而是“真”或“假”,即“是”或“否”的问题。这类问题在我们日常生活中是很多的,诸如这类判断的问题,其结果都是只有两个:真或假,这就是我们所说的布尔运算(逻辑运算)。一、布尔常量和布尔变量布尔型的常量或变量的值只有两个:TRUE(真)和FALSE(假)。要把一个变量定义成布尔类型,用的数据类型是:BOOLEAN。例如程序:vara,b:begina:=9PASCAL语言基础及基础训练第10页共48页b:=……end.二、布尔表达式布尔表达式有以下两种操作:1、关系运算符:=;&&;&;&;&=;&=,是用来进行关系操作(对比)运算的符号,其结果为BOOLEAN型。如:2=3,其结果为FALSE。*注意:这里的“=”与赋值符号“:=”是完全不同的,其作用和结果均不同。2、逻辑运算符:AND(逻辑和);OR(逻辑或);NOT(逻辑非)。是用来进行逻辑值的逻辑运算的。如:(2=3)AND(4&&3),值为FALSE。布尔表达式的运算顺序是:()?函数?NOT?*,/.DIV,MOD,AND,+,-,OR?&,&,&=,&=,&&,=。布尔表达式中的逻辑运算如下表所示:a和b均为布尔型表达式或常/变量.abAandbAorbNotaNotbtruefalsefalsetruefalseTruetruetruetruetruefalseFalsefalsetruefalsetruetrueFalsefalsefalsefalsefalsetrueTrue由上可以看出:1、用AND运算时,左右两个值同为TRUE时,运算结果才为TRUE,即两个条件同时满足,结果才为TRUE。这就是我们平常所说的“和”。2、用OR运算时,左右两个值只需有一个为TRUE,运算结果就为TRUE,即两个条件满足其中一个,结果就为TRUE。这就是我们平常所说的“或”。3、用NOT运算时,只是把其后的逻辑值取反,即“非”。4、例:[例4、1]Programq41;Vara,b,c,d:说明四个整数型变量P:说明一个布尔型变量Begin程序开始A:=1;赋值B:=2;赋值C:=3;赋值D:=4;赋值P:=(a=b);把(A=B)这个逻辑运算的结果赋给P,即P的值为FALSEWriteln(p);打印PP:=((a&b)and(c&d));把((a&b)and(c&d))这个逻辑运算的结果赋给PWriteln(p);打印PWriteln((a&d)or(c&b));打印(a&d)or(c&b)这个逻辑运算的结果End.程序结束程序运行结果是:falsetruetrue由上可以看出:逻辑运算中的关系运算均用括号“()”括起来。关系运算/逻辑运算的结果也是一个值(BOOLEAN型),所有布尔运算也是表达式,可以赋给一个变量,也可以直接用输出语句输出。打印输出时,屏幕上就显示“false”或“true”。第二节、条件语句条件语句是用一个布尔表达式的值来决定程序的走向。即程序提供一个分支,由布尔表达式的值来决定程序究竞运行哪个分支。即程序已经不是顺序结构了,而是提供了一个分支结构。每次只可能运行其中的一个分支。如下图所示:10PASCAL语言基础及基础训练第11页共48页条件语句有两种格式:1、if&布尔表达式&then&语句&;2、if&布尔表达式&then&语句1&else&语句2&;格式1的作用是:如果布尔表达式值为TRUE(即该条件满足),则运行语句,否则不运行任何语句。格式2的作用是:如果布尔表达式值为TRUE(即该条件满足),由运行语句1,否则(即布尔值为FALSE,亦即条件不满足)就运行语句2。注意:只有条件语句结束时才有分号。注意:如果条件语句中的分支语句不止一句,可用“begin……”来框住,加以区别。如:以下两个程序都为从键盘输入1个整数,打印出它的算术平方根。[例4、2]:Programq421;Vara:BeginReadln(a);If(a&0)thenBeginWriteln(‘WRONG!’);EndelseBeginWriteln(a);Writeln(sqrt(a):8:2);EEnd.Programq421;Vara:BeginReadln(a);If(a&0)thenWriteln(‘WRONG!’)elseWriteln(sqrt(a):8:2);End.条件语句的嵌套:条件语句是可以嵌套的,例如:ifa&0thenifa&1then……else……else….;上述语句看起来无法理解,但如果我们把它改写为以下形式时,就一目了然了:ifa&0thenbeginifa&1thenbegin……endelsebegin……endelsebegin……也就是说,第二个IF语句只是第一个IF语句中的一部分,即嵌入的一个IF语句。例:输入一个年份,判断它是否闰年。我们知道,每四年中有一年是闰年,即有366天,而其余三年是平年,只有365天,而按照规定:1、如果哪一年的年份能被4整除,则该年一般为闰年;2、这样,每100年又会少一天,所以又规定如果该年能被4整除,又能被100整除,则认为该年不是闰年,而是平年;3、这样,每400年又会多出一天,所以又规定,如果哪一年能被400整除,则11PASCAL语言基础及基础训练第12页共48页该年又是闰年。由上可知:,1984年均为闰年,1900年为平年,而2000年为闰年。程序如下:[例4、3]Vary:BeginReadln(y);if(ymod4=0)thenbeginif(ymod100=0)thenbeginif(ymod400=0)thenbeginwriteln('run');endelsebeginwriteln('ping');endelsebeginwriteln('run');endelsebeginwriteln('ping');end.第三节、多分支语句IF语句只能使程序有两个分支,当遇到需要有两个以上分支时,IF语句就很不适用了,这时我们可以用CASE语句,它能使程序有很多个分支。其效果如下图:其格式为:常量1:语句序列1;常量2:语句序列2;……常量N:语句序列N;else语句序列N+1;END;其中语句序列如果只有一句,可直接写在常量后的冒号后;如果语句序列有很多句,则应该用BEGIN……END加以框住。CASE语句的作用是,根据表达式,表达式可以有多个值,分别对应于常量1、2等值时,就运行该常量后所对应的语句。12PASCAL语言基础及基础训练第13页共48页例:输入1到7之间的某个整数,打印出其对应的星期的英语名:[例4、4]:programq44;varn:beginwrite(‘n=’);readln(n);casenof1:writeln(‘Monday’);2:writeln(‘Tuesday’);3:writeln(‘Wednseday’);4:writeln(‘Thursday’);5:writeln(‘Friday’);6:writeln(‘Saturday’);7:writeln(‘Sunday’);elsewriteln(‘WORNG!’);end.例:输入一个学生的数值化成绩,把它转化为等级化成绩。即100-90是A,89-80是B,79-70是C,69-60是D,59-0是E。[例4、5];Programq44;Vars:G:BeginWrite(‘Inputthescore:’);Readln(s);Casesdiv10of用SDIV10这个表达式作条件;10,9:g:=’A’;当SDIV10等于10或9时,表示S是90至于100之8:g:=’B’;间的值7:g:=’C’;6:g:=’D’;elseg:=’E’;writeln(s,’‘,g);end.第四节、标号说明及转移语句此节不用掌握在几乎所有语言中,都有GOTO(转移)语句,其作用是当程序运行到该句时,自动转移到其指定的标号(行号)语句去执行。说明语法:LABEL标号;如:LABEL10,20;转移语句用法:GOTO标号;例:[例4、5]:programq45;label10;begin10:write(‘*’);goto10;end.13PASCAL语言基础及基础训练第14页共48页运行上述程序时,程序将在屏幕不停地打印出“*”,而不会停止,必须由用户按下CTRL+BREAK才能中断。练习1、设X,Y,Z的值分别是FALSE,TRUE,FLASE。写出下列逻辑表达式的值:(xandz)or(zandy);2、编写一个程序,功能是从键盘输入一个整数,判断它是否二位数,如果是,就打印它,然后结束程序,否则继续要求输入数。3、编写一个程序,功能是从键盘输入三个整数,打印出其中最大的一个值。4、编写一个程序,功能是从键盘输入1―12中的某一个数字,由电脑打印出其对应的月份的英语名称。5、以下程序的功能是从键盘输入一个式子,它只有三个字符,第一个及第三个都是数字,中间那个是运算符,程序能把它的结果打印出来。试在程序空中填上相应的语句。注意:计算机是不懂得把输入的字符串进行计算的,我们必须自己动手把其中的数字转化成数值型的数据,这其中我们使用了VAL函数,如程序中的:Val(s[1],a,c),是把S字符串中的第一个字符转换为数值A,同时输出了一个错误代码C(其实对我们是没有用的)。Vara,b,d:C:S:string[3];把S定义成三个字符的字符串;BeginReadln(s);Val(s[1],a,c);把S串中的第一个字符转换为数值;;把S串中的第三个字符转换为数值;Cases[2]of用S串中的第二个字符作为条件表达式;‘+’:d:=a+b;‘-’:d:=a-b;‘*’:;‘/’:d:=a/b;writeln(s,’=’,);end.第六章、重复结构重复结构就是循环结构,是指某些语句需要重复执行而设定的程序结构。在PASCAL语言中,共有三种重复结构语句,功能各有不同。第一节、直到语句直到循环语句的语法格式是:repeat语句序列;(循环体)until布尔表达式;其作用是:重复执行语句序列(循环体),直到布尔表达式的值为TRUE为止。即,当执行完一次语句序列后,布尔表达式的值已经为TRUE了,这时循环将不会再被执行,而转向执行UNTIL语句以下的语句。14PASCAL语言基础及基础训练第15页共48页例:计算M=1+2+3+4+……,直到M的值大于5050为止。[例:5、1]varm,I:beginm:=0;I:=0;RepeatI:=I+1;M:=m+I;Untilm&5050;Writeln(I,’’,m);End.在上述程序中,我们使用了PASCAL中的两个作用强大的概念:累加和循环。累加:我们在上述程序中没定了两个累加器:I,M。累加器初值我们在第一句中设定了为0,之后每次运行一次I:=I+1后,I的值就比原来大1。每运行一次M:=M+I后,M的值就被M+I所替代。循环:这里我们使用的是直到循环,即重复执行循环体中的两个语句,直到M&5050这个条件满足为止(即这个布尔表达式的值为TRUE为止)。上述程序运行后,会在输出屏幕上显示两个值:1015151。即当I的值为101时,这时所算得的M的值为5151。亦即,1+2+3+……101=5151。象上述这种X=1+2+3+……这种加法,我们就把它叫累加,这里的X就是累加器,一般初值为0。而N=1*2*3*4*5*6*……这种乘法我们把它叫累乘,这里N就是累乘器,一般初值为1(为什么?)。一般的:1*2*3*……N,我们把这个式子的结果叫做N的阶乘(N!)。如:4!=1*2*3*4。例:计算12![例5、2]varI:x:beginI:=0;X:=1;RepeatI:=I+1;X:=x*I;UntilI=12;Writeln(x);End.当程序开始时,I的初值被定为0,X的初值被定为1(累乘器)。然而开始进入循环,每次I的值比原来增加1,然后再乘进X中去,直到I等于12时,最后一次把I乘进X后,这时I=12这个条件已经满足(I=12的值已经为TRUE),所以循环就被退出,而程序转向执行UNTIL以后的语句:WRITELN(X);。请大家想一想,为什么X要定义为LONGINT型。第二节、当语句当语句的语法格式是:while布尔表达式dobegin语句序列;(循环体)其作用是,当布尔表达式的值为TRUE时,才会运行语句序列(循环体),否则循环将不会被执行,即从循环头部就退出,而转向执行END后的语句。例:计算12![例5、3]varI:x:begin15PASCAL语言基础及基础训练第16页共48页I:=0;X:=1;WhileI&12dobeginI:=I+1;X:=x*I;EWriteln(x);End.请大家把此程序与上一节的[例5、2]进行比较,看两种循环在运用时有何不同。WHILE语句是在循环开始时就判断布尔表达式的值时否为TRUE,如果为TRUE,就进入循环,运行循环体,如果为FALSE,就不运行循环体,而直接转向执行END后的语句WRITELN(X);。REPEAT与WHILE循环的示意框图如下所示:从上述框图中可以看出,要使用循环语句时,必须要确定循环体及条件(布尔表达式)两个重要因素,亦即首要考虑的是:我要重复执行哪些语句,我要重复到什么时候为止![例5、4],从键盘上输入两个整数M,N,求它们的最大公约数。分析:我们只需从M,N中更小的一个数开始,每次让其减1,直到这个数能同时被M和N数整除为止。在下述程序中,我们在程序头部调用了CRT单元,是为了使用CLRSCR语句来清屏,即把输出屏幕上的字符清除干净。Varm,n,x:BeginWrite(‘Pleaseinput2numbers:’)Readln(m,n);Ifm&nthenx:=nelsex:=m;While(nmodx&&0)or(mmodx&&0)dobeginx:=x-1;EWriteln(x);End.上述程序如果改用REPEAT语句来做的话,程序为:varm,n,x:beginwrite(‘Pleaseinput2numbers:’)Readln(m,n);16PASCAL语言基础及基础训练第17页共48页Ifm&nthenx:=n+1elsex:=m+1;RepeatX:=x-1;Until(mmodx=0)and(nmodx=0);Writeln(x);End.请大家考虑上述两个程序为何会有这样有不同之处。第三节、FOR循环语句前面所计的两个语句都是在未知循环次数的情况下而用的循环语句,但在程序中,如果我们已经知道循环的次数而来编程序的话,就可以使用FOR循环语句,这也是PASCAL及其它高级语言中用得最多的语句。其语法格式有两种,如下:(1)增量为1:for变量名:=初值to终值dobegin语句序列(循环体);(2)增量为-1:for变量名:=初值downto终值dobegin语句序列(循环体);变量名的类型由程序头部中定义,而其初值、终值必须和它是同一类型。该变量的类型是能是有序数据类型。上述两种格式都是用变量的初值与终值来规定循环的次数。如以下两个小程序:VarI:VarI:BeginBeginForI:=1to5dobeginForI:=5downto1dobeginWrite(I);Write(I);EEEnd.End.运行结果:运行结果:由上可以看出FOR循环的作用。[例5、5]:从键盘输入一个字符串,把它按正序及逆序分别输出:vars:l,I:beginwrite(‘Pleaseinputthestring:’);readln(s);l:=length(s);forI:=1toldobeginwrite(s[I]);forI:=ldownto1dobeginwrite(s[I]);end.[例5、6]计算1+2+......+10vars,a:begin22217PASCAL语言基础及基础训练第18页共48页s:=0;fora:=1to10dobegins:=s+a*a;writeln(s);end.[例5、7]:计算:1+3+5+7+……101的值:varm,n:beginm:=0;forn:=0to50dobeginm:=m+(2*n+1);writeln(m);end.请大家注意上述程序中的几个小技巧,一个是FORN:=0TO50,共循环51次;一个是M:=M+(2*N+1),其是的2*N+1得到的是一序列的奇数。第四节、多重循环语句多重循环语句即循环嵌套,也就是一个循环语句的循环体中还有循环语句。[例5、8]编程序打印九九乘法表:varI,j:beginforI:=1to9dobeginforj:=1to9dobeginwrite(j:1,’*’,i:1,’=’,I*j:2);end.运行结果:1*1=12*1=23*1=34*1=45*1=56*1=67*1=78*1=89*1=91*2=22*2=43*2=64*2=85*2=106*2=127*2=148*2=169*2=181*3=32*3=63*3=94*3=125*3=156*3=187*3=218*3=249*3=271*4=42*4=83*4=124*4=165*4=206*4=247*4=288*4=329*4=361*5=52*5=103*5=154*5=205*5=256*5=307*5=358*5=409*5=451*6=62*6=123*6=184*6=245*6=306*6=367*6=428*6=489*6=541*7=72*7=143*7=214*7=285*7=356*7=427*7=498*7=569*7=631*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=649*8=721*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81注意:循环有嵌套时,必须分清层次,切不可把循环进行交叉。[例5、9]编程序分别打印以下三图:(1)(2)(3)***************************************************************************(1)(2)(3)18PASCAL语言基础及基础训练第19页共48页UVarI,j:BeginCForI:=1to5dobeginForj:=1to5dobeginWrite(‘*’);EWEEnd.UVarI,j:BeginCForI:=1to5dobeginWrite(‘’:20-I);Forj:=1to5dobeginWrite(‘*’);EWEEnd.请大家注意看清上述三个小程序,其功能是分别打印出上述三个由“*”组成的小图形。三个图形的不同之处是:第一个直上直下,是个矩形;第二个是左斜的平行四边形;第三个是右斜的平行四边形。所以三个对应的程序也就有所不同,第(2)、(3)个程序比第(1)个多了一句,即加粗加线的那一句。这两句的作用是使每一行开头打印几个空格,即让图形左或右斜。WRITELN的作用是打印完一行后换行。[例5、10]编程打印下列图形:5UVarI,j:BeginC清屏ForI:=1to5dobegin打印每一行前的20-I个空格,这样每行都比上一行Write(‘’:20-I);左移Forj:=1to2*I-1dobegin每一行打印2*I-1列Write(I:1);打印该行行数EWEEnd.[例5、11]打印1―100间的所有素数:素数,即为除了1和它本身外没有另外的因数的整数。所以我们判断一个数N是否素数,可以用2至N-1所有数去除N,如果没有一个数能被N整除,则N为素数。当然,其实我们可以不用用2至N-1这第多的数去除,而只需用2至不大于N的平方根的整数去除N即可(为什么)?这里我们的程序就用2至TRUNC(SQRT(N))来判断,到后面我们还会谈到:如果要判断一个数是否素数,可只用小于TRUNC(SQRT(N))的所有素数去除即可。VarI,j:P:BeginForI:=2to100dobegin循环从2至100P:=再判断I是否素数前,先把判断器P的值设为Forj:=2totrunc(SQRT(I))dobeginTRUEIfImodj=0thenp:=用2至trunc(SQRT(I))的数来除IE如果I能整除J,则P的值改为FALSEIfpthenwrite(I:5);如果P的值仍为TRUE,则I就是素数,打印出E来19UVarI,j:BeginCForI:=1to5dobeginWrite(‘’:20+i);Forj:=1to5dobeginWrite(‘*’);EWEEnd. 分享: >
“pascal语言”相关文章

我要回帖

更多关于 按任意键退出 的文章

 

随机推荐