pascal第2章简单程序设计.ppt_第1页
pascal第2章简单程序设计.ppt_第2页
pascal第2章简单程序设计.ppt_第3页
pascal第2章简单程序设计.ppt_第4页
pascal第2章简单程序设计.ppt_第5页
已阅读5页,还剩53页未读 继续免费阅读

VIP免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章 顺序结构 第一节 赋值语句 第二节 输入输出语句 第三节 常量和变量 第四节 标准数据类型 第五节 顺序结构程序设计 第一章的简单程序已体现出处理问题的步骤的顺序 关系,每条语句按自上而下的顺序依次执行一次,这种 自上而下依次执行的程序结构称为顺序结构程序。 在一个程序中,所有的操作都由执行部分来完成, 而执行部分又都是由一条条语句组成的。因此,先要学 习Pascal语言的基本语句,并且在学习过程中逐步学会 程序设计的基本方法。我们还是先绕过那些繁琐的语法 规则细节,先看一些例子,然后给出语法以供选手们参 考。 第一节 赋值语句 赋值语句 变量代表的是一个存储单元,其值是可变的,那么其中 的值是怎么提供的,又是怎么改变的呢?可以通过赋值 语句来进行。 赋值语句的格式:变量名 := 表达式(或常量),其中 “:=“称为赋值号,右边是一个表达式,表达式计算完毕 后的结果赋给左边的变量。如: a := (9*8)-(2-1);/a的值等于71 a := b; /a的值等于b的 值,b的值没有被更改 a := a+1;/a的值增加1 例2.1 输入两个正整数A和B,试交换A、B的值(使A的 值等于B,B的值等于A)? 【分析】 交换两个变量的值方法很多,一般我们采用引入第三个 变量的算法,二个变量交换,可以想像成一瓶酱油和一瓶醋进行 交换,这时容易想到拿一个空瓶子过来: 将酱油倒到空瓶中; 将醋倒到酱油瓶中; 将原空瓶中的 酱油倒到醋瓶中。 程序如下: program ex2_1; var a,b,c : integer;/引入三个变量 begin readln(a,b);/输入A、B c := a; /A的值临时存储在C中 a := b;/B的值赋给A b := c;/C的值赋给B writeln(a,b); end. 例2.2某仓库5月1日有粮食100吨,5月2日又调进20吨,5月3日卖 出库存的三分之二,5月4日又调进库存的3倍粮食,问该仓库从5 月1日到5月4日期间每天的粮食分别是多少吨?(输出每天的库存 量) 【分析】本例中,主要要描述从5月1日到5月4日每天仓库的粮食库存量,它是 不断变化的,我们可以用一个变量A来存储仓库当前的库存量。 程序如下: Program ex2_2; Var a : integer; begin a := 100; writeln(5/1: , A);/输出5月1日的库存量 a := a+20; writeln(5/2: , A); a := a div 3;/div是整除,相当于对结果取整操作 writeln(5/3: , A); a := a *4; writeln(5/4: , A); readln; end. 本程序中语句的自上而下的顺序很关键,这类程序严格自上而上每条语句都被执行一次 就称为顺序程序。 例2.3 数学中有个经典的“鸡兔同笼”问题,已知头共30个,脚共90 只,问笼中的鸡和兔各有多少只? 【分析】 设鸡为j只,兔为t只,头为h,脚为f,那么有: j+t=30 2*j+4*t=90 解此题暂不必采用数学上直接解方程的办法,可采用“假设条件与逻辑推理”的办 法,假设笼中30 个头全都是兔,那么都按每头只脚计算,总脚数为(4*h),与 实际脚数 ( f )之差为(4*h-f),如果这个差=0,则笼中全是兔(即鸡为0只);如果 这个差值 0,说明多计算了脚数,凡是鸡都多计算了两只脚,用它除以2就能得 到鸡的只数,算法为: j=(4*h - f)/2 /先用脚数差值除以2算出鸡的只数 t=h - j /再用总头数减鸡数算出免的只数 注意这两步运算的先后顺序。 程序如下: program ex2_3; Const h=30; f=90; /常量定义 Var j,t : integer; /为整数类型的变量 begin j := (4*h-f) div 2; /div是整除运算 t := h-j; writeln (j=,j, ,t= ,t ); /引号中内容原样输出,两部分内容用空格隔开 end. 算术表达式 算术表达式的定义 Pascal语言中的算术表达式是由 符合Pascal语法规定的运算对象(包括 常量、变量、函数)、算术运算符、圆 括号组成的有意义的式子。如 a+30*5/8.4 算术运算符 常用的有以下6个算术运算符: + (加) - (减) * (乘) / (实数除)得到结果为实型。如5/2=2.5,4/2=2.0(结果不是2) div (整除) div它要求除数和被除数均为整型, 结果也为整型。 如10 div 2=5,10 div 3=3, 5 div 10=0,-15 div 4= -3。div运算只取 商的整数部分,参与div运算的两个对象都不能为实型。 mod (求余数),也只能用于整数运算,结果为整数。 如:10 mod 4=2 , -17 mod 4=-1 , 4 mod (-3)=1, - 4 mod 3= -1,即 a mod b=a-(a div b)*b。div的结果是相除后的商,mod的结果是相除后的余数 。因此有: 8 div 3=28 mod 3=2 7 div 3=27 mod 3=1 6 div 3=26 mod 3=0 运算优先顺序 如果一个表达式里出现两个或两个以上的运算符, 则 必须规定它们的运算次序。Pascal规定的运算优先级别( 与数学中规定的一样): 表达式中相同优先级的运算符,按从左到右顺序计算; 表达式中不同优先级的运算符,按从高到低顺序计算; 括号优先级最高,多层括号则从内到外逐层降低; 在算术运算中运算符的优先顺序与数学上的四则运算 一致,即“先乘除后加减“(注:“mod“、“div“运算的优先 级与“*“、“/“相同)。 下面是几个Pascal表达式的例子 : 数学表达式Pascal表达式 1.b2-4acb*b-4*a*c 2.(a+b)/(c+d) 3.(a+b)/c+d 4.a*b/(c*d)或a*b/c/d 5.1.25*1051.25E+5 6.1+e-xsinx1+exp(-x)*sin(x) 7.2r 2*pi*r (pi常量由系统 提供) 8.(100x500) (x=100) and (x= 、 、=(大于等于),=b结果为 FALSE /字符的比较是用相应的序号来比较 sqrt(2.5)=1 结果为 TRUE 8 =0) and (y=0) 当该式成立(结果为TRUE)时,坐标(x,y)就在第一象限,否则不在第一 象限。式中的括号不能少,若写成: x=0 and y=0 根据优先规则,应先算逻辑运算,即运算0 and y,导致整个表达式发生混 乱而提示出错。 第五节 顺序结构程序设计 我们已经学习了输入、输出语句和赋值语 句以及基本的数据类型。下面举一些实例, 通过阅读和模仿这些程序,让选手逐步熟悉 程序的编写和巩固知识点,为以后各章的学 习打好基础。 例2.11 某幼儿园里,有5个小朋友编号为1,2,3,4,5,他们按 自己的编号顺序围坐在一张圆桌旁。他们身上都有若干个糖果(键盘 输入),现在他们做一个分糖果游戏。从1号小朋友开始,将自己的 糖果均分三份(如果有多余的糖果,则立即吃掉),自己留一份, 其余两份分给他的相邻的两个小朋友。接着2号、3号、4号、5号小 朋友同样这么做。问一轮后,每个小朋友手上分别有多少糖果。 【分析】题目中有5位小朋友,他们初始时糖果的数目不确定,用a,b,c,d,e分别 存储5个小朋友的糖果数,初始值由键盘输入。 程序如下: Program ex2_11; Var a,b,c,d,e : integer; begin readln(a,b,c,d,e); a := a div 3; b := b+a;e := e+a; /1号小朋友分糖 b := b div 3; c := c+b;a := a+b; /2号小朋友分糖 c := c div 3; b := b+c;d := d+c; /3号小朋友分糖 d := d div 3; c := c+d;e := e+d; /4号小朋友分糖 e := e div 3; d := d+e;a := a+e; /5号小朋友分糖 writeln(a, ,b, ,c, ,d, ,e); /每个值之间空格隔开 end. 例2.12 分钱游戏。甲、乙、丙三人共有24元钱,先由甲分钱给乙、丙两人,所分给的数 与各人已有数相同;接着由乙分给甲、丙,分法同前;再由丙分钱给甲、乙,分法亦同前 。经上述三次分钱之后,每个人的钱数恰好一样多。 求原先各人的钱数分别是多少? 【分析】 设甲、乙、丙三人的钱数分别为A,B,C。用倒推(逆序)算法, 从最后结果入手,按反相 顺序,分步骤推算出每次各人当时的钱数 : (在每个步骤中,各人钱数分别存在A、B、C中) 步骤 : A=8,B=8,C=8 /这是最后结果的钱数,三人都一样多 步骤 : A=A/2 (=4),B=B/2 (=4),C=A+B+C(=16) /A,B未得到丙分给的钱时,只有结果数的一半;C应包含给A,B及本身数三者之和 步骤 : A=A/2 (=2),C=C/2 (=8),B=A+B+C(=14) /A,C未得到乙分给的钱时,只有巳有数的一半;B应包含给A,C及本身数三者之和 步骤 : B=B/2 (=7),C=C/2 (=4),A=A+B+C(=13) /C未得到甲分给的钱时,只有巳有数的一半;A应包含给B,C及本身数三者之和 步骤 : 输出A(=13),B(=7),C(=4) /此时的A,B,C 就是三人原先的钱数 Program ex2_12; var a,b,c : integer; begin a : =8; b : =8; c : =8;/对应于步骤 a : =a div 2; b : =b div 2;c : =a+b+c; /对应于步骤 a : =a div 2; c : =c div 2; b : =a+b+c; /对应于步骤 b : =b div 2; c : =c div 2; a : =a+b+c; /对应于步骤 writeln(a=,a, : 4,b=,b, : 4,c=,c); /输出 end. 细心观察,会发现本程序语句的顺序很关键。此例用反推顺序(逆序),按步骤正确推算出各变量 的值。 本程序writeln语句的输出项含有( : 4 ),这里的冒号用来指定该项显示所占宽度,此处是输出4 个空格即(空格项占4格)。 例2.13 求一元二次方程x2+3x+2=0的两个实数根。 【分析】方程的系数是常量,分别用a,b,c表示,可运用数学上现成的求 根公式求方程的根,采取如下方法 : 先求出d=b2-4ac;(求根公式中需用开方运算的那部分) 再用求根公式算出x1,x2的值。 输出x1,x2. 程序如下: Program ex2_13; const a=1;b=3;c=2; /常量说明,a,b,c表示方程系数 var d : integer; /d为整型变量 x1,x2 : real; /X1,X2为实型变量 begin d : =b*b-4*a*c; x1 : =(-b+sqrt(d)/(2*a); /求方程的根 x2 : =(-b-sqrt(d)/(2*a); writeln(x1=,x1, : 6,x2=,x2); /输出结果 readln /等待输入一个回车键 end. 本程序中的a,b,c均为常量;变量d是整数类型,而变量x1,x2则是实 数类型,因为运算式中的Sqrt(d)开平方运算和” / “除法运算使结果为实数。 Sqrt( ) 是开根号函数,是Pascal系统的一个标准函数。 【上机练习2.5】 1.有三个小朋友甲乙丙。甲有50粒糖果,乙有43粒糖果,丙有13粒 糖果。现在他们做一个游戏。从甲开始,将自己的糖分三份,自己 留一份,其余两份分别给乙与丙,多余的糖果自己吃掉,然后乙与 丙也依次这样做。问最后甲、乙、丙三人各有书多少粒糖果? 2.交换两个变量的值:由键盘输入两个正整数A和B,编程交换这两 个变量的值。 3.编写程序把一个三位整数反转,例如3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论