版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、函数与过程 前面我们曾经学习了程序设计中的三种基本控制结构(顺序、分支、循环) 。用它们可以组成任何程 序。但在应用中,还经常用到子程序结构。 通常,在程序设计中,我们会发现一些程序段在程序的不同地方 反复出现,此时可以将这些程序段作 为相对独立的 整体,用一个标识符给它起一个名字,凡是程序中出现该程序段的地方,只要简单地写上其 标识符即可。这样的程序段,我们称之为子程序。 子程序的使用不仅缩短了程序,节省了内存空间及减少了程序的编译时间,而且有利于结构化程序设 计。因为一个复杂的问题总可将其分解成若干个子问题来解决,如果子问题依然很复杂,还可以将它继续 分解,直到每个子问题都是一个具有独立任
2、务的模块。这样编制的程序结构清晰,逻辑关系明确,无论是 编写、阅读、调试还是修改,都会带来极大的好处。 在一个程序中可以只有主程序而没有子程序 (本章以前都是如此),但不能没有主程序,也就是说不能 单独执行子程序。pascal中子程序有两种形式:函数和过程。 一、函数 在此之前,我们曾经介绍并使用了 pascal提供的各种标准函数,如 abs,trunc 等等,这些函数为我 们编写程序提供了很大的方便。但这些函数只是常用的基本函数,编程时经常需要自定义一些函数。 (一)函数的说明 在pascal中,函数也遵循先说明后使用的规则,在程序中,函数的说明放在调用该函数的程序(主 程序或其它子程序)的
3、说明部分。函数的结构与主程序的结构很相似。 函数定义的一般格式: function 函数名(形式参数表):类型; 函数首部 f说明部分 begin 函 语句打 I 数 体 嵋句巧 说明: 函数由首部与函数体两部分组成。 函数首部以关键字 fun ction 开头。 函数名是用户自定义的标识符。 函数的类型也就是函数值的类型,所求得的函数值通过函数名传回调用它的程序。可见, 函数的作 用一般是为了求得一个值 。 形式参数简称形参,形参即函数的自变量。自变量的初值来源于函数调用。在函数中,形参一般格 式如下: 变量名表1:类型标识符1;变量名表2:类型标识符2;,;变量名表 n:类型标识符n 可见
4、形参表相当于变量说明,对函数自变量进行说明,但应特别注意: 此处只能使用类型标识符,而 不能直接使用类型。 当缺省形参表(当然要同时省去一对括号)时,称为无参函数。 函数体与程序体基本相似,由说明部分和执行部分组成。 函数体中的说明部分用来对本函数使用的标号、常量、类型、变量、子程序加以说明,这些量只在 本函数内有效。 函数体的执行部分由 begin开头,end结束,中间有若干用分号隔开的语句,只是 end后应跟分号 不能像程序那样用句号.。 在函数体的执行部分, 至少应该给函数名赋一次值, 以使在函数执行结束后把函数值带回调用程序。 (二) 函数的调用 我们可以在任何与函数值类型兼容的表达式
5、中调用函数,或者说,函数调用只能出现在允许表达式出 现的地方,或作为表达式的一个因子。 函数调用方式与标准函数的调用方式相同。 函数调用的一般格式: v函数名 或 v函数名(实在参数表) 说明:实在参数简称实参。 实参的个数必须与函数说明中形参的个数一致,实参的类型与形参的类 型应当对应。 调用函数时,一般的,实参必须有确定的值。 函数调用的步骤为: 计算实参的值,”赋给对应的形参; (三) 函数的应用举例 例1求正整数a和b之间的完全数(ab). 分析:所谓完全数是指它的小于该数本身的因子之和等于它本身, 如6 = 1+ 2+ 3, 6即是一个完全数。 因此我们可定义一个布尔型函数 perf
6、ect(x), 若x是完全数,其值为ture,否则为false。整个程序算法如 下: 1 for i:=a to b do 2 if perfect(i) the n write In (i); 源程序如下: var i,a,b : integer; function perfect(x:i nteger):boolea n; var k,sum : in teger; begin sum:=1; for k:=2 to x div 2 do if x mod k=0 then sum:=sum+k; 累加x所有小于本身的因数 perfect:=x=sum; 将关系表达式x=sum的结果赋值给
7、函数名 en d;e nd perfect begin主程序开始 repeat readln(a,b); 输入 0a0)a nd(b0)a nd(ax2 then max:= x1 else max:= x2; end; begin readln(n1,n2,n3,n4,n5); t1:= n1; t1:= max(t1,n2); t1:= max(t1,n3); t1:= max(t1,n4); t1:= max(t1,n5); writeln(t1); end. 从上例看出,引入函数实际上是将一个复杂的问题划分成若干个易于处理的子问题,将编程化简的一 种有效办法,而化简的方法是多种多样的,
8、如前面已经做过求三个数中的最大数,所以可定义一个专门求 三个数中最大数的函数(max)。第一次用这个函数求出 n1, n2, n3三个数中的最大数t1 ;第二次调用这个函数 求出t1与n4, n5三个数中的最大数,也就是前三个数的最大数 (已在t1中)和后面二个数再求一次,就得到 五个数的最大数。因此,需要两次使用“求三个数中的最大数”,步骤如下: 调用函数 max ( n1 , n2 , n3), 求出n1, n2,n3中的最大者t1 ; 调用函数 max ( t1 , n4 , n5 ),求出t1 , n4 , n5中的最大者t2 ; 输出最大数 t2 。 var n1 , n2,n3,
9、n4, n5, t1 : integer ; function max(x1 ,x2,x3: integer) : integer ; 自定义函数 ma刃 var xx : integer ; 函数内部变量说明 begin 函数体 if x1x2 then xx : =x1 else xx : =x2; if x3xx then xx : =x3; max: =xx end; begin readln(n1 ,n2,n3, n4, n5); t1 :=max(n1, n2, n3); 主程序 输入五个数 用函数求n1, n2, n3的最大数 t1 : =max(n4, n5, t1) ; wr
10、iteln(t1) ; end. 例 3 求任意输入的五个自然数的最大公约数。 解: ?自定义一个专门求两自然数的最大公约数的函数 gcd; ?调用自定义函数 ,第一次求前两个数的最大公约数 ;从第二次开始 ,用每次求得的最大公约数与下 输出al,此时的al已是五个数的最大公约数。 pascal 程序 : program exam42 ; var a1 , a2,a3, a4, a5: integder ; function gcd(x ,y: integer) : integer ; var n : integer ; begin while x mod y0 do begin n : =x
11、; x :=y; y : =n mod y end; gcd : =y end; begin readln(a1 ,a2,a3, a4, a5); a 1 : =gcd(a 1 , a2); a1 :=gcd(a1 , a3); a1 :=gcd(a1 , a4); a1 :=gcd(a1 , a5); writeln(a1) ; end. 求N个数的最大公约数程序: var a,b,n,i:integer; function gcd(x,y:integer):integer; var r:integer; begin repeat r:=x mod y;x:=y;y:=r; until r=
12、0; gcd:=x; end; begin read(n,a); for i:=2 to n do begin read(b);a:=gcd(a,b); end; write(a); end. 函数的结果是一个具体的值 , 在函数体中必须将所得到的运算结果赋给函数名;主程序通过调用函数 得到函数的运算结果。 调用函数时 , 函数名后面圆括号内的参数必须有确定的值 , 称为 实在参数。 调用时即把这些实际值传 送给函数形参表中用函数求n4, n 5, t1的最大数 一个数再求两个数最大公约数 分别是 a1,a2,a3,a4,a5, 采用如下步骤: 求a1, a2两个数的最大公约数 求a1, a3
13、两个数的最大公约数 求 a1, a4 两个数的最大公约数 求 a1, a5 两个数的 - 最大公约数 , 直到最后。本题共四次“求两个数的最大公约数”, T 存入al ; T 存入al; t 存入 a1 ; t 存入 a1 ; 设输入的五个自然数 自定义函数 主程序 输入五个数 调用函数gcd 的相应形参变量。 函数不是单独的语句 , 只能作为运算赋值或出现在表达式中。 习题: 1. 数学上把从 1 开始的连续自然数相乘叫做阶乘。 例如 把1*2*3*4*5 称作5的阶乘, 记为5!。 编 写一个求 n! 的函数。 2.求从键盘输入的n个自然数的最小公倍数。 var a,b,s,n,i:int
14、eger; function gcd(x,y:integer):integer; var r:integer; begin repeat r:=x mod y;x:=y;y:=r; until r=0; gcd:=x; end; begin read(n,a); for i:=2 to n do begin read(b);a:=a*b div gcd(a,b); end; write(a); end. writeln(j,+,i-j,=,i); end; end. 方法二:自定义过程 * 3.哥德巴赫猜想的命题之一是 :大于6的偶数等于两个不同素数之和。 编程将6100所有偶数表示成 两个素
15、数之和。 方法一:自定义函数 var i,j,s:longint; function su(m:longint):longint; var l:longint; begin su:=1; for l:=2 to trunc(sqrt(m) do if m mod l=0 then begin su:=0;break;end; end; begin for i:=8 to 100 do if i mod 2=0 then for j:=2 to i div 2-1 do begin if (su(j)=1) and (su(i-j)=1) then var i:integer; procedur
16、e ger(x:integer); label 1; var i,j:integer; begin for i:=2 to x div 2 do begin for j:=2 to trunc(sqrt(i) do if i mod j=0 then goto 1; for j:=2 to trunc(sqrt(x-i) do if (x-i) mod j=0 then goto 1; if ix-i then writeln(i,+,x-i,=,x); 1:end; end; begin for i:=8 to 100 do if i mod 2=0 then ger(i) ; end. 4
17、.如果一个自然数是素数 ,且它的数字位置经过对换后仍为素数 ,则称为绝对素数 ,例如 13。试求出所有 二位绝对素数。 5 oliver 的成绩 ( 文件名: score) 【问题描述】 oliver 进入毕业班后,觉得自己应该要好好学习了。正好一次考试结束了, oliver 想知道自己的语 文,数学,英语分别与语文年级第一,数学年级第一,英语年级第一相差多少。由于 oliver 所在年级有 n 个人,所以 oliver 想你编个程序帮帮他。 【输入格式】 score.in 共3n+4行,第一 三行分别为Oliver的语文数学英语成绩(位数m),第四行为n,以下3n 行,每行一个数(它们的位数
18、是 m),分别为第n个同学的语文,数学,英语成绩。 即:oliver 的语文 数学 英语 n 第一个人的语文 数学 英语 第二个人的语文 J 【输出格式】 score.out 共一行,有三个数, 分别为 oliver 的语文数学英语与年级第一的差。如果 oliver 是第一, 则输出 0。三个数之间都用一个空格分隔。 【输入样例】 10 10 10 3 0 80 0 40 0 0 0 0 100 【输出样例】 30 70 90 【数据范围】 对于 50%勺数据,0n1000,0m19。 对于100%勺数据,0n10000,0mb then swap (a ,b); if ac then swa
19、p (a ,c) ; if bc fhen swap (b ,c) ; writeln (a : 6, b: 6, c: 6); readln 自定义交换两个变量值的过程 过程体 交换两个变量的值 主程序 调用自定义过程 过程体部分 主程序 b : =3; repeat a : =b; repeat yes : =true ; inc(b ,2); b是a后面待求的素数 sub(b , yes) ; 调用sub过程来确认b是否为素数 if yes then s : =b-a ; 如果b是素数,则求出跨度 s until yes ; until s = 10 ; for n :=a+1 to a
20、+10 do write(n : 6); writeln ; end. 程序中的过程sub,用来确定b是否为素数。 过程名后面圆括号内的变量是形式参数, 简称为形参。 过程 sub(x : integer ; var yy : boolean) 中的x是值形参,而前面冠有var的yy是变量形参。值形参只能从外界 向过程传入信息,但不能传出信息;变量形参既能传入又能传出信息。 本程序过程sub中的X是由调用过程的 实在参数b传入值,进行处理后,不需传出;而 yy是把过程处理结果用逻辑值传出,供调用程序使用。 试把例4.3程序中的过程swap(val x , y: integer),将x, y前面
21、的var去掉,就变成了纯粹的值形 参,就不能将过程所处理的结果传出去,也就无法得到处理后的结果,通过运行程序比较,可以非常明显 地看到值形参和变量形参的区别。 调用过程的格式为: 过程名(实在参数表) ; 调用过程名后面圆括号内的实在参数与定义过程的形参表必须相对应, 调用过程相当于一个独立语句, 可单独使用。 三、过程、函数的数据传递 在程序调用子程序时,调用程序将数据传递给被调用的过程或函数,而当子程序运行结束后,结果又 可以通过函数名、变参带回主程序。当然也可以用全局变量等形式实现数据的传递。这一节我们,就来研 究参数传递与局部变量、全局变量等问题。 (一)数值参数和变量参数 前面已经讲
22、过, pascal 子程序中形式参数有数值形参 (简称值参) 和变量形参 (变参) 两种。 事实上, 还有函数形参和过程形参两种,只是应用并不太多,我们不作深入地研究。 1、 值形参 形参表中只能使用类型标识符,而不能使用类型。 值形参和对应的实参必须 - 对应,包括个数和类型。 实参和值形参之间数据传递是单向的,只能由实参传送给形参, 相当赋值运算。 一个特殊情况是,当值形参是实型变量名时,对应的实参可以是整型表达式。 值形参作为子程序的局部量,当控制返回程序后,值形参的存储单元释放。 2、 变量形参 变量形参的一般格式,必须在形参前加关键字 var 。应该注意的是: 与变量形参对应的实参只
23、能是变量名,而不能是表达式。 与变量形参对应的实参可以根据需要决定是否事先有值。 变量形参与对应的实参的类型必须完全相同。a 为第一个素数 对变量形参,运行时不另外开辟存储单元,而是与对应的实参使用相同的存储单元。也就是说,调 用子程序时,是将实参的 地址传送 给对应的变量形参。 当控制返回到调用程序后,变量形参的存储单元不释放,但变量形参本身无定义,即不得再使用。 选用形式参时,到底是使用值形参还是变量形参,应慎重考虑。值形参需要另开辟存储空间,而变 量形参会带来一些副作用。一般在函数中使用值形参,而在过程中才使用变量形参,但也有例外。 例 1 写出下列两个程序的运行结果。 分析:这两个程序
24、唯一的区别是 ex1中将x,y作为值形参,而 ex2中将x,y作为变量形参,因此在 ex2 中对 x,y 的修改实际上是对调用该过程时与它们对应的变量 a,b 的修改,故最后, a,b 的值为 2, 1。 而ex1中调用swap过程时,只是将 a,b的值传递给x,y,之后在过程中的操作与 a,b无关。 答: ex1 的运行结果为 : ex2 的运行结果为 : 1 2 1 2 1 2 2 1 (二)全程变量、局部变量及它们的作用域 在主程序的说明部分和子程序的说明部分均可以说明变量,但它们的作用范围是特定的。 1 、局部量及其作用域 在介绍过程和函数的说明时,我们曾指出,凡是在子程序内部作用的变
25、量,应该在本子程序内加以说 明。这种 在子程序内部说明的变量称为局部变量 。形式参数也只是在该子程序中有效,因此也属于局部变 量。 一个变量的作用域是指在程序中能对此变量进行存取的程序范围。因此,局部变量的作用域就是其所 在的子程序。实际上,局部变量只是当其所在的子程序被调用时才具有确定的存储单元,当控制从子程序 返回到调用程序后,局部变量的存储单元就被释放,从而变得无定义。 事实上,在子程序内定义的标号、符号常量、类型、子程序也与局部变量具有相同的作用域。 2、全程量及其作用域 在主程序的说明部分中说明的量叫全程量 。全程量的作用域分两种情况: 当全程量和局部量不同名时,其作用域是整个程序范
26、围(自定义起直到主程序结束)。 当全程量和局部量同名时,全程量的作用域不包含局部量的作用域。 例 2 写出下列程序的运行结果 : program ex7_4; program ex1; var a,b:integer; procedure swap(x,y:integer); var t:integer; begin t:=x;x:=y;y:=t; end; begin a:=1;b:=2; writeln(a:3,b:3); swap(a,b); writeln(a:3,b:3); end. program ex2; var a,b:integer; procedure swap(var x
27、,y:integer) var t:integer; begin t:=x;x:=y;y:=t; end; begin a:=1;b:=2; writeln(a:3,b:3); swap(a,b); writeln(a:3,b:3); end. var x,y:integer; procedure a; var x:integer; begin x:=2; writeln(#,x,#); writeln(#,y,#); end;of a beginmain program x:=1;y:=2; writeln(*,x,* , y); a; writeln(*,x,*,y); end. 分析:
28、程序中 x,y 是全局变量 , 但在过程 a 中也有变量 x ,故全程变量 x 的作用域为除过程 a 外的任何 地方。而y的作用域包含了子程序 a,即整个程序。 答:运行结果如下 : *1*2 #2# #2# *1*2 评注:变量作用域内对变量的操作都是对同一存储单元中的量进行的。 五、过程和函数的嵌套 pascal 语言中,使用过程和函数,能使程序设计简短,便于阅读,节省存贮单元和编译时间。程序往 往设计成分层结构,由一个主程序和若干个过程及函数组成。在过程或函数中,还可以说明另一些过程或 函数,即过程或函数可以分层嵌套。在同一层中亦可说明几个并列的过程或函数。例如:x-program sa
29、mple; f procedure pl a; procedurep2a, begin J end; (of p2a) procedure p2b; procedure begin endifof p3) tegin * end;(of p2b begin I 、end,( of p la) procedureplb; begin L en (ofplb) beginfof main) - end.(ofmain) 上例过程的分层嵌套关系如下: 0层主程序sample内并列两个1层过程p1a和p1b。过程p1a又嵌套 两个2层过程p2a和p2b,2层的第二过程p2b又嵌套过程p3, p3就是第
30、3层。其中p1b,p2a和p3不再 嵌套别的过程,称为基本过程。这种分层结构的程序设计,特别要注意局部变量的使用范围和过程调用的 要求。 在主程序sample中定义的变量,可以在所有的过程中使用,主程序可调用p1a和p1b两个过程。过程 p1a中定义的变量,只能在p2a,p2b和p3中使用。它能调用p2a,p2b两个过程,而不能调用p3和p1b。在 过程p1b中定义的变量,只能在p1b中使用,它只能调用过程 p1a。过程p2a不能调用任何过程。过程 p2b 可以调用并列过程 p2a和p3,而过程p3可以调用p2a过程。 过程调用是有条件的, 过程定义在先,调用在后。同一层过程,后说明的过程可以
31、调用先说明的过程。 如果要调用在它后面定义的过程(或函数),可使用 向前引用forward这个扩充标识符。 要注意的是 向前引用 过程(或函数)首部中形式参数表写一次即可 ,不必重复。如: procedure exte nd(var a,b:i nteger); forward; 表示过程extend向前引用 。因此,过程extend的说明部分只须如下书写: procedure exte nd; 说明部分 begin end; 一个函数或过程可能要求调用另一个函数或过程,称为函数与过程的嵌套。 主程序 过程SUB 过程TU1 过程TU2 (1) 内、外层子程序不得相互交叉,内层必须完全嵌套在外
32、层中; (2) 调用原则 外层程序可以调用与它相邻的内层程序,反之不行。 同层程序处于后面的可以直接调用前面的 如果tu1想调用tu2必须作如下处理: 例 t8_8:已知 cm=m!(n!x(m _n)!),求:C;,C8 program t8_8; fun ctio n fac(x:i nteger):l ongint: var i: in teger; begin fac:=1; for i:=1 to x do fac :=fac*i; en d; function c(a,b:i nteger):real; begin c:=fac(a)/fac(b)/fac(a_b); en d;
33、begin writeln( c(9,3)= ,c(9,3):0:0); writeln( c(8,5)= ,c(8,5):0:0); en d. 例7:将合数483的各位数字相加(4+8+3) =15,如果将483分解成质因数相乘: 483=3*7*23 ,把 这些质因数各位数字相加(3+7+2+3),其和也为15。即某合数的各位数字之和等于它所有质因数的各数 字之和。求500以内具有上述特点的所有合数。 解:设n为所要求的合数,让n在1500间循环做以下步骤; 用t1 , t2分别累计合数n及n的质因数的各位数字之和,初值均为 0; 调用过程sub3进行非素数判定,以布尔变量 yes的真假
34、值判定是否,yes的初值为true,如果为 (not true) 非素数,就做步骤,;否则取新的 n值,重复步骤; 调用sub1,求n的各数字之和,传送给t1 ; 调用sub2,求n的各质因数,对于每个质因素都通过 sub1求它各位数字之和,将所有各质因数字procedure tu2; 新增加的行,使tu2的首部提前 forward; 向前引用说明 传送给 t2 。 如果 t1=t2 (各位数字之和等于它所有质因数的各数字之和),则输出此 n。 pascal 程序: program exam45 ; var n , t1, t2 , tatol : integer ; yes : boolea
35、n ; procedure sub1(x : integer ; var t : integer) ; 过程 : 分离 x 的各位数字 begin 并求各位数字之和 repeat t : =t+x mod 10 ; x : =x div 10; until x=0 end; procedure sub2(x : integer ; var t : integer) var xx , tt : integer ; begin xx :=2; while x1 do if x mod xx=0 then begin tt : =0; sub1(xx , tt) ; t : =t+tt ; x :=
36、x div xx end else inc(xx) end; 过程:分解质因数 procedure sub3(x : integer ; var yy var k , m: integer ; begin k : =trunc(sqrt(x) ; for m :=2 to k do boolean) ; 过程:判断 x 是否为素数 if x mod m=0 then yy end; : =false begin for n : =1 to 500 do begin t1 :=0; t2 : =0; yes : =true ; sub3(n ,yes) ; if not yes then beg
37、in sub1(n , t1) ; sub2(n , t2) ; if t1=t2 then write(n :6); 主程序 调用过程求素数 如果非素数就, 调用过程求n的各位数字之和 调用过程求n的各质因数的数字之和 打印合格的合数 end end end. 程序定义了三个过程subl , sub2 , sub3,其中sub2过程中又调用了 subl。在过程中定义的变量或参数, 只在本过程内部使用有效。这些变量称为局部变量。如 sub2中的xx只在sub2中使用,属于局部变量。 二、递归 函数或过程调用它本身,成为递归。递归在解决某些程序设计问题中是一个十分有用的方法。它可以 将某些看起来
38、不容易解决的问题变得容易解决,写出的程序较简洁。 例t8_9: 递归计算n!。 分析:n!可以由下列公式计算: n=0 n!= n(n-1)! N0 因为(n-1)!乘n等于n!,所以求n!的问题可以转化为求(n-1)!的问题,同理可以转化为(n-2)!的 问题”最后归结为 0!而0!已经定义1。由0! 一步步返上去求出 1!,2!, 直到求出 n!。 1、 直接递归: 过程与函数直接调用自己 var n: in teger; y:real; function fac(n:integer):real; begin if n=0 the n fac:=1 else fac:=n *fac (n-
39、1); en d; begin readl n(n); y:=fac( n); writeln(n, != ,y:10:0); en d. 本程序n1 then if odd(n) then q(n) else p(n);end; procedure q(var m:integer); begin m:=m*3+1; write(m:3); p(m); end; begin readln(i); if odd(i) then q(i) else p(i); readln; end. 递归的综合应用 (一) 快速排序 快速排序的思想是 : 先从数据序列中选一个元素 , 并将序列中所有比该元素小的
40、元素都放到它的右边 或左边 , 再对左右两边分别用同样的方法处之直到每一个待处理的序列的长度为 例: 输入一组数据,按从小到大排序。 程序 1 : var a:array1.50000 of integer; i,n:integer; procedure kp(l,r:integer); var i,j,t,mid:integer; begin i:=l;j:=r; mid:=a(l+r) div 2; repeat while aimid do dec(j); if ij; if lj then kp(l,j); 若未到两个数的边界,则递归搜索左右区间 if i=x) and (ji) do
41、 j:=j-1; if ji then begin t1:=bi; bi:=bj;bj:=t1;end; while (bi=x) and (ij) do i:=i+1; 1, 处理结束 . 将当前序列在中间位置的数定义为标准数 在左半部分寻找比标准数大的数 在右半部分寻找比标准数小的数 若找到一组则交换它们的值 if ij then begin t1:=bj;bj:=bi;bi:=t1; end until i=j; bi:=x; i:=i+1;j:=j-1; if sj then kp(s,j); if it then kp(i,t); end; begin read(n); for i:=1 to n do read(ai); kp(a,1,n); for i:=1 to n do write(ai, ); end. (二) 排列与组合 1排列及计算公式 从n个不同元素中,任取 m(mc n)个元素按照一定的顺序排成一列,叫做从 n个不同元素中取出 m个元素 的一个排列;从 n个不同元素中取出 m(m n)个元素的所有排列的个数,叫做从 n个不同元素中取出 m个 元素的排列数,用符号 p(n,m) 表示。 p(n,m)=n(n-1)(n-2)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度车库车位租赁纠纷仲裁服务合同样本4篇
- 2025年度建筑工程质量检测与认证服务合同范本4篇
- 2025年度渔业养殖承包与品牌建设合同3篇
- 2025年度美容院美容师薪酬福利调整合同4篇
- 二零二五版智能门禁系统软件开发与实施合同4篇
- 2025年度国际贸易谈判技巧与知识提升合同4篇
- 2025年度车库停车场运营管理培训合同4篇
- 2025年度橱柜工程环保验收合同3000字4篇
- 二零二五年度非常规油气资源勘探钻井合同3篇
- 二零二五版猫咪宠物公益活动策划与执行合同3篇
- 《阻燃材料与技术》课件全套 颜龙 第1讲 绪论 -第11讲 阻燃性能测试方法及分析技术
- SOR-04-014-00 药品受托生产企业审计评估报告模板
- 新媒体论文开题报告范文
- 2024年云南省中考数学试题含答案解析
- 国家中医药管理局发布的406种中医优势病种诊疗方案和临床路径目录
- 2024年全国甲卷高考化学试卷(真题+答案)
- 汽车修理厂管理方案
- 人教版小学数学一年级上册小学生口算天天练
- (正式版)JBT 5300-2024 工业用阀门材料 选用指南
- 三年级数学添括号去括号加减简便计算练习400道及答案
- 苏教版五年级上册数学简便计算300题及答案
评论
0/150
提交评论