7.2函数的声明定义,函数的分类和调用
1、函数声明要在main函数上面,这样main函数才可以进行调用
第一节课主要就学了函数的调用,项目在开发的时候分工用的比较多
主要结构:
func.c里面进行函数的定义
不是很重要,进行了函数的的声明,调用了需要的类库
使用其他文件里面定义的函数
7.3函数的递归调用
自己调用自己,计算阶乘
#include <stdio.h>
#include <string.h>
#include <stdlib.h>int func(int n)
{if(n==1){return 1;}return n*func(n-1);
}int main() {int n;scanf("%d",&n);printf("f(%d)=%d\n",n,func(n));}
一开始输入的是3,正常走进函数体里面,当走到最后一句return时,需要再次走进自己的函数体里面,此时走进去的是3-1=2,2再走走到最后有需要f(1),又走了一遍,当1进去之后,不需要再走函数体了,而是返回1,就沿着上面的路走回需要自己数据的地方去。
小练习:
上台阶,一次上一层或者两层
step(n)=step(n-1)+step(n-2)
到达n这一层的方式只有这两个
#include <stdio.h>
#include <string.h>
#include <stdlib.h>int step(int n)
{if(n==1||n==2){//当台阶数是1时,有一种,台阶数为2时有1,1,和2两种return n;}return step(n-1)+step(n-2);}
//上台阶,到第n台阶有多少种走法
int main() {int n;scanf("%d",&n);printf("step(%d)=%d\n",n,step(n));}
对我自己有一个很难想清楚的点是:
总感觉需要一个count进行计数
7.4局部变量和全局变量
#include <stdio.h>
#include <string.h>
#include <stdlib.h>int i=10;//全局变量void print(int i)
{printf("I am print i=%d\n",i);
}int main() {printf("main i=%d\n",i);i=5;print(5);return 0;
}
不建议使用全局变量,全局变量在数据段,一直存在,加入定义的局部变量与全局变量名字还一样,就使用就近原则进行调用,容易造成混乱
可以看到这里j是报错的
原因:局部变量只在离他最近的大括号内有效!!!
(我也一直以为是在所在函数体里面有效)
未完……