版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序设计基础(C语言),东北大学高级语言程序设计课程组 课程网站:,程序设计基础(C语言),函数的基本概念,3,模块化结构,一个用C语言开发的软件由许多功能组成 从组成上看,各个功能模块彼此有一定的联系,功能上各自独立, 从开发过程上看,不同的模块可能由不同的程序员开发 提出模块化设计 怎样将不同的功能模块连接在一起,成为一个程序 怎样保证不同的开发者的工作既不重复,又能彼此衔接 支持这种设计方法的语言称为模块化程序设计语言,4,模块化结构,C语言提供了模块化设计的功能 模块化设计在程序设计中分而治之的策略 将一个大的程序自上向下进行功能分解成若干个子模块 模块对应了一个功能 有自己的界面 有
2、相关的操作 完成独立的功能 各个模块可以分别由不同的人员编写和调试 将不同的模块组装成一个完整的程序 将所有的程序模块象积木一样装配起来,5,模块化结构,C采用函数实现功能模块 C语言中一个函数实现一个特定的功能 一个C语言程序可以由一个主函数和若干个其它函数构成 由主函数调用其它函数 其它函数也可以相互调用 同一个函数可以被一个函数或多个函数调用任意多次 在设计时,往往将一些常用的功能模块编写成为函数,放在函数库中,供大家选用或多次调用,以减少重复性的编写程序 C程序的功能可以通过函数之间的调用实现 方便的利用函数作为程序模块实现 C语言程序设计的模块化,6,模块化结构,C采用函数实现功能模
3、块 一个完整的C程序可以由多个源程序文件组成 一个文件中可以包含多个函数,7,模块化结构,C采用函数的特点 允许将一个程序写入不同的源文件 每一个源文件可以独立编译 一个源文件可以被不同的程序使用 函数是最小的功能单位 一个函数可以被不同的源文件的其他函数调用 一个源文件由多个函数组成 主函数可以放在任何一个源文件中 一个程序只有一个主函数main( ) 不同源文件的组装可以通过工程文件实现,8,模块化结构,C采用函数的优点 程序设计变得简单和直观 提高程序的易读性和可维护性 C语言提供了丰富的库函数 减少程序员的代码工作量 允许用户根据需要定义函数 提高了程序的开发速度和灵活性,9,什么是函
4、数?,什么是函数? 函数是一段完成特定功能的程序 可以用简单的方法为其提供必要的数据 自动执行这段程序 能保存执行后的结果将程序回到原处继续 将程序中反复使用的程序定义为函数的形式,10,函数的种类,用户使用的角度 库函数 在C语言的编译系统中,提供了很多若干已经编制好的函数,用户可以直接使用 用户定义函数 用户根据需求自己编写的一段程序,实现特定的功能 函数的形式 无参函数 使用该函数时,不需提供数据,直接使用该程序段提供的功能,通常完成某一个处理任务 有参函数 使用该函数时,必须提供必要的数据,根据提供数据的不同,可能获得不同的结果,11,说明 本例中共包含了两个函数 主函数main( )
5、 用户定义函数max( ) 主函数可以定义在程序的任意位置 函数的定义是平行的 彼此相互独立 不能嵌套定义 在主函数中 调用库函数 调用用户函数,例:求最大值函数 #include /*函数max()的原型说明*/ int max (int x,int y); void main() int n1,n2,n3, a; scanf(“%d%d” , for (i=0;i10;i+) num=rand()%10+1; for (j=0;jnum;j+) printf(*); printf( n ); printf(n) ; ,本例是在屏幕上输出10行*,每一行*的个数是120之间的随机数,程序中用
6、到了一个可以产生随机数的库函数rand(),这个函数的调用格式为: rand(); 调用结果返回一个随机数。库函数rand的原型说明在头文件stdlib.h中。,库函数,17,随机函数的应用: #include #include #include main() int i; srand(time(NULL); for(i=1;i=20;i+) printf(%10d“,1+(rand()%10); if (i%5=0) printf(n); printf(n); ,在随机函数时常见的错误是: 使用srand()代替rand() 函数产生随机数。,库函数,程序设计基础(C语言),函数定义,19,
7、函数的定义,概念 就是为实现某一具体功能而编写的函数的程序块 用户自定义函数 程序员自行定义和设计的函数 库函数一般只能提供一些低层服务的功能 用户自定义的函数则能针对具体的应用实现一些特殊的功能,20,函数的定义,函数定义的一般形式 例,函数类型 函数名(形参表说明) /*函数首部*/ /* 函数体 */ 说明语句 执行语句 return;函数返回值 ,int max(int x,int y) int z ; if (xy)z=x; else z=y; return (z); ,21,函数的定义,函数定义的一般形式 说明 类型类型 规定该函数返回值的类型 函数返回值可以是除数组和函数外的任何
8、合法的数据类型 例:int 、long、float、char、指针、结构体等 系统默认的类型是整类型 如果未指定类型,则返回值为整型 可用void表示如果函数没有返回值,函数类型 函数名(形参表说明) /* 函数体 */ 说明语句 执行语句 return;函数返回值 ,22,函数的定义,函数定义的一般形式 说明 函数名 是用户自定义的标识符 是C语言函数定义中唯一不可省略的部分 需符合C语言命名规则的标识符 用在程序中标识函数,并用该标识符调用函数 一个好的函数名应该能够反映该函数的模块的功能 函数名本身代表数值 它代表了该函数的入口地址,函数类型 函数名(形参表说明) /* 函数体 */ 说
9、明语句 执行语句 return;函数返回值 ,23,函数的定义,函数定义的一般形式 说明 形参表(也称“形式参数”) 形参表是用逗号分隔的一组变量说明 作用是指出每一个形参的类型和形参的名称 包括形参的类型和形参标识符 当调用函数时,接受来自主调函数的数据,确定各参数的值 形参表说明的两种表示形式:,函数类型 函数名(形参表说明) /* 函数体 */ 说明语句 执行语句 return;函数返回值 ,int func (int x, int y ) ,int func ( x, y )int x, y; ,24,函数的定义,函数定义的一般形式 说明 函数体 用 括起来的部分是函数的主体 函数体是
10、一段体现函数功能的程序 函数内部应有自己的说明语句和执行语句 形式参数表中经过说明的变量可以在函数体内直接使用 但函数内定义的变量不可以与形参同名 提示 函数体部分可以没有,空函数,但是每个函数体外面的一对 不能省略 任何情况下不允许一个函数内部定义另外一个函数(函数不能嵌套定义),函数类型 函数名(形参表说明) /* 函数体 */ 说明语句 执行语句 return;函数返回值 ,25,函数的定义,函数定义的一般形式 说明 函数返回值 函数调用后函数体计算/执行的结果称为函数的返回值 通过返回语句将计算结果带回主调函数 函数返回值类型 函数定义时的类型就是函数返回值的类型 C语言要求函数定义的
11、类型应当与返回语句中表达式的类型保持一致 当两者不一致时,系统自动进行转换,将函数返回语句中表达式的类型转换为函数定义时的类型 提示 函数的类型决定着返回值的类型 系统进行自动的转换会造成程序的不清晰、可读性差等,函数类型 函数名(形参表说明) /* 函数体 */ 说明语句 执行语句 return;函数返回值 ,26,函数的定义,函数定义的一般形式 说明 函数返回值 分析程序的运行结果,函数类型 函数名(形参表说明) /* 函数体 */ 说明语句 执行语句 return;函数返回值 ,#include main( ) float a,b;int c;scanf (%f%f, ,运行时,若从键盘
12、输入:4.5 6.8 结果为:6,27,函数的定义,函数定义的一般形式 返回语句 格式 功能 赋给当前被调函数一个值 结束当前被调函数的执行,将表达式的值带回主调函数,函数类型 函数名(形参表说明) /* 函数体 */ 说明语句 执行语句 return;函数返回值 ,return 表达式; /*return(2*3)表示函数返回值为6 */return(表达式); /*return 2*3 表示函数返回值为6 */return; /*没有返回值*/,28,函数的定义,函数定义的一般形式 返回值语句 提示 函数的返回值只能有一个 当函数中不需要指明返回值时可以写成:return; 并不是函数执行
13、后没有值 只是没有被用户指定并由系统分配函数一个随机值 函数中不需要指明返回值时可以不写返回语句 此时,并不意味该函数不带回返回值,而是带回一个不确定的值,有可能给程序带来某种意外的影响,函数类型 函数名(形参表说明) /* 函数体 */ 说明语句 执行语句 return;函数返回值 ,29,函数的定义,函数定义的一般形式 返回值语句 提示 一个函数体内可以有多个返回语句,不论执行到哪一个,函数都结束,回到主调函数 例如 对带有返回值的函数,在调用时,可以将其作为同类型的一个变量 一样使用 例如,函数类型 函数名(形参表说明) /* 函数体 */ 说明语句 执行语句 return;函数返回值
14、,sign(int x) if(x0) return(1); if(x=0) return(0); if(x 0) renturn(-1); ,int a,b,c,max; max=max(c,max(a,b);,30,函数的定义,函数定义的一般形式 返回值语句 提示 为了保证函数不返回任何值,C语言规定,可以定义无类型(void类型)函数,同时函数体可以省略使用return语句,如果使用也只能使用return;(不能带任何参数),函数类型 函数名(形参表说明) /* 函数体 */ 说明语句 执行语句 return;函数返回值 ,31,函数的定义,空类型 说明没有返回值 C语言规定,一个函数可
15、以没有返回值,函数类型应明确定义为 void(空)类型 对于void(空)类型函数,系统保证不使函数带有任何值 同时也禁止在调用函数中使用被调函数的值 说明没有形参 形参表明确地写明void,表示没有形式参数 例如:void main(void),32,函数的定义,空类型 格式 说明 void类型的函数不是调用函数之后不再返回,而是调用函数在返回时没有返回值 void类型的函数与有返回值类型的函数在定义过程中没有区别,只是在调用时不同 void类型的函数不能将函数调用放在表达式之中,只能在语句中单独调用 void类型的函数一般用于完成一些规定的操作,void 函数名(形参表) ,33,函数的定
16、义,空类型 例题分析 定义为“void”型的函数,在调用时不返回任何值,所以不能将其使用在赋值语句后表达式中 在主调程序中引用了void函数。编系统在编译这个程序时,会提示错误信息:“not an allowed type in function main”,例: void printchar(char c) printf(“%c=%d” ,c,c); main() int k; k=printchar(a); /* printchar没有返回值*/ printf(“%dn” ,k); ,34,问题1: void fun1(a,b,c) printf(“%d%d%d” ,a,b,c);?,正确
17、格式:void fun1( int a,int b,int c ),问题2: float fun2(float a,float b) float a,b,c; c=a+b; return(c);?,形参被重复定义,问题3:已知函数abc的定义格式为: void abc() 则函数定义中void的含义是_。 A.执行函数abc后,函数没有返回值 B.执行函数abc后,函数不再返回 C.执行函数abc后,可以返回任何类型 D.以上答案都是错误的,函数的定义,35,【例】指出如下程序段中的错误。 int fun(void) printf(“inside fun n”); int fun1(void)
18、 printf(“inside fun1n”); int sum(int x,int y) int result; result=x+y; (c) int sum(int x) if(x=0) return 0; else x+sum(x-1); ,错误:函数fun1定义在函数fun的内部. 改正:将函数fun1的定义移出函数fun之外.,错误:函数应该返回一个整数值,但却没有返回值语句. 改正:添加一个return语句. return result; 或删除后 return x+y;,错误:没有返回x+sum(x-1)的结果. 改正:把else块中的语句改为: return x+sum(x-
19、1);,函数的定义,36,函数的定义,无参函数的定义 例:编写一个函数,输出“c programming.。,#include func2 ( ) printf (“,37,函数定义小结,语言的程序中函数很多, main是唯一不可缺少的函数 是整个程序的主函数 程序运行时,从主函数开始执行 一个程序由多个函数组成时,主函数main与程序中其它函数的任意次序排列 main作为最后一个函数放在文件结尾处,系统也总是要从main开始运行 语言的一个程序可以由多个文件组成 每个文件可以单独编译 将几个文件一起联接成一个可运行文件 一个函数的定义不能跨越在两个文件中 函数在一个文件中必须保持完整 一个程
20、序的多个函数定义中,不允许存在相同的函数名,38,函数定义小结,C语言的函数可以分为两类 带返回值的函数 通过调用可以得到一个确定的值,该值就是所调用函数的返回值 不带返回值函数 不带返回值的函数通常只是一个“过程” 只是用来完成某种操作 主调函数并不需要它有任何的信息返回 调用时可将其作为C的一个语句直接调用 函数不能嵌套定义 一个函数的定义不能从属与另外一个函数,39,无论有无形参,函数名后的()不能省略 形式参数表中说明的形参,在函数体中不再需要说明 可以同一般的变量完全一样直接使用 函数体内部的变量说明与形参说明的含义不同 前者说明函数体的一个局部变量,后者说明一个用于函数间传送数据的
21、形式变量 最好在形参列表中列出每个参数的类型 即使参数是默认的int 不应省略对每个形参的类型说明 例如: float max(float x,float y)不能写成 float max(foat x,y),此时y为系统缺省的int类型,函数定义小结,40,应尽可能多的使用系统提供的库函数 传递给函数的参数和函数定义中的相应的参数尽量不使用相同的名字 选择有意义的参数名和函数名可以使程序具有良好的可读性 可以避免过多地使用注释 需要大量参数的函数可能包含较多的功能(任务) 应该考虑将该函数分成完成单个任务的较小的函数 函数原型、函数头部和函数调用应该具有一致的参数个数、参数类型、参数顺序和返
22、回值类型,函数定义小结,41,常见错误 如果指定了非整型int类型的返回值类型,则省略函数定义中的返回值类型会导致语法错误 忘记从应该返回一个值的函数返回该值会导致无法预料的错误 ANSI C 标准规定被省略的结果是不确定的、随机的 从返回类型为void的函数返回一个值会导致语法错误 定义函数时,在其参数列表的)后以“;”结束是一种语法错误 形参的类型说明一定放在函数体内会导致语法错误 在函数体内部对形式参数再次定义是一种语法错误,函数定义小结,程序设计基础(C语言),函数调用,43,函数调用,定义 一个函数调用另一个函数 调用者称为主调函数 被调用的函数称为被调函数 主调函数使用被调函数的功
23、能,称为对被调函数的调用 函数调用的基本形式 通过函数名 函数的参数,例:求最大值函数 #include int max (int x,int y); void main() int n1,n2,a; scanf(“%d%d” , 说明 这种方式要求函数必须带回一个确定的值 函数的参数也是表达式 例,m=max(max(a,b),c); 或 printf(“%d” ,max(a,b);,49,函数声明,被调函数的声明 一个函数要调用另外一个函数 首先是被调用的函数必须存在 其次还应在主调函数中对所有被调函数加以说明 否则,在连接时会出现找不到所调用函数的错误信息 函数的调用也应遵循“先定义后使
24、用”的原则,50,函数声明,被调函数的声明 库函数的声明 被调函数是C语言系统提供的标准库函数 在源程序文件的开头处,使用#include命令,将存放所调用库函数的有关“头文件”包含到该程序文件中来 #include命令的一般形式为 #include #include”stdio.h”,51,函数声明,被调函数的声明 用户自定义函数的声明 被调用函数为用户自己定义的函数 一般情况下,应在主调用函数中对被调用函数(返回值)的类型进行说明 形式 说明 为编译系统进行类型检查提供依据 函数值是什么类型 有多少个参数,每一个参数是什么类型的,函数类型 函数名(形参类型1 形参名1,形参类型2 形参名2
25、 ),52,函数声明,被调函数的声明 用户自定义函数的声明 提示:在下列情况下可以省略函数声明 当函数的返回值为整型或字符型时 如果在同一个文件中既定义函数,又调用该函数 不论定义函数与调用函数在源程序中的位置关系如何,都可以省去函数说明 此时系统对其自动按整型处理 例:求两个非负数的最大公约数 分析:采用“转辗相除”法,若ab,求a/b的余数r; 若r=0,则b为最大公约数; 若r!=0,则 r-b, b- a, 再一次进行a/b求余数r, r=0, b为最大公约数,53,源程序: main() int a,b,r; scanf(%d%d, max=xy?x:y; max=maxz?max:
26、z; return(max); main() float a,b,c,max; scanf(“%f%f%f”,i=20; (3)执行到return( k )语句,带回返回值 ( k= 10 ) 。 (4)被调函数fun()的返回值赋给“=”左边的 变量j,j=10; (5)执行库函数printf,打印j的值。 (6)执行第二个函数调用语句j=fun(); (7)执行fun()函数体, k=k+i=20; i=i+10=20; (8)执行到return( k )语句,带回返回值 ( k= 20 ) 。 (9)被调函数fun()的返回值赋给“=”左边的 变量j,j=20; (10)执行库函数pri
27、ntf(),打印j的值。,函数执行过程,程序设计基础(C语言),参数传递,66,参数传递,函数之间的数据传递 C语言的一个源程序文件可以由多个函数组成 每个函数在功能上是独立的 目地就是共同实现某一特定的功能,以解决某个具体的实际问题 函数与函数之间通常要传递数据和计算结果 C语言中采用三种方式进行数据传递 参数传递 实参与形参一一对应方法在主调函数与被调函数之间传递多个数据 返回值传递 被调函数返回主调函数一个结果值 全局变量传递 在一个函数内使用其他函数中的某些变量的结果,67,参数传递,形参与实参 形参是函数定义时由用户定义的形式上的变量 定义函数时函数名后()内的变量列表 形参与函数体
28、内定义的其它变量一样在函数体内引用 这些变量在未调用函数之前并不实 际占用内存 实参是函数调用时,主调函数为被调函数提供的原始数据 调用函数时给该函数形参具体指定的值 是常量、表达式或变量,例如: main() . a=max(num1,num2); .,int max(int x,int y),68,参数传递,参数传递方式值传递” 含义 在调用函数时,将实参变量的值取出来,复制给形参变量 语言中的实参可以是一个表达式 调用时先计算表达式的值,再将结果(值)复制到形参对应的存储单元中 在函数内部使用从实参中复制来的值进行处理 形参是函数的局部变量 仅在函数内部才有意义 不能用它来传递函数的结果
29、 一旦函数执行结束形参存储单元所保存的值不再保留,69,参数传递,“传值” 特点 数据在主调函数和被调函数中占用不同的存储空间 在函数内部对形参的任何操作,其结果只能影响形式参数的值,而不影响实际参数的值 可以避免被调用函数的操作对调用函数中的变量可能产生的副作用 此种方式只能实现外部数据向函数内部的传递,而不能实现函数内部数据的传出,70,例: void change(int k) printf(“2k=%dn” ,k); k=k+10; printf( “4k=%dn” ,k); main() int i; i=10; printf(“1i=%dn” ,i); change(i); pri
30、ntf(“3i=%dn” ,i); ,参数传递,“传值”,71,例:分析下面程序结果 main () int a,b; void p(int,int); a=5; b=8; p(a,b); p(a+b,a); p(a/b,b); void p(int x,int y) y=x+y; printf(%d,%dn,x,y); ,则程序的执行结果为: A.5,13 B.5,13 C.5,13 D.5,13 13,18 18,5 18,5 18,23 0,8 1,13 1,14 1,13,参数传递,“传值”,72,例:求100200之间的全部素数之和 #include “math.h” main()
31、int m,sum=0; for (m=101;m=200;m=m+2) sum+=sum(m); printf(“%dn” ,s); int sum(int m) int i,k; k=sqrt(m); for (i=2;i=k;i+) if(m%i=0) return (0); return (m); ,参数传递,“传值”,73,源程序: #include main( ) int k=2,n=0; do if(isprime(k)x=3; y=5; printf (“before swap x=%d, y=%dn”, x, y);swap(x, y); /* 用变量x和y作为实际参数调用函
32、数 */printf (“after swap x=%d, y=%dn”,x,y);swap ( int m, int n) int temp; /* 借助临时变量交换两个形参变量m和n的值 */ temp = m; /* */ m = n; /* */ n= temp; /* */ printf (in swap m=%d, n=%dn, m, n);,参数传递,例题 若在主函数中变量x=3,y=5,编写 一个函数交换主函数中两个变量的 值,使变量x=5,y=3。,“传值”,before swap x=3, y=5in swap m=5, n=3after swap x=3, y=5,75,
33、参数传递,“传址” 传递地址 在值传递方式下,每个形式参数仅能传递一个数据 当需要在函数之间传递大量数据时,值传递方式显然不适用 将数据的存储地址作为实参传递给被调函数的形参 允许被调用函数修改原始的变量值 要求形参的数据类型应是指针类型,76,参数传递,“传址” 特点 处理数据在主调函数和被调函数中占用相同的存储空间 形参和实参所指向的地址是同一个地址 对形参的操作会直接影响到实参的结果 此种方式即可以实现外部数据向函数内部的传递,也可以实现加工后的数据从函数内部向主调函数的传递 详细内容参见指针,77,参数传递,函数参数 提示 形参在被调函数中定义,实参在主调函数中定义 形参是形式上的 定
34、义时编译系统并不为其分配存储空间函数调用时,临时分配存储空间,接受并处理实参 函数调用结束,形参被释放(数据消失) 实参可以是变量名或表达式 必须在函数调用之间有确定的值 实参与形参必须类型相同,个数相等,一一对应 当实参之间有联系时,不同的编译系统下实参的求值顺序不同 VC是从右向左,78,参数传递,数组作函数参数 两种方式 数组中的元素作函数的参数 数组名作函数的参数 例:int a5;,a2,int x,a,pa,int* pa; 或 int b5;,79,参数传递,数组作函数参数 数组元素作函数的参数 可以采用传递普通变量一样的方式 以单个元素的方式实现数组元素的传递 “复制数据” 的
35、方法 由于形参是在函数定义时定义,并无具体的值,因此数组元素只能在函数调用时,作函数的实参 当用数组中的元素作函数的实参时 必须在主调函数内定义数组,并赋值 实参与形参之间是“值传递”的方式,80,参数传递,数组作函数参数 数组元素作函数的参数 例:求一维数组a4的所有元素之和 数组元素作实参,float sumall(float a,float b,float c,float d); return(a+b+c+d); main() float sum; static float a4=1,2,3,4; sum=sumall(a0 ,a1 ,a2 ,a3); printf(“sum=%fn”
36、,sum); 演示8B。C,在调用sumall函数时,将 数组元素a0 a3作为 实参把值传递给sumall函 数的a,b,c,d的四个形 参,是单向的按值传递。,81,参数传递,数组作函数参数 数组名作参数 数组名作函数的参数,必须遵循以下原则 参数形式 如果形参是数组名,则实参必须是实际的数组名 如果实参是数组名,则形参可以是同样维数的数组名或指针 数组定义 要在主调函数和被调函数中分别定义数组 形参数组可以不指明长度,82,参数传递,数组作函数参数 数组名作参数 提示 C语言允许将整个数组作为函数的参数进行传递 数组名代表了该数组在内存中的首地址 采用的是按址传递方式 调用方式 只需将数
37、组名作为参数直接调用函数即可,无须使用下标 实参数组名将该数组的起始地址传递给形参数组,两个数组共享一段内存单元,83,参数传递,数组作函数参数 数组名作参数 例:分析程序的执行过程 分析 调用时,实参数组将首地址string 赋值给形参数组str 两个数组共同占用相同的内存单元,共享数组中的数据 string0与str0代表同一个元素,#include print ( char str ) printf (%s,str); main( ) char string20= C Programming; print(string); /* 数组名做函数的实参 */,84,参数传递,数组作函数参数
38、演示:传递整个数组和传递一个数组元素之间的差别,#include #define SIZE 5 void modifyarray(int ,int); void modifyelement(int); main( ) int aSIZE=0,1,2,3,4; int i; pritnf(“nThe values of the original array are:n”); for (i=0;i=SIZE-1;i+) printf(“%3d”,ai); printf(“n”); modifyarray(a,SIZE); /*以传址方式传递数组a*/ pritnf(“The values os t
39、he modified array are:n”);,85,for(i=0;i=SIZE-1;i+) printf(“%3d”,ai); printf(“nThe values of a 3is %3dn”,a3); modifyelement(a3); printf(“The values of a3is %3dn”,a3); void modifyarray(int b ,int size) int j; for (j=0;j=size-1;j+) bj*=2; void modifyelement(int x) printf(“Velue in modifyelement is %3dn
40、”,x*=2); ,参数传递,86,参数传递,数组作函数参数 例题,【例】求任意输入10个数的平均值。(数组名作实参) #include “stdio.h” main() int i; float a10,ave; float aver(float a10); for (i=0;i10;i+) scanf(“%f” , for(i=0; i=n; i+) s*=xi; return s; main() int a =1,2,3,4,5,6; int x=fun(a,4 ); printf(“%d”,x); A. 24 B. 120 C. 720 D.5,本题主要测试数组在函数之间 传递的用法。
41、在函数间传递数 组时,通常传递的是数组的首 地址。由于数组元素是连续存 放的,因此可以根据该地址找 到数组的所有的元素。由于传 递数组的长度为 4,因此函数 fun中的计算只包括元素1,2, 3,4,5,函数返回的值是 1*2*3*4*5=120。所以输出是120。,88,参数传递,数组作函数参数 例题 编写一个函数,分别求两个浮点数数组元素的平均值。并在主调函数中输出,float average(arrary,n) int n; float arrary ; int i; float aver,sum=0.0; for (i=0;in;i+) sum+=arraryi ; aver=sum/
42、n; return(aver); ,定义形参时未指明数组大小, 而且引进一个参数 n,以便 两次调用 average 函数时, 两个实参数组的长度可以先 后传递给n,从而在average 函数体中能分别访问两个数 组的所有元素.,89,参数传递,数组作函数参数 例题 编写一个函数,分别求两个浮点数数组元素的平均值。并在主调函数中输出,main() float a8 ,b9 ; int i; for (i=0;i8;i+) scanf(“%f” ,;i+) s=isprime(i); if (s)sum+=i; return(sum); ,int mul(int n) int i,s; float t=1.0; for (i=2;i=n;i+) s=isprime(i); if (s)t*=i; return t; ,int isprime(int m) int i; for (i=2;i=sqrt(m);i+) if (m%i= =0)return(0); return (1); ,函数嵌套调用,98,函数的递归调用,递归是在连续执行某一处理过程时,该过程中的某一步要用到它自身的上一步(或上
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CEPPC 14-2023工业碳效码平台建设应用规范
- T/CPF 0106-2025包装用活性炭气味吸附剂
- T/SDG 003-2021建筑幕墙用中空玻璃
- T/ZJSEE 0049-2025火力发电企业电力监控系统商用密码应用技术要求
- T/ZTCA 018-2024无创电子血压计准确性评价方法
- 2026年新能源储能系统设计工程师试题及答案
- T/ZGM 005-2025城镇供水厂纳滤膜用阻垢剂性能测试方法
- T/QYZL 53-2024清远鸡种鸡场建设规范
- T/INFOCA 30-2024云边协同内容分发系统设计指南
- T/HAEPCI 44-2022南方地区果园面源污染生态防控技术规范
- 2026年科研诚信建设培训课件(精讲版)
- 中国人寿保险集团笔试题目
- 2026年浙江省宁波慈溪观海卫镇人民政府招聘编外13人易考易错模拟试题(共500题)试卷后附参考答案
- 2026年秋新教材教科版五年级科学上册教学计划及进度表
- 2026年秋北师大版新教材四年级上册数学(全册)知识点清单梳理
- (2026年秋)外研社版六年级英语上册单词默写表(汉译英)
- 2024版压力容器设计审核题库(综合题)
- 手术室护理人文关怀与沟通技巧
- (2026年)皮内注射技术课件
- 2025版《广东省护理病历书写管理规范(试行)》
- 小学英语教学颜色课件
评论
0/150
提交评论