欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOC文档下载
 

程序的设计提高班培训讲义全

  • 资源ID:141407586       资源大小:505.50KB        全文页数:33页
  • 资源格式: DOC        下载积分:32积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要32积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

程序的设计提高班培训讲义全

程序设计提高班培训讲义胡苗坤(2007 寒假)第一讲顺序结构程序设计主要内容:1、 熟练掌握赋值语句、输入输出语句的用法2、 掌握顺序结构程序设计常用方法3、 基本运算符的使用4、常用函数和过程一、赋值语句(: =)格式:变量名:=表达式功能:将表达式的值计算出来赋给相应的变量。不管什么计算机语言, 赋值语句都是最基本最常用的语句, 通过它给变量赋值来进行各种运算、处理。如 a:=10*5; a的值为 50a:=a+1 ; 将 a 的值增加1,常用此语句来进行计数s:=s+a; 将 s 的值增加a,常用类似的累加语句来进行求和t:=t*a; 将 t 的值变为原来的a 后倍,常用类似的语句来进行累乘例题 1:交换两个数值型变量a 和 b 的值 分析与算法选择 :要交换两个变量的值,可以联想起现实世界中交换两个容器A 和 B 中所装的东西,一般要先引进一个空的容器C,先将一个容器 (如 A)里的倒入C,再将另一个容器B 的倒入 A,最后将 C 的倒入 B,从而实现A、 B 容器内容的互换。 方法 1 :引进第三个变量c:=a;a:=b;b:=c; 方法 2 :先合并后分开a:=a+b;如原来 a=3,b=5 ,执行此语句后a=8,b=5b:=a-b;执行此语句后a=8,b=3a:=a-b;执行此语句后a=5,b=3还有其它一些办法,但都没有上面的两种方法通用。如可先乘再除, 这种方法对于有一个变量为0 的情况就不正确了。也可能会出现除数为0 的情况。例题 2:计算四个变量的乘积 分析与算法选择 :一般的计算,可以直接用一个表达式将运算结果给一个变量就行了。如果变量的个数不确定, 或者说变量的个数很多,此时用一个表达式就不方便了,可行的方法是来一个就算一个,直到全部的都算好结束。在后面的循环中常用这种方法。参考程序 :program example5_2;var t:longint;a,b,c,d:integer;beginwrite(Enter integer a,b,c,d:);readln(a,b,c,d);t:=1;t:=t*a;t:=t*b;t:=t*c;t:=t*d;writeln(a*b*c*c= ,t);end. 补充说明 :累加时,存放累加值的变量初值一般为0;而累乘时必须将相应变量的初值赋为如上述程序中t 的初值为1,如果没有这句,系统默认的初值为0,那么乘下来结果也是 0。1。二、 read/readln读取数据格式: read( 变量 ) 或 read(变量readln(变量 ) 或 readln(1,变量 2, )变量 1,变量 2,)功能: 在运行程序时读入相应数据给指定变量,直到读入的数据满足为止,有两个方面的含义,一是类型的一致,二是数据的满足。Readln 跟 read 不同的地方就是它执行完后将到下一行。这里所说的满足例: read(a,b,c) ;根据事先定义的类型由用户在运行程序时输入相应的数据给a,b,c,也可分开写成三个read 语句: read(a);read(b);read(c)。readln(a,b,c);与read(a,b,c)不同是读完数据后另起一行,如果将它分为三个语句readln(a); readln(b); readln(c)执行时可能读入的数据跟原来不一样,自己上机去试试吧!readln;空读语句,一般起到让程序运行时停止由用户回车后继续或跨过一行中其余的数据,保证下一个读语句从下一行头一个数据开始读取。三、 write/writeln输出语句语句功能:输出指定表达式的值。如 wirte(a),write(Jiangshu );分别输出a 的值和 Jiangshu( 1)场宽在输出项后用“:数字”指明输出的宽度。如 write(5:6),则输出:55 的前面有5 个空格,整个输出项占6 个字符的位置 对于实数类型的还可以通过“:数字1:数字 2”指明输出数字的宽度和小数点后的位数。如: write(1.2:10:5)将输出:1.50000 整个输出项占10 个字符位置,整数部分占4 位,小数点1 位,小数部分5 位,其中整数部分不足的在高位补空,小数部分不足在后面补0如果指定的宽度比原输出项应有的宽度小呢?对于整数或字符等类型的,将自动调整到最小所要的宽度,输出 ABCD。如write(ABCD:2)仍将对于实数,小数部分会取自定的位数,将尾部去除(四舍五入)宽度。思考:,并自动适应到最少的如何对小数点后指定位进行四舍五入?解答:一种方法是直接指定输出小数点后指定的位数,如对于变量a 要保留到小数点后第三位并考虑四舍五入,可以直接写为write(a:0:3)。这种方法跟系统的设置有关,也就是说这样不能保证任何时候都正确。可以对指定位加5 后从这位始截尾。如要求对实型变量a 要求精确到小数点后两位,对小数点后第三位进行四舍五入,可以用这样的输出语句write(a+0.005:0:2)。一般来说对于变量的处理, 可以先按这种方法(即相应位加5 后再去尾) 通过赋值语句进行处理,输出时不进行处理,只是直接输出就行了。四、 writeln跟 wirte的区别writeln语句在输出完指定内容后另起一行,write只管输出除非真满一行后才另起一行。空的 wirteln起到一个输出空行的作用,如果它前面有write语句,则在其它输出空行(可能不满一行) ,保证下一个输出另起一行。在程序中经常用一个空的writeln语句起换行的作用。五、一个语句多个输出项一个 write或 writeln中可以有多个输出项,各项之间用逗号间隔。如 write(1,2,3);它与三个write语句作用一样:write(1);write(2);write(3);再如 writeln(1,2,3);输出 123 后换行。与它等同的分开写的形式为:write(1);write(2);writeln(3);练习及作业:(1)输入三角形的三边,输出三角形的面积(假设这三边一定能构成三角形)。计算三角形面积的公式:p:=(a+b+c)/2s:=sqrt(p*(p-a)*(p-b)*(p-c)(2) 输入一个三位整数,逆向输出,如输入 123,输出为 321,如果个位数是零,则输出二位数,如 : 320,输出为 23。(3) 输入一个 10000 以内的整数,输出它的位数(4) 分钱游戏:甲、乙、丙三人共有 24 元钱,先由甲分钱给乙、丙两人,所分给的数与各人已有数相同;接着由乙分给甲、丙,分法同前;再由丙分钱给甲、乙,分法亦同前。经上述三次分钱之后,每个人的钱数恰好一样多。求原先各人的钱数分别为多少?第二讲分支结构程序设计主要内容:1、 掌握复合语句、基本IF 语句及 CASE语句语法格式和执行过程;2、 能够根据实际情灵活运用IF 语句和 CASE语句3、掌握 IF 语句的嵌套原则一复合语句1为什么要用复合语句在程序中有时候要将多个语句结合起来作为一个整体,象一个语句一样来使用。这时就要用到复合语句,用 begin 和 end 将多个语句结合在一起。2格式:begin语句 1;语句 2;语句 N;end; 说明: end 前的最后一个分号可以不写,也可以写,相当于其后是一个空语句。其效果跟普通的语句一样,也就是将多个语句合并成一个语句来使用,特别是在后面的条件语句或循环语句里执行的是多个语句要像一个语句一样时就必须要使用复合语句。二条件语句( if-then-else)格式 1:一个分支if条件 then语句;格式 2:两个分支if条件 then语句 1 else语句 2;注意 else 前没有分号,否则会出错。(思考这是为什么?)1条件的描述在使用条件语句时主要的难点就是条件的描述和满足条件或不满足条件时要执行的语句的描述。条件通过布尔表达式来描述。例:条件语句与自然语言描述的对比( 1) if a>1 then a:=a-1 else a:=a+1;如果 a 大于 1 那么将 a 的值减少1,否则将a 的值增加1( 2) if (a>b) and (b>c) then s:=(a-b)*(b-c);如果 a 大于 b 并且 b 大于 c,那么 s 的值为( a-b )乘以 (b-c)( 3) if (a>0) or (b>0) then s:=a+b;如果 a>0 或者 b>0,那么 s 的值等于a+b( 4) if f then t:=t+1; 这里 f 为布尔型的变量如果 f 成立即等于true ,那么 t 的值增加 12语句的选择满足条件时执行什么、不满足条件时执行什么要先搞清楚。当满足条件时或不满足条件时执行的是多个语句时要使用复合语句的格式。当然单个语句也使用复合语句的格式也不会错, 只不过多此一举而已, 并不影响程序的执行, 有时先这样写是为了后来的扩充。例:条件语句与自然语言描述if a<0 then begin a:=a+1; s:=s+1; end;如果 a 小于 0,那么执行两部分: ( 1) a 的值增加1;( 2)s 的值增加1。三、 多分支语句 case 有时也叫多路分支 1格式:case 表达式 of值1:语句1;值2:语句2;else语句 end;2示例(1) 两个分支的情况,还不如直接用条件语句case random(Maxint) mod 2 of0: writeln( Even digit );1: writeln( Odd digit. );end; 等同于 if random(maxint) mod2=0 then writeln(Even digit.)else writeln(Odd digit.);根据随机产生的非负整数情况来确定偶数时:输出 Even digit;奇数时:输出 Odd digit.(2)根据字符型变量ch 的值来确定不同的执行case ch ofA. Z, a. z:writeln(ch,isanidentifiercharacter. );0. 9:writeln(ch, is a decimal digit.);elsewriteln(ch, is a special character.);end; 等同于:if (ch>=A) and (ch<= Z) or ( (ch>=a) and (ch<= z) thenwriteln(ch, is an identifier character.)elseif (ch>=0) and (ch<= 9) then writeln(ch, is a decimal digit.)else writeln(ch, is a special character.);3使用注意点当有else部分时它上面的语句的最后一行可以有分号也可以没有分号,这点跟if-then-else不一样; case 语句结构中最后要有一个end 作为结尾;其中的语句可以是单语句也可以是复合语句。 练习及作业 :1、输入三个整数,按由大到小的顺序输出。设三个数为a,b,c,一种方法可以用条件的并列,列举出可能有的6 种情况。另一种方法是用条件的嵌套,从而输出结果。2 编写程序输入年份和月份,输出这个月的天数。3 编一个随机产生一个 100 以内的四则运算题,要求先输出这个四则运算的式子,这个四则运算的式子要能确保第一个数不小于第二个数,如果是除法的话要能确保能够整除,然后让用户输入结果,如果输入的结果正确则输出“Right!”否则输出“ Error!”。 分析与提示 :用随机函数来产生四则运算的操作数和操作符,其中操作数都是100 以内的整数,所以可以直接用 random(100) 就行了,如果第一个数比第二个数小则交换两个数。而操作符(运算符) 只有四种可能, 因此先用随机函数产生出0-3 间的数, 再根据产生的是什么数来确定是“ +、 - 、 * 、 / ”。其中对于除法运算要考虑除数不能为0,再要考虑能整除,所以先进行整除运算,得到一个结果,再将第一个数变为除数乘以商。4 编程输入三角形的三条边长,输出三角形的面积,如果不能构成三角形输出错误信息。5. 期末来临了, 班长小 Q决定将剩余班会费, 用于购买若干支钢笔奖励给一引起学习好、表现好的同学。已知商店里有三种钢笔,它们的单价为6 元、 5 元和 4 元。小 Q想买尽量多的笔(鼓励尽量多的同学) ,同时他又不想有剩余钱。请你编写一程序,帮小Q制订出一种买笔的方案。6. 编写一个评分程序,接受用户输入10 位选手的得分( 0 10 分),然后去掉一个最高分和一个最低分,求出某选手的最后得分(平均分)。第三讲循环结构的程序设计主要内容:1、 掌握三种循环语句的格式和执行过程;2、 掌握三种循环语句的异同,能够根据实际情况灵活运用循环语句;3、 掌握累加器和累乘器和计数器;4、 掌握多重循环及循环的嵌套;5、 熟练运用循环语句解各种实际问题,如打印图形、判断素数等常用算法。许多处理过程中有连续的重复,这时候如果还是一句句地重复写的话,既麻烦又累赘,当要重复成千上万次时, 这种重复的书写几乎是不可能实现的。 直接简便的方法是用循环语句来实现循环。一 While 语句(当型循环)1格式:while布尔表达式do语句;2说明:格式中 while 和 do 都是保留字,布尔表达式表示条件,它的描述跟条件语句里的条件描述是一样的。Do 后面的语句可以是单一语句也可以是复合语句,称为循环体。只要布尔表达式成立时(即值为TRUE时)就执行循环体,如此反复直到布尔表达式不成立(值为FALSE)时停止。如果一开始就为布尔表达式就不成立(值为FALSE),那么循环体一次也不执行。例 31 用当循环计算1+2+3+ 100 分析 :此类题也称累加,设最后结果放入变量S 中,设计一指针I ,让 I 从 1 开始递增,并累加到S 中,当 I 的值等于100 时,循环结束。VarS,I:integer;BeginS:=0;I:=1;While I<=100 doBeginS:=s+I;I:=I+1;End;Writeln(s)End.注意:在 while 循环体中一定要有相应的语句使布尔表达式的值可能为 false, 否则就会构成死循环。二、 Repeat 语句(直到型循环)1格式:repeat语句;语句;语句;until布尔表达式;2. 说明格式中 repeat 和 until 都是保留字,其间的语句构成循环体,最后一个语句的分号可以省略; until 后的布尔表达式表示条件,描述的是循环结束的条件。3. 功能反复执行循环体直到布尔表达式的值为true时为止。例 3 2 用直到型循环解例3. vars,I:integer;begins:=0;I:=1;RepeatS:=s+1;I:=I+1;Until I=100;Writeln(s)End.总结与提高While 与 Repeat 语句对比while和 repeat语句一般情况下可以相互替换。它们的主要区别是:while 是先判断后执行,而 repeat 是先执行后判断,因此 while 语句的循环体有可能一次也不执行,而 repeat 语句至少执行一次;前者是当条件满足时执行,而后者是当条件不满足时执行;前者的循环体是复合语句时要用begin 、end,而后者却不一定要用。三、 for 语句(计数循环)1格式:( 1) for 变量标识符: =初值表达式 to 终值表达式 do 语句;从小到大执行的格式( 2) for 变量标识符: =初值表达式 downto 终值表达式 do 语句;从大到小执行的格式2说明格式中的for,to,downto,do都是保留字, to 一般用在升序的计数,而序的计数。变量标识符在这里称作是控制变量,必须是离散(有序)数据类型,如:for i:=1 to 100do .downto用在降for ch:=atozdo.3示例上面的例题我们可以用计数循环来实现:begins:=0;I:=1;For I:=1 to 100 doS:=S+I;Writeln(s)End.总结与提高for语句的形式简单,但它也有一定的局限性,主要是控制变量的值不能随意变化,每次只能取其后继 ( 用 to 的情况 ) 或前趋(用downto 的情况),另一限制是控制变量只能用简单的有序的离散量,且循环次数已定,不能象 while 或 repeat 那样通过布尔表达式来控制循环的操作。四多重循环(循环的嵌套)当程序中要用到多个循环时,如果这些循环是并列的关系,那么它们彼此之间的控制变量不相互影响。而当一个循环的循环体中又有循环时,这就是循环的嵌套,称为多重循环。例 3.3 编写程序输出如下的字母塔:AABAABCBA.ABCD DCBA分析:此题有两个关键:一是确定每一行前导空格符的数目;二是按一定规律输出英文大写字母,共 26 行。应能保证最后一行前导空格数目至少为0,设最后一行的前面空格数为10 个,那么倒数第二行前面的空格数为11,倒数第三行的数目为12,如果控制输出行的字符变量为 c,则空格数为: ord( Z) -ord(c)+10var ch,c:char;beginfor c:=A toZ dobeginwrite( :ord( Z) -ord(c)+10);输出空格数 for ch:=A to c do write(ch);输出一行的左半部分for ch:=pred(c) downtoA do write(ch);输出一行的右半部分writeln;换行end;end. 思考与提高 :上面整个程序是个两重循环,三个 for语句,但只是两重循环。而外循环的循环体是两个并列的循环,因此虽然程序中有练习及作业:一、完善程序1求 100 以内所有质数的和。 变量说明 : h 存放所有质数的和;I 、j为循环检测变量程序清单 :program ex7_2_1;var i,j,h:integer;begin_(1)_;for i:=3 to 100 dobeginj:=2;while (i mod j>0) and (j<i) do j:=j+1;if _(2)_ then h:=_(3)_;end;writeln(h)end.1 输出四位数以内(包括四位数)是一个质数的完全平方数的数,并输出总的个数。变量说明 :n 存放符合条件的数的个数;程序清单 :program ex7_2_2;var i,j,k,n:integer;beginn:=0;for i:=2 to 99 dobegink:=_(1)_;j:=2;while (i mod j>0) and (j<i) do j:=j+1;if _(2)_ thenbeginI 、 j是循环检测变量;K 存放完全平方数。write(_(3)_:5);_(4)_;endend;writeln;writeln('Count=',n);end.二、编写程序题1. 输出下图所示的图形* * * * *2编写输出“右三角的九九乘法表”的程序:1234567894 6 8101214161816 20 24 28 32 3625 30 35 40 4536 42 48 5449 56 6364 72813找出4求出100 以内所有被2、 3、 5 除余数为1 的整数100999 内所有的水仙花数,所谓水仙花数是该数等于它各位上的数的立方和。例:153=13+33+535. 求 1100 内所有的素数6. 要将一张 100 元的钞票换成等值的 10 元、 5 元、 2 元、 1 元的小钞票,要求每次换成 40 张小钞票,每种至少一张,编程输出所有可能的换法,程序应适当考虑减少重复次数。7. 四个学生上地理课,回答我国四大淡水湖大小时这样说:甲:“最大洞庭湖,最小洪泽湖,鄱阳湖第三。”乙:“最大洪泽湖,最小洞庭湖,鄱阳湖第二,太湖第三。 ” 丙:“最小洪泽湖,洞庭湖第三。 ”丁:“最大鄱阳湖,最小太湖,洪泽湖第二,洞庭湖第三。”对于每个湖的大小,每个学生仅答对一个,请编程确定四个湖的大小。8.谁是小偷 ? 问题:警察局抓了4 名嫌疑犯: A,B,C, D,其中一人是小偷,审问中A 说:“我不是小偷。 ” B 说:“ C 是小偷。”C 说:“小偷肯定是D。”D 说:“ C冤枉人。”,现已知四人中三人说的是真话,一人说的是假话。问到底谁是小偷?9.求二个正整数的最小公倍数和最大公约数第四讲数组和字符串主要内容:1、 掌握数组类型的定义及基本操作;2、 掌握字符串类型的定义及常用函数过程的操作;3、 熟练掌握通过数组来实现常见的排序、查找算法;4、 熟练掌握通过字符串来解决各种实际问题如加解密,查找子串等。Turbo-pascal的数据类型分为三种类型:简单类型、构造类型、指针类型。前面介绍的整型、实型、布尔型以及枚举类型等都是简单类型,而构造类型有字符串、数组、记录、集合、 文件类型。 描述一个构造类型特征的是其成分的类型和它的构造方法。因此对于构造类型, 主要去考虑如何构造即其构造方法。指针类型是一种特殊的数据类型,它涉及到动态存储分配。一、数组在代数上我们常常这样写:a1,a2 .ai .a100(0<i<101) ,通过i 来指明具体的i=10 时代表 a10,在 pascal语言里我们也希望能够类似地描述。从前面的变量名里我们已经知道, a1,a2.ai彼此之间是相互独立的,并没有必然的联系。如要象代数上那样,可以使用数组。ai ,如数组其实是一组相同值类型的变量的集合,这些变量共用一个名,彼此之间通过下标来区别。如定义了数组 a,它的下标可以从 1 到 100,那么就可以直接通过 ai 来指明第 i 个量,如 i=10 , ai 指的是 a10 。1数组的说明可以先通过 type 标识符 =array 下标范围 of 值类型;然后再在变量说明里引用。如: type array1=array1.100 of integer;var a,b:array1;也可以直接在变量说明里说明:变量名: array 下标范围 of值类型;如:var a,b:array1.100 of integer;描述下标范围一般通过离散(有序)类型,如从一个整数到另一个整数,或者从一个字符到另一个字符等。如:var a:array-5.5 of integer;c:array1.20 of char;d:arraya. z of integer;2数组的使用刚才我们已从代数上使用说明了数组使用的优点,特别是要保存的量比较多且这些量之间又有某种联系。 如要将若干数重新根据由大到小或由小到大的顺序排序时, 这些数都是要保留的, 只是位置换了而已, 此时用数组变可以实现。 后面我们会专门介绍排序的算法的。(1) 数组元素的输入:数组名代表的并不是一个变量, 而是一批变量,因而,不能直接整个数组读入,而是要逐个数组元素读入,通常用循环结构来完成这一功能。下面是几个常用输入数组元素的例子:for i:=1 to 10 do read(ai); 从键盘读入数组元素的值;最常用的方法for i:=1 to 10 do ai:=i; 数组元素 a1 到 a10 的值分别为 1 到 10;数据赋初值 for i:=1 to 10 do ai:=0; 数组元素清 0;最常用的数据初始化的方法 for i:=1 to 10 do ai:=random(100); 随机产生10 个 100 以内的数,赋给各数组元素(2) 数组元素的输出:和数组元素的输入相同,数组元素的输出也不能由一个write要逐个数组元素输出。通常也用循环结构来完成这一功能:for i:=1 to 10 do write(ai,' ');数组元素之间用空格分隔语句直接完成。 同样writeln;3. 二维数组一维数组在编程中多用于描述线性的关系:如一组数;一组成绩;一组解答等。数组元素只有一个下标, 表明该元素在数组中的位置。二维数组在编程中多数用于描述二维的关系:如地图、棋盘、城市街道、迷宫等等。而二维数组元素有两个下标:第一个下标表示该元素在第几行,第二个下标表示在第几列。(1).二维数组的定义:vara: array1.10,1.5 of integer;其中: a 是数组名,由程序员自定;array和 of 是定义数组的保留字; (这两点和一维数组定义的格式一样) 中括号中的两个范围表示二维数组共有多少行、 多少列(第一个范围表示行数,第二个范围表示列数) ;最后一个表示数组元素的类型,规定和一维数组一样。如上例,定义了一个二维数组a,共有 10 行 5 列。(2).使用二维数组:1 、数组元素的指称:数组名 行号,列号 。如第三行第四个元素:对某一行进行处理。如累加第4 行的数据。则固定行号为4。如:a3,4。for i:=1 to 5do s:=s+a4,i;对某一列进行处理。如累加第4 列的数据。则固定列号为4。如:for i:=1 to 10do s:=s+ai,4;2、二维数组的输入输出要用双重循环来控制:for i:=1 to 10 do控制行数beginfor j:=1 to 5 do read(ai,j) 读入一个换行符 readln;第一行读入5 个元素end; 最常用的方法:从键盘读入数据初始化二维数组for i:=1 to 10 dofor j:=1 to 5 do ai,j:=0; 最常用的方法:将二维数组清0for i:=1 to 10 dobeginfor j:=1 to 5 do write(ai,j:4);writeln;end; 最常用的输出方法:按矩阵形式输出二维数组的值例:竞赛小组共有20 位同学,这学期每位同学共参与了三项比赛,请统计每位同学的平均分。分析:定义一个20 行3 列的二维数组来存放这些成绩。定义一个20 个元素的一维数组来存放平均分。program p1;vara:array 1.20,1.3 of integer;b:array 1.20 of real;i,j:integer;beginfor i:=1 to 20 dobeginfor j:=1 to 3 do read(ai,j);readln;end; 从键盘上读入20 个同学的三次竞赛成绩for i:=1 to 20 do bi:=0; 先将平均分数组清 for i:=1 to 20 do begin0for j:=1 to 3 do bi:=bi+ai,j; 计算平均分 bi:=bi/3;计算总分end;for i:=1 to 20 do write(bi:5:1); 输出平均分 writeln;end.例 4_1:让计算机随机产生100 个 0 到 1000 之间的整数,输出其中最大的数。 分析与算法选择:随机产生数可以用其random 函数,产生的100 个数依次存放在a1 到 a100 里。选最大数时可用“擂台比武”的思想,假设最大数放在变量max 里,如果ai比 max大,则取而代之, i 从 1 到 100 重复此操作。程序清单 :program maxdigit;var a:array1.100 of integer;i,max:integer;beginrandomize;for i:=1 to 100 do ai:=random(1000);max:=a1;for i:=2 to 100 do if ai>max then max:=ai;writeln(Max=,max);end.例 4_2 键盘输入40 个 5 位以下的整数,最后分批输出其中的奇数和偶数。 分析与算法选择:判定一个数是奇数或偶数比较简单,如果不是要分批输出可以一边输入一边判定,现在要分批输入所以输入跟输出的过程要分开,输入的 40 个数要先存放起来,通过数组很方便。程序清单 :program digit;var a:array1.40 of integer;i:integer;beginfor i:=1 to 40 do read(ai);writeln;for i:=1 to 40 do if odd(ai) then write(ai:5);writeln;for i:=1 to 40 do if not odd(ai) then write(ai:5);writeln;end.二、字符串类型定义和变量说明1定义type变量标识符=string常数;还可以使用不带字符串最大长度(即不用方括号)的字符串定义, 此时取时大长度的缺省值 255,形式为: type变量标识符 =string;例: typeclass=string10;name=string20;address=string;定义了三个字符串类型,最大长度为别是10, 20, 255。2字符串变量说明字符串变量与简单类型变量说明一样,有两种形式:一是先写字符串类型定义,后用其进行变量说明;二是直接将字符串类型写于变量说明之中。曾上例子可以写出如下的字符串类型变量说明:varclass1, class2: class;myname, yourname,hisname: name;heraddress: address;也可以直接说明:varclass1, class2: string10;myname, yourname, hisname: string20;heraddress: string;3字符串长度为了记录一个字符串的实际长度即有效字符的长度,系统在所有字符串变量前保留一个不可见字符,称它为长度字节,因此turbo-pascal编译器为每一字符串变量在内存中所分配的字节数 (一个字符占一个字节)是其长度加 1。在长度字节中存放的是这样一个字符:其相应的 ASCII 序数值为该字符串变量的当前实际长度。由于系统允许对一个字符串变量进行整体访问, 也可以对字符串变量中的各个字符逐个地访问,第二种访问应指定某字符在字符串中的位置即下标,如myname1 表示字符串变量 myname的第一个字符, myname2 表示第二个字符,依次类推。因此可用myname0 表示在长度字节中所存放的字符,而字符串的实际长度可用 ord(myname0) 求得。也可以直接用系统函数来求字符串的长度,如length(myname) 。4字符串与字符字符串变量和字符类型char相兼容,可把 char视作长度为 1 的字符串类型,因而它们在字符串表达式计值时可混合使用。如A可看作是字符,也可视为字符串。但字符串类型和字符类型在内存中的存储形式不同。另外允许长度为0 的空串 此时字符串的存储仍然要一个字节,用来存放其长度字符 ,但字符类型必须也只能有一个字符。5字符串的常数定义与类型常数定义可将任意字符串定义成一个常数标识符,以供程序各处引用。字符串常数定义的一般形式为:const常数标识符=字符串常数;其中字符串常数是用单引号括起的字符串序列。如:constheading= Difference between string variable and string typed constant;splitline=-;分别以常数标识符heading 表示一个表头信息,splitline表示分隔线。字符串类型常数定义要规定字符串类型及所取的初始值,形式为:const类型标识符:字符串类型=字符串常数;如: constPassword:string7=private ;TrueString:string5=yes;FalseString:string5=no;SchoolName:string4=NTZX;NewLine:string2=#13#10; 通常通过“#数字”描述无法输入的字符,其中数字为相应字符对应的ASCII码值 三字符串表达式和赋值语句1字符串表达式通过字符串运算符将字符串常数、字符串变量、 字符串函数等组成起来的式子就是字符串表达式,由字符串表达式进行运算可形成新的字符串。运算符主要是+,用来进行字符串的连接。如:说明了常数const pas= pascal 就可以有以下的字符串表达式:Turbo+pas+ is better than+standard+pas字符串连接的结果还是字符串,如果串和长度超过255,则超过的字符将被截去。可使用关系运算符=,<,>,<=,>=,<>比较任意两个字符串的大小,这些运算符的优先级别比连接符“ +”号低,要注意这点,该加括号的地方要加括号。关系运算符用于字符串操作时,其结果还是为布尔值,在比较两个字符串时,两者自左向右逐个比较相对应字符的ASCII码值,只有当两个字符串长度相等且对应字符完全相同时才认为这两个字符串相等。如果两个字符串长度不等,但短字符串与长字符串前面的字符逐个相等,则认为短字符串小于长字符串。字符串的比较大小其实就是比较字符的ASCII 码值的大小,有点跟字典顺序相似。2字符串赋值语句赋值语句可应用于字符串类型,它表示计算右部字符串表达式的值,并将结果赋予左部字符串变量。允许以字符串变量中某一个字符位置赋值即此时实际上是字符的赋值。如:var hisname:string15; .hisname:= Mr. + Yueking 又如: var s1:string20;.For i:=1 to 20 do s1i:=chr(64+i);3. 有关字符串的操作:类返操作回例子作用型值length(s)函 求字符串 s 的长 整s:='123456789'数 度型l:= length(s) ;l的值为 9函 复制 s 中从 w 开字s:='123456789'copy ( s,w,k)符数 始的 k 位s1:= copy(s,3,5);s1 的值是 '34567'串var s:string;k,code:integer;将字符串 s 转为beginval(s,k,code)过 数值,存在 k 中;s:='1234'程 code 是错误代码val(s,k,code);write(k);k=1234过 将数值 i 转为字i:=1234;str(i,s)str(i,s);程 符串 swrite(s);s='1234'在 s 中删除从第s := 'Honest Abe Lincoln'Delete(s,w,k)过Delete(s,8,4);w 位开始的 k 个程Writeln(s); 'Honest Lincoln' 字符Insert(s1,S, 过 将 s1 插到 s 中S := 'Honest Lincoln'w)程 第 w 位Insert('Abe ',S, 8) ; 'HonestAbe Lincoln' Pos(c, S)函 求字符 c 在 s 中 整S := ' 123.5'数 的位置型 i := Pos(' ', S);i 的值为 1运将两个字符串s1:='1234'+算s2:='5678'连接起来符s:= s1+s2 ;'12345678'例 4-3 Caesar(凯撒密码 ) 已知最早的代换密码是由Julius Caesar 发明的 Caesar 密码。它非常简单,就是对字母表中的每个字母,用它之后的第3 个字母来代换。例如:明文: meet me after the toga party密文: phhw ph diwhu whk wrjd sduwb注意到字母表是循环的,即认为紧随Z 后的字母是A。请编程输入一串明文和密钥,输出其密文。并根据密钥把密文解密后输出明文。 练习及作业 :1. 输入 10 个整数,把这 10 个数按从小到大的顺序排列。分别用选择排序法、冒泡排序法、插入排序法来解此题;2 旅馆里有一百个房间,从1 到 100 编了号。第一个服务员把所有的房间门都打开了,第二个服务员把所有编号是2 的倍数的房间“相反处理”,第三个服务员把所有编号是3 的倍数的房间作“相反处理”,以后每个服务员都是如此。问第 100 个服务员来过后,哪几扇门是打开的。 (所谓“相反处理”是:原来开着的门关上,原来关上的门打开。)3 随机输入一个长度不超过255 的字符串,将其倒置

注意事项

本文(程序的设计提高班培训讲义全)为本站会员(Sc****h)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!