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是报错的
原因:局部变量只在离他最近的大括号内有效!!!
(我也一直以为是在所在函数体里面有效)
未完……