第十章
函数进阶
10.1函数的递归调用
#include
int fac(int n);
int main(void){
printf("%dn",fac(5));
return 0;
}
//求n的阶乘
int fac(int n){
int sum = 1;
if(n < 1){//形参的异常检查
return -1;//返回异常值-1
}
for(int i = 1;i<=n;i++){
sum = sum * i;
}
return sum;
}
//求n的阶乘递归写法
#include
int fac(int n);
int main(void){
int m = 0;
printf("请输入m的值:");
scanf("%dn",&m);
printf("%dn",fac(m));
return 0;
}
int fac(int n){
if(n < 1){
return -1;
}else if(n == 1){
return 1;
}else{
return n*fac(n-1);
}
}
10.2作用域
#includeint fac(int n); int main(void){ printf("%dn",fac(5)); return 0; } //求n的阶乘 int fac(int n){ int sum = 1; if(n < 1){//形参的异常检查 return -1;//返回异常值-1 } for(int i = 1;i<=n;i++){ sum = sum * i; } return sum; }
//求n的阶乘递归写法 #include10.2作用域int fac(int n); int main(void){ int m = 0; printf("请输入m的值:"); scanf("%dn",&m); printf("%dn",fac(m)); return 0; } int fac(int n){ if(n < 1){ return -1; }else if(n == 1){ return 1; }else{ return n*fac(n-1); } }
#include注意:int c = 10;//c的作用域是文件作用域 void fun(int b); int main(void){ int a = 10;//a的作用域是函数作用域 a = 20; { int j = 0;//语句块作用域 j = 50; } return 0; } int fun(int b){//函数名和返回值属于文件作用域,函数的参数以及函数体属于函数作用域 a = 30;//此处报错,上面定义了a为整型,a的作用域是上面的主函数,不在该函数的适用范围 }
1.在同一个作用域内,不能出现相同的标识符,同一个作用域内不能重复定义变量名
2.一个标识符不能提示属于两个作用域,使用就近原则
#include10.3局部变量与全局变量 10.4存储类别int c = 10;//c的作用域是文件作用域,全局变量 void fun(int b); int main(void){ int a = 10;//a的作用域是函数作用域 //int a = 20;//这样会报错,重复定义了a a = 20; { //语句块作用域 int a = 20;//在这里定义a不会报错,此处a的作用域和上面的a不是同一个作用域 int j = 0; j = 50; } return 0; } int fun(int b){//函数名和返回值属于文件作用域,函数的参数以及函数体属于函数作用域 //a = 30;//此处报错,上面定义了a为整型,a的作用域是上面的主函数,不在该函数的适用范围 }



