C语言之 函数(1)

1、函数是什么

子程序,是一个大型代码中一些可以单独实现某些功能的代码块。由函数名,函数参数,返回值类型三大部分组成。提供对过程的封装和细节的隐藏

2、函数的分类

a、库函数:把一些常用的函数集成为库,由c语言直接提供

strcpy 字符串复制函数,头文件<string.h>

例:把arr1[ ]中字符串拷贝到arr2[ ]中

#include<stdio.h>
#include<string.h>
int main()
{
char arr1[ ]="abcdef";
char arr2[ ]="0";
strcpy(arr2,arr1);
printf("%s\n",arr2);
return 0;

sizeof()返回值的类型是size_t,size_t本质是unsigned int 无符号整型,求大小不会求出负值

memset()把前多少个字符改成别的样子,设置内存的时候是以字节为单位的,每个字节的内容都是一样的。头文件时<string.h>

#include<stdio.h>
int main()
{
char arr[ ] = "hello baby";
memset(arr,'x',5);
//改成memset(arr+6,'x',4);结果是 hello xxxx
printf("%s\n",arr);//打印出来的结果是 xxxxx baby
return 0;
}

b、自定义函数

写一个函数,可以找出两个整数中的最大值

#include<stdio.h>
int get_max(int a, int b)
{
	return ((a > b) ? a : b);
}
int main()
{
	int x = 0;
	int y = 0;
	scanf("%d %d", &x, &y);
	int max = get_max(x,y);
	printf("%d\n", max);
	return 0;
}

 写一个函数,交换两个数的值。可以用三种方式,数值法,指针法,引用法(C++中可用),前两种c和C++中都可,代码相似,可见上一篇C++引用文章。

3、函数参数

a、实际参数(实参),真实传给函数的参数,可以是常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。

b、形式参数(形参),是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才会被实例化(分配内存单元),形参当函数调用完成之后就自动销毁了,因此形式参数只有在函数中才有效。

形参实例化后其实相当于实参的一份拷贝。

4、函数的调用

a、传值调用----函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。

b、传址调用----把函数外部创建变量的内存地址你传递给函数参数的调用。这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量。

写一个函数判断一个数是否为素数----用2~n-1试除或用2~sprt(n)试除

#define _CRT_SECURE_NO_WARNINGS
//判断一个数是否为素数,用函数,如果是返回1,不是返回0
#include<stdio.h>
#include<math.h>
int is_sep(int x)
{
	int y = 0;
	for (y = 2; y <= sqrt(x); y++)
	{
		if (x % y == 0)
		{
			return 0;
		}
	}
	return 1;
}
int main()
{
	int a = 0;
	scanf("%d", &a);
	if (is_sep(a) == 1)
	{
		printf("是素数 %d ", a);
	}
	else
	{
		printf("不是素数");
	}
	return 0;
}

写一个函数判断是否为闰年。

//写函数判断是否为闰年,是闰年返回1,不是返回0
#include<stdio.h>
int is_run(int n)
{
	if ((n%4==0 )&&( n % 100 != 0 )||( n % 400 == 0))
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
int main()
{
	int x = 0;
	scanf_s("%d", &x);
	if (is_run(x) == 1)
	{
		printf("%d 是闰年。",x);
	}
	else
	{
		printf("%d不是闰年", x);
	}
	return 0;
}

写一个函数,用二分法查找有序数组中的一个数,找到了返回下标,找不到就说找不到。

//写一个函数,用二分查找寻找元素,找到用返回下标,找不到返回-1,数组应有序
#include<stdio.h>
int binary_search(int arr[], int k, int sz)
{
	int left = 0;
	int right = sz - 1;
	while (left <= right)
	{
		int mid = left + (right - left) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			return mid;
		}
	}
	return -1;
}
int main()
{
	int arr[] = { 1,2,3,44,54,64,74,94,104,114,124,134};
	int k = 0;
	scanf("%d", &k);
	int sz = sizeof(arr)/sizeof(arr[0]);
	int ret = binary_search(arr, k, sz);
	if (ret == -1)
	{
		printf("找不到");
	}
	else
	{
		printf("找到了,下标是:%d\n",ret);
	}
	return 0;
}

写一个函数,每调用一次函数,num的值加一

#include<stdio.h>
void test(int *p)
{
*p=*p+1;
}
int main()
{
int num=0;
test(&num);
printf("%d\n",num);
return 0;
}

5、函数的嵌套调用和链式访问

(1)、嵌套调用 ,函数可以嵌套调用,不能嵌套定义。

(2)、链式访问,把一个函数的返回值作为另外一个函数的参数,例

#include<stdio.h>
int main()
{
printf("%d\n",strlen("abcdef"));
return 0;

printf的嵌套

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值