《计算机等级考试二级C语言配套课件第07章 函数》由会员分享,可在线阅读,更多相关《计算机等级考试二级C语言配套课件第07章 函数(37页珍藏版)》请在金锄头文库上搜索。
1、第7章 函数与模块化程序设计基础,7.1 概述,7.2 函数的定义,7.3 函数的调用,7.4 函数说明,7.5 函数与被调函数之间的数据传递,6.1 概述,7.1概述,C语言是 结构化程序设计语言,通常采用自顶向下逐步求精的模块化程序设计方法和单入口单出口控制结构。,C语言是通过函数来实现模块化程序设计的。所以较大的C语言应用程序,往往是由多个函数组成的,每个函数分别对应各自的功能模块,在C语言中,函数就是完成相对独立功能的一段程序,6.1 概述,7.1概述,C语言是 结构化程序设计语言,通常采用自顶向下逐步求精的模块化程序设计方法和单入口单出口控制结构。(在第一章中已经介绍) 。,C语言是
2、通过函数来实现模块化程序设计的。所以较大的C语言应用程序,往往是由多个函数组成的,每个函数分别对应各自的功能模块,在C语言中,函数就是完成相对独立功能的一段程序,从函数使用的角度来看,C语言的函数可以分为两类:标准库函数和用户自定义函数。,1. Turbo C系统提供了400多个标准库函数(参见附录8)按功能可以分为: (1)类型转换函数,(2)字符判别与转换函数,(3)字符串处理函数,(4)标准I/O函数,(5)文件管理函数,(6)数学运算函数等。,它们的执行效率高,用户需要时,可在程序中直接进行调用。,6.2 函数的定义,7.2 库函数,(1)c语言程序设计中,使用的之前要求在程序开头出包
3、含以下命令行:,#include “文件名。h”或#include ,注意:以上声明实际上告诉计算机所使用函数的出处,这是一条命令,在13章将详细介绍。它不是一条语句,所以不能在其后加“;”,(2)标准库函数的调用: a、作为语句的一部分,即出现在表达式中,此时该函数在调用后会返回一个值。 y=pow(x,2.5)+1.3 b、作为单独语句完成某种操作,此时该函数是不需要返回值的。 printf(”Hello world!”);,函数值类型名 函数名(形式参数类型及参数说明) 数据说明部分 语句部分 ,1 、函数定义形式,如: int max(int a,int b) return a+b ,
4、6.2 函数的定义,7.3 函数定义和返回值,注意: 1、函数名和形式参数都是合法的标识,用用户指定。在同一个程序中,函数名应该唯一; 2、C语言规定,函数不可嵌套定义; 3、如果省略了“函数值类型名”,则默认情况下,返回int型数据; 4、除了返回值类型为int类型的函数外,函数必须先定义,后使用; 5、若函数功能只是完成某种操作,不需要返回值时,应将其返回类型定义为void,double add( double a double b) double s; s=a+b; return s ,函数首部,函数体,return语句的表示形式如下: return 表达式; 或 return(表达式)
5、;,2、函数返回值,在函数调用过程中,有时被调函数要向调用函数带回一个值, 这个被带回主函数的值称为函数的返回值。在c语言中,要实 现这样的操作,要用到retuen语句,6.2 函数的定义,注意:1、函数返回值的类型要与函数首部说明类型保持一致,如 果不一致,则以函数首部说明为准,系统进行类型的自动转化。 2、一个函数中可以有多个return,但当执行到第一个遇到的 Return,函数则返回主调函数。 3、return后的表达式可省,但此时函数声明应为void,它的 作用是使流程返回到主调用函数并没有确定的返回值。如果函数中 没有return,则函数将执行到函数的末尾“”处,在返回到调用函数。
6、,例6-3:写出以下程序的运行结果。 max( ) /*函数类型缺省,为int型,return语句缺省*/ min( ) /*函数类型缺省,return语句缺省表达式*/ return ; main( ) printf(%d,%dn,max(),min()); 程序运行结果为: -256,-256 /*返回值不确定,TC2开发环境中返回值为0*/,若函数max与函数min的类型为float,则返回值为:,Floating point error: Domain.,Abnormal program termination,6.2 函数的定义,在具有多个函数的C程序中,主函数出现的位置并不重要。为
7、阅读方便,可将主函数main放在最前面。为了避免过多的函数声明语句,习惯上将主函数放在所有函数之后。不论主函数放在什么位置,一旦启动该程序,总是从主函数开始执行,并且最终在主函数结束整个程序的执行。,3. 函数main,一个C语言程序至少包含一个函数,并且必须有且只能有一个名为main的函数,称之为主函数。,在包含多个函数的程序中,不仅可以由主函数调用其它函数,还可以由被调函数调用其它函数,但任何函数都不能调用主函数。,通常主函数的类型定义为void(在TC2中可省略函数main的类型说明)。,6.2 函数的定义,7.4 函数的调用,在C语言的一般函数体中,可以包含对其它函数的调用,称为函数的
8、嵌套调用,甚至包含对自身的调用,称为函数的递归调用。,一个函数一旦被定义,就可在程序的其它函数中使用它,这个过程称为函数调用。,一. 函数的调用的两种形式,函数名(实际参数列表),函数调用的一般形式:,6.3 函数的调用,A、作为表达式的一部分 y=add(3.0,4.0)+2; B、做为对立的一条语句 函数名(实参列表);,实际参数也称为实在参数,简称为实参,实际参数之间以“,”分隔。,函数调用时,实参与形参应保持个数、次序及类型的一致性,以确保实参与形参之间数据的正确传递。,实际参数一般为表达式,可以是常量、变量(调用时必须有确定的值或确定的地址)。,函数调用时,函数名必须与所调用的函数名
9、完全一样,函数在调用之前需先定义,后调用。,当实际参数的个数、次序、类型与对应形式参数的个数、次序、类型不一致时,系统并不提示错误,后果却难以预测。,注意,6.3 函数的调用,例6-4, 函数语句调用与函数表达式调用。 #include void main() printf(nk1=%d,printf(n%k2); 程序运行结果为: k2 k1=3,6.3 函数的调用,void main( ) /*主函数中采用函数参数调用形式调用函数max2*/ int x,y,z,m; scanf(%d,%d,%d,i=n;i+)r=r*i; return r; ,#include void main()
10、int m1,m2; long result; long fac(int); /*在主函数中声明后面定义的函数fac*/ scanf(%d,%d, printf(“(1)x=%d y=%d z=%dn “,x,y,z); try(x,y,z); /*调用函数try,传递实参x,y,z*/ printf(“(4)x=%d y=%d z=%dn “,x,y,z); Void try(int x,int y,int z) printf(“(2)x=%d y=%d z=%dn “,x,y,z); z=x+y;x=x*x;y=y*y; printf(“(3)x=%d y=%d z=%dn “,x,y,z
11、); ,6.3 函数的调用,通过函数调用,将实参的值传递给形参.,函数调用时,系统对参数的处理步骤为:,(1)计算各实参的值,将实参的一个副本给形参,然后执行函数体。 (2)当函数执行完返回时,形参将自动销毁。,6.3 函数的调用,有关实参与形参的几点说明:,(1)在函数定义中指定的形参,未调用时,它们不占用存储单元。只有调用该函数时,形参才被分配空间,函数调用结束后,形参所占的存储单元被释放。,(2)实参为表达式。函数调用时,先计算表达式的值,然后将值传递给形参。常量、变量、函数值都可看成是表达式的特殊形式。,(3)定义函数时,形参的排列没有次序要求,但对形参列表中每个参数要进行说明。调用函
12、数时,实参类型、个数及排列次序应与形参一一对应。若类型不一致,必须在参数前加上强制转换符,否则会发生“类型不匹配”的错误。,(4)实参与形参的数据传递为单向传递,只可由实参向形参传递,不能由形参传回实参。实参与形参处在不同的函数中,作用的区域不同,即使实参与形参同名,也是不同的变量。,6.3 函数的调用,程序执行结果: (1)x=2 y=3 z=0 (2)x=2 y=3 z=0 (3)x=4 y=9 z=5 (4)x=2 y=3 z=0,历年国家计算机等级考试题目,1、若有代数式 (其中e仅代表自然对数的底数,不是变量),则以下正确的表示该代数式的C语言程序表达式是( )2007.04 A、s
13、qrt(abs(nx+ex) B、sqrt(fabs(pow(n,x)+pow(x,e) C、sqrt(fabs(pow(n,x)+exp(x,e) D、sqrt(fabs(pow(x,n)+exp(x),答案:C,2、以下不能正确计算代数式 值的C语言表达式时()2005.09 1/2*sin(1/2)*sin(1/2) Sin(0.5)*sin(0.5)/3 Pow(sin(0.5),2)/3 1/3*pow(sin(1.0),2),答案:A,3、在C语言中,函数返回值的类型最终取决于()2005.09 函数定义时函数首部所说明的类型 Return语句中表达式的类型 调用函数时主函数传递的
14、实参类型 函数定义时形参类型,答案:A,4、若个选项中变量均以正确定义,函数fun通过return语句返回一个函数值,以下选项错误的时()2006.04 A) main() .x=fun(2.10);. float fun(int a,int b). float fun(int a,int b). main() .x=fun(2.10);. C) float fun(int ,int) main() .x=fun(2.10);. float fun(int a,int b). D) main() float fun(int ,int) ;x=fun(2.10);. float fun(int
15、a,int b).,答案:A,5、以下isprime函数的功能时判断形参a是不是素数,是素数则函数返回1,否则返回0,请填空。2006.04 int isprime(int a) int i; for(i=2;i=a/2;i+) if(a%i=0) _; _; ,return 0,return 1,6、有以下程序: fun(int x) int p; if(x=0 | x=1) return (3); p=x-fun(x-2); return p; Main() printf(“%dn”,fun(7);执行后输出结果是()2006.9 A)7 B)3 C)2 D)0,答案:C,7、有以下程序:
16、 int fun1(double a) return a*=a; int fun2(double x,double y) double a=0,b=0; a=fun1(x);b=fun1(y);return(int)(a+b); main () double w; w=fun2(1.1,2.0);. 程序执行后变量w的值是()2006.04 A)5.21 B)5 C)5.0 D)0.0,答案:B,8、设函数fun的定义形式为: Viod fun(char ch,float x) 则以下函数fun()的调用语句中,正确的是()2006.04 A)fun(”abc“,3.0) B)t=fun(D,16.5) C fun(65,2.8) D)fun(32,32),答案:D,9、有以下程序: int f1(int x,int y)return