第八章函数 学习目的与要求:1.重点掌握函数的定义与调用 2.理解函数参数的传递机制--传值调用和传址调用。 3.理解变量存储类型的概念及各种存储类型变量的生存期和有效 范围 4.了解函数的嵌套调用与递归调用 5.重点理解、掌握数组作为函数参数 1.函数的定义和调用。 2.函数形参和实参。 3.数组作为函数参数 4.变量的存储类别 第1讲 知识归纳 1.函数概述 (1)一个源程序文件由一个或多个函数组成。 (2)一个c程序由一个或多个源程序文件组成 (3)C程序的执行从man函数开始到manO函数结束。 (4)所有函数都是平行的,函数不能嵌套定义。 2.函数定义形式 函数类型函数名(形参列表) 函数体 return(表达式) (1)形参列表样式:intx,inty,注意:每个形参都有类型 (2)函数类型原则上要求与 return后表达式类型一致,如不一致,表达式类型强制转换 成函数的类型。如函数的确不需要返回值,设为void型; (3) retum语句作用:一是带返回值到函数调用处。 是将流程返回函数调用处:如果该函数没有返回值,可以省略 return,最后的}也具 有将流程返回调用处的功能
第八章 函 数 学习目的与要求:1. 重点掌握函数的定义与调用。 2. 理解函数参数的传递机制----传值调用和传址调用。 3. 理解变量存储类型的概念及各种存储类型变量的生存期和有效 范围。 4. 了解函数的嵌套调用与递归调用。 5. 重点理解、掌握数组作为函数参数。 重点: 1. 函数的定义和调用。 2. 函数形参和实参。 3. 数组作为函数参数。 4. 变量的存储类别。 第 1 讲 知识归纳 1. 函数概述 (1) 一个源程序文件由一个或多个函数组成。 (2) 一个 c 程序由一个或多个源程序文件组成。 (3) C 程序的执行从 main 函数开始到 main()函数结束。 (4) 所有函数都是平行的,函数不能嵌套定义。 2. 函数定义形式 函数类型 函数名(形参列表) { 函数体 return(表达式); } (1) 形参列表样式: int x, int y ,注意:每个形参都有类型。 (2) 函数类型原则上要求与 return 后表达式类型一致,如不一致,表达式类型强制转换 成函数的类型。如函数的确不需要返回值,设为 void 型; (3) return 语句作用:一是带返回值到函数调用处。 二是将流程返回函数调用处;如果该函数没有返回值,可以省略 return,最后的}也具 有将流程返回调用处的功能
C语言程序设计上机指导与同步训练 如: int Max(intx,inty) y ? x:y. return (z)i (4)如何确定一个函数是否需要返回值?即是否需要 return语句—要看函数调用语 句是否被使用,如函数调用语句是一个独立语句,就不需要返回值,函数类型为void型; 如函数调用语句是表达式或语句的一个成分,则需要返回值,返回值类型决定函数类型 3.函数调用形式 函数名(实参列表) (1)实参列表:如Max(a,b);,a.b必须是已经有具体值或被赋值 (2)注意区分:实参与形参 函数定义时,是形参,每个形参前要有类型 函数调用时,是实参,可以是常量、常量表达式、已赋值的变量等 (3)要求:实参与形参,个数相等,类型一致,即匹配 (4)传值调用机制:当函数调用时,系统给形参分配临时存储空间,实参传值给形参 当函数调用结束,流程返回主调函数,形参的存储空间被释放 传值调用是单向的,即形参的改变不影响实参。 4.函数声明 当函数定义在后,调用在前时,要在调用前添加函数声明语句。 函数声明语句的格式:■部+“:” 如: int Max( 当函数定义在前,调用在后时,可以不加函数声明。 基础训练(A 、选择题 1.C语言程序由函数组成,它的() A)主函数必须在其他函数之前,函数内可以嵌套定义函数 B)主函数可以在其他函数之后,函数内不可以嵌套定义函数 C)主函数必须在其他函数之前,函数内不可以嵌套定义函数 D)主函数必须在其他函数之后,函数内可以嵌套定义函数 2.以下说法中正确的是()。 A)C语言程序总是从第一个定义的函数开始执行 B)在C语言程序中,要调用的函数必须在manO函数中定义 C)C语言程序总是从 maino函数开始执行 D)C语言程序中的man函数必须放在程序的开始部分 3.在函数的定义格式中,必须使用C保留字的部分是()。 A)类型修饰符 B)函数名 C)形式参数表 D)函数体
·202· C 语言程序设计上机指导与同步训练 ·202· 如:int Max( int x , int y) { int z ; z = x > y ? x : y ; return ( z); } (4) 如何确定一个函数是否需要返回值?即是否需要 return 语句——要看函数调用语 句是否被使用,如函数调用语句是一个独立语句,就不需要返回值,函数类型为 void 型; 如函数调用语句是表达式或语句的一个成分,则需要返回值,返回值类型决定函数类型。 3. 函数调用形式 函数名(实参列表); (1) 实参列表:如 Max( a , b ); a,b 必须是已经有具体值或被赋值; (2) 注意区分:实参与形参; 函数定义时,是形参,每个形参前要有类型; 函数调用时,是实参,可以是常量、常量表达式、已赋值的变量等; (3) 要求:实参与形参,个数相等,类型一致,即匹配; (4) 传值调用机制:当函数调用时,系统给形参分配临时存储空间,实参传值给形参, 当函数调用结束,流程返回主调函数,形参的存储空间被释放。 传值调用是单向的,即形参的改变不影响实参。 4. 函数声明 当函数定义在后,调用在前时 ,要在调用前添加函数声明语句。 函数声明语句的格式:函数首部 + “;” 如: int Max( int x, int y ) ; 当函数定义在前,调用在后时,可以不加函数声明。 基础训练(A) 一、选择题 1. C 语言程序由函数组成,它的( )。 A) 主函数必须在其他函数之前,函数内可以嵌套定义函数 B) 主函数可以在其他函数之后,函数内不可以嵌套定义函数 C) 主函数必须在其他函数之前,函数内不可以嵌套定义函数 D) 主函数必须在其他函数之后,函数内可以嵌套定义函数 2. 以下说法中正确的是( )。 A) C 语言程序总是从第一个定义的函数开始执行 B) 在 C 语言程序中,要调用的函数必须在 main()函数中定义 C) C 语言程序总是从 main()函数开始执行 D) C 语言程序中的 main()函数必须放在程序的开始部分 3. 在函数的定义格式中,必须使用 C 保留字的部分是( )。 A) 类型修饰符 B) 函数名 C) 形式参数表 D) 函数体
第二部分¢语言程序设计同步训练 203 4.若调用一个函数,且此函数中没有 return语句,则正确的说法是()。 该函数 A)没有返回值 B)返回若干个系统默认值 C)能返回一个用户所希望的函数值 D)返回一个不确定的值 5.以下不正确的说法是()。 C语言规定 A)实参可以是常量、变量或表达式 B)形参可以是常量、变量或表达式 C)实参可以是任意类型 D)形参应与其对应的实参类型一致 C语言规定,函数返回值的类型是由() A) return语句中的表达式类型所决定 B)调用该函数是的主调函数类型所决定 C)调用该函数时系统临时决定 D)在定义该函数时所指定的函数类型所决定 7.以下错误的描述是() 函数调用可以 A)出现在执行语句中 B)出现在一个表达式中 C)作为一个函数的形参 D)作为一个函数的实参 8.以下正确的说法是() A)定义函数时,形参的类型说明可以放在函数体内 B) return后边的值不能为表达式 C)如果函数值的类型与返回值类型不一致,以函数值类型为准 D)如果形参与实参的类型不一致,以实参类型为准 9.对于某个函数调用,不用给出被调用函数的原形的情况是() A)被调用函数是无参函数 B)被调用函数是无返回值的函数 C)函数的定义在调用处之前 D)函数的定义在别的程序文件中 10.已知函数abc的定义为 id abco 则函数定义中void的含义是()。 A)执行函数abc后,函数没有返回值 B)执行函数abc后,函数不再返回 C)执行函数abc后,可以返回任意类型D)以上三个答案全是错误的 、填空题 1.C语言规定,可执行程序的开始执行点是
第二部分 C 语言程序设计同步训练 ·203· ·203· 4. 若调用一个函数,且此函数中没有 return 语句,则正确的说法是( )。 该函数 A) 没有返回值 B) 返回若干个系统默认值 C) 能返回一个用户所希望的函数值 D) 返回一个不确定的值 5. 以下不正确的说法是( )。 C 语言规定 A) 实参可以是常量、变量或表达式 B) 形参可以是常量、变量或表达式 C) 实参可以是任意类型 D) 形参应与其对应的实参类型一致 6. C语言规定,函数返回值的类型是由( )。 A) return 语句中的表达式类型所决定 B) 调用该函数是的主调函数类型所决定 C) 调用该函数时系统临时决定 D) 在定义该函数时所指定的函数类型所决定 7. 以下错误的描述是( )。 函数调用可以 A) 出现在执行语句中 B) 出现在一个表达式中 C) 作为一个函数的形参 D) 作为一个函数的实参 8. 以下正确的说法是( )。 A) 定义函数时,形参的类型说明可以放在函数体内 B) return 后边的值不能为表达式 C) 如果函数值的类型与返回值类型不一致,以函数值类型为准 D) 如果形参与实参的类型不一致,以实参类型为准 9. 对于某个函数调用,不用给出被调用函数的原形的情况是( )。 A) 被调用函数是无参函数 B) 被调用函数是无返回值的函数 C) 函数的定义在调用处之前 D) 函数的定义在别的程序文件中 10. 已知函数 abc 的定义为: void abc() {......} 则函数定义中 void 的含义是( )。 A) 执行函数 abc 后,函数没有返回值 B) 执行函数 abc 后,函数不再返回 C) 执行函数 abc 后,可以返回任意类型 D) 以上三个答案全是错误的 二、填空题 1. C 语言规定,可执行程序的开始执行点是
C语言程序设计上机指导与同步训练 2.从用户使用的角度看,函数有 两种。 3.从函数的形式看,函数分为 利和 两类。 4.对于有返回值函数,要结束函数运行必须使用语句 5.如果使用库函数,一般还应该在本文件开头用 命令将调用有关库函数时 所需用到的信息“包含”到本文件中。 6.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是 能力提高(B) 、选择题 1.以下正确的函数形式是()。 A)double fun(int x, int y) B)fun(int x, y z=x+y return z Z C)fun(x,y) D) double fun(int x, int y) fint x, y; double z; i double z ZX+y, return z: j ZX+y return z; i 2C语言中进行乘方运算,例如求a的3次方,可以使用()。 A)a^3 B)a*3 C)pow(a, 3) D)power(a, 3) 3.(多选)从下列函数原形看,返回值类型为int的函数有()。 A)char Fl(int n ) B)int F2(char n); C)F3(int n); D)int F4(float n) 4.(多选)在函数的定义格式中,可以是void的部分有()。 A)类型修饰符B)函数名 C)形式参数表D)函数体 5.下面函数调用语句含有实参的个数为()。 func((expl, exp2),(exp3, exp4, exp5 )); A)1 B)2 D)4 6.以下程序有语法性错误,有关错误的正确说法( main() void prt char ()i k=prt char(G)i A)语句 void prt-char(,有错,它是函数调用语句,不能用void说明 B)变量名不能使用大写字母 C)函数说明和函数调用语句之间有矛盾 D)函数名不能使用下划线 填空题 要在C语言中求sin30的值,则可以调用库函数,格式为
·204· C 语言程序设计上机指导与同步训练 ·204· 2. 从用户使用的角度看,函数有 和 两种。 3. 从函数的形式看,函数分为 和 两类。 4. 对于有返回值函数,要结束函数运行必须使用语句 。 5. 如果使用库函数,一般还应该在本文件开头用 命令将调用有关库函数时 所需用到的信息“包含”到本文件中。 6. C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是: __________。 能力提高(B) 一、选择题 1. 以下正确的函数形式是( )。 A) double fun(int x;int y) B) fun(int x,y) {z=x+y;return z;} {int z; return z;} C) fun( x,y) D) double fun(int x,int y) {int x,y;double z; {double z; z=x+y;return z;} z=x+y;return z; } 2. C 语言中进行乘方运算,例如求 a 的 3 次方,可以使用 ( )。 . A) a^3 B) a**3 C) pow(a,3) D) power(a,3) 3. (多选)从下列函数原形看,返回值类型为 int 的函数有( )。 A) char F1(int n ); B) int F2(char n ); C) F3(int n); D) int F4(float n); 4. (多选)在函数的定义格式中,可以是 void 的部分有( )。 A) 类型修饰符 B) 函数名 C) 形式参数表 D) 函数体 5. 下面函数调用语句含有实参的个数为( )。 func((exp1,exp2),(exp3,exp4,exp5)); A) 1 B)2 C) 5 D)4 6. 以下程序有语法性错误,有关错误的正确说法( )。 main() { int G=5,k; void prt_char(); …… k=prt_char(G); …… } A) 语句 void prt-char();有错,它是函数调用语句,不能用 void 说明 B) 变量名不能使用大写字母 C) 函数说明和函数调用语句之间有矛盾 D) 函数名不能使用下划线 二、填空题 1. 要在 C 语言中求 sin30 的值,则可以调用库函数,格式为
第二部分¢语言程序设计同步训练 205 2.有如下函数调用语句 该函数调用语句中,含有的实参个数是 3.下面add函数的功能是求两个参数的和,并将和值返回调用函数。函数中错误的部 分是 改后为 void add(float a, float b) Float c 阅读程序写出执行结果 1.以下程序的运行结果是 int max (int x int y)i fint a=l, b=2,Ci printf("max is d\n",c) max(int x, int y) return(z) 以下程序的运行结果是 maln incx(); I int x=O printf("x=d\n",++x) 四、程序填空 1.函数 gongyu的作用是求整数numl和num2的最大公约数,并返回该值,请填空。 [temp=numl; numl=num2; num2=temp; 1
第二部分 C 语言程序设计同步训练 ·205· ·205· 2. 有如下函数调用语句: func(rec1,rec2+rec3,(rec4||rec5)); 该函数调用语句中,含有的实参个数是 。 3. 下面 add 函数的功能是求两个参数的和,并将和值返回调用函数。函数中错误的部 分是 ,改后为 。 void add(float a,float b) {float c; c=a+b; return c; } 三、阅读程序写出执行结果 1. 以下程序的运行结果是( )。 #include<stdio.h> int max (int x int y); main() {int a=1,b=2,c; c=max(a,b); printf("max is %d\n",c); } max(int x,int y) {int x; z=(x>y)?x:y; return(z); } 2. 以下程序的运行结果是( )。 int incx(); main() {incx(); incx(); incx(); } incx() { int x=0; printf("x=%d\n",++x); } 四、程序填空 1. 函数 gongyu 的作用是求整数 num1 和 num2 的最大公约数,并返回该值,请填空。 gongyu(int num1,int num2) {int temp,a,b; if(num1( _) num2) {temp=num1;num1=num2;num2=temp;} a=num1;b=num2; while(_ ) {temp=a%b;a=b;b=temp;}