零基础快乐学习C/C++——06

函数

1.函数是什么

c语言中函数的分类

  1. 库函数
    c语言本身提供给我们的函数,比如printf
    库函数分类:

io函数
字符串操作函数
内存操作函数
时间日期函数
数学函数
其他函数

  1. 自定义函数
    在这里插入图片描述
    例如,写一个函数,找出两个数的较大值
int get_max(int x, int y )
{
	if(x>y)
		return x;
	else
		return y;
}
int main(){
	int a = 10;
	int b = 20;
	int max = get_max(a,b);
	printf("max = %d\n",max);
	return 0;
}

写一个函数,交换两个整形变量的内容

在这里插入图片描述
上述代码中,xy和ab并没有关系,他们都是内存中独立创建的空间,所以并不能达到交换的目的

void swap(int* pa,int* pb)
{
	int tmp = 0;
	tmp = *pa;  //*代表解引用,其实现在*pa就是a
	*pa = *pb;
	*pb = tmp;
}
int main()
{
	int a = 10;
	int b = 20;
	printf("a=%d b=%d\n",a,b);
	swap(&a,&b); 
	printf("a=%d b=%d\n",a,b);
	return 0;

}

2.函数的参数

  1. 实际参数
    如上例中&a,&b
    实参可以是常量、表达式、变量、函数
  2. 形式参数
    如上例中int* pa,int* pb
当实参传给形参的时候,形参其实是实参的临时拷贝,对形参的修改是不会改变实参的(上例中也是这个道理)

3.函数的调用

  1. 传值调用
    穿过去的是值,如上例的swap1函数
    对于形参的修改不改变实参
  2. 传址调用
    穿过去的是地址,如上例的swap2函数

在这里插入图片描述

打印100-200间的素数

int is_prime(int n)
{
	//2到2-1的数去试试除
	int j = 0;
	for(j = 2;j<n;j++)
	{
		if(n%j == 0)
			return 0;
	}
	return 1;
}
int main()
{ 
	int i = 0;
	for(i = 100;i<=200;i++)
	{
		if(is_prime(i) == 1)
			printf("%d",i);
	}
	return 0;
}

判断一年是不是闰年

int is_leap_year(int y)
{
	if((y%4==0&&y%100 !=0) || (y%400 ==0))
		return 1;
	else 
		return 0;
}
int main()
{
	int year = 0;
	for(year = 1000;year<=2000;year++{
		if(1 == is_leap_year(year))
		{
			printf("%d",year);
		}
	}
	return 0;
}

二分查找:在一个有序数组中查找具体的某个数

int binary_search(int arr[],int k,int sz)
{
	int left = 0;
	int right = sz -1;
	
	while(left<=right)
	{
		int mid = (left + right)/2;//中间元素的下标
		if(arr[mid]<k)
		{
			left = mid +1;
		}
		else if(arr[mid] > k)
		{
			right = mid -1;
		}
		else 
		{
			return mid;
		}
	}
	return -1;
	
}
int main()
{
	//如果找到了返回这个数的下标,找不到的返回-1
	int arr[] = {1,2,3,4,5,6,7,8,9,10}
	int k = 7;
	int sz = sizeof(arr)/sizeof(arr[0]);//注意求元素个数不可以放到函数内部中,因为传递过去的是数组arr首元素的地址
	int ret = binary_search(arr,k,sz);
	if(ret == 1)
	{
		printf("找不到指定的数字\n");
	}
	else
	{
		printf("找到了,下标是:%d\n",ret);
	}
	return 0;
	
}
void Add(int* p)
{
	(*p)++;//因为++的优先级高,所以作用于p而不是…*p
}
int main()
{
	int num = 0;
	Add(&num);
	printf("num = %d\n", num);
	Add(&num);
	printf("num = %d\n", num);
	Add(&num);
	printf("num = %d\n", num);
	return 0}
  1. 函数的嵌套调用和链式访问
    嵌套调用:一个函数中调用另一个函数
    链式访问:把一个函数的返回值作为另一个函数的参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值