分而治之的思想————>模块化编程
把一个问题,分解为若干个简单的问题,提炼出公共任务,把不同的功能分解到不同的模块中
复杂问题求解的基本方法,模块化编程的基本思想
函数
构成C语言的基本模块,模块化编程的最小单位
C语言的逻辑结构
一个C语言由多个源文件组成
一个源文件有一个或者多个函数组成
函数的分类
- 标准库函数
- ANSI/ISO
- 自定义函数
函数的定义
//返回值类型 函数名 形式参数(parameter)简称形参,函数的入口;
int GetMax(int x, int y) {
int result;
if (x > y)
result = x;
else
result = y;
return result;
}
//函数体 使用定界符(花括号{})
int result 为局部变量 只能能在函数内部使用,intx,int y 也是局部变量;
如何将x,y的值返回给调用者?
使用return语句:从函数返回一个值给调用者。
函数的出口只能返回一个值,类型与返回值类型一致;
可以使用多个return语句,一般在条件语句中使用
return后无表达式或者没有return;
在返回值类型处使用void表示无返回值,省略默认为int
若在形参处省略不写,或者添加void,表示无参数,可以省略;
使用函数编程的好处
信息隐藏 无需知道内部如何运作,只了解与外部的接口即可,只要对外提供的接口不变,就不影响函数的使用,便于实现函数的复用和模块化编程
函数调用的基本方式
- 主调函数通过函数名调用被调函数;
- 函数无返回值时,单独作为一个函数调用语句
#include<stdio.h>
int main()
{
Displaying();
return 0;
}
void Displaying (void)
{
printf("1.input");
printf("2.output");
printf("0.exit");
return;
}
- 调用者通过函数名调用函数
- 有返回值时,可以放到一个赋值表达式语句中
#include<stdio.h>
int main()
{
int a = 23, b = 24;
printf("%d\n",Average (a,b);
return 0;
}
int Average(int x, int y)
{
int result;
result = (x + y) / 2;
return result;
}
- 还可以放到一个函数调用语句中,作为另外一个函数的参数
函数定义时的参数,形式参数,简称形参
函数调用时的参数,实际参数,简称实参;
函数调用的过程:
每次执行函数调用时:
现场保护并为函数内部的局部变量分配内存
把实参复制一份给形参,单项传值
实参与形参的数目类型和顺序要一致;
程序控制权交给被调函数,执行函数内的语句
当执行到return语句时,从函数中退出
从函数退出时
根据函数调用栈中保存的返回地址,返回到本次函数调用的地方
把函数值返回给主调函数,同时把控制权返回给调用者
返回调用权之前,收回分配给函数内所有变量包括形参的内存(及释放
main函数的特殊性
最终返回到main函数中结束
函数原型
调用函数前先声明返回值类型,函数名,和形参类型
有助于编译器函数参数类型的匹配检查
为了将两个函数连接,需要加一条函数声明