版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+程序设计第3章(1) 函数定义和调用1第1页第1页主要内容函数概述函数定义函数调用和返回函数参数传递值传递函数参数传递引用传递函数原型申明全局变量及其作用域局部变量及其作用域C+程序内存布局标识符作用域块作用域、文献作用域、函数原型作用域、函数作用域变量存储类型和生存期函数调用机制2第2页第2页函数概述关于C+函数: C+程序结构化特点:就是整个程序由一个或多个函数组成,每个函数含有相对独立功效,函数之间有显著界面,程序整体含有清楚模块结构,易于修改。 C+函数有两大类:一类是系统预定义,称为库函数或标准函数,这些库函数按照不同功效进行分类,集中定义在不同头文件中,用户只要在自己程序中包含
2、某个头文件,就可直接使用该头文件中定义函数。另一类是用户自定义函数,用户能够依据需要将程序中某个含有相对独立功效程序段定义为函数。 C+程序基本模块:就是函数,任何一个C+程序均由若干个函数组成,其中有且仅有一个主函数,它是程序执行入口函数, VC+控制台编程是由用户定义main()作为入口函数,Windows编程是由编译器定义WinMain()作为入口函数。3第3页第3页函数概述 C+函数之间是并列平等关系,在程序中定义位置任意,一个函数能够调用其它函数,也能够被其它函数所调用,但主函数只能调用其它函数,而不能被调用。 函数定义并列关系 函数调用层次关系void f1( ) f1函数体 vo
3、id f2( ) f2函数体 void main( ) main函数体 void f3( ) f3函数体 void f4( ) f4函数体 void f5( ) f5函数体 main( )f1( )f2( )f3( )f4( )f6( )4第4页第4页函数定义函数定义 : 格式: 返回值类型 函数名 ( 类型1 形参1 ,类型2 形参2 , ,类型n 形参n ) 语句序列 阐明: 返回值类型能够是C+中任意基本数据类型、已定义结构数据类型; 若函数没有返回值,则返回值类型定义为 void 型; 若函数返回值类型省略,表示返回值类型为 int 型。函数体函数头5第5页第5页函数定义 函数名按标识
4、符命名规则命名,其后括号内定义是函数形式参数; 若该函数为无参函数,括号内 void 通常省略不写,但括号不能省略! 形式参数表列出所有形式参数数据类型、参数名称; 各参数即使类型相同,也必须分别进行类型阐明; 形参类型能够是C+中任意基本数据类型、已定义结构数据类型。函数参数作用:函数调用时,主调函数通过参数将数据传递给被调函数。函数返回值作用:函数返回时,被调函数可将一个拟定值带回到主调函数。 若函数有返回值,则 return语句格式为: return 表示式 ; 且 return 后面表示式值类型必须与函数返回值类型相匹配! 若函数无返回值,则返回值类型定义为void,且return语句
5、格式为: return ;6第6页第6页函数调用和返回函数调用 : 格式: 函数名 ( 实参1 ,实参2 , ,实参n ) 调用:就是控制从主调函数转去执行被调函数函数体。调用时,系统要将实参值按位置传递给相应形参,因此,普通情况下实参与形参在个数、排列顺序上都必须一一相应,且类型匹配。函数返回 :就是控制从被调函数返回到主调函数调用点。返回时,即在被调函数中执行到 return语句时,若有返回值带回,则先计算 return语句后面表示式值,并转换成所要求返回值类型,此时系统会在内存中建立一个暂时变量,用来存储该返回值,待主调函数中包括该调用式表示式语句从该暂时变量中取值后,系统便撤消该暂时变
6、量。7第7页第7页【例】(定义求三个实数中最大数函数max()。)# include float max ( float x , float y , float z ) /要将三个实数传递给max()函数,需定义三个形参。 float t = yz ? y : z ; return ( xt ? x : t ) ;void main ( ) float a , b , c ; cout a b c ; cout “最大数:” max( a , b , c ) endl ; 运营:请输入三个实数:13 56 -89 最大数:56main()函数调用max( 13, 56, -89 )main()
7、函数后续语句函数max( 13, 56, -89 )return 56主调函数被调函数8第8页第8页函数参数传递形参与实参: 函数定义时,写在函数头部参数表中变量,称为形式参数(形参)。 函数调用时,写在调用式参数表中表示式、变量、常量,称为实在参数(实参)形参与实参结合:编译时,并不为各函数形参分派存储空间,只有在该函数被调用时,其形参才占用存储空间,并通过堆栈从主调函数中取得值,这个过程称为形参与实参结合,一旦函数调用结束,该函数形参就被撤消。函数参数传递方式有三种 : 值传递 引用传递 地址传递9第9页第9页函数参数传递值传递值传递: 调用函数进行值传递时,调用式中相应实参能够是常量、变
8、量、表示式。 先计算出各个实参表示式值,并将值赋给相应形参变量,其过程就是赋值,因此,要求实参值类型与形参变量类型符合赋值兼容。 由于值传递就是赋值传递,因此是单向传递,即实参值传递给形参变量后,若形参变量值发生改变不会影响到相应实参变量。【例】 # include void swap ( int a , int b ) int t = a ; a = b ; b = t ; void main ( ) int x , y ; cout x y ; cout “调用前:x = ” x “ty = ” y endl ; swap( x , y ) ; cout “调用后:x = ” x “ty
9、= ” y endl ; 运营:请输入两个整数: 58 97 调用前:x=56 y=97调用后:x=56 y=9710第10页第10页【例】# include int maxi ( int a , int b )return ab ? a : b ; float maxf ( float a , float b )return ab ? a : b ; void main ( void ) float x = 3.4 , y = 5.6 ; char c1=A , c2 = B ; int i = 20 , j = 30 ; cout maxi ( x , y ) t ; cout maxf
10、( x , y ) t ; cout maxi ( c1 , c2 ) t ; cout maxf ( c1 , c2 ) t ; cout maxi ( i+j , 45+y ) t ; cout maxf ( i+j , 45+y ) endl ;运营:5 5.6 66 66 50 55.6float x=3.4 int a=3float y=5.6 int b=5float x=3.4 float a=3.4float y=5.6 float b=5.6char c1=A int a=65char c2=B int b=66char c1=A float a=65char c2=B fl
11、oat b=66表示式 i+j 值50,int型 int a=50表示式 45+y 值50.6,float型 int b=50表示式 i+j 值50,int型 float a=50表示式 45+y 值50.6,float型 float b=50.611第11页第11页函数参数传递引用传递引用类型:是C+中一个特殊数据类型, 定义引用类型变量,其本质是给一个已定义变量起一个别名,系统并不为引用类型变量分派内存空间,引用类型变量与其相关联变量使用是同一个内存空间。引用类型变量定义: 格式: & = 功效:定义一个引用类型变量,必须同时对其进行初始化,使之与一个已定义过同类型变量相关联,即给该已定义
12、过变量起一个别名。【例】 # include void main ( ) int x = 5 ; int & x1 = x ; int x2 = x ; x1 += 2 ; cout “x = ” x “tx1 = ” x1 “tx2 = ” x2 endl ; 57xx15x2运营:x = 7 x1= 7 x2 = 512第12页第12页函数参数传递引用传递引用类型变量能够作为函数形参,以实现参数引用传递。 【例】 void swap ( int &a , int &b ) int t = a ; a = b ; b = t ; 引用传递: 调用函数时,系统对引用类型形参是不分派存储空间,其
13、本质是给相应实参变量起一个别名。 进行引用传递时,调用式中相应实参只能是变量。 引用传递时传递是变量名,引用类型形参变量与其相关联实参变量使用是同一个存储空间,若引用类型形参变量值发生改变,其相关联实参变量值也就随之改变,因此是双向传递。13第13页第13页【例】(值传递) # include void swap ( int a , int b ) int t = a ; a = b ; b = t ; void main ( ) int x = 5 , y = 10 ; cout “调用前:x = ” x “ty = ” y endl ; swap( x , y ) ; cout “调用后:
14、x = ” x “ty = ” y endl ; 【例】(引用传递) # include void swap ( int &a , int &b ) int t = a ; a = b ; b = t ; void main ( ) int x = 5 , y = 10 ; cout “调用前:x = ” x “ty = ” y endl ; swap( x , y ) ; cout “调用后:x = ” x “ty = ” y endl ; 运营:调用前:x=5 y=10调用后:x=10 y=5引用传递:main(): swap(): x a 10 y b 5510运营:调用前:x=5 y=
15、10调用后:x=5 y=10值传递:main(): swap():x a 10y b 551051014第14页第14页函数原型申明函数原型申明: C+中,把函数定义部分称为函数定义性申明,而把对函数引用性申明称为函数原型申明。 当函数定义在前、调用在后时,可直接调用;当函数调用在前、定义在后时,在函数被调用前,必须对被调函数作原型申明,函数原型申明可放在主调函数中,也可放在所有函数之外。 函数原型申明目的是告知编译系统,该函数返回值类型、参数个数、顺序、各参数类型,以便编译系统对其后该函数调用式是否有效进行语法检查。函数原型申明格式: 格式1: 函数头 + 末尾加分号 返回值类型 函数名 (
16、 类型1 形参1 ,类型2 形参2 , ,类型n 形参n ) ; 格式2: 函数头(去掉形参变量名) + 末尾加分号 返回值类型 函数名 ( 类型1 ,类型2 , ,类型n ) ;15第15页第15页【例】(输入一个8位二进制数,将其转换为十进制数输出。例:若输入11010001, 110100012 = 1(27)+1(26)+0(25)+1(24)+0(23)+0(22)+0(21)+1(20) = 20910 ,输出209。)# include void main ( ) double power ( double , int ) ; /power()函数引用性申明,即原型申明 int
17、value = 0 , k ; char c ; cout = 0 ; i- ) cin c ; if ( c = 1 ) value += ( int ) power( 2 , i ) ; /调用power()函数 cout “十进制数:” value endl ; double power ( double x , int n ) /power()函数定义性申明 double t = 1 ; while ( n- ) t *= x ; return t ; 运营:请输入一个8位二进制数:11010001十进制数:20916第16页第16页【例】(求值,arctan(x) 用级数计算,直到某
18、项绝对值小于10-15为止。 )# include # include void main ( ) double a , b ; double arctan ( double x ) ; /arctan()函数引用性申明,即原型申明 a = 16 * arctan ( 1 / 5. ) ; /调用arctan()函数,且假如写成1/5,结果就都是0 b = 4 * arctan ( 1 / 239.0 ) ; /调用arctan()函数,且假如写成1/239,结果就都是0 cout “= ” ( a-b ) 1e-15 ; i+=2 ) sum += sign * t / i ; t = t
19、* x * x ; sign *= -1 ; return sum ; 运营:= 3.1415917第17页第17页【例】(找出 11999 之间数m,使之满足m、m2、m3均为回文数。 回文:各位数字左右对称整数。例:11、 112=121、113=1331,则输出11。) 分析:从最低位开始,用除10取余办法,依次取出该数各位数字; 按反序重新构成新数,若新数与原数完全相等,则原数为回文。# include void main ( ) bool symm ( int n ) ; /symm()函数引用性申明,即原型申明 for ( int m=11 ; m=999 ; m+ ) if (s
20、ymm( m ) & symm( m*m ) & symm( m*m*m ) ) cout “m=” m “tm*m=” m*m “tm*m*m=” m*m*m endl ; bool symm ( int n ) /symm()函数功效是判断整数n是否是回文 for ( int i=n , m=0 ; i != 0 ; i = i/10 ) m = m*10 + i%10 ; / m是新构数 return ( m = n ) ;运营:m=11 m*m=121 m*m*m=1331m=101 m*m=10201 m*m*m=1030301m=111 m*m=12321 m*m*m=136763
21、118第18页第18页【例】(求下列公式,r 和s 值键盘输入,SIN(x)用级数计算,计算精度为10-3。)# include # include void main ( ) double tsin ( double ) ; double k , r , s ; cout r s ; if ( r*r = s*s ) k = sqrt ( tsin( r ) * tsin( r ) + tsin( s ) * tsin( s ) ) ; else k = tsin( r*s ) / 2 ; cout “r = ” r “ts = ” s “t k = ” k = 1e-3 ; sign *=
22、 -1 ) sum += sign * t / p ; t = t * x * x ; i += 2 ; p = p * i * (i-1) ; return sum ; 运营:请输入 r 和 s 值:3 1r = 3 s = 1 k = 0.070437319第19页第19页全局变量及其作用域关于全局变量: 作用:若程序中某个变量要被多个函数所访问,可将其定义为全局变量。 全局变量:指定义在函数之外变量。 作用域:全局变量能够定义在函数外任何位置,一旦在某个位置定义了全局变量,其后任何函数均能够访问该全局变量。 存储类型:全局变量存储在全局数据区(静态区),分派该区时内存自动初始化为0,因此
23、全局变量若不做初始化,其初值为0。 生存期:全局变量在程序开始运营时就在全局区别配,程序运营结束才被释放。20第20页第20页局部变量及其作用域关于局部变量: 块概念:指程序中用花括号“ ”括起来一个程序段,称为一个块。 局部变量:指定义在函数之内或某个块内变量。 作用域:局部变量能够定义在块内任何位置,一旦在块内某个位置定义了局部变量,只能在该块内该位置之后那个区域内才干够访问该局部变量。 存储类型:auto自动类型局部变量、static静态类型局部变量。 auto自动局部变量:存储在局部数据区(栈区),分派栈区时内存不做初始化,因此auto局部变量若不做初始化,其初值不拟定。 static
24、静态局部变量:存储在全局数据区(静态区), 分派该区时内存自动初始化为0,因此static局部变量若不做初始化,其初值为0。21第21页第21页C+程序内存布局操作系统为一个C+程序运营定义了四个内存区域: 代码区存储程序代码。 全局数据区(静态区)存储全局变量、static静态局部变量。全局变量在程序开始运营时就在该区别配; static静态局部变量在程序运营中第一次进入其作用域时在该区别配。两者都是直到程序运营结束才被释放。 局部数据区(栈区) 存储auto局部变量。 在程序运营到其作用域时在栈区别配,但如何分派在编译时就已经拟定。auto局部变量在离开其作用域时即被释放。 动态数据区(自
25、由存储区、堆区) 存储运营时由 new运算符动态创建变量。动态创建变量在编译时无法为它们预定存储空间,系统依据运营时详细要求在该区进行分派。在该区变量必须用 delete运算符才干将其释放。22第22页第22页标识符作用域作用域:指程序中标识符(如变量名、函数名)有效使用范围,即作用范围。目标:处理标识符同名问题。当标识符含有不同作用域时,允许标识符同名;当标识符作用域完全相同时,不允许标识符同名。C+中作用域有五种: 块作用域 文件作用域 函数原型作用域 函数作用域 类作用域23第23页第23页标识符作用域块作用域块:指程序中用花括号“ ”括起来一个程序段,称为一个块。块作用域:在块内申明变
26、量只能在该块内被引用,开始于变量申明处,结束于块结尾处。几条原则: 形参变量作用域:在其所属函数函数体块内。 局部变量作用域:在其所属块内,该变量申明位置之后那个区域内。 循环语句 for(表示式1;表示式2;表示式3)中表示式1 所申明变量作用域: 在for语句所属块内,该变量申明位置之后那个区域内。 局部优先原则:含有块作用域标识符在其作用域内,将屏蔽其作用块包括本块同名标识符。24第24页第24页【例】(块作用域) # include int fun ( int n ) cout “正在求:1+2+” n “n” ; int s = 0 ; for ( int i =1 ; i=n ;
27、i+ ) char a = 7 ; cout a ; s += i ; return s ;void main ( ) int a = 5 , b = 7 ; cout “第1次调用:” fun( a ) endl ; int a = 9 , b = 11 ; cout “第2次调用:” fun( a ) endl ; cout “第3次调用:” fun( b ) endl ; cout “第4次调用:” fun( b ) endl ; 形参 n 作用域局部 s 作用域局部 i 作用域局部 a 作用域局部 a、b 作用域局部 a、b 作用域运营:正在求:1+2+5第1次调用:15正在求:1+2
28、+9第2次调用:45正在求:1+2+11第3次调用:66正在求:1+2+7第4次调用:2825第25页第25页【例】(块作用域)# include void main ( ) int a = 10 , b = 20 , c = 30 ; cout “a=” a “tb=” b “tc=” c endl ; int a = 40 , b = 50 ; c = a + b ; cout “a=” a “tb=” b “tc=” c endl ; cout “a=” a “tb=” b “tc=” c endl ;【例】(块作用域)# include void main ( ) for ( int
29、a = 1 ; a = 5 ; a+ ) int a = 2 ; cout “a = ” +a endl ; cout “a = ” a endl ; 运营:a=10 b=20 c=30 a=40 b=50 c=90 a=10 b=20 c=90 运营:a = 3a = 3a = 3a = 3a = 3a = 626第26页第26页标识符作用域文献作用域文献作用域:在函数外申明变量可在该文献内被引用,开始于变量申明处,结束于文献结尾处,即一旦在某个位置定义了全局变量,在其后整个文献中均能够访问。几条原则: 全局变量作用域从定义处开始到文献结尾处结束,遵循申明在前、使用在后。 当全局变量引用在前
30、、申明在后时,需先对全局变量作外部申明。 格式: extern 类型 全局变量名 ; 当全局变量与块作用域内局部变量同名时,局部变量优先。 在块作用域内,若要引用同名全局变量时,可通过域运算符 “ : ” 来引用。 格式: : 全局变量名 27第27页第27页【例】(文献作用域)# include int a = 5 , b ; /a、b定义在函数外,为全局变量extern int c ; /全局变量c引用在前、申明在后时,需先外部申明void main ( ) int a = 10 , b = 20 ; /a、b定义在函数内,为局部变量 cout “a=” a “tb=” b “tc=” c
31、 endl ;a = 18 ; :b = :b + 4 ; /引用全局变量b c = :a +a ; /引用全局变量c和a,引用局部变量a cout “a=” a “tb=” b “tc=” c endl ; cout “a=” :a “tb=” :b “tc=” c endl ;int c = 88 ; /c定义在函数外,为全局变量运营:a=10 b=20 c=88 a=18 b=20 c=23 a=5 b=4 c=23 28第28页第28页标识符作用域函数原型作用域、函数作用域函数原型作用域: 在函数原型申明参数表中申明标识符,所含有作用域称为函数原型作用域,即从其申明处开始,到函数原型申
32、明结束处结束。 函数原型申明中所申明标识符,其作用域仅在函数原型申明语句内,因此与该函数定义和调用均无关,因此在函数原型申明中可只作参数类型申明,而省略参数名。 【例】函数原型申明:void swap ( int a , int b ) ; /a、b作用域仅在该句内 函数原型申明:void swap ( int , int ) ;函数作用域: 函数作用域是指在函数内定义标识符在其定义函数内都有效,即无论在函数内任何地方定义,在整个函数内均能够引用。 C+中只有语句标号含有函数作用域。29第29页第29页变量存储类型和生存期存储类型:变量存储类型反应了变量占用内存空间期限,它要求了变量生存期,即
33、何时为变量分派内存空间、何时撤消变量收回为其分派内存空间。在申明变量时,可对其存储类型进行定义,格式: 存储类型 类型 变量名1 = 初值1 ,变量名2 = 初值2 , ; 其中存储类型有四种: 自动类型auto 静态类型static 存储器类型register 外部类型extern 当存储类型省略时,对于局部变量则表示auto。30第30页第30页变量存储类型和生存期auto自动类型变量: 申明局部变量时,用auto修饰属自动类型变量,存放在局部数据区,即栈区 。 auto局部变量在程序运行到其作用域时在栈区分派,在离开其作用域时即被释放,因此生存期仅在其作用域内。 申明局部变量时若省略存放
34、类型,C+编译器默认为auto。 自动类型变量未初始化时,其初值不确定。 全局变量无自动类型。31第31页第31页变量存储类型和生存期static静态类型变量: 申明局部变量时,用static修饰属静态类型变量,存储在全局数据区,即静态区 。 static局部变量生存期:在程序运营中第一次进入其作用域时在静态区别配,离开其作用域时并不释放,只是不能引用,若程序运营中再次进入该static局部变量作用域,由于该变量已经存在,因此不再分派空间,可直接引用。 static局部变量直到程序运营结束才被释放。 static局部变量作用:是保留函数运营结果,以便再次调用该函数时,能继续使用上次调用计算结果
35、。注意,不在其作用域时,不能直接引用;若需引用,可间接实现,即通过该 static 局部变量地址进行访问(后续章节简介)。32第32页第32页变量存储类型和生存期 全局变量申明时不论前面加或不加static,都含有静态生存期,因为全局变量都存放在全局数据区,即静态区 。 但用 static 修饰全局变量,称为静态全局变量。静态全局变量与普通全局变量在形式上类似,但含义有所不同,静态全局变量只能在其定义源文件中有效(该文件中能够有若干个函数),而在该程序其它源文件中则是无效;而普通全局变量能够经过 extern 修饰后,作用于该程序多个源文件。 静态类型变量未初始化时,其初值为0。33第33页第
36、33页【例】# include int a = 1 , b = 2 ; /a、b为全局变量,在静态区int fun ( ) static int a =3 ; /a为静态局部变量,在静态区 int b = 4 ; /b为auto局部变量,在栈区 a += b ; return a ; void main ( ) int a = 5 , b = 6 ; /a、b为auto局部变量,在栈区 cout “a=” a “tb=” b endl ; for ( int i=1 ; i=3 ; i+ ) cout “第” i “次调用:” fun( ) endl ; cout “a=” a “tb=” b
37、 endl ; cout “a=” :a “tb=” :b endl ;运营:a=5 b=6第1次调用: 7a=5 b=6第2次调用:11a=5 b=6第3次调用:15a=5 b=6a=1 b=234第34页第34页【例】(与上例比较)# include int a = 1 , b = 2 ; /a、b为全局变量,在静态区int fun ( ) int a = 3 ; /a为auto局部变量,在栈区 int b = 4 ; /b为auto局部变量,在栈区 a += b ; return a ; void main ( ) int a = 5 , b = 6 ; /a、b为auto局部变量,在栈区 cout “a=” a “tb=” b endl ; for
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东珠海市横琴粤澳深度合作区公办小学教师招聘11人考前冲刺试卷及参考答案详解(达标题)
- 2026云南中医药大学招聘非事业编制教辅岗工作人员15人备考题库【综合卷】附答案详解
- 2026四川巴中经济开发区人力资源和社会保障服务中心招聘第七批城镇公益性岗3人模拟试卷【考点提分】附答案详解
- 2026浙江杭州市西溪实验学校诚聘中学语文、英语、科学、社会老师(非事业)7人考前冲刺密卷附完整答案详解【夺冠】
- 2026年智能家电开放平台建设进展
- 2025-2026学年四川省成都市锦江区数学三下期中复习检测模拟试题(含解析)
- 电商设计笔试题及答案解析
- 2026时尚鞋履行业品牌发展战略研究及市场细分与创新投资策略分析报告
- 2026中国智能物流系统市场需求供给现状及投资布局分析
- 2025-2026学年响水县四年级数学下学期期末学业水平测试试题(含答案)
- 2026广东广永国资招聘1人笔试题库【必考】附答案详解
- 2026年全新中医主治医师考试题库及答案
- 半导体芯片先进封装项目质量管控方案
- 一升二语文暑假作业每日一练-一下
- 20265G毫米波通信技术商业化进程与终端设备发展研究报告
- 2026浙江绍兴京越地铁有限公司运营分公司第一次社会招聘24人备考题库及1套完整答案详解
- 化验室人员健康监测计划
- 2026全国医师定期考核试题及答案
- 2025江西抚州市城市建设集团有限公司拟聘用人员(人才引培)笔试历年难易错考点试卷带答案解析
- 毕业设计(论文)-自动去鱼鳞机设计
- 降低阴道分娩并发症发生率工作方案
评论
0/150
提交评论