语言补充内容.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《语言补充内容.ppt》由用户(saw518)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 补充 内容
- 资源描述:
-
1、情况语句(情况语句(CASE语句)语句)上面我们知道可以用嵌套的if语句实现多分支的选择结构。但是如果分支越来越多时,用嵌套的if语句实现多分支就显得繁杂。当多分支选择的各个条件由同一个表达式的不同结果值决定时,可以用case语句实现。它的选择过程,很象一个多路开关,即由case语句的选择表达式的值,决定切换至哪一语句去工作。因此在分支结构程序设计中,它是一种强有力的手段。在实现多路径分支控制时,用case对某些问题的处理和设计,比用if语句写程序具有更简洁、清晰之感。情况语句的一般形式:情况语句的一般形式:case of:语句1;:语句2;::语句n;else 语句n+1;end;其中cas
2、e、of、end是Pascal的保留字,表达式的值必须是顺序类型,它可以是整型、布尔型及以后学习的字符型、枚举型和子界型。情况标号表是一串用逗号隔开的与表达式类型一致的常量序列。语句可以是任何语句,包括复合语句和空语句。case语句的执行过程语句的执行过程 先计算表达式(称为情况表达式)的值,如果它的值等于某一个常量(称为情况常量,也称情况标号),则执行该情况常量后面的语句,在执行完语句后,跳到case语句的末尾end处。说明说明 情况表达式必须是顺序类型的;情况常量是情况表达式可能具有的值,因而应与情况表达式具有相同的类型;情况常量出现的次序可以是任意的;同一情况常量不能在同一个case语句
3、中出现两次或两次以上;每个分语句前可以有一个或若干个用逗号隔开的情况常量;如果情况表达式的值不落在情况常量的范围内,则认为本case语句无效,执行case语句的下一个语句。Free pascal中增加了一个“否则”的情况,即增加一个else子句,但也是可省的。每个常量后面只能是一个语句或一个复合语句,以分号结束。例例3.9根据x的值,求函数Y的值:【分析【分析】利用case语句进行程序设计,关键在于巧妙地构造情况表达式。本例中三种情况可用一个表达式区分出来:Trunc(x/100)。因为x在(0,100)之间时表达式值为0;x在100,200)时表达式值为1;其余部分可用else子句表示。源程
4、序如下:program ex3_9;var x,y:real;begin write(Input x:);readln(x);case trunc(x/100)of 0:y:=x+1;1:y:=x-1;else y:=-1;end;/end of case,每个case对应一个end writeln(x=,x:8:2,y=,y:8:2);end.例例3.10 判断2006年,每个月份的天数。【分析【分析】程序分为:输入月份,计算该月的天 数,输出天数。程序如下:Program ex3_10;Var month,days:integer;begin readln(year,month);case
5、 month of1,3,5,7,8,10,12:days:=31;4,6,9,11 :days:=30;2 :if(year mod 400=0)or(year mod 4=0)and(year mod 1000)then days:=29 else days:=28;else days:=0;end;if days0 then writeln(days);end.运行结果:输入:10输出:31例例3.11 期未来临了,班长小Q决定将剩余班费X元钱,用于购买若干支钢笔奖励给一些学习好、表现好的同学。已知商店里有三种钢笔,它们的单价为6元、5元和4元。小Q想买尽量多的笔(鼓励尽量多的同学),同
6、时他又不想有剩余钱。请您编一程序,帮小Q制订出一种买笔的方案。【分析【分析】对于以上的实际问题,要买尽量多的笔,易知都买4元的笔肯定可以买最多支笔。因此最多可买的笔为x div 4支。由于小q要把钱用完,故我们可以按以下方法将钱用完:若买完x div 4支4元钱的笔,还剩1元,则4元钱的笔少买1支,换成一支5元笔即可;若买完x div 4支4元钱的笔,还剩2元,则4元钱的笔少买1支,换成一支6元笔即可;若买完x div 4支4元钱的笔,还剩3元,则4元钱的笔少买2支,换成一支5元笔和一支6元笔即可。从以上对买笔方案的调整,可以看出笔的数目都是x div 4,因此该方案的确为最优方案。程序如下:
7、程序如下:Program ex3_11;Var a,b,c:integer;/a,b,c分别表示在买笔方案中 ,6元、5元和4元钱笔的数目x,y:integer;/x,y分别表示剩余班费和 买完最多的4元笔后剩的钱begin readln(x);/输入x c:=x div 4;/4元笔最多买的数目 y:=x mod 4;/求买完c支4元笔后剩余的钱数y case y of0 :begin a:=0;b:=0;end;1 :begin a:=0;b:=1;c:=c-1;end;2 :begin a:=1;b:=0;c:=c-1;end;3 :begin a:=1;b:=1;c:=c-2;end;
8、end;writeln(a,b,c);/三个数间以空格隔开end.例例3.12 试编写一个根据用户键入的两个操作数和一个运算符,由计算机输出运算结果的程序。【分析】只考虑加(+)、减(-)、乘(*)、除(/)四种运算,利用Case语句。Program ex3_12;Var result,x,y:real;ch:char;beginreadln(x,y);/分二行输入,第一行是二个操作数readln(ch);/第二行是运算符result:=0;case ch of +:result:=x+y;-:result:=x-y;*:result:=x*y;/:if y0 then/考虑被0除的特殊情况
9、result:=x/y else writeln(error!);end;writeln(result:0:2);end.运行结果:输入:15 3+输出18.00输入:5 0/输出:error!直到循环(直到循环(REPEAT语句)语句)用while语句可以实现“当型循环”,用repeat-until 语句可以实现“直到型循环”。repeat-until语句的含义是:“重复执行循环,直到指定的条件为真时为止”。直到循环语句的一般形式:Repeat;:;until;其中Repeat、until是Pascal保留字,repeat与until之间的所有语句称为循环体。说明:说明:repeat语句的特
10、点是:先执行循环,后判断结束条件,因而至少要执行一次循环体。repeat-until是一个整体,它是一个(构造型)语句,不要误认为repeat是一个语句,until是另一个语句。repeat语句在布尔表达式的值为真时不再执行循环体,且循环体可以是若干个语句,不需用begin和end把它们包起来,repeat 和until已经起了begin和end的作用。while循环和repeat循环是可以相互转化的。例例4.13 求两个正整数求两个正整数m和和n的最大公约数。程序的最大公约数。程序采用采用repeat-until循环实现。循环实现。Program ex4_13;var m,n,r :inte
11、ger;begin readln(m,n);repeat /辗转相除法 r:=m mod n;m:=n;n:=r;until r=0;writeln(m);end.例例4.14 校体操队到操场集合校体操队到操场集合,排成每行排成每行2人人,最后多出最后多出1人人;排成每行排成每行3人人,也多出也多出1人人;分别按每行排分别按每行排4,5,6人人,都多出都多出1人人;当排成每行当排成每行7人时人时,正好不多。求校体操队至正好不多。求校体操队至少是多少人少是多少人?【分析【分析】设校体操队为X人,根据题意X应是7的倍数,因此X的初值为7,以后用inc(x,7)改变X值;为了控制循环,用逻辑变量ye
12、s为真(True)使循环结束;如果诸条件中有一个不满足,yes 的值就会为假(false),就继续循环。Program ex4_14;var x:integer;yes:boolean;begin x:=0;repeat yes :=true;inc(x,7);if x mod 2 1 then yes:=false;if x mod 3 1 then yes:=false;if x mod 4 1 then yes:=false;if x mod 5 1 then yes:=false;if x mod 6 1 then yes:=false;until yes;/直到yes的值为真 wri
13、teln(All=,x);readlnend.程序中对每个X值,都先给Yes 赋真值,只有在循环体各句对X进行判断时,都得到“通过”(此处不赋假值)才能保持真值。例例4.15 求求1992个个1992的乘积的末两位数是多少?的乘积的末两位数是多少?【分析【分析】积的个位与十位数只与被乘数与乘数的个位与十位数字有关,所以本题相当于求1992个92相乘,而且本次的乘积主下一次相乘的被乘数,因此也只需取末两位参与运算就可以了。Program ex4_15;var a,t:integer;Begin a:=1;t:=0;repeat t:=t+1;a:=(a*92)mod 100;until t=19
14、92;writeln(a);Readln;End.例例4.16 利用格里高公式求利用格里高公式求。/4=1-1/3+1/5-1/7+,直到最,直到最后一项的值小于后一项的值小于10-6为止为止.【分析【分析】解本题的关键就是求右边数值序列的和,序列有明显的特点:分母是从1开始的奇数,加、减号轮流出现,因此,我们可以用m=n+2表示序列数值的变化,用f=-f来设置它们知项的符号位。Program ex4_16;var f:integer;n,t,pai:real;begin pai:=0;t:=1;n:=1;f:=1;repeat pai:=pai+t;n:=n+2;f:=-f;t:=f/n;u
15、ntil abs(t)1e-6;pai:=pai*4;writeln(pai:10:8);end.运行结果:3.14159066 以上我们已介绍了三种循环语句。一般说来,用for 循环比较简明,只要能用for循环,就尽量作用for循环。只在无法使用for循环时才用while循环和repeat-until循环,而且 while 循环和repeat-until循环是可以互相转化的,具体用哪个,还要看个人喜好,但他们也存在细微区别,那就是while语句的循环体有可能一次都不会被执行,而repeat语句中循环体至少执行一次。for 循环在大多数场合也能用while和repeat-until循环来代替。
16、一般for循环用于有确定次数循环,而while和repeat-until循环用于未确定循环次数的循环。记录类型记录类型 在程序中对于组织和处理大批量的数据来说,数组是一种十分方便而又灵活的工具,但是数组在使用中有一个基本限制,这就是:一个数组中的所有元素都必须具有相同的类型。但在实际问题中可能会遇到另一类数据,它是由性质各不相同的成份组成的,即它的各个成份可能具有不同的类型。例如,有关一个学生的数据包含下列项目:学号字符串类型姓名字符串类型年龄整型性别字符型成绩实型数组 Pascal给我们提供了一种叫做记录的结构类型。在一个记录中,可以包含不同类型的并且互相相关的一些数据。w记录类型的定义记录
17、类型的定义 在pascal中,记录由一组称为“域”的分量组成,每个域可以具有不同的类型。记录类型定义的一般形式:record :;:;:;end;说明:说明:域名也称域变量标识符,应符合标识符的语法规则。在同一个记录中类型中,各个域不能取相同的名,但在不同的记录类型中,两个类型中的域名可以相同。记录类型的定义和记录变量可以合并为一个定义,如:type date=record year:1900.1999;month:1.12;day:1.31 end;var x:date;可以合并成:var x:record year:1900.1999;month:1.12;day:1.31 end;对记录
18、的操作,除了可以进行整体赋值,还能对记录的分量域变量进行。域变量的表示方法如下:记录变量名.域名 如前面定义的记录X,其3个分量分别为:x.year,x.month,x.day。域变量的使用和一般的变量一样,即域变量是属于什么数据类型,便可以进行那种数据类型所允许的操作。w记录的嵌套记录的嵌套 当一个记录类型的某一个域类型也是记录类型的时候,我们说发生了记录的嵌套,看下面的例子:例例7.5 某人事登记表可用一个记录表示某人事登记表可用一个记录表示,其中各项数据具有不同的其中各项数据具有不同的类型,分别命名一个标识符。而其中的类型,分别命名一个标识符。而其中的“出生年月日出生年月日”又包括三项又
19、包括三项数据,还可以用一个嵌套在内层的记录表示。数据,还可以用一个嵌套在内层的记录表示。具体定义如下:type sexs=(male,female);date=record year:1900.1999;month:1.12;day:1.31;end;personal=record name:string15;sex:sexs;birthdate:date;home:string40;end;例例7.6 设计一个函数比较两个设计一个函数比较两个dates日期类型记录日期类型记录变量的迟早。变量的迟早。设函数名、形参及函数类型定义为:AearlyB(A,B:dates):boolean;函数的形
展开阅读全文