函数(Num008)
目录
一、函数的定义
二、函数调用
三、函数递归
四、局部、全局、静态变量
代码示例:
一、函数的定义
函数是完成一定功能的代码,我们编写函数使它完成一定的功能
- 定义函数的基本格式:
- 类型名 函数名(函数参数1,函数参数2,····)
- {
- 函数体
- return ;
- }
如:
int max(int x,int y){
int z;
z=x>y?x:y;
return z;}//求最大值函数,返回两个数之间的最大值
数据类型:
- void表示没有返回值,如果是其他的数据类型表示有返回值
- 如果写的是其他的数据类型,表示在函数中需要使用return 值;必须要有
- 在定义的时候通过返回值类型来决定返回的值
形参列表:
- 没有写表示不需要传参直接调用函数即可使用
- 如果有参数,那么必须传入和参数类型一致的数据
- 数据类型:这个函数执行完你要想返回一个什么类型的数据,那么这里就写上什么类型
- 形参列表:这个函数的执行你需要一些什么外部的数据,那么就在这里定义变量接收
- 代码:可以使用实参列表中的变量,来实现自己的功能,更加数据类型来决定要返回什么值
二、函数调用
调用函数的基本格式:
- 函数名字(实参列表);
实参列表:如果函数没有形参列表,那么不需要写任何内容
- ------程序执行的过程------
- 从主函数开始,从上往下。
- 如果有循环与分支会根据相关内容改变过程
- 定义一个函数,它是不会自己执行的
- 只有在代码中调用它才会执行,程序的执行从函数调用处跳转到函数定义处执行代码
- 函数执行完,会跳回函数调用处继续往下执行
三、函数递归
- 一个函数在执行过程中直接或间接的调用自己
四、局部、全局、静态变量
- 局部变量:
只能在局部中使用,不能拿出局部使用
生命周期:变量出了局部就死亡
在不同的局部,变量名字可以重复
比如:定义在函数中的形参和变量,定义在{}内的变量
- 全局变量:
在全局都可以使用(在定义之后都能使用)
生命周期:程序开始就会被定义,程序结束才会被释放
定义变量,写在函数的外面。通常都是定义在主函数的上面
- 静态变量:
定义方式:在定义变量的前面加上一个static 关键字,那么整个变量就是静态变量了
static int x;在程序开始只会只会被定义一次,不会被重复定义,程序结束生命周期结束
代码示例:
#include <stdio.h>//void fun2()
//{
// printf("hello world\n");
//}//int fun3()
//{
// int x = 0;
// int y = 1;
// if (x)
// return x + y; //返回值
// //warning C4715: “fun3”: 不是所有的控件路径都返回值
//}//int fun4()
//{
// //返回值只能返回一个值,不能多个
// //在函数中执行return的时候,会从return处直接结束函数的执行
// return 1, 2, 3, 4, 5, 6, 7; //返回的是最后一个
// printf("1111111\n");
//}//void fun5()
//{
// printf("1\n");
// return; //在函数中执行return的时候,会从return处直接结束函数的执行
// printf("2\n");
//}
//形参1=实参1,形参2=实参2,...形参N=实参N
//int x = a; //值传递,不能通过形参修改实参的值
//void fun6(int x, int y, int z)
//{
// //printf("%d %d %d\n", x, y, z);
// x = 9;
// y = 9;
// z = 9;
//}
//
//void fun(int r, int c); //函数声明 //需要在调用函数之前声明//Stack overflow 栈溢出,通常是死递归
//void fun7(int i)
//{
// if (i != 6)
// {
// fun7(i + 1);
// printf("%d\n", i);
// }
//}//递归求1~N的和
/*
f(1)=1
f(2)=f(1)+2
f(3)=f(2)+3
f(4)=f(3)+4
f(n)=f(n-1)+n
*///int fun1(int n)
//{
// if (n == 1)return n;
// return fun1(n - 1) + n;
//}//斐波那契数列
//1 2 3 5 8 13 21
/*
n>=3
f(1)=1
f(2)=2
f(n)=f(n-1)+f(n-2)*///int fun2(int n)
//{
// if (n == 1 || n == 2)
// return n;
// return fun2(n - 1) + fun2(n - 2);
//}//int x; //全局变量
//
//void fun9()
//{
// int x = 9;
// printf("%d\n", x); //如果全局变量和局部变量同名,那么使用就近原则
//}void fun10()
{static int x = 10;printf("%d\n", x);x++;
}int main()
{fun10();fun10();fun10();fun10();//fun9();//printf("%d\n", x);/*printf("%d\n", fun2(7));*///printf("%d\n", fun1(100));//fun7(1);//fun(1, 1);//fun(3, 3);//fun(6, 5);//int a = 1, b = 2, c = 3;//fun6(a,b,c);//int x = a;//x = 99;//printf("%d %d %d\n", a, b, c);//fun5();/*printf("%d\n", fun4());*///int x = fun3();//printf("%d\n", x);//fun2();//fun();//printf("\n");//fun();getchar();getchar();return 0;
}//void fun(int r, int c)
//{
// for (int i = 0; i < r; i++)
// {
// for (int j = 0; j < c; j++)
// {
// printf("* ");
// }
// printf("\n");
// }
//}