当前位置:首页 >> 学科竞赛 >>

小学 Pascal教程


目录

第一章 程序设计初步?????????????????? 第一节 程序设计基础???????????????? 第二节 Pascal 语言简介??????????????? 第三节 Pascal 语言程序的基本结构????????? 第二章 顺序结构的程序设计??????????????? 第一节 简单输出语句???????????????? 第二节 带格式的输出语句?????????????? 第三节 常量 变量和算术表达式???????????? 第四节 赋值语句?????????????????? 第五节 输入语句?????????????????? 第六节 顺序结构的程序设计????????????? 第三章 分支结构程序设计???????????????? 第一节 分支结构基本概念 ????????????? 第二节 简单条件语句(IF 语句) ??????????? 第二节 复合语句?????????????????? 第四章 循环结构程序设计???????????????? 第一节 计数循环(FOR 循环)????????????? 第二节 当型循环(WHILE-DO 循环)??????????? 第三节 直到型循环(REPEAT-UNTIL 循环)???????? 第四节 综合应用?????????????????? 附录一:保留字 附录二:标准标识符 附录三:标准函数 附录四:小学信息学(奥林匹克)辅导纲要 附录五:竞赛试题及参考答案

1

第一章 程序设计初步
本章重点 ·Pascal 语言的基本结构 ·熟悉 Pascal 的集成环境 ·掌握编辑、运行一个 Pascal 程序的过程

第一节 程序设计基础
一、 什么是程序和程序设计 计算机具有运算速度快、计算精度高、超强的记忆存贮能力、可靠性高、高度 自动化等特点,应用于科学计算、计算机辅助教学、计算机辅助管理、计算机网络 与通信等诸多方面,但不论计算机的功能有多么强大,应用多么广泛,它都是在人 工控制下进行的,无法完全自动地进行工作。只有当操作者向计算机输入一定的计 算机能接受的信息,它才能按照操作者的要求进行工作,并且得到所需的结果。 那么,人怎样让计算机工作呢?一般地,人们将需要计算机完成的任务设计成 一条一条的指令,并输入计算机,存放在计算机的内存,计算机再逐条地从内存中 取出指令,然后再执行。 可见,计算机是通过一条一条的指令来完成一定的工作的。指令的序列叫程序, 编制程序的工作就是程序设计。 二、 什么是计算机语言 设想:要让计算机在屏幕上显示如下图形,该怎么办? * * * ********* * * * * ********* 我们不能直接用语言告诉计算机: “请你在屏幕上显示这个图形” ,因为它不懂 汉语、英语、法语等自然语言。试想,一个完全不懂中文的外国人在中国如何顺利 地开展工作?显然可以依靠翻译。同样,计算机与人之间进行通信也可以通过翻译, 这个翻译就是计算机语言,它由一些简单的单词符号、数字和严谨的语法组成。 计算机语言可以分为机器语言、汇编语言和高级语言,但计算机能直接识别的
2

只有机器语言,而高级语言要再通过翻译软件的翻译,计算机才能识别,Pascal 就 是一种高级语言。

第二节

Pascal 语言简介

Pascal 语言是瑞士苏黎世联邦工业大学的 N. 沃思(Niklaus Wirth)教授于 1968 年设计完成。它较好地体现了结构化程序设计的思想,结构严谨,概念简捷,数据 结构丰富,有利于初学者形成良好的编程习惯和严谨清晰的程序设计风格,是公认 的典范的程序设计教学语言。 越来越多的学校把 Pascal 语言作为学习程序设计的第 一语言, 全国奥林匹克信息学竞赛 (NOI) 、 国际奥林匹克信息学竞赛 (IOI) 把 Pascal 语言定位唯一 提倡的程序设计语言。 .. 一、 Turbo Pascal 语言系统的使用 目前,常用的 Pascal 语言系统有 Turbo Pascal7.0 与 Borland Pascal 7.0, 本书将学习 Turbo Pascal 7.0 系统的使用。 简单的 Pascal 系统必须有以下几个文件: TURBO.EXE (Turbo Pascal 集成环境) TURBO.TPL (Turbo Pascal 标准单元库) TURBO.TP (Turbo Pascal 集成环境设置记录) 1. 系统的启动 第一步:启动计算机,进入到 DOS 操作环境。 第二步:进入 Turbo Pascal 系统程序所在磁盘和目录,执行 TURBO.EXE,屏 幕上出现如图 1 所示的集成环境。在这个环境中能完成程序的输入、编辑、运行、 调试和编译等全部功能。 2. Turbo Pascal 系统集成环境简介

3

操作菜单

编辑区

功能键提示行

Pascal 的集成环境由操作菜单、编辑区和功能键提示行三部分组成。 (1) 操作菜单:完成 Pascal 系统提供的全部功能。 用键盘操作菜单的方法是: 第一步:击 F10 键,激活菜单。 第二步:用 ← 键和 → 键在一级菜单的菜单项之间选择,在选中的菜单项上 用 ↓ 键(或回车键)打开菜单,再用 ↑ 键和 ↓ 键选择二级菜单项,回车即可 执行所选菜单。 (2) 编辑区:进行程序的输入和修改。 (3) 功能键提示行:显示键盘上已有定义的部分快捷键。 几个常用功能键的作用: F1: 获得帮助系统使用指南 F2: 将当前编辑窗口的源程序存盘 F3: 打开一个磁盘上的源程序文件 Ctrl + F9: 运行当前编辑的程序 Alt + F5:查看程序运行结果 3. 输入、修改、运行一个程序的过程
4

第一步:新建一个程序窗口 方法:按 F10 键进入主菜单,选择 File 子菜单,执行其中的 New 命令(默 认文件名为 Noname00.pas 或 Noname01.pas 等)。 第二步: 一行一行的输入程序, 发现输入错误, 可用光标移动键和 Delete 键 (或 退格键)进行修改。 第三步:按 Ctrl + F9 运行该程序。 第四步:按 Alt + F5 查看运行结果。 4.程序的保存与打开 按 F2 键(或执行 File 菜单中的 Save 命令)可将编辑窗口中的程序存入磁盘。 第 一次保存文件时屏幕上会出现一个对话框要求输入文件名(默认扩展名为.pas)。 按 F3(或执行 File 菜单中的 Open 命令)可将磁盘上的 PASCAL 程序调入进行编 辑,此时系统也会弹出一个对话框要求输入要打开的文件名,或直接在文件对话框 列表中选择所要的文件,按回车键即可打开文件。 5.退出 Turbo Pascal 系统 方法 1:选择 File 菜单中的 Exit(或按 Alt + x),可彻底退出 Turbo Pascal 系统,此时如果没有保存修改过的程序,系统将提示你在退出前是否保存。 方法 2:选择 File 菜单中的 Dos,可暂时退出 Turbo pascal 进入到 DOS 命令状 态, 此时 Turbo Pascal 系统仍然驻留内存, 键入 EXIT 命令, 可返回到 Turbo Pascal 集成环境,重现退出前的屏幕。 二.第一个程序 下面程序在运行时,会提示输入一个正方形的边长,然后计算机会求出这个正 方形的面积并显示在屏幕上。按回车键,程序结束回到程序窗口。 Program ex1; var b,s:integer; Begin Write(‘Input b:’); Readln(b); S:=b*b; Writeln(‘s=’,s); Readln; End. 请输入上面的程序,并练习将其存盘、打开与运行上面程序。

5





正确输入下面的程序(注意标点符号和空格),运行并写出结果。 1. program Lx1; uses crt; var a,b,c:integer; begin clrscr; a:=654; b:=78; c:=923; writeln(a:6); writeln(b:6); writeln('+',c:5); writeln('-------'); writeln(a+b+c:6); readln; end. 2. program Lx2; var a,b,s,d,e:integer; begin a:=37; b:=3; s:=a+b; d:=a div b; e:=a mod b; writeln('s=',s); writeln('d=',d); writeln('e=',e); readln;

end.
3. program Lx3; var a,b:integer; begin a:=92; b:=28; writeln(a,'+',b,'=',a+b); writeln(a,'-',b,'=',a-b); writeln(a,'*',b,'=',a*b); writeln(a,' div ',b,'=',a div b); writeln(a,' mod ',b,'=',a mod b);
6

readln; end. 4. program Lx4; var i,j:integer; begin for i:=1 to 8 do begin for j:=1 to i do write(‘*’); writeln; end; readln; end. 5. program Lx5; var i,j:integer; begin for i:=1 to 8 do begin write(' ':40-i); for j:=1 to i do write('*'); writeln; end;

end.
6. program Lx6; var i,j:integer; begin for i:=1 to 8 do begin write(' ':40-i); for j:=1 to 2*i-1 do write('*'); writeln; end; end. 7. program Lx7; uses crt; var i,j,k:integer; begin
7

clrscr; k:=20; for i:=1 to 8 do begin write(' ':k); for j:=1 to i do write(j); for j:=i-1 downto 1 do write(j); writeln; k:=k-1; end; end. 8. program lx8; uses crt; var a:array[1..8,1..8] of integer; i,j:integer; begin clrscr; fillchar(a,sizeof(a),0); for i:=1 to 8 do for j:=1 to 8 do begin if (i-j>=-6) and (i-j<=-1) then if i+j in [3..8] then a[i,j]:=1 else if i+j<>9 then a[i,j]:=4; if i-j in [1..6] then if i+j in [3..8] then a[i,j]:=2 else if i+j<>9 then a[i,j]:=3; end; for i:=1 to 8 do begin for j:=1 to 8 do write(a[i,j]:2); writeln; end; readln; end.

8

第三节 Pascal 语言程序的基本结构
任何程序设计语言都有一组自己的记号和规则。PASCAL 语言也不例外。尽管不 同版本的 PASCAL 语言所采用的记号的数量、形式不尽相同,但其基本成分一般都符 合标准 PASCAL 的规定,只是某些扩展功能各不相同罢了。下面我们首先来了解 Pascal 语言程序的基本结构。 为了明显起见先举一个最简单的 PASCAL 程序例子:

从这个简单的程序可以看到: ⒈ 一个 PASCAL 程序分为两个部分:程序首部和程序体。 ⒉ 程序首部是程序的开头部分,它包括: ⑴程序标志。用“program”来标识“这是一个 PASCAL 程序”。 ⑵程序名称。由程序设计者自己定义,如例中的 exam1。 在写完程序首部之后,应有一个分号。 在 turbo pascal 语言中,程序首部可省略。 ⒊ 程序体是程序的主体。程序体包括说明部分(也可省略)和执行部分。 ⑴ 说明部分:用来描述程序中用到的变量、常量、类型、过程与函数等。本程 序中第二行是"变量说明",用来定义变量的名称、类型。 PASCAL 规定,凡程序中用到所有变量、符号常量、数组、标号、过程与函数、 记录、文件等数据都必须在说明部分进行定义(或称"说明")。也就是说,不允许 未说明先使用。 ⑵ 执行部分的作用是通知计算机执行指定的操作。 如果一个程序中不写执行部 分,在程序运行时计算机什么工作也不做。因此,执行部分是一个 PASCAL 程序的核 心部分,是比不可少的。 执行部分以"begin"开始,以"end"结束,其间有若干个语句,语句之间以分号 隔开。
9

执行部分之后有一个句点,表示整个程序结束。 4.PASCAL 程序的书写方法比较灵活。当然,书写不应以节省篇幅为目的,而应以 程序结构清晰、易读为目的。在编写程序时尽量模仿本书中例题程序格式,即缩格 形式。 5.在程序中,一对大括号间的文字称为注释。注释的内容由人们根据需要书写,可 以用英语或汉语表示。注释可以放在任何空格可以出现的位置。执行程序时计算机 对注释不予理睬。





选择题 1. 计算机能直接识别的语言是: A.汇编语言 B.高级语言 C.机器语言 D.Pascal 语言 2.一个完整的 PASCAL 程序一般是由以下哪几部分组成的? A.程序首部、变量说明部分和执行部分 B.标号说明部分、说明部分和执行部分 C.程序首部、说明部分和类型定义部分 D.程序首部、说明部分和执行部分 3.每个程序必须有: a.程序标题 b.变量说明部分 c.执行部分 4.PASCAL 程序的执行部分是: a.语句体 b.说明部分和语句体 c.语句 d.整个程序

第二章

顺序结构的程序设计

本章重点 ·基本概念:整数、实数、场宽、标准场宽、常量、变量、表达式 ·write 和 writeln 语句的用法 ·整数和字符串的标准场宽 ·掌握实数的双场宽输出方法 ·标识符的命名 ·赋值语句的用法 ·read 和 readln 语句的用法 ·会写简单程序的输出结果 ·会编制简单的程序。

10

第一节

简单的输出语句

在一个程序中,所有的操作都由执行部分来完成,而执行部分又都是由一个个 语句组成的。因此,下面开始我们要学习 pascal 语言的基本语句,并且在学习过程 中逐步学会程序设计的基本方法。 一、 输出语句 输出语句的作用是将程序运算的结果输出到屏幕或打印机等输出设备。这里通 常是指输出到屏幕。 (一)输出语句的两种格式 1. write 语句 格式:Write(输出项 1,输出项 2,??); 如:write(1,2,3,4); write(1.2,3.4,5); write('My name is Liping'); 2.writeln 语句 格式: Writeln(输出项 1,输出项 2,??) 或 writeln (二)输出语句的功能 计算机执行到 write (或 writeln) 语句时, 先计算 出语句中的每个输出项的值, .. 再将每一个输出项的值一个接一个地输出到屏幕上。 如 writeln(3+5)的输出是 8。 Write 语句与 writeln 语句格式上都相似,但它们在功能上有所不同,两个语 句的区别在于: ①write 语句是一项接一项地输出,输出完最后一项后不换行; writeln 语句也是一项接一项地输出,但输出完最后一项后自动换行。 例如: 程序段:write(1,2,3,4);write(5,6); 输出为: 123456 即输出 1、2、3、4 后紧接着输出 5 和 6。 程序段:writeln(1,2,3,4);write(5,6); 输出为: 1234

11

56 即输出 1、2、3、4 后换行输出 5 和 6。 ②write 语句至少有一个输出项; writeln 语句则允许没有输出项,此时该语句不输出任何内容,只起换行作 用。 如:程序段 write(‘U’); writeln; write(‘F’); writeln; write(‘O’); writeln; 输出为: U F O 等价于程序段: writeln(‘U’); writeln(‘F’); writeln(‘O’);

(三)说明: 1. 当一个 write(或 writeln)语句中有多个输出项时,各项之间必须用逗号隔开, 但最后一个没有逗号。 如:writeln(1,3,5,7,9); 不能写成: writeln(1,3,5,7,9,); 2.当输出项为一串用单引号 引起的字符(称为字符串 )时,则原样输出 单引号中的 ... ... .... 内容。 例如:writeln(‘Sheng Li you tian di er xiao xue’) 输出 Sheng Li you tian di er xiao xue 3.整数的输出 整数的概念:由正(或负)号和一系列数字组成。正整数和零前面的正号 可省略。 当整数范围在-2147483647~2147483647 时,按实际大小输出;超过此范 围,则不能正确输出。

12

语句 writeln(123)和语句 writeln(‘123’)表示的意义 相同吗

二、 简单的程序设计 例 1:在屏幕上输出“Zhe shi wo de di yi ge Turbo Pascal cheng xu.” Program exp1; Begin Write(‘Zhe shi wo de di yi ge Turbo Pascal cheng xu.’); End. 或 Program exp1; Begin Writeln(‘Zhe shi wo de di yi ge Turbo Pascal cheng xu.’); End. 例 2:在屏幕上输出如下图形: * ** *** **** 程序为: program exp2; begin writeln(‘*’); writeln(‘**’); writeln(‘***’); writeln(‘****’); end. 例 3:输出如下图形: * * *
13

* * ******* 程序为: program exp3; begin writeln(‘ writeln(‘ writeln(‘ writeln(‘ end.

*’); * *’); * *’); *******’);

你想让你的程序在每次运行之前屏幕都保持干干净净吗?那就赶快 动手吧。 第一步:在程序首部“program ?;”之后输入“uses crt;” 第二步:在程序的执行部分 ,需要屏幕干干净净的地方,就加上 ....... “clrscr;”




+0026 34.0 -00

1.下面给出的哪些是有效整数? 75 -2.31 28. 3,000,000 45 000 11;123;234 2.写出下列两个程序段的运行结果: a. WRITE('*'); b. WRITELN('*'); WRITE('*'); WRITELN('*'); WRITE('*'); WRITELN('*'); WRITE('*'); WRITELN('*'); 3. 编程在屏幕上分别输出如下图形: * ****** * ** ****** *** *** ****** ***** **** ****** *** * 4.编程在屏幕上显示“中国”二字。 5.编程在屏幕上输出一个机器人头像。 6.写出下列程序的运行结果。
14

(1) program Lx1; begin write(123); write(456); write(789); end. (2) program Lx2; begin writeln(123); writeln(456); writeln(789); end. (3) program Lx3; begin writeln(‘78+87=’,78+87); writeln(’87-78=’,87-78); writeln(‘78*87=’,78*87); end. (4) program Lx4; begin write(‘a’); writeln; write(‘a’,’a’); writeln; writeln(‘aaa’); write(‘aaaa’); writeln; end.

第二节

带格式的输出语句

尝试练习:写出下列程序段的输出结果,并上机验证。 Writeln(123); Writeln(12.3); Writeln(-12.3); 问题:writeln(12.3)的输出不是 12.3,而是 1.2300000000E+01; writeln(-12.3)的输出不是-12.3,而是-1.2300000000E+01, 为什么?

15

一、 实数 在 Turbo Pascal 系统中,带小数点的数称为实数。如 12.3,-12.3 等。 实数包括正实数、负实数和实数零。 Pascal 中表示实数的形式有两种。 ⑴十进制表示法 即带小数点的表示方法。必须有小数点,且小数点前后必须有数字,正号 可省略。 如 0.0,-0.23,+5.61,-8.0,-6.050 等都是合法的实数形式,而 0.和.37 都不是 合法的实数形式。

12 和 12.0 表示的意义相同吗? 为什么?

⑵科学记数法 即指数形式的表示方法,如 1.25? 10 可表示成 1.25E+05。
5

在科学记数法中,字母"E"表示 10 这个"底数",而 E 之前为一个十进制表示的 小数,称为尾数,E 之后必须为一个整数,称为"指数"。 如-1234.56E+26 , +0.268E-5 , 1E5 是合法形式。不合法的实数表示形式及原 因见表 2-1。 实数形式 .34E+12 2.E5 E5 E 1.2E+0.5 不合法的原因 小数点前必须有数字 小数点后必须有数字 E 前面的数字 1 不能省略 E 前后必须有数字 E 后面的数字必须为正(或负)整数 表 2-1 和整数相比,实数能表示的范围大得多,但实数的运算比整数的运算速度慢且 无法像整数那样精确表示,只能近似表示。 二、 带格式的输出语句
16

1.场宽和标准场宽 在 pascal 语言中,数据的输出格式是非常重要的。我们将每一种类型的数据在 输出时所占据的列数称为场宽 。若我们输出数据时不规定场宽,则系统默认为标准 .. .. 场宽 。表 2-2 列出了 Turbo Pascal 对几种常用数据规定的标准场宽。 .. 数据类型 整数 实数 标准场宽 整数的实际宽度 17 实例 Write(1234); Write(-123.4); 输出结果 1234 按科学记数法输出: -1.23400000E+02 aaa

字符串

包含的字符个数

Write(‘aaa’);

表 2-2 ⒉指定场宽 在输出语句中输出项含有格式符号时,就是为了指定场宽。 ⑴指定单场宽. 格式: write(输出项:N) 或 writeln(输出项:N) 其中 N 为正整数。 指定单场宽后,所有数据不再按标准场宽输出,而按指定场宽输出。若数据 实际长度小于指定场宽时,则一律“向右靠齐,左留空格 ”;若数据实际长度大于 ......... 指定场宽时,则按实际长度输出,此时指定场宽无效。 如:write(1234:8); 输出 □□□□1234 write('abcdef':12); 输出 □□□□□□abcdef writeln(1234:1); 输出 1234 writeln(‘abcdef’:2); 输出 abcdef (其中“□”为一个空格) 一般地,指定单场宽用于整数 和字符串 的输出。 .. ... ⑵指定双场宽 如果希望输出的实数不用科学记数法输出,而用小数形式输出,可以指定双场 宽。 格式:write(实数:m:n) 或 writeln(实数:m:n)

17

其中 m 和 n 都是正整数,m 指整个实数所占的宽度(包括符号位、整数部分、小 数点和小数部分),n 指定实数的小数位数。 如 : write(-123.454:8:2); 输出:□-123.45 如果双场宽不能满足输出数据的最低要求, 则按实际长度输出, 场宽不起作用。 如:write(1.4567:5:4); 要使小数点后有 4 位数字,而总场宽为 5,是不可能 的(因为还有一个小数点, 小数点前面还有一个数字)。它最低限度要有 6 列,即输 出为:1.4567 例 1 : 写出下列程序的输出结果. Program exp4_1; Begin writeln(1234,1234:6,1234:3); writeln(1234.5678:12:5,1234.5678:8:5); writeln(‘#’,’#’:5); writeln(‘abcdefg’,’abcdefg’:10,’abcdefg’:6); end. 运行结果如下: 1234□□12341234 □□1234.567801234.56780 #□□□□# abcdefg□□□abcdefgabcdefg 例 2:将 1,12,123 这三个数右齐输出。 Program exp_2; Begin Writeln(1:6); Writeln(12:6); Writeln(123:6); End.

将 1,12,123 这三个数左齐输出,该如何修改上面的程序?

18

例 3:将 1.23, 12.345, 1234.5678 这三个数按小数点对齐输出。 分析:这三个数都是实数,最大的小数位数为 4,最大的宽度为 9,因此应设双 场宽的总宽度大于等于 9,小数位数为 4。 Program exp4_3; Begin Writeln(1.23:10:4); Writeln(12.345:10:4); Writeln(1234.5667:10:4); End. 例 4:在屏幕上显示 253+34 的竖式加法。 分析:竖式加法要求个位对齐,即各数要右对齐,因此采用场宽控制。 Program exp4_4; Begin Writeln(253:5); Writeln(‘+’,34:4); Writeln(‘------‘); Writeln(253+34:5); End.

① 程序中的 writeln(‘+’,34:4)能否用 writeln(‘+’,34:5)代替? ② 在屏幕上显示 253-34 的竖式减法,应如何修改上面的程序?


1.下面哪些是有效实数? +3.14 47.0 -3.14 26.75 3.7E5 3.7E-5 -3.7E5 5E2 3.14E0 2.写出下列程序段的运行结果。 (1) write(2,4,6); write(8,10,12);
19


12. -.75 3.7E12 .003 -00.000 47 3.14E1 3.7E4.5

write(14); (2) writeln(2,4,6); writeln(8,10,12); writeln(14); write(2,4); writeln; write(6); writeln(8,10); write(12); writeln; write(2); write(4,6,8); writeln(10); write(2:5,4:4,6:3); writeln; write(8:2,10:1); writeln(12:5,14:3); writeln(‘a=’,2,’b=’,4); writeln(‘c=’:5,6:1,’d=’:5,8); writeln(‘e=’,10:2,’f=’,12:4); writeln; writeln(14:1);

(3)

(4)

(5)

(6)

3.利用带格式的输出语句编程显示下面的图形。 * ####### 9876543210 * * ##### 98765432 * * * ### 987654 * * * * # 9876

第三节
一、 常量

常量 变量和算术表达式

20

在程序运行过程中,其值不能被改变的量称为常量。如 123,145.88,'abc'等。 常量的分类见下表:

? ? ?数值常量?整型常量 ? ? ?实型常量 ? ? 常量? ? ?字符常量 ? ?非数值常量? ?字符串常量 ? ?布尔常量 ? ? ?
介绍几种常用的常量: ⒈整型常量 整型常量就是前面所说的整数,它由正号(或负号)和一系列数字组成,正号 可省略。如 138,0,-512 等都是整型常量,而 18.或 18.0 都不是整型常量。 ⒉实型常量 实型常量就是前面所说的实数,包括正实数、负实数和实数零。 3.字符串常量 字符常量是指用单引号引起的一串字符,如’asdf’,’a’,’12 67’等,字 . 符串的长度 就是引号中字符的个数。 引号中的一个空格也算一个字符。 实例见表 2-3。 ..... 字符串常量 ‘a’ ‘abcd’ ‘ab cd’ ‘123’ 表 2-3 对应的长度 1 4 6 (含有两个空格) 3

常量‘123’和 123 表示的意义相同吗?

二、变量
21

变量代表了一个内存单元,可以存放不同的值,故称为变量。如游戏"魂斗罗" 中玩者命的个数最初为 3, 当你死了一次命减少一, 这里命的个数就是一个变量(或 者说命的个数存放在一个内存单元中)。 变量有三个要素:变量名、变量类型、变量值。 一个程序中可能要使用到若干个变量,为了区别不同的变量,必须给每个变量 取一个名,称为变量名 。该变量存放的值称为变量的值 ,变量中能够存放值的类型 ... .... 为变量的类型 。例如 "魂斗罗"游戏中用于存放"命"的变量,在游戏程序中的名字可 ..... 取为 N,它的类型为整型,游戏初始时这个变量的值为 3。 1. 变量的命名规则 变量的命名规则同标识符的命名规则。所谓标识符就是用来标识处理对象 (如变量名、程序名、文件名等)的符号。 标识符的命名规则: ① 以字母开头,后面可以跟字母、数字和一些符号(如下划线“_”) ② 不得使用 Pascal 保留字。 保留字是 Pascal 语言选定的具有固定 意义和用法的专用单词或缩写, .. 程序中不允许做规定以外的使用。见附录一。 ③ 最好不要使用 Pascal 的标准标识符,以免引起混淆。 标准标识符是指 Pascal 语言系统已经预先定义 好其含义的标识符。 见 .... 附录二。 如 sum,exp_1,p001,date,i 等是允许的变量名,而 3root,two word 等则是 不合法的。 错误例子 2a a+b a x if integer 原 因

以数字开头 出现了非字母和数字外的字符 标识符中有空格 与保留字同名 与标准标识符同名(虽不产生错误,但最好不用)

注意: ·标识符中字母不分大小写,如 a1 和 A1 是同一个。 ·标识符不能太长,一般小于等于 8 个字符。 2.标准数据类型 常量是有类型的数据,变量在某一时刻用来存放一个常量,因此也应有相应的 类型。最基本的类型是标准类型。标准类型包括:
22

整数类型:integer 实数类型:real 字符类型:char 布尔类型:boolean

(用于存放整数) (用来存放实数) (用于存放一个字符) (用于存放布尔值)

任何一种数据类型都有其取值范围和适合的运算。表 2-4 列出了两种常用数据 类型的取值范围和适合的运算。 数据类型 整型 integer 取值范围 -32768~32767 适合的算术运算 + (加) -(减) *(乘) div (整除) mod (求余数) + (加) - (减) * (乘) / (除)

实型 real

? 1038 ~ 1038

表 2-4 3. 变量说明 在程序中若要使用变量,变量的名称及类型在程序的变量说明部分加以定义, 变量的值则在程序的执行部分中才能赋给。 变量说明的一般格式: VAR 变量名 1,变量名 2,? :数据类型; 其中 VAR 是 pascal 保留字,表示开始一个变量说明段。 一个程序中,可以说明许多不同类型的变量,每种类型变量之间用分号 隔开, .. 共用一个 VAR 符号。 例如: var age,day:integer; {age 和 day 被定义为整型变量} amount,average:real; {amount 和 average 被定义为实型变量。} 三、算术表达式 1.算术表达式的定义
23

算术表达式是由整型或实型的常量、变量、算术运算符及圆括号等组成的有意 义的式子。它代表一个整型或实型的数值。 如:A+3.14159*5/8.4- 123 特别地,一个常量或变量是特殊的表达式。 2.算术运算符 常用的有以下六个算术运算符: ① + (加) ② - (减) ③ * (乘) ④ / (实数除),得到结果为实型。 如 5.0/2.0=2.5, 5/2= 2.5, 4/2=2.0 而不等于 2。 ⑤ DIV (整数除),它要求除数和被除数均为整型, 结果也为整型。DIV 运算 只取商的整数部分。 如 10 DIV 2=5 10 DIV 3=3 5 DIV 10=0.5 -15 DIV 4= -3 ⑥ mod (求余),也只能用于整数运算,结果为整数,符号与被除数相同 。 ........ 例如: 10 mod 4=2 10 mod –4=2 -10 mod 4=-2 -10 mod –4=-2 3.算术表达式的书写规则 ·所有的字符必须写在同一行上。 ·乘号必须用“*”,不能用“×”或“.”,也不能省略。 ·除号必须写成“/”,不能写成“÷”,也不能写成分数的形式。 ·只能用小括号,小括号里可以再套小括号,但小括号必须成对出现。数学 式子中所有的中括号和大括号都用小括号代替。 ·必要时要添加小括号,以保持数学式子的原意。

例如:数学式子

23 ? 567 ?

12 ? c ? d 对应的 Pascal 表达式为: a?b

23* 567 ? 12 /(a ? b) ? c * d
24

该 Pascal 表达式能不能写成 23 * 567 ? 12 / a ? b ? c * d 为什么?

4.运算优先顺序 如果一个表达式里出现两个或两个以上的运算符, 则必须规定它们的运算次 序。pascal 规定: ·表达式中相同优先级的运算符,按从左到右顺序计算; ·表达式中不同优先级的运算符,按从高到低顺序计算; ·括号优先级最高,从内到外逐层降低; ·在算术运算中运算符的优先顺序与数学上的四则运算一致,即“先乘除后 加减”(注:“MOD”、“DIV”运算的优先级与“*”、“/”相同)。 例如:设 a,b,c,d,e 都是整型变量,它们的值分别为 6,6,5,3,2,计算表达式 e+a*b DIV c MOD d 的值。 解:该表达式是一个整型表达式,运算顺序为 e+a*b DIV c MOD d 36 7 1 3 该表达式的值为 3。 如果表达式改为 e+a*b/(c MOD d) 则它是一个实型表达式,运算顺序为: e+a*b/(c MOD d) 36 18.0 20.0
25

2

该表达式的值为 20.0。





1.指出下列符号中哪些能作为标识符? Ai Wang 4D4g If max pi begin 1abc x1 N birth a+b Lx_1 end false program 2saber X1 N.writh algorithml OK false x/y Ada 316 pascal a-b a_b a*b no.two 2.求下列表达式的值. (1) 10 mod 2+2= (2) 5*3*6 div 2= (3) 8 div 4*25*(3 div 7+2)= (4) 30 div 5 mod 2= (5) 30 div (5 div 2)= (6) 30 mod 5 div 2= (7) 30 mod 5 mod 2= (8) 5 mod -2= (9) 5 div -2= (10) -5 mod 2= (11) -5 div -2= (12) -5 mod -2= (13) 4+5*7 div 6= (14) 3*((4-1)*2)= (15) 16 div 2/2= (16) (7-2) div (4+6 div 2)= (17) 3 MOD 10 DIV 10= (18)10 div 3 div 10= 3.写出下列数学式子对应的 Pascal 表达式。 (1) (2) (3) (4) (5)

( a ? b) ? c ? d
a?b ? 2?c 2

890 ? [23? (12 ? 6) ? 18]

[4 ? (13 ? 4)] ? 6
88 ? 16 ? 4a 47 ? 15

第四节

赋值语句
26

变量既然代表一个内存单元,其值是可变的,那么其中的值是怎么提供的,又 是怎么改变的呢?可以通过赋值语句来进行。 一、赋值语句的格式 变量名:=表达式; 其中“:=”称为赋值号。 二、执行过程 计算机先计算赋值号右边表达式的值,然后将表达式的值赋给变量名代表 的变量。 如:A:=(9*8)-(2-1); A:=A+1 三、说明 1.程序中的任何一个变量都必须先赋值,后使用。 2.赋值号“:=”具有方向性 ,只能将赋值号右边的值赋给左边的变量。 ... 3.一个赋值语句只能给一个变量赋值。 如要给整型变量 a,b 都赋值为 12,使用 a=b:=12 是错误的,应该采用两个 赋值语句: a:=12; b:=12; 4.赋值号右边的表达式最终必须是一个能计算出来的值。 5.整数可以赋给实型变量,但实数不能赋给整型变量。 如:var i:integer; x,y:real; 则下面的赋值语句是允许的。 i:=0; i:=i+1; x:=2.5; y:=7.8; x:=(x+y)/(x-y); y:=i+5; 四、应用举例 例 1:下列赋值语句哪些有效?哪些无效?为什么? (1) x=y+z; (2) x:=x+1; (3) x:=y; (4) x+y:=z; (5)x=y:=1; (6) x=y=z 解答: (1)(6)无效。无赋值号,不是赋值语句。 (2)有效。将变量 x 的值取出加上 1 再赋给变量 x。 (3)有效。将变量 y 的值赋给变量 x。

27

(4)无效。赋值号左边只能是变量。 (5)无效。一个赋值语句只能给一个变量赋值。 例 2.已知长方形的长 L=100,宽 h=60,求该长方形的周长和面积。编程完成。 分析:长方形的周长用 t 表示,面积用 s 表示,则

t ? 2( L ? h) , s ? L ? h
源程序为: program exp2; var L,h,t,s:integer; begin L:=100; h:=60; t:=2*(L+h); s:=L*h; writeln(‘Zhou chang=’,t); writeln(‘Mian ji=’,s); end.

语句 t:=2*(L+h); 能不能写成 t:=2(L+h); 语句 s:=L*h; 能不能写成 s:=L×h; 为什么?





1.x,y,z 是整型变量,分别等于 17,5,1967,请写出下述语句的输出。 (1) writeln(x,y,z); (2) writeln(‘x=’,x,’y=’,y,’z=’,z); (3) writeln(‘x=’,x:2,’y=’,y:1,’ z=’,z:4; (4) writeln(‘x=’,x:3,’y=’,y:2,’z=’,z:5); 2.若实型变量 x 的值为 123.48,请写出下述语句的输出。 (1) writeln(x:6:2); (2) writeln(x:10:2); (3) writeln(x:5:2); (4) writeln(x:8:4);
28

(5) writeln(x:6:1); 3.写出下列程序的输出结果。 Program Lx4; Var a:integer; b:real; begin a:=1357; b:=1234.5678; writeln(a,a:3); writeln(a,a:5); writeln(b,b:12:5); writeln(b:1:4); end. 4.已知某梯形的上底 A=13,下底 B=18,高 H=9,求它的面积 S。编程完成。

第五节

输入语句(读语句)

在程序中变量获得一个确定的值,固然可以用赋值语句,但是如果需要赋值的 变量较多,或变量的值经常变化,则使用本节介绍的输入语句──读语句,将更为 方便。 读语句是在程序运行时由用户从键盘给变量提供数据,方式非常灵活。 一、read 语句 格式:read(变量名 1,变量名 2,?); 功能:read 语句执行时,从键盘读入数据,并依次赋给相应的变量。 说明: ① read 是标准标识符。 ② 执行到 read 语句时,等待用户从键盘上输入数据,输入整型或实型数据时, 数据间要用空格 或回车 分隔开各个数据,最后一定要有回车表示输入结束。 .. .. ③ 从键盘输入的数据必须是常量,输入的数据要与变量类型一致。 ④ 一个 read 语句可以从一个或多个输入数据行中按顺序 读数据,赋给语句中 ... 的变量;而一个输入数据行可以被一个或多个 read 语句连续读数据。若输入的数 据少于变量数,则系统等待继续输入;若输入的数据多于变量数,则多余的数据被 略去。
29

例 1:设 a、b、c 为整型变量,需将它们的值分别赋以 10,20,30,写出对应语 句 read(a,b,c);的数据输入格式。 解: 根据说明②和④,至少可列出下面 4 种输入格式 (a) 10□20□30←┘ (b) 10□20←┘ 30←┘ (c) 10←┘ 20□30←┘ (d) 10←┘ 20←┘ 30←┘ 其中"←┘"表示回车键。下同。 一般采用第一种或第四种输入格式。 二、readln 语句 格式: readln(变量名 1,变量名 2,?) 或 readln; 功能:从键盘读入数据,并依次赋给相应的变量 表面上看,read 语句和 readln 语句的功能是相同的,但它们是有区别的。 1. read 语句是一个接一个地读数据,在执行完本 Read 语句( 读完本语句中变量 所需的数据)后,下一个读语句接着从该数据输入行中继续读数据,也就是说,不换 行。如: Read(a,b); Read(c,d); Read(e); 如果输入数据行如下: 1□2□3□4□5□6□←┘ 则 a,b,c,d,e 的值分别为 1,2,3,4,5。 如果后面无读语句则数据 6 是多余的,这是允许的。 Readln 则不同,在读完本 Readln 语句中变量所需的数据后, 该数据行中剩余 的数据多余无用,或者说,在读完本 Readln 语句中变量所需数据后,一定要读到一 个回车,否则多余的数据无用。 例 2 : 设要达到例 1 同样的目的,但语句改为: readln(a,b);readln(c) 则例 1 中的 4 种输入格式只有(b)(d)是有效的.

30

2. read 后一定要有变量名,而 readln 可以不带变量名,只是等待读入一个换行 符(回车)。经常用于暂停程序的运行,直到输入一个回车。 例 3 : 设有下列语句: read(a,b,c); readln(d,e); readln; readln(f,g); 其中,所有变量均为整型。如果输入的数据如下: 1□2←┘ 3□4□5□6□7□8←┘ 9□10←┘ 11←┘ 12□13←┘ 列表给出每个变量的值。 分析: 可以假想有一“数据位置指针”,每读一个数据后,指针后移到该数据之后, 每执行一个 readln 语句后, 指针移到下一个数据行的开头。 各变量的值如下表所示。 变量名 值 a 1 b 2 c 3 d 4 e 5 f 11 g 12

为了避免可能出现的错误,建议在程序中按下列原则使用读语句: ·如果没有特殊需要,在一个程序中尽量避免混合使用 read 语句和 readln 语句; · 尽量用 readln 语句来输入数据, 一个数据行对应一个 readln 语句; · 由于执行 read 或 readln 语句时, 系统不会提供任何提示信息,因此, 编程时最好在 readln 语句之前加以适当提示。 例如: write('Input a,b,c:'); readln(a,b,c); 在执行时,屏幕上显示: Input a,b,c:■ 其中,“■”为光标。执行 readln 语句后,系统处于待待输入状态, 只有输 入了所需数据后才继续往下执行。

31





一、选择题: 1. 有变量说明如下: var i1,i2:integer; r1,r2:real; 设各变量均已赋值,下面语法错误 的语句是: .. (A) i1:=i2; (B) i1:=i1+1; (C) i1:=r1; (D) r1:=i1; 2. 设 a,b,c,d 均为整型变量,对于下面的程序段 a:=0; b:=0; read(a,b); readln(c); readln(d); 若从键盘输入: 1←┘ 2 3 4←┘ 5 6 7←┘ 则 a,b,c,d 中的数应取哪一组? (A) 1,2,3,4 (B) 1,2,3,5 (C) 1,2,5,6 (D)1,0,2,5 3.设整型变量 i 的的值为 12,实型变量 A 的值为-47.28,执行语句 writeln(i:4,A:8:2)的结果是: (A) 12□□-47.28□□ (B) 12□-47.2800 (C) □□12□□-47.28 (D) 12□□□□-47.28 4.已知 a,b,c 都是整型变量,由键盘输入三行数据: 1 2 3 ←┘ 4 5 6←┘ 7 8 9←┘ 下列语句组中不能使 a=1,b=7 的是: (A) readln(a,b,b,b,b,b,b,c,c); (B) readln(a); readln; readln(b); (C) readln(a,c,c,c); read(b); (D) readln(a,c,c); readln(b,c,c); 5.已知 x,y,z 均为整型变量,如果输入的数据是: 1 2 3 ←┘ 4 5 6 ←┘

32

7 8 9 ←┘ 则下面哪组输入语句可以使 x,y,z 的值分别为 1,2,4: A.read(x);read(y);read(z); B.readln(x);readln(y);readln(z); C.readln(x);read(y);readln(z); D.read(x);readln(y);read(z); 二、设有下列语句: readln(a,b,c); readln(i,k,j,L); readln(m,n); 其中,所有变量均为整型。如果输入的数据如下: 1 2 3 4 5←┘ 6 7 8 9 0←┘ 10 20←┘ 填写下表: 变量名 变量的值 三、设有下列语句: read(a,b,c); read(i,k,j,L); read(m,n); 其中,所有变量均为整型。如果输入的数据如下: 1 2 3 4 5←┘ 6 7 8 9 0←┘ 10 20←┘ 填写下表: 变量名 变量的值 四、已知:a,b 是整型变量,c 是实型变量,对以下各组输入,执行 readln(a,b,c) 后的结果为:①正常输入 ②出错 ③等待输入。分别写出理由。 (1) 41 3.7 7 __________________ (2) 41 37 __________________ (3) 41.0 37 7 __________________ (4) 41 37 0.7 __________________ (5) 41 3 0.7 33 __________________ a b c i j k L m n a b c i j k L m n

33

第六节

顺序结构程序设计

处理任何事情都有一定的步骤,如果每一步只用一个简单语句就能完成,由这 样一些按顺序执行的简单语句构成的程序,就是顺序结构的程序。本节以顺序结构 的程序为例,学习如何在程序中输入数据、运算处理和输出结果。通过阅读这些程 序,可以逐步熟悉 pascal 程序的编写方法和应遵循的规则,为以后各章的学习打基 础。 例 1 :试编一程序,输入一梯形的上底、下底、高, 求该梯形的面积。 梯形的面积

s?

(上底 ? 下底) ?高 2

分析: 整个程序分为三段:输入、计算、输出。程序中用 a,b,h 三个变量分别存 放梯形的上、下底与高,S 存放面积。 然而使用这些变量都要先说明,程序的执行 部分中先输入上、下底与高,接着求面积 S,最后输出结果 S。 源程序如下: program Tixing; {程序首部} var a,b,h,s:real; {程序说明部分} begin write('Input a,b,h:'); {显示提示信息} readln(a,b,h); {从键盘读取上底、下底和高的值} s:=(a+b)*h/2; {求梯形的面积,并存入变量 S} write('s=',s:10:3); {在屏幕上显示所求的面积} end. 例2. 从键盘上输入两个正整数,输出它们的加法横式。 如输入的两个数为 123 和 45,则输出为: 123+45=168 program L2; var a,b:integer; begin write(‘Input a,b:’); readln(a,b); writeln(a,’+’,b,’=’,a+b);
34

readln; end.

语句 writeln(a,’+’,b,’=’,a+b)为什么不写成: writeln(‘a+b=’,a+b) ?

例 3. 某幼儿园里,有 5 个小朋友编号为 1,2,3,4,5,他们按自己的编号顺 序围坐在一张圆桌旁。他们身上都有若干个糖果,现在他们做一个分糖果游戏。从 1 号小朋友开始,将他的糖果均分三份(如果有多余的,则他将多余的糖果吃掉), 自己留一份,其余两份分给他的相邻的两个小朋友。接着 2 号、3 号、4 号、5 号小 朋友也这如果做。问一轮后,每个小朋友手上分别有多少糖果。 分析: 这个问题中我们关心的是在游戏过程中每个小朋友的糖果个数,且他们所拥有 的糖果数是在变化的。因此可用 a,b,c,d,e 五个变量分别存放五个小朋友在某一时 刻所拥有的糖果数。每次分糖后,他的糖果数一定为原来的糖果数 div 3(因为分 糖过程糖果的数目不一定都刚好分完,用整除恰恰可以表示多余的糖自己吃掉)。 而与他相邻的两人则增加与这个小朋友现在拥有的一样的糖果数。 由于开始时五各小朋友的糖果数目不确定,因此由键盘输入他们的初始值。 源程序如下: var a,b,c,d,e:integer; begin write('Please Enter init numbers '); readln(a,b,c,d,e); {从键盘读入 5 位小朋友的初始糖果数} a:=a div 3;b:=b+a;e:=e+a; {1 号均分后,1、2、5 号的糖果数变化情况} b:=b div 3;c:=c+b;a:=a+b; {2 号均分后,1、2、3 号的糖果数变化情况} c:=c div 3;b:=b+c;d:=d+c; {3 号均分后,2、3、4 号的糖果数变化情况} d:=d div 3;c:=c+d;e:=e+d; {4 号均分后,3、4、5 号的糖果数变化情况} e:=e div 3;d:=d+e;a:=a+e; {5 号均分后,4、5、1 号的糖果数变化情况} {输出结果} writeln('a=',a); writeln('b=',b); writeln('c=',c); writeln('d=',d); writeln('e=',e); readln;{暂停} end.

35

例 4: 某仓库 5 月 1 日有粮食 100 吨,5 月 2 日又调进 20 吨,5 月 3 日卖出库存的 3 分之二,5 月 4 日又调进库存的 3 倍粮食,问该仓库从 5 月 1 日到 5 月 4 日期间每 天的粮食分别是多少吨?(输出每天的库存量) 分析:在这个问题中,主要要描述从 5 月 1 日到 5 月 4 日期间仓库的粮食库存 量,且易知它是不断变化的。因此我们可以用一个变量 A 来描述仓库的粮食库存量。 程序可写如下: Var A : integer; Begin A:=100; Writeln('May 1:',A); A:=A+20; Writeln(May 2:',A); A:=A div 3; writeln('May 3:',A); A:=A *4; writeln('May 4:',A); Readln; End. 例 5 : 编一程序求半径为 R 的圆的周长与面积? 分析: 程序要先输入半径 R,然后求周长 c 和面积 s,最后输出 c 和 s. 源程序如下: var r,c,s:real; begin write('Enter R='); readln(r); c:=2*3.14*r; s:=3.14*r*r; writeln('c=',c:10:2); writeln('s=',s:10:2); end. 在程序中,为了输出实型周长 C 和面积 S 时,按照小数形式输出,采用了指定双 场宽格式。





1. 从键盘输入两个正整数,输出它们的加法竖式。 如输入的两个数为 123 和 45,则输出为: 123 + 45 ------36

168 2.编一程序,将摄氏温度换为华氏温度。公式为:

其中 f 为华氏温度,c 是摄氏温度。 3.有三个小朋友甲乙丙。甲有 50 粒糖果,乙有 43 粒糖果,丙有 13 粒糖果。现 在他们做一个游戏。从甲开始,将自己的糖分三份,自己留一份,其余两份分别给 乙与丙,多余的糖果自己吃掉,然后乙与丙也依次这样做。问最后甲、乙、丙三人 各有书多少粒糖果? 4.有 5 个人坐在一起,问第 5 个人多少岁?他说比第 4 个人大 2 岁;问第 4 个 人岁数,他说比第 3 个人大 2 岁;问第 3 个人,又说比第 2 个人大 2 岁;问第 2 个人, 说比第 1 个人大 2 岁; 最后问第 1 个人, 他说是 10 岁, 请问第 5 个人多大?

第三章 本章重点

分支结构程序设计

·布尔表达式的概念 ·条件语句的简单结构和程序设计 ·条件语句的复合结构和程序设计

第一节

分支结构基本概念

日常生活中,我们经常要对一个问题进行真、假或者是、否的判断,如: “地球 是圆的” ,对于这个命题,要么是对的,要么是错的,只有两种可能性。在解决实际 问题时,常常需要通过判断来决定解决问题的方法。因此,程序并不总是按照语句 的顺序执行,而是根据条件选择执行某一语句块,或跳过某个语句块,这就是程序 的选择结构设计,也叫分支结构设计。 下面我们先来学习和关分支结构相关的一些概念 一.布尔类型 布尔类型简称布尔型,用标准标识符 Boolean 标识。象整数类型(integer)和 实数类型(real)一样,它是 Pascal 标准数据类型之一。 1.布尔常量 布尔类型的值只有两个:False 和 True。
37

布尔型的数据用来表示某个事情有且只有两种可能的结果, 一般用 True 表示肯 定意义的结果,也就是真的;用 False 表示某种否定意义上的结果,也就是假的。 例如:长方形的周长等于(长+宽)×2 是 True 地球是方的 是 False 1+1=2 是 True 2.布尔变量 我们知道,整型变量是用来存放整数的,那么,布尔变量的作用也就可以知道 了,是用来存放一个布尔值的,也就是存放一个布尔常量。当然与整型变量一样也 必须先定义后使用。下面是布尔变量的说明: VAR p,q:boolean; 二、布尔表达式 1.关系表达式 关系表达式是由一个关系运算符将两个算术表达式连接起来形成的。当关系表 达式成立时,该关系表达式的值为 True(真),否则为 False(假)。 关系运算符一共有六个,分别是: = > < >= <= <> 等于 大于 小于 大于等于 小于等于 不等于 关系表达式的结果是一个布尔值。 例如:125>4 值为 True 3*2=3+2 值为 False 100<10 值为 false

一般情况下,只有同一种数据类型才可以比较。数值、 字 符和布尔型之间不可以比较。

例如: ‘A’<15 22.5<>True False=‘S’ 都是不允许的。但整型和实型可以比较。例如: 18>17.5 结果为 True。

38

2.布尔表达式 布尔表达式是由一个逻辑运算符将两个关系表达式连接起来形成的。 逻辑运算符有三个: NOT(逻辑否), AND(逻辑与), OR(逻辑或) A True True False False B True False True False NOT A False False True True NOT B False True False True A AND B True False False False A OR B True True True False

例如:(3>0) AND (4<0) 表达式的值为 False(假) (3>0) OR (4<0) 表达式的值为 True(真) NOT (3>0) 表达式的值为 False(假) 逻辑运算符的运算次序为: NOT → AND → OR 即,NOT 运算最优先,AND 运算次之,OR 最低。 3.布尔表达式的运算优先级 一个既包括有逻辑运算,又包括关系运算的表达式,运算次序是 括号→函数→NOT→*,/,DIV,MOD,AND →+,-,OR→>,=,<,>=,<=,<> 例如:计算 (2+1<3) AND NOT (2=1) OR (2<>3) 的布尔值 计算顺序为 (2+1<3) AND NOT (2=1) OR (2<>3) 3 F F T 表达式的值为 True(真)。 三.布尔型数据的输入和输出 在 Pascal 的程序中,只能通过赋值语句给布尔变量赋值,不能用 read 语句。 对布尔型数据,可通过 write 或 writeln 语句输出。例如: PROGRAM lt; VAR a,b,c:boolean; {a,b,c 为布尔型变量} BEGIN a:=(1+1>2); {a 的值为假} b:=5>4; {b 的值为真}
39

F T

T

c:=a AND b; {c 的值为假} writeln(a,b:10,c:10); END. 运行结果: FALSE□□□□□□TRUE□□□□□FALSE (□表示空格)





1.已知 a1,a2,a3,的布尔值分别是 True、False、False (1) NOT a1 AND NOT a2 (2) a1 OR a2 AND a3 (3)(NOT a1 OR a2) AND (a2 OR a3) 2.已知: VAR m,n:integer; a,b:real; p,q:boolean; 判断以下语句的正误: (1)m:=trunc(b)*a+a; (2)p:=p+q; (3)m:=n MOD a (4)read(m,a,p,x) (5)write(n,b,q) (注:trunc(x)为截尾取整函数,例 trunc(3.7)=3 trunc(-3.7)=-3) 3.写出下面布尔表达式的逻辑值 (1)39>24 (3)5+6>=11 (4)NOT (30<30) (5) 6*7<=42 (6)(7>5) OR (7<5) 4.设 x 的值为 1,y 的值为 2, 求下列表达式的结果 1) x+1>y; 2) x*5+9=y+4*3; 5.写出判断下列各条件的布尔表达式: (1)i 是 j 的整倍数 (2)K 是偶数 (3)y 是闰年(即 y 能被 4 整除而不能被 100 整除,或者能被 400 整除) (4)x 是两位整数 (5)z 是能被 2 整除但不能被 3 整除的整数

第二节

简单条件语句(IF 语句)

如果一个程序只由赋值语句与输入、输出过程组成,那么它们只能按顺序逐句 执行,但一个程序只有这类顺序执行的语句显然是不够的,Pascal 语言提供了选择
40

执行的语句,即条件语句,也叫 IF 语句。 简单 IF 语句的一般形式有两种 1.格式一: IF <布尔表达式> THEN <语句> 这种 IF 语句的执行过程是:若布尔表达式的值为 True,则执行 THEN 后面的语 句,否则转到下一个语句。 我们来看下面两个例题。 例 1:输入一个整数,如果这个数能被 2 整除,就输出“ou shu” 。 分析:此题关键在于正确表示出判断整除的布尔表达式。通常判断 a 能否被 b 整除,采用布尔表达式 a MOD b=0,如果布尔表达式的值为 True,表示 a 能被 b 整除,否则表示不能整除。 程序为: PROGRAM lt1; VAR a:integer; BEGIN write('a='); readln(a); IF a MOD 2=0 THEN writeln('ou shu') END. 运行: a=4 ou shu a=5 (下划线部分为键盘输入,以下同理) 例 2:输入两个整数 a,b,如果 b 不等于 0 ,输出 a 除以 b 的商。 程序为: PROGRAM lt2; VAR a,b:integer; BEGIN write('a,b='); readln(a,b); IF b<>0 THEN writeln(a/b:0:2);
41

END. 2.格式二: IF <布尔表达式> THEN <语句 1> ELSE <语句 2> 这种 IF 语句的执行过程是:若布尔表达式的值为 True,则执行 THEN 后面的语 句 1;否则执行 ELSE 后面的语句 2。

ELSE 前面的语句末不能加分号(;)。因为分号是两个语句 的分隔符,而 ELSE 子句是 IF 语句的一部分,并非独立语句。

例 3:输入一个成绩判别是否及格,若及格则输出“Pass” ,否则输出“fail” 。 程序为: PROGRAM lt3; VAR kf:real; BEGIN write('kf='); readln(kf); IF kf>=60 THEN write('pass') ELSE write('fail'); writeln; END. 运行: kf=65 pass kf=50 fail 例 4:在超市购物有一个规定,所购物品不超过 100 元时,按九折付款,超过时, 超过部分按七折收费。编写一计费程序。
42

分析:a 表示所购物品的价格,s 表示实际收费。购物超过 100 元时的收费表达式为 s:=100*0.9+(a-100)*0.7 程序为: PROGRAM lt4; VAR a, s:real; BEGIN write('a=');readln(a); IF a<=100 THEN s:=a*0.9 ELSE s:=100*0.9+(a-100)*0.7; writeln('s=',s:0:2); END. 例 5.输入一个年份,判断是否闰年,是则输出'yes',否则输出'no'。条件是: 该年份能被 400 整除,或者能被 4 整除但不能被 100 整除。 分析:我们用 y 表示年份,判断是否闰年的表达式: (y MOD 400=0) OR ((y MOD 4=0) AND (y MOD 100<>0)) 程序为: PROGRAM lt3; VAR y:integer; BEGIN write('year=');readln(y); IF (y MOD 400=0) OR ((y MOD 4=0) AND (y MOD 100<>0)) THEN writeln('yes') ELSE wtiteln('no') END.





编写程序完成下列题目: 1.从键盘输入一个整数,如果是二位数,则输出'yes',否则输出'no'。 2.从键盘输入一个整数,如果是奇数, 则输出'yes',否则输出'no'。 3.从键盘输入两个整数 a,b,如果 a 能被 b 整除,以“a/b=商”的形式输出,否 则以“a/b=商??余数”的形式输出。例:
43

a=5 b=2 输出 5/2=2??1 a=14 b=7 输出 14/7=2 4. 铁路托运行李规定:行李重不超过 50 公斤的,托运费按每公斤 0.15 元计费; 如超 50 公斤,超过部分每公斤加收 0.10 元。编一程序完成自动计费工作。

第三节

复合语句

在简单结构的条件语句中,THEN 和 ELSE 后只允许写一个语句,当一个问题较 复杂,用一个语句不能解决时,需要将多个语句组成一个复合语句。复合语句的格 式为: BEGIN <语句 1>; <语句 2>; ?? <语句 n>__ END;______

初学者往往容易忽略 BEGIN-END,要特别注意。

_____________ 例 1:输入整数 a、b,如果 a<b,交换 a、b 的值。 程序为: PROGRAM lt1; VAR a,b,c:integer; BEGIN writeln('input a,b:'); readln(a,b); IF a<b THEN BEGIN c:=a; a:=b; b:=c END; writeln('a=’,a,’ ',’b=’,b) END.
44

运行: input a,b:3 6 a=6 b=3 例 2:当 x>0 时,计算 x*x,并且输出 x 和 x*x, 程序为: PROGRAM lt2; VAR x,x1:real; BEGIN readln(x); IF x>0 THEN BEGIN x1:=x*x; writeln('x*x=',x1:0:2); writeln('x=',x:0:2); END; END.


一.写出下列程序的运行结果。 (1) a:=4; IF a=4 THEN write('a=1',a); (2) a:=4; IF a<5 THEN write(a-1) ELSE write(a+1); (3) a:=4; IF (a*3=21) AND (a+2>=6) THEN write('True') ELSE write('False'); (4) x:=4;
45



IF x<1 THEN BEGIN x:=1; write('x=',x); END (5) x:=4; IF x<1 THEN x:=1; write('x=',x); 二.填空 1.以下程序段的作用是:将读入的一个三位数字的正整数反向输出.例输入 123,则输 出 321. PROGRAM exp1; VAR m,a,b,c,x:integer; BEGIN readln(m); a:=______________; b:=______________; c:=m DIV 100; x:=a*100+b*10+c; writeln(x); END. 2.以下程序段的作用是:将 a,b,c 三个数由小到大顺序输出。 PROGRAM exp2; VAR a,b,c,temp:integer; BEGIN readln(a,b,c); IF a>b THEN BEGIN temp:=a; a:=b; b:=temp; END; IF THEN
46

BEGIN temp:=a; a:=c; c:=temp; END; IF THEN BEGIN temp:=b; b:=c; c:=temp; END; writeln(a:3,b:3,c:3); END. 3.对于下面的程序段: IF x>y THEN z:=x;x:=y;y:=z; 在下列两种情况下,执行程序段后,x,y,z 的取值有什么变化? (1)x:=10;y:=20;z:=30 执行程序段后 x= ,y= ,z= ; (2)x:=30;y:=20;z:=10 执行程序段后 x= ,y= ,z= ; 二、编写程序 1.输入两个整数,输出其中较小的数。 2.输入一个年份,输出该年 2 月份有几天。 3.输入三个整数,输出最大值。 4.输入三个整数,按从大到小的顺序输出。 5.测试一下你的体形是否标准。首先从键盘输入你的体重(单位公斤)和身高(厘 米) ,体形参数 P 为:体重/身高的三次方*100000, 当 P 小于 1.00 时,体形太瘦 当 P 大于等于 1.00 且小于 1.15 时,体形为有点瘦 当 P 大于等于 1.15 且小于 1.45 时,体形为标准 当 P 大于等于 1.45 且小于 1.60 时,体形为有点胖 当 P 大于等于 1.60 时,体形为太胖。 根据 P 的值,输出体形情况。在输出时, “Thin”表示太瘦了, “Little Thin”稍微 有点瘦, “Standard”标准, “Little fat”有点胖, “Too fat”太胖 6.程序中读入一个英文字母,按字母顺序打印出 5 个字母,输入的字母在中间,并
47

认为字母 A 前边是字母 Z。例如:输入 D,输出 BCDEF,输入 A,输出 YZABC。 7.任意输入一个三位整数,再把它的次序打乱重新组合一个新的三位整数,使其值 最大。如输入一个 491,重新组合成了:941

第四章 循环结构程序设计
本章重点: ·计数循环的结构及程序设计 ·当型循环的结构及程序设计 ·直到型循环的结构及程序设计 解决实际问题时,常常有大量重复的步骤,例如求从 1 到 100 的自然数累加和, 需要进行 99 次累加运算。这样的问题用程序解决时,可以采用循环结构。 在 Pascal 语言中,根据循环条件的描述方法不同,将循环分为三种: 1.按给定的次数重复循环,即 FOR 语句; 2.当满足某个条件时重复循环,即 WHILE 语句; 3.重复循环直到满足某个条件时结束,即 REPEAT 语句。

第一节

计数循环

程序循环有确定的次数时, 可以采用计数循环。 计数循环用 FOR、 TO(或 DOWNTO)、 DO 三个保留字实现流程的控制。 计数循环的格式 格式 1:递增型计数循环语句 FOR 控制变量:=初值 TO 终值 DO 语句(或复合语句) 格式 2:递减型计数循环语句 FOR 控制变量:=初值 DOWNTO 终值 DO 语句(或复合语句) 其循环执行过程: ①先将初值赋值给控制变量; ②比较控制变量的值与终值,如果大于等于终值(用 TO 控制)或小于等于终值 (用 DOWNTO 控制),就结束结束循环,执行循环体的下一个语句 ③否则执行循环中的语句; ④将控制变量的后继值(用 TO 控制) 或前趋值(用 DOWNTO 控制)赋给控制变量;

48

⑤从②开始重复。 使用 FOR 语句要注意以下三个问题: ①初值、终值可以是表达式,控制变量和初值、终值的类型一致,且限于整型、 字符型等; ②控制变量在循环中尽量不施加任何赋值操作; ③循环开始时初值就超过终值,不执行循环,循环次数为0。 例 1:顺序输出前 10 个自然数。 程序为: PROGRAM lt1; VAR I:integer; BEGIN FOR I:=1 TO 10 DO write(I:4); END. 运行: 1 2 3 4 5 6 7 8 例 2.逆序输出前 10 个自然数 PROGRAM lt2; VAR I:integer; BEGIN FOR I:=10 DOWNTO 1 DO write(I:4); END. 运行: 10 9 8 7 6 5 4 例 3:计算 1~100 的累加和。 程序为: PROGRAM lt3; VAR sum,i:integer; BEGIN sum:=0;
49

9

10

3

2

1

FOR i:=1 TO 100 DO sum:=sum+i; writeln('sum=',sum); readln END. 例 4:计算 1~10 的累乘积。 PROGRAM lt4; VAR sum,i:integer; BEGIN sum:=1; FOR i:=1 TO 10 DO sum:=sum*i; writeln('sum=',sum); readln END. 一般情况下,存放累加和的变量的初始值为 0,存放累乘 积的变量的初始值为 1

例 5:用循环语句输出一行 n 个“*” PROGRAM lt3; VAR i,n:integer; BEGIN writeln('n='); readln(n); FOR i:=1 TO n DO write('*') writeln; END. 练 编写程序完成下面的题目。 1.计算 1+2+3+??+100 习

50

2. 3. 4. 5.

计算 1+1/2+1/3+.....+1/50 编程序计算 1*2+2*3+...+10*11 编程序计算 1/2+2/3+...+10/11 从键盘输入 10 个整数,计算这 10 个数的和。

第二节 当型循环(WHILE-DO) 当要求“满足某一条件时进行循环” ,用 WHILE 语句实现循环要比用 FOR 语句实 现循环方便。 格式: WHILE 布尔表达式 DO 语句(或复合语句) 其意义为当布尔表达式的值为 True 时,执行 DO 后面的语句。其中,语句可以 是单个语句或复合语句。 使用 WHILE 语句要注意以下两个问题: ①循环体可能一次也不执行。因为是否进行循环是在进入循环之前通过测试布 尔表达式的值来确定的;若最初的布尔表达式值为 False(假),则根本不执行循环 体。 ②循环体中一定要有能改变布尔表达式值的语句;否则,进入循环体后,由于 布尔表达式的值总是 True(真),因而循环会一直执行下去,就造成“死循环” 。 例1: 输出1-100之间的整数。 分析:循环控制变量 x 的初始值为 0,当 x 小于 100 时,执行赋值语句 x:=x+1, 同时输出一个 x 值,当 x 大于等于 100 时,结束循环。 程序为: PROGRAM l1; VAR x:integer; BEGIN x:=0; WHILE x<100 DO BEGIN x:=x+1; write(x:5); END; END.

51

1. 控制循环的布尔表达式改为 x<=100,可以吗? 2. 循环体不用 BEGIN-END,结果会怎样?

例 2:输出 1-100 之间的偶数 分析: 与上题相比, 不同的是 x 的变化不再是一次递增 1, 而是 2, 只需把 x:=x+1 改为 x:=x+2 就可以了。 程序为: PROGRAM l2; VAR x:integer; BEGIN x:=0; WHILE x<100 DO BEGIN x:=x+2; write(x:5); END; END.

1. 输出 1-100 之间的奇数,怎样实现? 2.输出 0,0.1,0.2,0.3,0.4,...,1.0,怎样实现?

例 3:计算 1+2+3+?+100=? PROGRAM lt3; VAR s,n:integer; BEGIN s:=0;x:=0; WHILE x<100 DO BEGIN x:=x+1; s:=s+x; END
52

writeln('s=',s); END.

1. 计算 1-100 之间偶数或奇数的和,怎样实现? 2.改为乘法呢?

例 4:从键盘上读入整数,当首次读到 10 时,输出它是第几个数,或者已读了 10 个数仍没出现 10,也不再读了, 输出“0” PROGRAM lt4; VAR x,n:integer; BEGIN read(x); n:=1; WHILE (x<>10) AND (n<10) DO BEGIN read(x); n:=n+1; END; IF x=10 THEN writeln('n=',n) ELSE writeln('n=',0) END.





一.选择题 能正确输出 0.5,1.5,2.5,3.5,4.5 这 5 个实数的循环是 (A) I:=0.0; WHILE (I>=0.5) AND (I<=4.5) DO BEGIN writeln(I:3:1);
53

I:=I+1 END (B) I:=0.0; WHILE (I>=0.5) OR (I<=4.5) DO BEGIN writeln(I:3:1); I:=I+1 END (C) I:=0.5; WHILE (I>=0.5) AND (I<=4.5) DO BEGIN writeln(I:3:1); I:=I+1 END (D) I:=0.5; WHILE (I>=0.5) OR (I<=4.5) DO BEGIN writeln(I:3:1); I:=I+1 END 二.编写程序完成下面的题目。 1.计算 1+3+??+99 2. 计算 2+4+6.....+100 3. 编写程序求 1+2+3+...+n<=10000 的最大的 n 及和值。 4. 编写程序求 1*2*3*...*n>1000 的第 1 个 n 值。 5. 从键盘输入 10 个整数,计算这 10 个数的和。

第三节

直到型循环

重复执行指定的语句序列,直到指定的条件成立时才结束循环。 格式: REPEAT 语句 1;
54

语句 2; ...... 语句 n UNTIL 布尔表达式 其意义是执行语句组循环体后,计算布尔表达式的值,若值为假,则继续执行 循环体;否则,跳出循环,执行后继语句。 使用 REPEAT 语句要注意以下两个问题: ①循环体至少被执行一次,因为它是先执行循环体后测试循环结束条件。 ②循环体中也必须有可影响布尔表达式值的语句;否则也会造成“死循环” 。 例 1:编写程序显示 500,400,300,200,100,0 程序为: PROGRAM lt1; VAR i:integer; BEGIN i:=500; REPEAT write(i:5); i:=i-100 UNTIL i<0 END. 例 2:求满足 1+2+3+...+n<500 中最大的 n 并求其和。 分析:变量 s 存放和,变量 n 控制循环。反复执行 n:=n+1;s:=s+n;直到 s>500。 因为直到型循环是先执行后判断,所以当满足条件时,n 多累加了一次, s 也多加了一个 n,输出时,要相应减去多加的值。 程序为: PROGRAM l2; VAR s,n:integer; BEGIN s:=0;n:=0; REPEAT n:=n+1; s:=s+n; UNTIL s>500; writeln(n-1,s-n);
55

END. 例 3.编写 1*2*3*??*n 的值超过 1000 的第 1 个 n 值的程序。 程序为: PROGRAM lt3; VAR s,n:integer; BEGIN s:=1;n:=0; REPEAT n:=n+1; s:=s*n; UNTIL s>1000; writeln('n=',n); END.





一.选择题 1.下列程序段执行后能输出两行“very good"的是 (A) I:=0; REPEAT writeln('very good'); I:=I+2; UNTIL I=4; (B) I:=0; REPEAT writeln('very good'); I:=I+2; UNTIL I>4; (C) I:=0; REPEAT writeln('very good'); I:=I+2; UNTIL I<4; (D) I:=0; REPEAT
56

writeln('very good'); I:=I+2; UNTIL I=5; 2.已知下列程序段: I:=1; REPEAT n:=I*I; I:=I+1; UNTIL n>I; 该循环体的执行次数为 (A) 1 (B)2 (C)3

(D)4

二.编写程序完成下面的题目。 1.计算 1+3+??+99 2. 计算 2+4+6.....+100 3. 编写程序求 1+2+3+...+n<=10000 的最大的 n 及和值。 4. 编写程序求 1*2*3*...*n>1000 的第 1 个 n 值。 5. 从键盘输入 10 个整数,计算这 10 个数的和。

第四节

循环语句的综合应用

通过前面几节的学习,我们可以总结出三种循环语句在用法上的异同。 FOR 循环 先判断,后执行 循环体是多条语句时需用 BEGIN-END 条件成立时重复执行 循环体可能不被执行 循环控制变量的值在循环 体内,最好不改变 WHILE 循环 先判断,后执行 循环体是多条语句时需用 BEGIN-END 条件成立时重复执行 循环体可能不被执行 循环控制变量的值在循环 体内,必须改变 REPEAT 循环 先执行,后判断 循环体是多条语句时不需 用 BEGIN-END 条件成立时退出循环 循环体至少执行 1 次 循环控制变量的值在循环 体内,必须改变

掌握了程序设计的三种基本结构,我们就能够解决一些常见问题了。 例 1.从键盘输入 10 个数,找出其中的最大数及其序号。 分析:变量 max 存放最大数,n 存放最大数的序号。先读入第一个数,假设此 数最大,存放到 max 中,n:=1;以后每读入一个数,都将该数和 max 比较,

57

只要大于 max,就以新读入的数代替 max,同时重新赋值 n。 程序为: PROGRAM l1; VAR i,a,max,n:integer; BEGIN read(a); max:=a;n:=1; FOR i:=2 TO 10 DO BEGIN read(a); IF a>max THEN beign max:=a; n:=I; END; END; writeln('max=',max,'n=',n); END.

这个题目要求同时找出最小数及其序号,怎么编程?

例 2:计算两个数 a、b 的最大公约数. 分析:两个数最大公约数的范围是:1 到两个数中较小的那个数之间的整数。 先找出两个数中的较小数,存放在变量 t 中,循环控制变量 i 初始值为 t, 然后判断 a、b 能否同时被 i 整除, 如果不能,则循环变量递减 1,继续 循环。第一个满足条件的 i 值,就是最大公约数。 PROGRAM lt2; VAR a,b,t,i:integer; BEGIN write('a=');readln(a); write('b=');readln(b); IF a>b THEN {求两个数中较小的数,存放在变量 t 中}

58

t:=b ELSE t:=a; i:=t WHILE (a MOD i<>0) OR (b MOD i<>0) DO {判断 a、b 能否被 i 整除) i:=i-1 writeln(i) END.

循环控制变量为什么不从 1 到 t 呢?

例 3.求两个数 a、b 的最小公倍数 分析:两个数最小公倍数的范围是:两个数中较大的那个数和 a*b 之间的整数。 先找出两个数中的较大数,存放在变量 t 中,循环控制变量的初始值为 t, 然后判断 t 能否同时被 a、b 整除, 不断循环,直到条件成立。 PROGRAM lt2; VAR a,b,t,i:integer; BEGIN write('a=');readln(a); write('b=');readln(b); IF a>b THEN {求两个数中较大的数,存放在变量 t 中} t:=a ELSE t:=b; i:=t+1; {为什么不是 i:=t?} REPEAT i:=i+1; UNTIL (i MOD a=0) AND (i MOD b=0); {判断 i 能否被 a、b 整除) writeln(i) END. 例 4.输入一个整数 a,判断是不是质数。

59

分析:质数也叫素数,是除了 1 和它本身外不能被任何数整除的数。根据此定 义,设一个布尔变量 p,初始值为 true,设置一个从 2 到 a-1 的循环,每 次判断是否能整除,如果有能整除的,说明不是质数,布尔变量 p 的值 改为 false。循环结束时根据 P 的值可确定整数 a 是不是质数。 PROGRAM lt4; VAR i,a:integer; p:boolean; BEGIN p:=true; write('a='); readln(a); FOR i:=2 TO a-1 DO IF a MOD i =0 THEN p:=false IF p=true THEN writeln('yes') ELSE writeln('no') END. 例 5. 和计算机玩包袱、剪子、锤的游戏。 分析:用 a 表示计算机出的数,用 b 表示人出的数,列举出所有可能的情况,归纳 一下,不难总结出人获胜的条件是(b-a=1)or (b-a=-2) program youxi; var a,b:integer; begin randomize; writeln('0---baofu 1---jianzi 2---chui'); a:=random(3); writeln('Qing ni xuan ze (0 or 1 or 3):'); readln(b); if a=b then writeln('ping!') else if (b-a=1) or (b-a=-2) then writeln('Wo ying le!') else
60

writeln('ji suan ji ying le.') end. random(n)的作用是产生一个随机数,范围是:0≤random(n)<n, 如果要让这个函数起作用, 必须在使用这个函数之前写上随机过程: randomize。 如果程序中多次使用 random(n),只写一句 randomize 就可以了。





一.写出程序的运行结果 PROGRAM ex1; VAR a,b,s,d:integer; l,e,g:boolean; BEGIN a:=3;b:=7; s:=a+b;d:=a DIV b; l:=a<b;e:=a=b; g:=a>b; write('s=',s:5); writeln('d=',d:5); writeln('L=',l); writeln('e=',e,'g=',g); writeln(b/a:5:5) END. PROGRAM ex2; VAR t,s,i:integer; BEGIN t:=0;s:=0; FOR i:=-5 TO 5 DO BEGIN t:=t+1; s:=s+t+i
61

END; writeln('t,s=',t,s:10); END. PROGRAM ex3; VAR t,n,s:integer; BEGIN t:=1;n:=3;s:=0; WHILE s<10 DO BEGIN t:=t*n; s:=s+t; END; write('s=',s); END. PROGRAM ex4; VAR p,m:integer; BEGIN p:=20; m:=2; REPEAT p:=p-m; m:=m+3; UNTIL m>p; write('m,p=',m,' ',p); END. 二.填空题 1.以下程序段作用是:找出被 3、5 除,余数均为 1 的头 10 个数. PROGRAM lx; BEGIN Count:=0; Number:=0; REPEAT Number:=number+1;
62

IF (number MOD 3 =1) BEGIN Writeln(number); Count:=count+1; END UNTIL Writeln; END.

(number MOD 5=1) THEN

2.以一下程序的作用是求 1*1+2*2+3*3 +...+k*k<2000 时 k 最大值,请填空. PROGRAM find; VAR k,sum:interger; BEGIN k:=1;sum:=1; REPEAT k:= ; sum:= ; UNTIL sum>2000; writeln('k=',________) END. 3.本程序是用来求菲波拉契数列的前 20 项.数列的第一、第二个数分别是 0 和 1,以 后每个数都是前两个数之和;要求只输出前 20 项,且每行 5 个数. PROGRAM exam; VAR F0,f1,f2,i:integer; BEGIN F0:=0;f1:=1; Write(f0:8,f1:8); FOR i:=3 TO DO BEGIN F2:=f0+f1; (f2:8); IF i 5=0 THEN ; :=f1; f1:=f2
63

END; END. 三.选择题 1.要求从键盘输入 20 个任意整数,挑出一个最大的数,哪个程序可以完成? (A) PROGRAM lx; VAR k,x,a:integer; BEGIN readln(a); FOR k:=1 TO 20 DO BEGIN readln(x); IF a<x THEN a:=x END; writeln(a); END. (B) PROGRAM lx; VAR k,x,a:integer; BEGIN readln(a); FOR k:=2 TO 20 DO BEGIN readln(x); IF a>x THEN a:=x END; writeln(a); END. (C) PROGRAM lx; VAR k,x,a:integer; BEGIN a:=-10000; FOR k:=1 TO 20 DO BEGIN readln(x);
64

IF a<x THEN a:=x END; writeln(a); END. (D) PROGRAM lx; VAR k,x,a:integer; BEGIN readln(a); FOR k:=19 DOWNTO 1 DO BEGIN readln(x); IF a<x THEN a:=x END; writeln(a); END.

四.编写程序 1.编程序计算 1+(1+2)+(1+2+3)+...+(1+2+...+n)(n 由键盘输入) 2. 编程序计算 1+(1*2)+(1*2*3)+...+(1*2*...*n) (n 由键盘输入) 3.Fibonacci 序列的前两项是 1 和 1,且每个后继项是前两项的和,(1)打印出前 20 项。(2)打印出各项的值都不大于 100 的序列 4. 找出被 2,3,5 除,余数均为 1 的最小的 10 个数。 5.编程序找出四位数 ABCD 中满足下述关系的数:(AB+CD)(AB+CD)=ABCD 6.输入一个自然数 X,求这个自然数的所有约数之和 S。 7.求输入的一个整数的各位数字之和。 8. 有一本书,这本书缺了一个页码,其它页码之和是 1244,请问这本书共几页, 缺的是哪一页? 9. 输入一个数,如果是奇数则直接输出,否则除以 2 取商,直到商为奇数。 例:输入 121 输出 121 输入 40 输出 40-20-10-5 10. 如果一个自然数的数字之积加上这些数字之和正好等于这个自然数,我们称这 样的自然数为”巧数”,求 100 以内的所有巧数。

65

附录一: Pascal 保留字 保留字 AND ARRY BEGIN CASE CONST DIV DO DOWNTO ELSE NIL OF OR PACKED PROCEDURE PROGRAM RECORD REPEAT 含义 与 数组 开始 情况 常数 整除 做 递减至 否则 空 是?的 或 紧缩 过程 程序 记录 重复 保留字 END FILE FOR FUNCTION GOTO IF IN LABLE MOD SET TO TYPE UNTIL VAR WHILE WITH FORWARD 含义 结束 文件 对于 函数 转至 如果 在?内 标号 取余 集合 至 类型 直到 变量 当?时 开域 向前引用指示

66

附录二: Pascal 标准标识符 类型 标准常量 标准类型 标准函数 包括的标识符 false true integer maxint

real boolean char text

Abs arctan chr cos eof eoln exp ln Odd ord pred round sin sqr sqrt succ trunc Dispose readln writeln get new pack page put read reset rewrite unpack write

标准过程

标准文件

Input output

67

附录三

标准函数
1.算术函数 标识符 abs(x) random random(x) sqr(x) sqrt(x) 名称 求 x 绝对值 [0,1)之间的随机实数 [0,x)之间的随机整数 x 的平方 x 的平方根 abs(-12.5)=12.5 sqr(5.0)=25.0 自变量类型 整型或实型 word(0-65535) 整型或实型 整型或实型 0<=random(10)<10 sqrt(4)=2.0 结果类型 同自变量类型 word 同自变量类型 实型

例:abs(-42)=42 sqr(5)=25 2.转换函数 标识符 trunc(x) round(x) ord(x) chr(x) upcase(x) 名称

自变量类型 实数 实数 字符 byte(0..255) 字符

结果类型 longint longint longint 字符 字符 round(-3.7)=-4 ord('a')=97

截尾取整 舍入取整 求 X 的序号 求序号为 x 的字符 小写字母转换成大写

例:trunc(3.7)=3 trunc(-3.7)=-3 round(3.7)=4 chr(65)='A' chr(97)='a' ord('A')=65 upcase('a')='A' upcase('A')='A' 3.进退函数 标识符 pred(x) succ(x) 名称 前趋函数 后继函数 pred('Z')='Y' succ('Y')='Z' 自变量类型

结果类型 同自变量 同自变量

离散型(字符、整型) 离散型(字符、整型) pred(true)=false succ(false)=true

例:pred(8)=7 succ(7)=8 4.逻辑判断函数 标识符 odd(x)

名称 判奇函数 odd(20)=false

自变量类型 整型

结果类型 布尔型

例:odd(3)=true

68

附录四:

小学信息学(计算机)奥林匹克竞赛辅导纲要
程序设计(Turbo Pascal 语言)部分 一、 Turbo Pascal 语言的结构 1.程序的构成 2.书写格式 二、 Turbo Pascal 语言的数据类型 1.整型(integer) 实型(real) 字符型 (char)布尔型(Boolean) 2.常量、变量 3.简单的数学表达式(包括+、-、*、/、div(整除)、mod(取 余)) 4.简单的函数 三、 程序设计的三种基本结构 1.顺序结构 2.分支结构 3.循环结构。 四、 竞赛形式 笔试:包括选择、解决问题、填空、写程序结果

69

附录五:小学竞赛试题及参考答案

第 20 届胜利油田学生信息学奥林匹克竞赛 小学组 Pascal 语言试题
一、 单项选择。 (每小题 1.5 分,共 15 分) ) 。 1. 下面是某同学定义的变量名,合符 Pascal 语法的是( A.integer B. x1 B. 2x D. x*y ) 。

2.假定所有变量均为实型,算式

u?a 的正确 Pascal 表达式是( b?v ?u?d c?w
B. (u+a)/(b-v)/(c-w)+u*d D. (u+a)/((b-v/c-w)+u*d)

A.(u+a)/((b-v)/(c-w)+u*d) C. u+a/b-v/c-w+u*d 3. 有如下的变量说明: var x,y,z:integer; a:real;

则下面的赋值语句中正确的是( A.x=y div 7; x+y:=z;

) C. a:=x*y; D.

B. x:=y/z;

4. 设 a,b,c,d 均为整型变量,对于下面的程序段 a:=0; b:=0; readln(a, b); read(c); readln(d) ; 若从键盘输入: 1 <CR> 2 5 3 4 <CR> 6 7 <CR>
70

其中,<CR>表示“回车” ,则 a,b,c,d 中的数应为下面哪一组?( A.1,2,3,4 B.1,2,3,5 C.1,2,5,6 D.1,0,3,5



5. 设 n 为整型变量,且 n:=1997,下面能将 n 的十位数字(即右边第 2 位数字)分 离出来的语句是( A. d:=n mod 100 C. d:=n div 100 mod 10; ) 。 B. d:=n div 100; D. d:=n mod 100 div 10 ) 。

6. “判断一个整数 x 是另一整数 y 的整数倍”的 pascal 表达式是( A.x=2*y B. x/y=2 C. x mod y=0 D. x mod y=1

7. Pascal 表达式 “2008 div 5 mod -2”的结果是: A. 8 B. -1 C. 0 D. 1 )。

8. 设实型变量 pi 已赋值为 3.14159,下面不能输出 3.14 的语句是( A. write(pi:0:2); C. write(pi:2:2); 9.下列程序段的输出结果是( B. writeln(pi:1:2); D. writeln(pi:2); ) 。

Var x,s:integer; Begin x:=2005; s:=0; while x<>0 do begin s:=s+x mod 10; x:=x div 10; end; writeln(s); end. A. 0 A. i:=0; repeat writeln(‘Very good’); i:=i+2; until i=4; B. i:=0;
71

B. 7

C. 10

D.2005 ): B. i:=0; repeat writeln(‘Very good’); i:=i+2; until i<4; D. i:=0;

10.下列程序段执行后能打印两行“Very good!”的是(

repeat writeln(‘Very good’); i:=i+2; until i>4; 二、问题求解。 (7 分)

repeat writeln(‘Very good’); i:=i+2; until i=5;

A,B,C,D,E,F 6 人参加了小学信息学竞赛,甲、乙、丙、丁四人猜测谁能获得 一等奖。 甲说:“冠军不是 A 就是 B。 ” 乙说: “冠军绝不是 C。” 丙说: “D,E,F 都不可能是冠军。” 丁说: “冠军可能是 D,E,F 中的一个。” 比赛结果公布后发现,这 4 个人所说的话中,只有一个人的猜测是正确的。谁 是第一名呢?________ 三、写出程序的运行结果。(第 1-4 小题每题 5 分,第 5 小题每题 8 分,共 28 分) 1. program xx1; var a,b,c,d,sum : integer; begin readln(a,b,c,d); a := a mod 23; b := b mod 28; c := c mod 33; sum := a * 543 + b * 121 + c * 128 - d; sum := sum + 2005; sum := sum mod 2005; if (sum <> 0 ) then sum := 2005; writeln(sum); end. 输入:283 102 23 320 输出 ____________ 2. program xx2; var s,i:ingeger; begin s:=0;
72

for i:=1 to 100 do if (i mod 3=0)and (i mod 4=0) then s:=s+i; writeln('s=',s) end. 3. Var a,b,c,d,e:integer; begin a:=79 ; b:=34; c:=57; d:=0 ; e:=1; if (a<c) or (b>c) then d:=d+e else if (d+10<e) then d:=e+10 else d:=a-e; writeln(d); end. 输出:___________________ 4. program xx4; var n,i,a1,a2,a3:integer; begin readln(n); a1:=1; a2:=1; write(a1:8,a2:8); for i:=3 to n do begin a3:=a1+a2; a1:=a2; a2:=a3; write(a3:8) end; end. 输入:10 输出:______________

73

5. program xx5; var p,q,s,t:integer; begin readln(p); for q:=p+1 to 2*p do begin t:=0; s:=(p*q) mod (q-p); if s=0 then begin t:=p+q+(p*q)div(q-p); write(t:4); end; end; writeln; end. 输入:12 输出:_____________ 四、根据题意补充完善程序。(每空 2 分,共 20 分) 1.求满足下列条件的两位数:将此两位数的个位数和十位数字进行互换,可以 得到一个新的数,要求新数与原数之和小于 100(每行输出 6 个满足要求的数) 。 Program xx6; var x1,x2,a,b,k:integer; begin k:=0; for a:=__ ①_ to 99 do begin x1:= ② ; x2:= ③ ; b:=x1*10+x2; if ④ then begin k:=k+1; write(a:4); if ⑤ then writeln;
74

end; end; end. 2.现在有一批长方形的木板,编程找出面积最大的那块,并输出它的长、宽和 面积。 输入要求:从键盘输入长方形的长和宽,当长和宽中有一个值小于等于 0 时结 束。 输出要求:输出面积最大的长方形的长、宽和面积。 program xx7; var a,b,c,max,x,y:integer; begin write(‘a,b=’); readln(a,b); ① ; while (a>0) and ② do begin c:=____ ③____; if c>max then begin x:=a; ____④______; max:=c; end; _____⑤______ ; end; writeln(‘Chang=’, x); wrtiteln(‘Kuan=’, y); writeln(‘Mianji=’,max); end.

75

参考答案
一、选择题。(1.5×10=15 分) 题号 答案 1 B 2 A 3 C 4 C 5 D 6 C 7 D 8 D 9 B 10 A

二、问题求解。 (7 分) 第一名是 C 二、写出程序的运行结果。(5+5+5+5+8=28 分) 1.2005 2.S=432 3.78 4.1 5. 181 1 2 110 3 87 5 76 8 66 13 21 34 55

62 61 60

三、根据题意补充完善程序。(10×2=20 分) 1. ① 10 ② a mod 10 ③ a div 10 ④ a+b<100 ⑤ k mod 6 2. ① max:=0 ② b>0 ③ a*b ④ y:=b ⑤ readln(a,b) 或 read(a,b)

76

第 21 届胜利油田学生信息学奥林匹克竞赛 小学组 Pascal 语言试题
☆全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效☆ 一、单项选择。 (每小题 1.5 分,共 15 分) 1. 下面 Pascal 标识符中合法的是: A. err?2 B. read* C. hello D. 2. 已知有如下说明: var x,y:integer; r,s: real; 下面赋值语句合法的是: A. s:=x+r; B. x:=s; C. y:=x+r/s; D. DIV s; 3. 设 a 的值为 5,b 的值为 10, 则表达式(a-4) mod b 的结果为: A. 0 B. 10 C. 5 D. 4. 下面哪些运算符的运算结果类型一定是 real 类型 A. + B. - C. × D. 5.下面哪些运算符必须是 integer 类型的操作数 A. + B. div C. / 6. 有程序段:x:=7;y:=3;x:=x+y;y:=x-y;x:=x-y,执行后,变量 x 的值是( A. 7 B. 3 C. 10 D. 7. 变量 a 的类型为整型,语句 write(a)和 write(‘a’)的执行结果: A.一样 B.不一样 C.可能一样,可能不一样 上都不对 8. 以下各程序段哪个不是计算 1+2+3+4+?的前 N 项和: A. sum:=0; readln(n); for I:=1 to n do sum:=sum+i; B. sum:=0; readln(n); i:=1; while i<=n do begin sum:=sum+i;
77

8df

x:=x

1 / D. * ) 4 D.以

i:=i+1; end; C. sum:=0; readln(n); i:=0; repeat i:=i+1; sum:=sum+i; until i>n; D. sum:=0; readln(n); i:=0; while i<n do begin i:=i+1; sum:=sum+i; end; 9. 从四个选项中选出下面程序段实现的计算公式。 sum:=0;i:=0; repeat sum:=sum+i; i:=i+2; until i>10; writeln(‘sum=’,sum:6:4); A. 2+4+6+?+10 B. 2+4+6+?+12 C. 2+4+6+?+8 D. 1+3+5+7+?+9 10. 从四个选项中选出下面程序段的计算结果。 sum:=0;i:=0;j:=1; while i<5 do begin i:=i+1; j:=j*i; sum:=sum+j; end; writeln(sum); A. 15 B. 120 C.153 D.33 二、解决问题(5×2=10 分) 1.老师出了两道题,全班40人中,第一题有30人对,第2题有12人未做
78

对,两题都做对的有20人。 (1)第2题对第1题不对的有几个人? (2)两题都不对的有几个? 2.小王、小张、小李三人工作后分别当了医生、教师和战士。只知道:小李比 战士年纪大,小王和教师不同岁,教师比小张年龄小。请问谁是医生?谁是教师? 谁是战士? 三、写出程序的运行结果。(每小题 5+5+5+5+7+8,共 35 分) 1. program xjg1; var a,i:integer; begin a:=68; write(a,':(1'); for i:=2 to a div 2 do if a mod i=0 then write(',',i); writeln(')'); end. 输出:__________________ 2. program xjg2; var a,b,r:integer; begin a:=12;b:=16; r:=a mod b; while r<>0 do begin a:=b;b:=r; r:=a mod b; end; writeln(b); end. 输出:__________________ 3.
79

program yd; var d, p: integer; begin p:=1; d:=6; while d>1 do begin p:=2*(p+1); d:=d-1 end; writeln(p) end. 输出: 4. program t4; var a,b,n:integer; begin n:=100; a:=0;b:=0; repeat a:=a+1; b:=b+a; until b>n; writeln(a); end. 输出:__________________ 5. program t5; var m,n,i,hi,lo:integer; begin m:=9;n:=8; I:=n;hi:=0;lo:=0; repeat I:=I-1;lo:=lo+m;
80

If lo>=10 then begin Lo:=lo-10; Hi:=hi+1; End; until I=0; Write(hi:4,',',lo:4); end. 输出: 6. program t6; var a,b,c,d,e:integer; begin a:=1; b:=a+2; c:=b+3; d:=c+4; a:=d+5; for e:=1 to 3 do begin if a mod 2=0 then a:=a div 2+d else a:=a div 2+d+1; b:=a+2; c:=b+3; d:=c+4; a:=d+5; end; writeln(a); end. 输出:__________________ 四、根据题意补充完善程序。(每空 2 分,共 10 分) 判断质数 题目描述: 给出一个正整数,判断这个数是否是质数。 输入: 一个正整数 n(1 ≤ n ≤ 100)。 输出: 如果 n 是质数,输出”YES” ;否则,输出”NO” 。 输入样例: 10 输出样例: NO
81

程序: program tk; var ① : integer; p:boolean; begin read(n); if n = 2 then writeln( ② ) else if ( ③ ) or (n mod 2 = 0) then writeln('NO') else begin i := 3; p:=true; while ④ do begin if ⑤ then p:=false; i:=i+2; end; if p=true then writeln('YES') else wirteln(‘NO’); end; end.

82

参考答案
一、选择题。(1.5×10=15 分) 题号 答案 1 C 2 A 3 D 4 D 5 B 6 B 7 B 8 C 9 A 10 C

二、解决问题。 (5×2=10 分) 1. (1)第2题对第1题不对的有( 8 )个人。 (2)两题都不对的有( 2 )个人。 2. ( 小张 )是医生, (小李 )是教师, ( 小王 )是战士。 三、写出程序的运行结果。(5+5+5+5+7+8=35 分) 1.输出:68:(1,2,4,17,34) 2. 输出:4 3.输出:94 4.输出:14 5.输出: 7, 2 6.输出:95

四、根据题意补充完善程序。(5×2=10 分) (1) n,i (或 i,n); (2) ‘yes’; (3) n=1 ; (4) i<n 或(i*i<n) 或(i*2<n) (5) n mod i=0

83

第 22 届胜利油田学生信息学奥林匹克竞赛 小学组 Pascal 语言试题
☆全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效☆ 一、单项选择。 (每小题 2 分,共 20 分) 1.下列标识符中,正确的是: A. a+b B. name C. 4ab D. if 2. 下列的变量说明中,哪个是不正确的? A. B. Var a,b,c:integer; Var x1:integer; x,y:real; x2:integer; C. Var s,t:real; a,s,b:integer; D. Var sum,total:integer;

3. 将数学式子 (a ? b) ? c ? d 写成 Pascal 表达式,正确的是: A. (a ? b) ? c ? d C. (a ? b) ? c / d B. a ? b * c / d D. (a ? b) * c / d

4.已有如下变量说明: var a,b:integer; x,y: real; 下面的赋值语句中,计算机能接受的是: A. a:=a+b; B. a:=a/b; C. b:=y; y; 5. 下面运算符中,运算结果一定是 integer 类型的是: A. + B. - C.div 6. 设整型变量 i 的的值为 12,实型变量 A 的值为-47.28,执行语句 writeln(i:4,A:8:2)的结果是: A. 12□□-47.28□□ C. 12 口口口口-47.28 B. 12□-47.2800

D. x:=x div

D. /

D. 口口 12 口口-47.28

84

7. 下面关于 FOR 循环的叙述中,不正确的是: A. 在循环体中不能改变循环控制变量的值 B.循环控制变量可以是任意的数据类型 C.FOR 循环分为递增型和递减型两种 D. 在执行过程中初值和终值不会改变 8. 有如下程序段: read(a,b,c); readln(d,e); readln; readln(f,g); 其中,所有变量均为整型。如果输入的数据如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 则变量 f 的值为: A.10 B.11 C.12 9. 有如下程序段: S:=0; i:=1; while i<=5 do begin s:=s+i; i:=i+1; end; 执行该程序段后,变量 i 的值为: A. 1 B. 3 C. 5 10.对于下面的程序段: x:=28; y:=20 ; z:=30; if x>y then

D.13

D. 6

z:=x+y; x:=y; z:=x+y; y:=z; 执行该程序段后, 变量 y 的值为: A. 28 B. 30 C. 40 D. 48

二、解决问题(4+6=10 分) 1.观察下列数的规律,然后填空。
85

0,1,2,5,12,29,_________ 2.有红、黄、蓝、绿四种颜色的旗子,每次取三面从上到下挂出,可以有多少 种不同的挂法? 三、写出程序的运行结果。(每小题 5+5+6+8+8,共 32 分) 1. program xjg1; var x,a,b,c:integer; begin readln(x); if (x>=100) and (x<=999) then begin a:=x div 100; b:=(x-a*100) div 10; c:=x mod 10; x:=c*100+b*10+a; writeln(x); end else writeln('Input error!'); end. 输入:927 2. program xjg2; var x,i,sum1, sum2: integer; begin repeat readln(x); until x>0; sum1:=0; sum2:=1; if x mod 2=1 then for i:= 1 to 5 do sum1:=sum1+i else for i:=1 to 5 do sum2:=sum2*i; writeln(sum1:5, sum2:5); end.
86

输入:68 3. program xjg3; var x,a,b,c:integer; begin readln(x); a:=0; b:=1; c:=1; while b<x do begin c:=c+100; a:=a*2007; end; writeln(b:5,c:5); end. 输入:2007

b:=b+c;

4. program xjg4; var x,i,s,max:integer; begin read(x); max:=x; s:=x; for i:= 2 to 10 do begin read(x); if s>=100 then s:=0; s:=s+x; if s>max then max:=s; end; writeln('max=',max) end. 输入:182 13 50 120 7 8 22 86 24 35 5. program xjg5; var x,i,m1,m2: integer; begin m1:=32767; m2:=m1;
87

for i:=1 to 10 do begin read(x); if x<m1 then begin m2:=m1; m1:=x; end else if x<m2 then m2:=x; end; writeln(m1:6,m2:6); end. 输入:23 89 128 53 18 536 45 67 173 100 四、根据题意补充完善程序。(每空 2 分,共 18 分) 1. 出租车计费器。 某城市的出租车计费方法是:起步价为 6 元,可以行驶 3 公里;3 公里以后, 每多增加 1 公里,按每公里 1.2 元计算。下面的程序可以实现的功能是:输入出租 车行驶的公里数,计算机自动计算出顾客应付的车费(结果保留 1 位小数) 。 样例 1: 输入 3 输出 6 请将下面的程序填写完整。 program JiFei; var x: integer; y: ① ; begin readln(x); if ② then y:=6 else y:= ③ writeln(y:5: ④ ) ; end. 2.求完数。
88

样例 2: 输入 输出

5 8.4

对于一个大于 1 的数,如果该数正好等于其因子之和,就称它为“完数” 。例如 6 的因子是 1,2,3,并且 6=1+2+3,所以 6 是一个“完数” 。 下面的程序实现的功能是:判断输入的数是否为完数。若是,则输出“Yes” , 否则输出“No” 。请将程序填写完全。 program wanshu; var x,s,i: integer; begin repeat readln(x); until ① s:=0; for i:=1 to ② DO if x mod i=0 then ③ if ④ then writeln(‘Yes’) else writeln( ⑤ ) end.

89

参考答案
一、选择题。(2×10=20 分) 题号 答案 1 B 2 C 3 D 4 A 5 C 6 D 7 B 8 B 9 D 10 C

二、解决问题。 (4+6=10 分) 1. 找规律,填数。 0,1,2,5,12,29,__70___ 2. 有红、黄、蓝、绿四种颜色的旗子,每次取三面从上到下挂出,可以有___24___ 种不同的挂法? 三、写出程序的运行结果。(5+5+6+8+8=32 分) 1. 2. 3. 4. 5. 729 0 120

2107 601 max=183 18 23

四、根据题意补充完善程序。(2×9=18 分) 1.出租车计费器。 ① real ② x<=3 ③ 6+(x-3)*1.2 ④ 1 2.求完数。 ① x>1 或 x>=2 ② x-1 或 x div 2 ③ s:=s+i ④ s=x ⑤ ‘No’

90


赞助商链接
相关文章:
pascal语言知识入门_小学计算机_教学视频大全
学习目标 freepascal软件的使用;pascal的简单语句;选择结构程序设计;循环结构程序设计;数组和字符串;函数与过程等 讲师信息 非主流IT民工 信息学竞赛教练 目录...
小学生Pascal程序设计竞赛辅导初探
笔者早年使用东莞新世纪英才学校所编撰的《信息学奥 林匹克竞赛辅导教程 (PASCAL 语言) ,感觉有点象大中专信息技术课程教科书, 》 用来辅导小学生很不顺手。 几...
小学Pascal练习题
小学Pascal练习题 - 一、编程实现: (1) :输入 x,y 的值,用程序实现输出时 x 为 y 的值,y 为 x 的值。 (test1) (2) :输入一个三位数,输出它的...
pascal语言入门实例题解_小学计算机_教学视频大全
pascal初学者(1)pascal语言知识细节(2)编程的基本思路与技巧(3)程序调试的方法视频教程,pascal语言知识与基础算法全套教学,在线学习小学计算机课程,pascal语言入门实例...
信息技术活动课《PASCAL语言程序设计》教学计划
信息技术活动课《PASCAL语言程序设计》教学计划_其它课程_小学教育_教育专区。信息技术活动课《PASCAL 语言程序设计》 教学计划为了丰富学生的课余生活, 将信息技术活动...
小学组Pascal语言试题
①②③④⑤①②③④⑤ 10 a mod 10 a div 10 a+b<100 k mod 6 2. max:=0 b>0 a*b y:=b readln(a,b) 或 read(a,b) 55 小学Pascal ...
小学组Pascal语言试题
小学Pascal语言试题 - 小学Pascal 语言试题(一) 一、单项选择。 (每小题 1.5 分,共 15 分) 1.下面是某同学定义的变量名,合符 Pascal 语法的是( )...
小学生信息学程序设计语言(Free Pascal)考前演讲
小学生信息学程序设计语言(Free Pascal)考前演讲_教学案例/设计_教学研究_教育专区...Pascal 教程 199页 免费 一天学会Free Pascal 147页 免费 Free Pascal语言编程...
小学信息学奥赛教程
小学信息学奥赛教程_学科竞赛_小学教育_教育专区。目第一章 1.1 1.2 1.5 1...Free Pascal 的关键字如下: AND,ARRAY,BEGIN,CASE,CONST,DIV,DO,DOWNTO,ELSE...
pascal常用函数(较全)
pascal常用函数(较全)_学科竞赛_小学教育_教育专区。free pascal 常用函数和过程 一、数学函数与过程 过程: inc(i) 使 i:=i+1; inc(i,b) 使 i:=i+b;...
更多相关标签: