




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章 算法和算法的描述11 用计算机解决问题的过程 1742年6月7日,德国数学家哥德巴赫(C.Goldbach)提出了一个大胆的数学猜想:任何一个偶数(6)均可表示两个素数(质数)之和,简称:“l1”,这一猜想这就是数学史上著名的“哥德巴赫猜想”。两百多年来,“哥德巴赫猜想”吸引了世界上众多的数学家研究,但始终没有结果,它已成为世界数学界一大悬案。目前的最佳结果是中国数学家陈景润于1966年的证明。他运用新的方法,在一间六平方米的小屋里,借助一盏昏暗的煤油灯,用一支笔,耗去了几麻袋的草稿纸,攻克了世界著名数学难题“哥德巴赫猜想”中的“1+2”,即证明了“任何一个充分大的偶数都是一个素数及一个不超过两个素数的乘积之和”,称为陈氏定理(Chens Theorem)。他创造了距摘取这颗数论皇冠上的明珠“1+1”只是一步之遥的辉煌,在“哥德巴赫猜想”的研究上居世界领先地位。在数学课程中已经学习素数就是满足这样条件的整数:它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,如果来判断123456791是否为素数?就需要验证从2到123456790之中是否有123456791的约数,如果没有,则为素数,反之则为合数,相信这是一件十分繁琐的工作。而如果使用算法与程序设计的知识,设计出解决此问题的算法并编制好程序,那么此项工作将会变得十分容易。运行程序后输入相应数据,立即就能得出结果。一般来说,使用计算机来解决问题经过以下几个步骤:一、分析问题分析问题阶段的目的是确定用计算机“做什么”。在日常生活中会遇到各种各样的问题,许多问题可以使用计算机来解决,例如,编制一份小报、统计比赛成绩、“沉鱼落雁闭月羞花”是形容我国古代哪四位美女、求解一元二次方程ax2+bx+c=0的实数根、公交换乘等问题,但是还存在另外一些问题是无法用计算机来解决的,如:求解哥德巴赫猜想、求证3x+1问题等。对于上述例子,可以分析得出:判断一个整数是否为素数的问题就是要去寻找除了1和它自己之外,还是否存在其它因子,如果不存在,那么它就是素数,反之,它就是合数。二、确定算法在这个阶段的目的是解决计算机“怎么做”的问题,也就是算法。计算机在人类智慧指引下,能够解决的问题可以分为三类:使用现有工具软件可以解决的问题。例如编制一份小报可以用Word软件、统计比赛成绩可以用Excel软件、可以利用网络搜索寻找“沉鱼落雁闭月羞花”的答案等;现有工具软件不能直接解决,需要编写程序就可以解决的问题。例如求解一元二次方程ax2+bx+c=0的实数根、判断一个整数是否为质数等;现有工具软件不能直接解决,通过编写程序,也不能直接解决的问题。例如天气预报、机器翻译、博弈问题等。对于上述例子,通过分析可以得到:判断一个整数N是否为素数的方法就是对从2之间的整数逐一进行判断,判断是否为整数的因子。如果一个也不存在,则整数就是素数,否则就是合数。因为根据合数的条件可以知道,整数可以分解因子AB,则,中必有一个满足条件小于等于。三、设计步骤根据找到的方法,需要设计更详细的步骤,以便根据这些步骤能够方便编写程序。下面采用自然语言的方法来描述判断一个整数是否为素数的详细步骤:1)输入整数的值;2)将的值置为;3)将的值置为;4)判断?,条件成立执行下一步,否则搜索结束跳转至第步;5)判断能否整除,若能整除,即找到因子,跳转第步;6)的值增加,跳转至第4步;7)判断?,条件成立输出结果“是素数”,否则输出结果是“合数”。四、编程求解在确定好算法后,就可以选择一种程序设计语言来实现。将算法表示成程序,得出最终结果就是程序设计的过程。课堂实践1运行判断素数的程序。2一个农夫带着一条狼、一头山羊和一篮蔬菜要过河,但只有一条小船。乘船时,农夫只能带一样东西,当农夫在场时,这三样东西相安无事,一旦农夫不在,狼会吃羊,羊会吃菜。请列出一种方法,使农夫能安全地将这三样东西带过河。运行“农夫过河”程序,并尝试写出解决问题的步骤。3传教士与野人过河问题。有3个野人和3个传教士分别在河的两岸,需要过河。现在有一艘小船,最多能容两人,在渡河时,无论是在左岸还是右岸,如果野人的数目超过传教士的数目,野人就会吃掉传教士。问怎样才能安全渡河?运行“传教士与野人过河”程序,并尝试写出解决问题的步骤。12 算法和算法的描述在数学课上,小明遇到了这样一个问题:“有一根长度为L厘米的铜丝,制作一个面积为S平方厘米的矩形框,请问矩形框的长H和宽W分别是多少?”这是一个一元二次方程的应用问题。根据已知条件可以写出式子:L=2(H+W) S=HW 由式子可得S=H(-H),即H2-H+S=0,然后使用消元法求得H,再求出W。在数学课程上,已经了解使用消元法来求解一元二次方程形如ax2+bx+c=0的实数根的具体步骤可以描述如下:1) 输入方程系数a,b,c;2) 计算d=b24ac;3) 判断d0?,如果条件成立,输出“方程无实数根”并跳转至第7步;4) 根据公式计算方程的其中一根X1=;5) 根据公式计算方程的另一根X2=;6) 输出方程的根X1,X2的值;7) 结束;一、什么是算法以上这些具体步骤描述了“怎么做”的过程,就是算法(Algorithm)。算法”一词最早起源于公元9世纪的阿拉伯,有一位名叫花拉子米的阿拉伯数学家,在他的一生中发现了很多求解算术问题的算法,并撰写了合并与回代一书,合并与回代这两个词是指解方程时所用的两个主要过程,后来被人们简称为“代数学”。也就是说,任何解决问题的过程都是由一定的步骤组成的,把解决问题确定的方法和有限的步骤称作为算法。当代著名计算机科学家D.E.Knuth在他撰写的The art of computer programming一书中写到:“一个算法,就是一个有穷规则的集合,其中之规则规定了一个解决某一特定类型的问题的运算序列。”简单地说,就是对于问题的任何初始输入值,它都能机械地一步一步地执行计算,经过有限步骤后终止计算并产生输出结果。二、算法的特征归纳起来,算法具有以下基本特征:(1)有穷性:一个算法必须在执行有限个操作步骤后终止。也就是说操作步骤不能是无限的,在求解一元二次方程中,最多需要7个操作步骤。算法中可以有重复的操作,但经过有限次重复之后必须要终止。如果一个算法的操作步骤用目前的计算机需要经过几年甚至几十年才能得到结果,即使这种算法是正确的,但它没有实际意义,也不是一个有效的算法。(2)确定性:算法中每一步的含义必须是确切的,而不能是歧义的。例如:在执行第2步计算d=b24ac时,a,b,c的值需要已知,否则计算的结果是不可预测的。(3)能行性:算法中的每一步操作都应该能够有效执行,例如,在方程的其中一根时,d必须大于等于0,同时a也不能为0,否则操作就会出错,也是无效的。 (4) 有0个或多个输入:所谓输入是指在算法在执行时需要获得的外部数据。例如,判断质数问题需要中有1个输入,即需要判断的数据,而求解一元二次方程中则需要输入3个初始数据,系数a,b,c,而有些特殊算法也可以没有输入。(5)有1个或多个输出:即与输入有某种特定关系的量。在一个完整的算法中至少会有一个输出,没有输出的算法是毫无意义的。例如:判断素数问题就有一个输出,而一元二次方程求解可能有1个输出(方程无实根),也可能有2个输出(方程的根X1,X2)。三、算法的描述一个算法可以用多种不同的方法来描述,通常有自然语言、流程图、伪代码、N-S图、PAD图、程序语言等。流程图、N-S图和PAD图都是表示算法的图形工具,其中流程图具有直观性强、便于阅读等特点,具有程序无法取代的作用,N-S图和PAD图符合结构化程序设计要求,伪代码是一种非常接近计算机编程语言的描述方法。本书主要介绍和使用流程图表示算法。在流程图描述算法时,使用一组图形符号来表示算法(如右图所示)。例如,用流程图来描述求解一元二次方程的算法d,=,=,=,其他符号::=() .;:,.二、保留字(关键字)所谓保留字是指在Pascal语言中具有特定的含义的单词,你必须了解它的含义,以便于正确的使用,否则会造成错误。标准Pascal语言中的保留字一共有35个,Free Pascal语言的保留字更多。and,asm,array,begin,case,const,constructor,destructor,div,do,downto,else,end,exports,file,for,function,goto,if,implementation,in,inherited,inline,interface,label,library,mod,nil,not,object,of,or,packed,procedure,program,record,repeat,set,shl,shr,string,then,to,type,unit,until,uses,var,while,with,xor三、标识符(1)标识符的定义:标识符就是以字母开头的字母数字序列,并且大小写等效。可以用来标识常量、变量、程序、函数等。如例1中的ch11(程序名),pi(符号常量),s、r(变量名)都是标识符。(2)标识符的分类:a.标准标识符:指Pascal语言预先定义的标识符,具有特殊含义。下表列举了Turbo Pascal 7.0部分常用的标准标识符:标准常量FalseTrueMaxintMaxlongint标准类型BooleanCharShortintIntegerLongintByteWordRealSingleDoubleExtendedComp标准函数AbsArctanChrCosEofEolnExpLnOddOrdPredRoundSinSqrSqrtSuccTrunc标准过程DisposeGetNewPackPagePutReadReadlnResetRewriteUnpackWriteWriteln标准文件InputOutputb.用户自定义标识符:由你根据需要来定义。(1)选用的标识符不能和保留字相同。(2)语法上允许预先定义的标准标识符作为你定义的标识符使用。223 数据类型数据是程序设计的一个重要内容,其重要特征-数据类型,确定了该数据的含义、取值范围以及所能参与的运算。Free Pascal提供了丰富的数据类型,这些数据类型可以分为三大类:简单类型、构造类型和指针类型,其中简单类型可以分为标准类型(整型、实型、字符型和布尔型)和自定义类型(枚举型和子界型),构造类型可以分为数组类型、集合类型、记录类型和文件类型。这些数据类型中除了指针类型是动态数据类型外,其他的都是静态数据类型。在这些数据类型中简单类型都是有序类型,除了实型以外的简单类型都是顺序类型,所谓顺序类型就是他们的值不仅是有序的而且是有顺序号。在这里主要介绍整型、实型、字符型和布尔型四种常用的数据类型。1整型一个整型数据用来存放整数。Free Pascal支持五种预定义整型,它们是shortint(短整型)、 integer(整型)、 longint(长整型)、 byte(字节型)和 word(字类型),Free Pascal分别用相同的名字作为他们的标识符。每一种类型规定了相应的整数取值范围以及所占用的内存字节数类型数值范围占字节数格式Shortint-128.1271带符号8位Integer-32768.327672带符号16位Longint-2147483648.21474836474带符号32位Byte0.2551无符号8位Word0.655352无符号16位Free Pascal规定了两个预定义整型常量标识符Maxint和Maxlongint,他们各表示确定的常数值,Maxint为32767,Maxlongint为2147483647,他们的类型分别是integer 和longint。Free Pascal的整型可以进行如下运算:(1)算术运算:,* ,DIV,MOD,它们分别表示加、减、乘、整除、取余。整除表示取两个整数相除以后的整数部分,取余表示取两个整数相除以后的余数。例如:5 DIV 2 = 2 -5 DIV 2 = -2 5 DIV 2 = -2 5 MOD 2 = 1 -5 MOD 2 = -1 5 MOD 2 = 1在判断一个数是否能被B整除时,可以看A MOD B是否等于0。(2) 整数比较,包括、=、=、=、,分别表示大于、大于等于、小于、小于等于、等于、不等于。(3) 相关函数函数名说明示例pred(x)求x的前驱,也就是前一个pred(6)=5succ(x)求x的后继,也就是后一个succ(6)=7abs(x)取x的绝对值abs(-5)=5sqr(x)求x的平方sqr(-5)=25odd(x)奇函数,当x为奇数时取TRUE,否则取FALSEodd(4)=FALSE2实型一个实型数据用来存放实数。Free Pascal支持五种预定义实型,它们是real(基本实型)、 single(单精度实型)、double(双精度实型)、extended(扩展实型)、comp(装配实型,实际为64位二进制整数),Free Pascal分别用相同的名字作为它们的标识符。每一种类型规定了相应的实数取值范围、所占用的内存字节数以及它们所能达到的精度。类型数值范围占字节数有效位数Real2.9*10-39 1.7*103861112Single1.5*10-45 3.4*1038478Double5.0*10-324 1.7*1030881516Extended3.4*10-4932 1.1*104932101920Comp-263 +1 263-181920表2-4Free Pascal语言可以对实型进行如下运算:(1) 算术运算:+、-、*、/,它们分别表示加、减、乘、除。(2) 实数比较,、=、=、=、,它们分别表示大于、大于等于、小于、小于等于、等于、不等于。(3) 相关函数函数名说明示例abs(x)取x的绝对值abs(-5)=5sqr(x)求x的平方sqr(-5)=25sqrt(x)求x的平方根sqrt(25)=5int(x)返回x的整数部分,结果为实型Int(123.56)= 123frac(x)返回x的小数部分frac(123.56)=0.56trunc(x)截取x的整数部分,结果为长整型trunc(123.56)= 123round(x)对x进行四舍五入,结果为长整型round(123.56)=124sin(x)正弦函数,x为弧度数sin(1)=0.845cos(x)余弦函数,x为弧度数cos(1)=0.540arctan(x)反正切函数,返回值为弧度数arctan(1)=0.784exp(x)求x的自然指数,exexp(1)=2.718282ln(x)求x的自然对数ln(1)=0random(x)随机函数:无自变量时,函数值取(0,1)间的随机小数;x为WORD型时,取(0,x)之间的随机整数;在调用随机函数之前,可以用randomize过程进行初始化,生成一个随机序列。3字符型字符型用char进行定义。字符型必须用单引号括起来,Free Pascal支持扩展的ASCII码,共256个字符。它们的位置为0255,这对应于字符的序号。字符的大小比较按它们的位置前后进行。位置在后的字符大于位置在前的字符。在扩展的ASCII码中,有些字符为不可见字符。Free Pascal语言可以对字符型进行如下运算:(1) 字符比较,严格按位置大小(即ASCII码)进行,如aA(2) 相关函数函数名说明示例pred(x)求x的前驱,也就是前一个pred(y)=xsucc(x)求x的后继,也就是后一个succ(y)=z ord(x)求x字符对应的序号(或ASCII码)ord(A)=65chr(x)求x序号(ASCII码)对应的字符chr(65)=Aupcase(x)使小写英文字母x变为大写upcase(a) =A4布尔型布尔型用boolean进行定义。一个布尔型数据用来存放逻辑值(布尔值)。布尔型的值只有两个:false和true,并且false的序号是0,true的序号是1。false 和true都是预定义常数标识符,分别表示逻辑假和逻辑真。并且truefalse。224常量和变量1常量定义Pascal中定义常量的语法格式是:CONST =; =;例如,有以下常量标识符的定义:CONSTn=100;r=2.5;ch=*;str=Hangzhou;flag=True;常量标识符的类型由定义它的常量的类型决定。如n=100说明n是整型;r=2.5说明r是实型;ch=*说明ch是字符型;str=Hangzhou说明str是字符串型;flag=True说明flag是布尔型。2变量定义变量说明部分的语法格式是:VAR :; :;225表达式Pascal表达式代表一个值,而根据这个值的类型可以把表达式分为算术表达式、字符表达式、布尔表达式和集合表达式。一般来说,除集合表达式外,表达式是由常量、变量、函数、运算符和圆括号组成的有意义的式子。(1)算术表达式:算术表达式是由算术运算符连接常量、变量、函数的式子。下表列出了各种算术运算符。其中各个运算符的优先次序为:( ),函数,*、/、div、mod,+、-。运算符运算运算对象结果类型+加整型、实型整型运算时结果为整型,实型运算时结果为实型-减整型、实型*乘整型、实型/除整型、实型实型Div整除整型整型Mod取余整型整型(2)布尔表达式:Free Pascal提供给布尔表达式以下基本操作:逻辑运算和关系运算。它的结果为布尔类型。关系运算提供了两个值的比较。从上节我们可以看到,所有的简单类型都能够进行、=、=、=、运算,比较的结果有成立和不成立两种结果,成立时结果为True,不成立时结果为False,因此关系运算的结果为布尔型量。 逻辑运算是对逻辑值进行的运算,因此它的运算对象为布尔型量。Free Pascal提供的逻辑运算符号有not、and、or、xor,其含义分别为非、与、或、异或。其运算结果见如下真值表:运算符not AA and BA or BA xor BABTrueTrueFalseTrueTrueFalseTrueFalseFalseFalseTrueTrueFalseTrueTrueFalseTrueTrueFalseFalseTrueFalseFalseFalsenot:逻辑非,一元运算,表示“取反”,原值为真,取反为假;原值为假,取反为真。and:逻辑与,二元运算,表示“并且”。两值全为真则为真,否则为假。or:逻辑或,二元运算,表示“或者”。有一值为真则为真,否则为假。xor:逻辑异或,二元运算,两值不同则为真,否则为假。例如:当x=10,y=20,z=5时,下述表达式的逻辑值为真。(xy) and (y mod z=0) or (xy) and (x mod z =0)在写Pascal表达式时,要注意以下几点:(1)所有表达式必须以线性形式写出,因此分子、分母、指数、下标等都必须写在同一行上。(2)只能使用合法的标识符。(3)乘号必须用符号“*”明确地指出,不得省略。(4)函数的自变量可以是任意表达式,而且函数的自变量一定要写在括号中。(5)为了指定运算的次序可以利用括号,括号必须成对出现,而且不得使用方括号及花括号。(6)表达式有一定的优先运算等级: (a)括号内的表达式优先计算; (b)同一表达式中的运算符按以下优先顺序计算:函数NOTAND,*,/,DIV,MODOR,+,-=,= (c)同一表达式中,相同优先级的运算按从左到右的次序进行。课堂实践1、叙述标识符的定义。指出下列用户自定义的标识符哪些是非法的?为什么?Xyz Name1 4ab end ABS b(3) m+n class one2、下列数据哪些是整数类型?哪些是实数类型?哪些是非法的?101 10.32 1.67E+8 8. 3E+0.6 0.7E3345600 0.075E-32 234.001 E+123、下列哪些是合法的常量定义:ConstBook=45;Blank=;Ch:name;-x=31;m=7;n=m+12;f=false;y=8-x;v=60;4、下列变量说明哪些是不正确的?为什么?(1) VarA,b,c:integer;Bookname,b,y:char;X,y:real;(2) Var x1,x2,x3:integer;a,b,tel:character;m;n:bool;5、求出下列表达式的值(数值或逻辑值)(1)13*6*8 div 3 (2) 5/4*2.5/1.25*(4+6)(3)24 div 4*sqr(6.0)/3.6 (4)28 div 4 mod 3*trunc(3.674)(5)12 mod 5*ord(succ(N) div 3 ord(True)(6)98 div 12/ ord(pred(F)*Trunc(2.45+3.6*4)*round(23.56*3-6.75)(7)2312 (8)(Ab) Or (Succ(E)=F)(9)Pred(True)=False (10)Succ(5)=56、将下列代数式改写成Pascal表达式。(1)(x+y)(x-y) (2)Log10(m+4*n) (3)b2-4ac(4)a3b+ab3 (5)5sin(x)-3cos(y)第三章 顺序结构程序设计例1:写一个程序,计算并输出长方体的体积和面积。讨论:首先应分析和了解这个问题,并标识问题的输入和输出数据。然后确定如何从输入数据得到输出数据的算法。该问题要求计算并输出长方体的体积和面积,显然体积和面积是该问题的两个输出项,而为了得到这两个输出项,必须首先输入长方体的长、宽、高这三个值,也就是该问题的输入项。用L,W,H标识三个输入数据,其值由读语句输入;用S,V标识面积和体积,这是需要通过程序计37算得到的结果。接下来是为问题的解决构造算法,构造算法的基本方法是自顶向下逐步求精。对于上面这个例题我们可以这样进行:构造一级算法:1读数据到变量L,W,H中,并在屏幕上写出这些数据。2计算出长方体的面积。3计算出长方体的体积。4输出变量S和V的值。程序如下:program ch31;var l,w,h,s,v:real;begin read(l,w,h); write(l,w,h); s:=2*(l*w+w*h+h*l); v:=l*w*h; write(s,v)end.为了使程序便于阅读、维护和修改,养成良好的程序设计风格是很必要的,好的程序设计风格应遵循以下几点:1) 使用结构化程序设计思想编程。2) 常量和变量的命名,用有含义的英文单词。3) 书写程序采用缩进格式,使程序有层次感。4) 在程序中书写注释,在程序的输入输出上有清晰的提示信息。赋值语句赋值语句是程序中用得最多的基本语句,它的格式为::=其中:=是赋值号,在书写时要注意中间不能加空格。赋值号的左边是存储单元的名字,赋值的时候先计算出赋值号右边的表达式的结果,然后将这个结果存入变量名所对应的那个存储单元内。使用赋值语句时需要注意以下几点:(1)对于任何一个变量必须首先赋值,然后才能引用,否则,未赋初值的变量将以一个随机值参与运算。(2) 赋值号两边的类型必须相同,但表达式值为整数时,它可自动化为实型后赋给实型变量,即符合赋值相容性原理。输入语句(Read/Readln)前面我们讲到的赋值语句是在程序中对变量进行赋值,事实上在Pascal中除了用这个方法对变量赋值外,我们还可以将数据通过输入设备(键盘)输入到计算机中,从而实现在程序运行过程中由用户进行交互操作,这个语句就是输入语句Read和Readln。Read(Readln)语句的格式为:Read();或 readln(); 对于Read(Readln)语句的使用做以下说明:(1)变量名表是一个或几个由逗号隔开的变量标识符,它们必须在程序说明部分预先说明,它们可以是整型、实型或字符型,布尔型不可以直接读入。(2)建议不要将字符型变量与整型和实型变量一起放在一个输入语句中使用,Pascal将很难将它们分隔开来读入。(3)输入语句输入的数据类型必须和变量一一对应。如果输入的是一串整数或实数,数据间用空格或回车分隔;若输入的是一串字符,则不用分隔。(4)Readln语句和Read语句不同之处在于输入数据到各变量之后,Readln自动换行,从下一行开始再输入数据。一个Read语句执行完后,数据行中多余的未读数据可以被下一个输入语句读入;而一个Readln执行完后,数据行中多余未读数据就没有用了。例如a,b,c为整型变量,Read(a,b);read(c)之后键盘输入:20 30 40 表示回车结果: a=20,b=30,c=40而如果执行Readln(a,b);readln(c)后,同样的输入将得到以下结果:a=20, b=30, c为随机值(4) Readln语句中可以不包含变量名表。即有以下等价情况:Read(a,b);Readln等价于Readln(a,b)输出语句(Write/Writeln)输出是将计算机内存中的数据送到外部设备(屏幕或磁盘文件)的过程。有关文件输出的方法我们在讲到文件类型时再做介绍,目前介绍的是屏幕输出Write和Writeln语句。Write和Writeln语句的格式为:write() 或者 writeln()输出语句的使用要注意以下几点:(1)输出项是一串用逗号分隔的常量、变量、函数名、表达式或字符串。如果是变量、函数名、表达式,则将其计算结果输出;如果是常量或字符串,则直接输出其值。(2)Write和Writeln的区别在于:Write语句是输出项输出后不换行,光标停留在最后一项后;Writeln语句按项输出后自动换行,光标则停留在下一行的开始位置。(3)Writeln语句允许不含有输出项,即仅Writeln;表示换行。Pascal语言把输出项的数据显示占用的宽度称为域宽,你可以根据输出格式的要求在输出语句中自动定义每个输出项的宽度。定义宽度时分为单域宽和双域宽,下面我们看看其输出格式。1、基本输出格式writeln(x)将x的值直接输出,如果x为实数,则按科学计数法的形式输出。2、单域宽输出格式writeln(x:n)在n(n为整数)个字符宽的输出域上按右对齐方式输出x的值,若n大于x的实际位数,则在x值前面补(n-x的实际位数)个空格。若x的实际位数大于n,则自动突破限制。3、双域宽输出格式writeln(x:m:n)双域宽主要用于实型数据的输出,其中m的用法同单域宽输出。在m个字符宽的输出域上按右对齐方式用小数点形式输出x的数值,n是小数点后的位数。原来的数据按该格式指定的小数位数四舍五入。若n=0 ,则不输出小数部分和小数点,原数据四舍五入取整。n、m必须是整数。例2 输出两个自然数相除的商和余数。解:设被除数、除数、商和余数,分别为A,B,C,D,均为变量,且都是整数类型。题中未给出具体的自然数A、B,可采用键盘输入方式。 给出提示,从键盘输入a, b; 显示两数相除的数学形式; 求出a除以b的商c; 求出a除以b的余数d; 紧接等式后面输出显示商和余数。Pascal程序: Program ch32; Var a,b,c,d : integer; Begin Write(INPUT A,B:); 给出提示信息 Readln(a,b); 输入a,b Writeln; 输出一空行 Write(a,/,b,=); 输出等式之后不换行 c:=a div b; 整除运算,取商的整数部分 d:=a mod b; 相除求余运算,取商的余数部分 Writeln(C,d); 输出后自动换行 Readln 等待输入回车键 End.例3 求一元二次方程x2+3x+2=0的两个实数根。解:方程的系数是常量,分别用a,b,c表示,可运用数学上现成的求根公式求方程的根,采取如下方法: 先求出d=b2-4ac;(求根公式中需用开方运算的那部分) 再用求根公式算出x1,x2的值。(x1,x2 = ? ) 输出x1,x2. Pascal程序: program ch33; 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.例4 分钱游戏。甲、乙、丙三人共有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 (=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年8月17日广东省广州市天河区社工面试真题及答案解析(下午卷)
- 二零二五版安置房配套设施建设施工合同
- 二零二五年度新型零售店长管理合作协议
- 二零二五年度个人股权转让与公司战略重组协议范本
- 二零二五年爬架租赁及售后服务合同
- 二零二五年跨境贸易代理服务协议
- 2025版户外照明安装工程合作协议范本
- 2025北京中纺社服装专业图书策划编辑招聘笔试备考试题及答案解析
- 二零二五年度广告发布与推广服务协议
- 2025年四川遂宁市河东新区社会事业与文体旅游商务局招募医疗卫生辅助岗8人笔试参考题库附答案解析
- 龙门吊警示教育
- 班主任培训:家校共育
- 《数据安全法》考试参考题库100题(含答案)
- 档案管理服务承诺书
- 胶原蛋白对皮肤的重要性
- 2025年绵阳燃气集团有限公司招聘笔试参考题库含答案解析
- 《石膏的护理》课件
- 护理法律相关案例分析
- 2025版《折弯机安全操作规程》全
- 孕期阴道炎的健康宣教
- DB32-T 4467-2023 南美白对虾小棚养殖尾水生态化处理技术规程
评论
0/150
提交评论