一、为什么要用函数
1、函数定义
函数就是功能;每一个函数用来实现一个特定功能;函数的名字反应其代表的功能。
2、程序中函数调用
#include<stdio.h> //预处理指令,头文件
Int main() //主函数
{
void
printf_star(); //声明函数
Void printf_message(); //声明函数
Printf_star(); //调用函数
Printf_message(); //调用函数
Printf_star(); //调用函数
Return 0; //函数返回值0返回到函数
}
Void printf_star() //定义函数 viod类型为无类型函数,执行这个函数后,不会把任何返回值带回主函数
{
Pintf(“****************\n”); //
}
Void printf_message() //定义函数
{
Printf(“How
do you do !\n”); //
}
运行结果:
How do you do !
3、函数声明的作用:
把有关函数的信息通知编译系统,以便在编译系统对程序进行编译时,在进行到main函数调用printf_star()和printf_message()时,知道他们是函数,而不是变量或其他对象,此外还对调用函数的正确性进行检查。
4、程序编写函数的注意事项
程序编写一般由若干个源文件组成一个C程序(目的:分别编写和编译,提高调试效率)
一个源文件由一个或多个函数及其内容(如:指令、数据声明、定义等)组成
程序的执行从main函数开始,如果main函数中调用其他函数,在调用后流程返回到main函数,在main函数中结束整个程序的运行
所有函数都是平行的,即在定义函数时是分别进行,相互独立
函数不能嵌套定义,函数间可以相互调用,但不能调用main函数
5、函数的分类
a.从用户角度看:
a.1 库函数:由系统提供,用户不必自己定义,可直接使用他们
a.2 用户自己定义的函数:用来解决用户专门需要的函数
b.从函数形式看
b.1 无参函数:在调用无参函数时,主调函数不向被调函数传递数据;无参函数一般用来执行指定的一组操作;无参函数可以带回或不带回函数值,但一般以不带回函数值的居多
b.2 有参函数:在调用函数时,主调函数在调用被调函数时,通过参数向被调函数传递数据。一般情况下,执行被调函数时会得到一个函数值,供主调函数使用。
二、怎样定义函数
在程序中遇到的所有函数必须先定义后使用。
1、 定义函数应包括以下几个内容
a. 指定函数名字,以便以后按名调用。
b. 指定函数类型,即函数返回值类型
c. 指定函数的参数名字和类型,以便在调用函数时向他们传递数据。对于无参函数u需要这项
d. 指定函数应当完成什么操作,也就是函数是做什么的,即函数的功能
2、 定义函数的方法
a.
定义无参函数
类型名 函数名(void)
{ 函数体(包括声明部分和语句)
}
b.
定义有参函数
类型名 函数名(形式参数列表 )
{ 函数体(包括声明部分和语句)
}
c.
定义空函数
类型名 函数名()
{ }
三、调用函数
1、调用函数的形式
函数名(实参列表);//实参列表可以没有,但括号不能省
2、调用方式
a.函数调用语句
把函数调用单独作为一个语句。
例:printf_star();//这时不要求函数带返回值,只要求函数完成一定的操作
b.函数表达
函数调用出现在另一个表达式中
例:m=max(a,b);//这时要求函数带一个确定的返回值,以参加表达式的运算
c.函数参数
函数调用作为另一个函数调用的实参。
例:m=max(a,max(b,c));
3、 形式参数和实际参数
形式参数:在定义函数时,函数名后面括号内的变量为形式参数。
实际参数:在主调函数中调用一个函数时,函数名后面括号中的参数称为实际参数。
例:输入两个整数,求输出其中的较大值
解:先编写max函数【有参函数,必须有返回值】
Int max(int x,int y )
{
Int z;//定义一个整数z
Z=x>y?x:y;//比较大小
Return(z[Z9] );//函数返回值z传递到main函数调用处
}
再编main函数
#include<stdio.h>
Int main()
{
Int max(int x,int y);//函数声明
Int a,b,c;//定义整数a,b,c
Scanf(“%d %d”,&a,&b);//输入a,b
C=max(a,b[Z11] );//调用max函数
Printf(“%d\n”,c);
Return 0;//返回函数值0
}
注意:被调函数放在主函数之前,在主函数调用时可以不用加声明;被调函数放在主函数之后,在主函数调用时必须加声明
四、函数的嵌套调用