1、函 数,C语言程序设计,导入,一个C程序由一个主函数main()和若干个其它功能的函数组成; 由主函数调用功能函数,功能函数也可相互调用; 同一个函数可以被调用任意次,也可以调用自己; 但其它函数不能调用主函数。 利用函数可以减少重复性编程的工作量。,C程序的函数调用,例题1:加减法程序。,功 能:根据用户选择进行加减运算。加减运算由独立的函数实现。,main() int n=0; printf(“1-addn”); printf(“2-subn”); printf(“0-endn”); printf(“Select 1 ,2 ,0n”); scanf(“%d”, ,add() int x,y
2、,z; printf(“nInput x,y:”); scanf(“%d,%d”,一、 函数的定义:,类型说明符是指函数返回值的类型:int ,float,double,void等。 函数虽无参数,但函数名后的括号不可以省略,且后面无分号。 说明部分是对函数内部使用的变量进行说明。 语句部分是用来实现函数的功能。,1. 无参函数定义的一般形式: 类型说明符 函数名() 说明部分 语句部分 ,一、 函数的定义:,在形式参数说明表中若有多个参数则要用逗号分开。 参数可以是各种类型的变量,必须给以类型说明。 在调用函数时主调函数将赋予形式参数实际的值。,2. 有参函数定义的一般形式: 类型说明符 函
3、数名(形式参数说明表) 说明部分 语句部分 ,例题2:用有参数的函数实现例题1中的加法。,main() int a,b,c; printf(“input a,b:”); scanf(“%d,%d”, ,int add(int x,int y) int z; z=x+y; return z; ,二、 形式参数与实际参数的关系,有参函数调动用时,主调函数把实际参数传送给被调函数的形式参数,从而实现主调函数向被调函数的数据传递。 形式参数(形参):指在函数定义时,函数名后面括号中的变量。 实际参数(实参):指在函数调用时,函数名后面括号中的表达式。 注意: 1、形式参数定义后未被调用不占内存空间,发
4、生调用时才分配空间且在调用结束后就会自动释放。 2、实际参数除了变量外,还可以是常量或表达式。 3、定义函数时形参的类型一定要说明,且实参的类型、个数和位置应一一对应。 4、只有实参向形参传递数据。,练习:找出程序中的错误:,1 求一个数的平方。main()int a,s;scanf(“%d”,例题3:验正不能由形参传递给实参。,两次运行结果: input a,b:5,3 5-3=2 input a,b:3,5 3-5=2 (结果错了),三、函数的返回值与返回语句,函数的返回值是指通过函数调用使主调函数能得到一个确定的值。 1通过return语句返回主调函数。一般形式发下:return 表达式
5、 ;或return(表达式);,练习:找出程序中的错误:,2、 求两实数的和。main()float a,b,c;scanf(“%f,%f”,例题4:求一个整数的绝对值。,int abs(int x) if (x=0) return(x);elsereturn x; ,说明: 1. 允许有多个return语句,但真正每次调用只有其中一个return语句被执行。 2. 执行return表示一次调用结束。 3. 函数类型与return中的表达式的类型应一致,若不一致以函数类型为准。 4.不返回函数值的函数,可不用return,可以在定义函数时明确为void型。,例题5:将例题2中函数的类型与函数的
6、返回值的类型不一致。,int add(float x,float y) float z; z=x+y; return z; main() float a,b,c; printf(“input a,b:”); scanf(“%f,%f”, ,运行结果: input a,b:2.5,5.4 2.500000+5.400000=7.000000,例题6:打印N个空格的函数。,void spa(int n) int i;for(i=0;in;i+)printf(“ “) main() spa(10); ,小 结,一、 函数的定义: 类型说明符 函数名(形式参数说明表) 说明部分 语句部分 二、 形式参
7、数与实际参数的关系 三、函数的返回值与返回语句 一般形式发下:return 表达式 ;或return(表达式);,练习:写出下列程序的运行结果:,1 void f(int n)int x=5,y=10;if (n0)printf(“%dt%dn”,+x,y+);main()int m=1;f(-m);f(+m);return;,运行结果: 6 10,练习:写出下列程序的运行结果:,2 .void ff( )int x2=10;printf(“func2 x2=%dn”,x2);void f(int x1)x1+=100;ff();printf(“func1 x1=%dn”,x1);,main() int x=300; f(x); printf(“main x=%dn”,x); ,运行结果: func2 x2=10 func1 x1=400 main x=300,