1.函数
定义:是一个实现一定功能的语句的集合,并在需要时可以反复调用而不需要重写。
无参函数: 不需要提供参数就可以执行的函数
void 如果自定义函数只是单纯实现一些语句而不需要返回值,就可以用void
#include
void print1(){
printf("Hahhhh,\n");
printf("Good idea!\n");
}
int main(){
print1();
return 0;
}
有参函数:
#include
int judge(int x){//n是整数
if(x>0) return 1;
else if(x==0) return 0;
else return -1;
}
int main(){
int a,ans;
scanf("%d",&a);
ans=judge(a);
printf("%d\n",ans);
return 0;
}
注意: judge 函数作用对象是整数,如果输入double型的数字,函数就判断不准确了
全局变量:
#include
int x;
void change(){
x=x+1;
}
int main(){
x=10;
change();
printf("%d\n",x);
return 0;
}
结果: 11
局部变量:
#include
void change(int x){//形参
x=x+1;
}
int main(){
int x=10;//实参
change(x);
printf("%d\n",x);
return 0;
}
结果:10
分析: 局部变量例子中,change函数的参数 x 为局部变量, 仅在函数内部生效,通过 change(x)传进去的 x 其实只是一个副本,也就是change函数里的参数 x 和 main函数里的 x 其实是作用于两个不同函数的不同变量。称为值传递,
多个参数
#include
//找出最大数
int max(int a,int b,int c){
int m;
if(a>=b&&a>=c) m=a;
else if(b>=a&&b>=c) m=b;
else m=c;
return m;
}
int main(){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%d\n",max(a,b,c));
return 0;
}
以数组作为函数的参数
第一维不需要填写长度,如果是第二维,那么第二维需要填写长度
数组作为参数时,在函数中对数组元素的修改就等于对原数组元素的修改。
这一点区别于局部变量。
#include
void change(int a[],int b[][5]){
a[0]=1;
a[1]=3;
a[2]=5;
b[0][0]=1;
}
int main(){
int a[3]={0};
int b[5][5]={0};
change(a,b);
for(int i=0;i<3;i++){
printf("%d\n",a[i]);
}
return 0;
}
函数的嵌套调用
此例相当于求三个数中的最大值
#include
int max1(int a,int b){
if(a>b) return a;
else return b;
}
int max2(int a,int b,int c){
int temp=max1(a,b);
temp=max1(temp,c);
return temp;
}
int main(){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%d\n",max2(a,b,c));
return 0;
}
函数的递归调用:一个函数调用该函数本身,自己调用自己的过程。