C语言--函数

 函数:先定义再使用

函数的封装和调用

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;
}

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值