函数
1、函数构成
int main(int argc, const char * argv[]) {
// insert code here...
return 0;
}
返回值类型 函数名(函数参数)
{
函数体语句;
return 返回值;
}
2、函数分类
1)标准函数
由官方或第三方库提供的函数,可以直接调用,无需实现;
2)自定义函数
由程序员自己实现的函数;
3、编写函数的步骤
1)声明函数
写在头文件
2)实现函数
写在原文件
3)调用函数
C阶段,一般在主函数调用
【注意事项】
【1】C语言文件由头文件(.h)和原文件(.c)组成
【2】C语言所有函数的入口函数是主函数,主函数只能有一个
无参无返回值函数:
void 函数名();
编写一个函数,实现打印hello world;
编写一个函数,实现打印一首李白的诗;
无参有返回值函数
返回值类型 函数名();
编写一个函数,实现1+2+。。+100的和,将结果返回给主函数;
有参有返回值函数
返回值类型 函数名(函数参数);
编写函数,要求通过参数传递将两个数从主函数传到子函数,求两个数的最大公约数,用返回值返回结果。
4、变量的作用域和生命周期
作用域:变量在程序中的使用范围
生命周期:变量在时间上的有效范围
5、局部变量和全局变量
1)局部变量(在函数内部定义的变量):
作用域:从定义开始,到函数结束
生命周期:从定义开始生效,到函数调用结束失效
2) 全局变量(定义在所有函数之外的变量)
作用域:从定义开始,到文件结束
声明周期:从定义开始生效,到程序结束失效
3)静态变量
作用域:和局部变量一样
生命周期:和全局变量一样
内存分段:
数据段:全局变量和静态变量存储在数据段
只读数据段:字符串存储在只读数据段
堆区:程序猿手动申请的内存
栈区:局部变量
5、递归
用递归实现求1+2+3+。。。+100的和。
调用自身的函数称为递归函数。
调用自身的行为称为递归。
递归的步骤
1)找到递归的规律
2)找到能使递归结束的条件
3)执行递归
n = 5;
int sum(int n);
sum(5) = sum(4) + 5;
sum(4) = sum(3) + 4;
sum(3) = sum(2) + 3;
sum(2) = sum(1) + 2;
sum(1) = 1;
简单的递归DEMO
#include <stdio.h>
int sum(int n);
void hello(int n);
int main(int argc, const char * argv[]) {
// insert code here...
//printf("%d\n",sum(5));
hello(10);
return 0;
}
int sum(int n)
{
// int ret = 0;
// for (int i = 1; i <= n; i++) {
// ret += i;
// }
//
// return ret;
if (n == 1)
{
return 1;
}
return sum(n-1) + n;
}
void hello(int n)
{
if (n == 0) {
return;
}
printf("hello world\n");
hello(n-1);
}