《程序设计提高班培训讲义2572.docx》由会员分享,可在线阅读,更多相关《程序设计提高班培训讲义2572.docx(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、程序设计提高班培训讲义胡苗坤 (20007寒假假)第一讲 顺序结构构程序设计计主要内容:1、 熟练掌握赋赋值语句、输输入输出语语句的用法法2、 掌握顺序结结构程序设设计常用方方法3、 基本运算符符的使用4、常用函函数和过程程一、赋值语语句(:=)格式:变量量名:=表表达式功能:将表表达式的值值计算出来来赋给相应应的变量。 不不管什么计计算机语言言,赋值语语句都是最最基本最常常用的语句句,通过它它给变量赋赋值来进行行各种运算算、处理。如 a:=10*5; a的值为为50a:=a+1;将将a的值增增加1,常常用此语句句来进行计计数s:=s+a; 将s的值值增加a,常常用类似的的累加语句句来进行求求
2、和t:=t*a; 将t的值值变为原来来的a后倍倍,常用类类似的语句句来进行累累乘例题1:交交换两个数数值型变量量a和b的的值分析与算算法选择:要交换两个个变量的值值,可以联联想起现实实世界中交交换两个容容器A和BB中所装的的东西,一一般要先引引进一个空空的容器CC,先将一一个容器(如如A)里的的倒入C,再再将另一个个容器B的的倒入A,最最后将C的的倒入B,从从而实现AA、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
3、; 执行此语语句后a=5,b=3还有其它一一些办法,但但都没有上上面的两种种方法通用用。如可先先乘再除,这这种方法对对于有一个个变量为00的情况就就不正确了了。也可能能会出现除除数为0的的情况。例题2:计计算四个变变量的乘积积分析与算算法选择:一般的计算算,可以直直接用一个个表达式将将运算结果果给一个变变量就行了了。如果变变量的个数数不确定,或或者说变量量的个数很很多,此时时用一个表表达式就不不方便了,可可行的方法法是来一个个就算一个个,直到全全部的都算算好结束。在在后面的循循环中常用用这种方法法。参考程序序:progrram eexampple5_2;var tt:lonngintt; a,
4、b,c,d:inntegeer;beginn writte(EEnterr inttegerr a,bb,c,dd:); readdln(aa,b,cc,d);t:=1;t:=t*a;t:=t*b;t:=t*c;t:=t*d;writeeln(a*b*c*c=,t); end. 补充说明明:累加时,存存放累加值值的变量初初值一般为为0;而累累乘时必须须将相应变变量的初值值赋为1。如如上述程序序中t的初初值为1,如如果没有这这句,系统统默认的初初值为0,那那么乘下来来结果也是是0。二、reaad/reeadlnn 读取数数据格式:reead(变变量)或 reaad(变量量1,变量量2,)read
5、lln(变量量)或 reaadln(变量1,变变量2,)功能:在运运行程序时时读入相应应数据给指指定变量,直直到读入的的数据满足足为止,这这里所说的的满足有两两个方面的的含义,一一是类型的的一致,二二是数据的的满足。Readlln跟readd不同的地地方就是它它执行完后后将到下一一行。例:reaad(a,b,c) ;根据事先定定义的类型型由用户在在运行程序序时输入相相应的数据据给a,bb,c,也也可分开写写成三个rread语语句:reead(aa);reead(bb);reead(cc)。readlln(a,b,c); 与reaad(a,b,c)不同是读读完数据后后另起一行行,如果将将它分为三
6、三个语句rreadlln(a); reeadlnn(b); reaadln(c)执行行时可能读读入的数据据跟原来不不一样,自自己上机去去试试吧!readlln; 空读语句句,一般起起到让程序序运行时停停止由用户户回车后继继续或跨过过一行中其其余的数据据,保证下下一个读语语句从下一一行头一个个数据开始始读取。三、wriite/wwriteeln 输输出语句语句功能:输出指定定表达式的的值。 如wirrte(aa),wrrite(Jiaangshhu); 分别输输出a的值值和Jiaangshhu(1)场宽宽在输出项后后用“:数字”指明输出出的宽度。如writte(5:6),则则输出: 555的前面
7、面有5个空空格,整个个输出项占占6个字符符的位置对于实数类类型的还可可以通过“:数字11:数字22”指明输出出数字的宽宽度和小数数点后的位位数。如:wriite(11.2:110:5) 将输出出: 1.5500000 整个输输出项占110个字符符位置,整整数部分占占4位,小小数点1位位,小数部部分5位,其其中整数部部分不足的的在高位补补空,小数数部分不足足在后面补补0如果指定的的宽度比原原输出项应应有的宽度度小呢?对于整数或或字符等类类型的,将将自动调整整到最小所所要的宽度度,如wrrite(ABCCD:22)仍将输输出ABCCD。对于实数,小小数部分会会取自定的的位数,将将尾部去除除(四舍五
8、五入),并并自动适应应到最少的的宽度。思考:如何对小数数点后指定定位进行四四舍五入?解答:一种方法是是直接指定定输出小数数点后指定定的位数,如如对于变量量a要保留留到小数点点后第三位位并考虑四四舍五入,可可以直接写写为wriite(aa:0:33)。这种种方法跟系系统的设置置有关,也也就是说这这样不能保保证任何时时候都正确确。可以对指定定位加5后后从这位始始截尾。如如要求对实实型变量aa要求精确确到小数点点后两位,对对小数点后后第三位进进行四舍五五入,可以以用这样的的输出语句句writte(a+0.0005:0:2)。一一般来说对对于变量的的处理,可可以先按这这种方法(即即相应位加加5后再去去
9、尾)通过过赋值语句句进行处理理,输出时时不进行处处理,只是是直接输出出就行了。四、wriitelnn跟wirtte的区别别writeeln语句句在输出完完指定内容容后另起一一行,wrrite只只管输出除除非真满一一行后才另另起一行。 空空的wirrtelnn起到一个个输出空行行的作用,如如果它前面面有wriite语句句,则在其其它输出空空行(可能能不满一行行),保证证下一个输输出另起一一行。在程程序中经常常用一个空空的wriitelnn语句起换换行的作用用。五、一个语语句多个输输出项一个wriite或writteln中中可以有多多个输出项项,各项之之间用逗号号间隔。如writte(1,2,3)
10、;它与三个wwritee语句作用用一样:wwritee(1);writte(2);wriite(33);再如 wrritelln(1,2,3); 输出出123后后换行。 与它等等同的分开开写的形式式为:wrrite(1);wwritee(2);writteln(3);练习及作业业:(1) 输输入三角形形的三边,输输出三角形形的面积(假假设这三边边一定能构构成三角形形)。计算三角形形面积的公公式:p:=(aa+b+cc)/2s:=sqqrt(pp*(p-a)*(p-b)*(p-c)(2) 输输入一个三三位整数,逆逆向输出,如如输入1223,输出出为3211,如果个个位数是零零,则输出出二位数,如
11、如:3200,输出为为23。(3) 输输入一个1100000以内的整整数,输出出它的位数数(4) 分分钱游戏:甲、乙、丙丙三人共有有24元钱钱,先由甲甲分钱给乙乙、丙两人人,所分给给的数与各各人已有数数相同;接接着由乙分分给甲、丙丙,分法同同前;再由由丙分钱给给甲、乙,分分法亦同前前。经上述述三次分钱钱之后,每每个人的钱钱数恰好一一样多。求求原先各人人的钱数分分别为多少少?第二讲 分支结构构程序设计计主要内容:1、 掌握复合语语句、基本本IF语句句及CASSE语句语语法格式和和执行过程程;2、 能够根据实实际情灵活活运用IFF语句和CCASE语语句3、掌握IIF语句的的嵌套原则则一复合语语句1
12、为什么么要用复合合语句 在程程序中有时时候要将多多个语句结结合起来作作为一个整整体,象一一个语句一一样来使用用。这时就就要用到复复合语句,用用begiin和end将多多个语句结结合在一起起。2格式:beginn语句1;语句2;语句N;end;说明:eend前的的最后一个个分号可以以不写,也也可以写,相相当于其后后是一个空空语句。其效果跟普普通的语句句一样,也也就是将多多个语句合合并成一个个语句来使使用,特别别是在后面面的条件语语句或循环环语句里执执行的是多多个语句要要像一个语语句一样时时就必须要要使用复合合语句。二条件语语句(iff-tthen-ellse)格式1:一一个分支if 条件件the
13、nn 语句;格式2:两两个分支if 条件件thenn 语句1 eelse 语句2;注意elsse前没有有分号,否否则会出错错。(思考考这是为什什么?)1条件的的描述 在在使用条件件语句时主主要的难点点就是条件件的描述和和满足条件件或不满足足条件时要要执行的语语句的描述述。条件通过布布尔表达式式来描述。 例:条条件语句与与自然语言言描述的对对比(1)iff a11 theen a:=a-11 elsse a:=a+11;如果a大于于1那么将将a的值减减少1,否否则将a的的值增加11(2)iff (ab) aand (bc) theen s:=(a-b)*(b-c);如果a大于于b并且bb大于c,
14、那那么s的值值为(a-b)乘以以(b-cc)(3)iff (a0) oor (bb0) thenn s:=a+b;如果a00或者b00,那么ss的值等于于a+b(4)iff f tthen t:=tt+1; 这里里f为布尔尔型的变量量如果f成立立即等于ttrue,那那么t的值值增加12语句的的选择 满足足条件时执执行什么、不不满足条件件时执行什什么要先搞搞清楚。 当满满足条件时时或不满足足条件时执执行的是多多个语句时时要使用复复合语句的的格式。当当然单个语语句也使用用复合语句句的格式也也不会错,只只不过多此此一举而已已,并不影影响程序的的执行,有有时先这样样写是为了了后来的扩扩充。例:条件语语
15、句与自然然语言描述述if a=A) andd (chh=aa) aand (ch=00) aand (ch=9) theen wrritelln(chh, iis a deciimal digiit.) elsee wriitelnn(ch, iss a sspeciial ccharaacterr.);3使用注注意点当有elsse部分时时它上面的的语句的最最后一行可可以有分号号也可以没没有分号,这这点跟iff-theen-ellse不一一样;caase语句句结构中最最后要有一一个endd作为结尾尾;其中的的语句可以以是单语句句也可以是是复合语句句。练习及作作业:1、输入三三个整数,按按由大到
16、小小的顺序输输出。设三个数为为a,b,cc,一种方方法可以用用条件的并并列,列举举出可能有有的6种情情况。另一一种方法是是用条件的的嵌套,从从而输出结结果。2编写程程序输入年年份和月份份,输出这这个月的天天数。3编一个个随机产生生一个1000以内的的四则运算算题,要求求先输出这这个四则运运算的式子子,这个四四则运算的的式子要能能确保第一一个数不小小于第二个个数,如果果是除法的的话要能确确保能够整整除,然后后让用户输输入结果,如如果输入的的结果正确确则输出“Righht!”否则输出出“Erroor!”。分析与提提示: 用随随机函数来来产生四则则运算的操操作数和操操作符,其其中操作数数都是1000
17、以内的的整数,所所以可以直直接用raandomm(1000)就行了了,如果第第一个数比比第二个数数小则交换换两个数。而而操作符(运运算符)只只有四种可可能,因此此先用随机机函数产生生出0-33间的数,再再根据产生生的是什么么数来确定定是“+、-、*、/”。其中对对于除法运运算要考虑虑除数不能能为0,再再要考虑能能整除,所所以先进行行整除运算算,得到一一个结果,再再将第一个个数变为除除数乘以商商。4编程输输入三角形形的三条边边长,输出出三角形的的面积,如如果不能构构成三角形形输出错误误信息。5.期末来来临了,班班长小Q决决定将剩余余班会费,用用于购买若若干支钢笔笔奖励给一一引起学习习好、表现现好
18、的同学学。已知商商店里有三三种钢笔,它它们的单价价为6元、55元和4元元。小Q想想买尽量多多的笔(鼓鼓励尽量多多的同学),同同时他又不不想有剩余余钱。请你你编写一程程序,帮小小Q制订出出一种买笔笔的方案。6.编写一一个评分程程序,接受受用户输入入10位选选手的得分分(010分),然然后去掉一一个最高分分和一个最最低分,求求出某选手手的最后得得分(平均均分)。第三讲 循环结构构的程序设设计主要内容:1、 掌握三种循循环语句的的格式和执执行过程;2、 掌握三种循循环语句的的异同,能能够根据实实际情况灵灵活运用循循环语句;3、 掌握累加器器和累乘器器和计数器器;4、 掌握多重循循环及循环环的嵌套;5
19、、 熟练运用循循环语句解解各种实际际问题,如如打印图形形、判断素素数等常用用算法。许多处理过过程中有连连续的重复复,这时候候如果还是是一句句地地重复写的的话,既麻麻烦又累赘赘,当要重重复成千上上万次时,这这种重复的的书写几乎乎是不可能能实现的。直直接简便的的方法是用用循环语句句来实现循循环。一Whiile语句句(当型循循环)1格式:whilee 布尔表表达式 ddo 语句句;2说明:格式中whhile和和do都是保保留字,布布尔表达式式表示条件件,它的描描述跟条件件语句里的的条件描述述是一样的的。Do后面的的语句可以以是单一语语句也可以以是复合语语句,称为为循环体。只只要布尔表表达式成立立时(
20、即值值为TRUUE时)就就执行循环环体,如此此反复直到到布尔表达达式不成立立(值为FFALSEE)时停止止。如果一一开始就为为布尔表达达式就不成成立(值为为FALSSE),那那么循环体体一次也不不执行。例31用用当循环计计算1+22+3+1000分析:此类题也也称累加,设设最后结果果放入变量量S中,设设计一指针针I,让II从1开始始递增,并并累加到SS中,当II的值等于于100时时,循环结结束。Var S,I:inteeger;BeginnS:=00;I:=1;Whille I0) and (j0) and (jii) doo j:=j+1; iff _(22)_ theen beginn w
21、ritee(_(3)_:5); _(4)_; end endd; wriitelnn; wriitelnn(Coount=,n);end.二、编写程程序题1. 输出下图所所示的图形形* * * * * * * * * * * * * * * * * * * * *2编写输输出“右三角的的九九乘法法表”的程序: 1 2 33 4 5 6 77 8 9 4 66 8 10 112 144 16 18 99 12 15 118 211 24 27 16 20 224 288 32 36 25 330 355 40 45 336 422 48 54 499 56 63 64 72 813找出1100以
22、内内所有被22、3、55除余数为为1的整数数4求出11009999内所所有的水仙仙花数,所所谓水仙花花数是该数数等于它各各位上的数数的立方和和。例:1153=113+33+535.求1100内内所有的素素数6. 要将将一张1000元的钞钞票换成等等值的100元、5元元、2元、11元的小钞钞票,要求求每次换成成40张小小钞票,每每种至少一一张,编程程输出所有有可能的换换法,程序序应适当考考虑减少重重复次数。7. 四个个学生上地地理课,回回答我国四四大淡水湖湖大小时这这样说:甲:“最大大洞庭湖,最最小洪泽湖湖,鄱阳湖湖第三。”乙:“最大大洪泽湖,最最小洞庭湖湖,鄱阳湖湖第二,太太湖第三。”丙:“最
23、小小洪泽湖,洞洞庭湖第三三。”丁:“最大大鄱阳湖,最最小太湖,洪洪泽湖第二二,洞庭湖湖第三。”对于每个湖湖的大小,每每个学生仅仅答对一个个,请编程程确定四个个湖的大小小。8. 谁是是小偷?问问题:警察察局抓了44名嫌疑犯犯:A,BB,C,DD,其中一一人是小偷偷,审问中中A说:“我不是小小偷。” B说:“C是小偷偷。”C说:“小偷肯定定是D。”D说:“C冤枉人人。”,现已知知四人中三三人说的是是真话,一一人说的是是假话。问问到底谁是是小偷?9. 求二二个正整数数的最小公公倍数和最最大公约数数第四讲 数组和字字符串主要内容:1、 掌握数组类类型的定义义及基本操操作;2、 掌握字符串串类型的定定义
24、及常用用函数过程程的操作;3、 熟练掌握通通过数组来来实现常见见的排序、查查找算法;4、 熟练掌握通通过字符串串来解决各各种实际问问题如加解解密,查找找子串等。Turboo-passcal的的数据类型型分为三种种类型:简简单类型、构构造类型、指指针类型。前前面介绍的的整型、实实型、布尔尔型以及枚枚举类型等等都是简单单类型,而而构造类型型有字符串串、数组、记记录、集合合、文件类类型。描述述一个构造造类型特征征的是其成成分的类型型和它的构构造方法。因因此对于构构造类型,主主要去考虑虑如何构造造即其构造造方法。指指针类型是是一种特殊殊的数据类类型,它涉涉及到动态态存储分配配。一、数组 在代代数上我们
25、们常常这样样写:a11,a2.ai.a1000(0i1001),通通过i来指指明具体的的ai,如ii=10时时代表a110,在passcal语语言里我们们也希望能能够类似地地描述。从从前面的变变量名里我我们已经知知道,a11,a2.ai彼彼此之间是是相互独立立的,并没没有必然的的联系。如如要象代数数上那样,可可以使用数数组。数组其实是是一组相同同值类型的的变量的集集合,这些些变量共用用一个名,彼彼此之间通通过下标来来区别。如如定义了数数组a,它它的下标可可以从1到到100,那那么就可以以直接通过过ai来指明第第i个量,如如i=100,aii指的是aa10。1数组的的说明 可以先先通过 ttyp
26、e 标识符=arraay下标标范围 of 值类类型;然后再在变变量说明里里引用。 如:ttype arraay1=aarrayy1.100 of inteeger;var aa,b:aarrayy1;也可以直接接在变量说说明里说明明:变量名:aarrayy下标范范围 oof 值类类型; 如:vvar aa,b:aarrayy1.100 of inteeger; 描述下下标范围一一般通过离离散(有序序)类型,如如从一个整整数到另一一个整数,或或者从一个个字符到另另一个字符符等。如:var a:arrray-5.5 oof inntegeer;c:arrray11.200 off chaar;d:
27、arrraya.z of inteeger;2数组的的使用刚才我们已已从代数上上使用说明明了数组使使用的优点点,特别是是要保存的的量比较多多且这些量量之间又有有某种联系系。如要将将若干数重重新根据由由大到小或或由小到大大的顺序排排序时,这这些数都是是要保留的的,只是位位置换了而而已,此时时用数组变变可以实现现。后面我我们会专门门介绍排序序的算法的的。(1)数组组元素的输输入:数组名代表表的并不是是一个变量量,而是一一批变量,因因而,不能能直接整个个数组读入入,而是要要逐个数组组元素读入入,通常用用循环结构构来完成这这一功能。下下面是几个个常用输入入数组元素素的例子:for ii:=1 to 1
28、10 doo reaad(ai); 从键盘盘读入数组组元素的值值;最常用用的方法for ii:=1 to 110 doo aii:=ii;数组元素素a1到a110的值值分别为11到10;数据赋初初值for ii:=1 to 110 doo aii:=00;数组元素素清0;最最常用的数数据初始化化的方法for ii:=1 to 110 doo aii:=rrandoom(1000);随机产生生10个1100以内内的数,赋赋给各数组组元素(2)数组组元素的输输出:和和数组元素素的输入相相同,数组组元素的输输出也不能能由一个wwritee语句直接接完成。同同样要逐个个数组元素素输出。通通常也用循循环
29、结构来来完成这一一功能:for ii:=1 to 110 doo wriite(aai, );数组组元素之间间用空格分分隔writeeln;3.二维数数组 一维数组在在编程中多多用于描述述线性的关关系:如一一组数;一一组成绩;一组解答答等。数组组元素只有有一个下标标,表明该该元素在数数组中的位位置。二维维数组在编编程中多数数用于描述述二维的关关系:如地地图、棋盘盘、城市街街道、迷宫宫等等。而而二维数组组元素有两两个下标:第一个下下标表示该该元素在第第几行,第第二个下标标表示在第第几列。 (1).二二维数组的的定义:varaa:arrray11.100,1.5 oof inntegeer; 其中
30、:aa是数组名名,由程序序员自定;arraay和off是定义数数组的保留留字;(这这两点和一一维数组定定义的格式式一样)中中括号中的的两个范围围表示二维维数组共有有多少行、多多少列(第第一个范围围表示行数数,第二个个范围表示示列数);最后一个个表示数组组元素的类类型,规定定和一维数数组一样。如如上例,定定义了一个个二维数组组a,共有有10行55列。(2).使使用二维数数组: 1、数组组元素的指指称:数组组名行号号,列号。如第三三行第四个个元素:aa3,44。 对某一行行进行处理理。如累加加第4行的的数据。则则固定行号号为4。如如:forr i:=1 too 5 ddo s:=s+aa4,ii;
31、对对某一列进进行处理。如如累加第44列的数据据。则固定定列号为44。如:ffor ii:=1 to 110 doo s:=s+ai,4;22、二维数数组的输入入输出要用用双重循环环来控制:for ii:=1 to 110 doo控制行行数beginnffor jj:=1 to 55 do readd(aii,j)第一行行读入5个个元素 readdln;读入一个个换行符end;最常用的的方法:从从键盘读入入数据初始始化二维数数组for ii:=1 to 110 doo for j:=11 to 5 doo aii,j:=0;最常用的的方法:将将二维数组组清0for ii:=1 to 110 do
32、obeginn for j:=11 to 5 doo wriite(aai,jj:4); writteln;end;最常用的的输出方法法:按矩阵阵形式输出出二维数组组的值 例:竞赛小小组共有220位同学学,这学期期每位同学学共参与了了三项比赛赛,请统计计每位同学学的平均分分。分析:定义义一个200行3列的的二维数组组来存放这这些成绩。定定义一个220个元素素的一维数数组来存放放平均分。progrram pp1;varaa:arrray 1.220,1.3 of iintegger; b:arrray 1.20 of rreal; i,j:inteeger;beginn for i:=11 to 20 ddo begiin for j:=11 to 3 doo reaad(ai,j); readdln;