程序设计提高班培训讲义.doc_第1页
程序设计提高班培训讲义.doc_第2页
程序设计提高班培训讲义.doc_第3页
程序设计提高班培训讲义.doc_第4页
程序设计提高班培训讲义.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

程序设计提高班培训讲义胡苗坤 (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;begin write(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;而累乘时必须将相应变量的初值赋为1。如上述程序中t的初值为1,如果没有这句,系统默认的初值为0,那么乘下来结果也是0。二、read/readln 读取数据格式:read(变量) 或 read(变量1,变量2,)readln(变量) 或 readln(变量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如果指定的宽度比原输出项应有的宽度小呢?对于整数或字符等类型的,将自动调整到最小所要的宽度,如write(ABCD:2)仍将输出ABCD。对于实数,小数部分会取自定的位数,将尾部去除(四舍五入),并自动适应到最少的宽度。思考:如何对小数点后指定位进行四舍五入?解答:一种方法是直接指定输出小数点后指定的位数,如对于变量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 a1 then a:=a-1 else a:=a+1;如果a大于1那么将a的值减少1,否则将a的值增加1(2)if (ab) and (bc) then s:=(a-b)*(b-c);如果a大于b并且b大于c,那么s的值为(a-b)乘以(b-c)(3)if (a0) or (b0) then s:=a+b;如果a0或者b0,那么s的值等于a+b(4)if f then t:=t+1; 这里f为布尔型的变量如果f成立即等于true,那么t的值增加12语句的选择 满足条件时执行什么、不满足条件时执行什么要先搞清楚。 当满足条件时或不满足条件时执行的是多个语句时要使用复合语句的格式。当然单个语句也使用复合语句的格式也不会错,只不过多此一举而已,并不影响程序的执行,有时先这样写是为了后来的扩充。例:条件语句与自然语言描述if a=A) and (ch=a) and (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位选手的得分(010分),然后去掉一个最高分和一个最低分,求出某选手的最后得分(平均分)。第三讲 循环结构的程序设计主要内容: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时,循环结束。Var S,I:integer;BeginS:=0;I:=1;While I0) and (j0) and (ji) do j:=j+1; if _(2)_ then begin write(_(3)_:5); _(4)_; end end; writeln; writeln(Count=,n);end.二、编写程序题1. 输出下图所示的图形* * * * * * * * * * * * * * * * * * * * *2编写输出“右三角的九九乘法表”的程序: 1 2 3 4 5 6 7 8 9 4 6 8 10 12 14 16 18 9 12 15 18 21 24 27 16 20 24 28 32 36 25 30 35 40 45 36 42 48 54 49 56 63 64 72 813找出100以内所有被2、3、5除余数为1的整数4求出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(0imax then max:=ai; writeln(Max=,max); end.例4_2 键盘输入40个5位以下的整数,最后分批输出其中的奇数和偶数。分析与算法选择: 判定一个数是奇数或偶数比较简单,如果不是要分批输出可以一边输入一边判定,现在要分批输入所以输入跟输出的过程要分开,输入的40个数要先存放起来,通过数组很方便。程序清单:program digit;var a:array1.40 of integer; i:integer;begin for 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;例:type class=string10; name=string20; address=string;定义了三个字符串类型,最大长度为别是10,20,255。2字符串变量说明字符串变量与简单类型变量说明一样,有两种形式:一是先写字符串类型定义,后用其进行变量说明;二是直接将字符串类型写于变量说明之中。曾上例子可以写出如下的字符串类型变量说明:var class1, class2: class; myname, yourname,hisname: name; heraddress: address; 也可以直接说明:var class1, 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 常数标识符=字符串常数;其中字符串常数是用单引号括起的字符串序列。如:const heading=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的值为9copy(s,w,k)函数 复制s中从w开始的k位字符串s:=123456789;s1:=copy(s,3,5);s1的值是34567val(s,k,code)过程 将字符串s转为数值,存在k中;code是错误代码var s:string;k,code:integer;begins:=1234;val(s,k,code);write(k);k=1234str(i,s)过程 将数值i转为字符串si:=1234;str(i,s);write(s);s=1234Delete(s,w,k)过程 在s中删除从第w位开始的k个字符s := Honest Abe Lincoln;Delete(s,8,4);Writeln(s); Honest Lincoln Insert(s1, S, w)过程 将s1插到s中第w位S := Honest Lincoln;Insert(Abe , S, 8); Honest Abe 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的字符串,将其倒置后输出。4 输入n个整数,请找出最小数所在的位置,并把它与第一个数对调。5 将一个数插入到有序的数列中,插入后数列仍然有序。第五讲 子界、枚举与集合类型主要内容:1、掌握子界、枚举、集合类型的特点和定义;2、能根据不同的实际问题来选择使用不同的数据类型;3、 熟练掌握与这三种数据类型相关的典型例题如筛选法、万年历等;4、 掌握集合的各种运算。Pascal有丰富的数据类型,在程序设计中有特殊而方便的应用。 类型定义的语法格式:type=;=;=;5.1子界与枚举 1.子界类型: 当某些变量的取值范围很具体时,可用子界类型,它更符合实际、便于查错和节省内存。 定义如下: type riqi=1.31; zimu=A.Z; var day:riqi; ch1:zimu; 也可以直接定义: day:1.31; year:0.200; ch1:A.Z; 5.2 枚举类型: 通过预定义列出所有值的标识符来定义一个有序集合,这些值的次序和枚举类型说明中的标识符的次序是一致的。枚举类型的形式:(标识符1,标识符n)例如:type daystype=(sunday,monday,tuesday,wednesday,thursday,friday,saturday)枚举元素只能是标识符,而不能是数值常量或字符常量。例如以下的定义是错误的:type daystype=(sun,mon,tue,wed,thu,fri,sat)枚举元素是标识符,不要把作为枚举元素的标识符视作变量名,它不能被赋值。同一个枚举元素不能出现在两个或两个以上的枚举类型定义中。例如以下的定义是错误的:type daytype1=(monday,tuesday);daytype2=(monday,wednesday);可以将枚举类型的定义和变量的定义结合在一起。例如:var a:(monday,tuesday,sunday)枚举类型属于顺序类型。根据定义类型时各枚举元素的排列顺序确定它们的序列,序列号从0开始。例如:已经定义daystypeord(sunday)=0,succ(sunday)=monday,pred(friday)=thursday但是枚举类型中的第一个元素没有前趋,最后一个元素没有后继。Tur

温馨提示

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

评论

0/150

提交评论