函数:先定义再使用
函数的封装和调用
1.无参函数
#include <stdio.h>
void printWelcome()
{
printf("==============\n");
printf("欢迎来到我的程序,宝贝\n");
printf("==============\n");
}
int getDataFromX(int data1)//形式参数需要包含变量的类型,变量名
{
return data1-1;//可以返回表达式也可以返回变量
/* int data;
data = x-1;
return data;
*/
}
int main()
{ int x,y;
printWelcome();
puts("请输入一个数:");
scanf("%d",&x);
y=getDataFromX(x);
printf("x = %d,y = %d\n",x,y);
return 0;
}
2.有参函数
#include <stdio.h>
int add(int data1,int data2,int data3)
{
int ret;
ret=data1+data2+data3;
return ret;
}
int main()
{ int x,y,z,ret;
puts("请输入一个数:");
scanf("%d",&x);
puts("请再输入一个数:");
scanf("%d",&y);
puts("请再输入一个数:");
scanf("%d",&z);
ret=add(x,y,z);
printf("%d+%d+%d=%d\n",x,y,z,ret);
return 0;
}
函数调用易出现的问题
形参和实参的区别
传递参数,传递的是值------形参和实参值相同,但是地址空间不同
#include <stdio.h>
int test(int x)
{
printf("test的x内存地址是%p,存放的数值是%d\n",&x,x);
return 0;
}
int main()
{ int x,y;
puts("请输入一个数:");
scanf("%d",&x);
printf("main函数中的x内存地址是%p,存放的数值是%d\n",&x,x);
y=test(x);
return 0;
}
运行结果:
因为地址不同,故形参和实参是两个变量
形式参数生命周期: 保存在栈空间,调用的时候才为形式参数申请内存,调用结束内存空间被释放
实参可以是变量名,常量,表达式
函数封装获取两个数的大数
#include <stdio.h>
int max(float x,float y)
{
/*法一
if(x>y)
return x;
else
return y;
*/
/*法二
float z;
z=x>y?x:y;
return z;
*/
}
int main()
{ float x,y,bigone=0;
puts("请输入两个数:");
scanf("%f %f",&x,&y);
bigone=max(x,y);
printf("两个数的大数是%f\n",bigone);
return 0;
}
函数的嵌套
输入四个数,函数方式找出最大值
#include<stdio.h>
int getMaxDataFromTwo(int data1,int data2)
{
int bigger;
bigger= data1>data2?data1:data2;
return bigger;
}
int getMaxDataFromFour(int a,int b,int c,int d)
{
int max;
max = getMaxDataFromTwo(a,b);
max = getMaxDataFromTwo(max,c);
max = getMaxDataFromTwo(max,d);
return max;
}
int main()
{
int data;
int data2;
int data3;
int data4;
int theBigOne;
puts("please input four nums:");
scanf("%d%d%d%d",&data,&data2,&data3,&data4);
theBigOne = getMaxDataFromFour(data,data2,data3,data4);
printf("the big is %d\n",theBigOne);
return 0;
}
递归函数(工作时能不用就不用,容易出现问题)
#include<stdio.h>
int getAge(int currPersonNum)
{
int age;
if(currPersonNum==1)
{
age=10;
}
else
{
age= getAge(currPersonNum-1)+2;
}
return age;
}
int main()
{
int age;
int num;
printf("你要知道第几个学生的年龄:\n");
scanf("%d",&num);
age = getAge(num);
printf("第%d个学生的年龄是%d\n",num,age);
return 0;
}
求阶乘
#include<stdio.h>
int getjiecheng(int num)
{
int result;
if(num==1)
{
result=1;
}
else
{
result= getjiecheng(num-1)*num;//若num=5,则result=getjiecheng(4)*5
}
return result;
}
int main()
{
int num;
int ret;
puts("请输入要求的阶乘数:");
scanf("%d",&num);
ret = getjiecheng(num);
printf("%d的阶乘是%d\n",num,ret);
return 0;
}