【C语言】-- 函数还没搞明白吗?来看看这篇吧

前言:

函数”这个名词,我们每个人都是耳濡目染。高中数学中的函数已经够让我们头疼了,而现在在C语言中又遇到了“函数”,但这个知识点是我们必须要掌握的,因为函数在C语言中扮演着至关重要的角色,函数不仅是组织和复用代码的有效手段,更是构建复杂程序的基石,下面就让我们一起来挑战挑战C语言中的函数吧。

目录:

  • 一 、 函数的概念
  • 二 、库函数
    • 1.标准库
    • 2.头文件
  • 三、自定义函数
  • 四、函数的参数
    • 1.实参
    • 2.形参
    • 3.数组做函数参数
    • 4.return 语句
  • 五、函数的嵌套调用和链式访问
    • 1.嵌套调用
    • 2.链式访问
  • 六、函数的声明和定义

一 、 函数的概念

在C语言中,函数也被称为“子程序”。函数就是一段完成特定任务的代码块,它可以**接收输入的数据(参数),并返回一个值**。而C语言程序就是由一个个函数组成的。
C语言中常见的两类函数:

1. 库函数;
2. 自定义函数

二 、库函数

1.标准库

C语言国际标准ANSI C规定了一些常用函数的标准,称为标准库。然后编译器厂商根据这些规定的C语言标准给出了一系列函数的实现,这些函数被称为库函数。库函数一定程度上提高了程序员的工作效率,因为它可以直接使用,不用人们去实现一些常见的功能,而浪费时间。
C语言中常用的库函数:

  • IO函数
  • 字符串函数
  • 字符操作函数
  • 内存操作函数
  • 时间/日期函数
  • 数学函数
  • 其他库函数

2.头文件

库函数是在标准库中对应的头文件中声明的,所以库函数的使用必须包含头文件
eg:

//#included <stdio.h>
//printf;
//scanf;

printf , scanf是我们常用的库函数,#include<stdio.h> 是它们的头文件

库函数相关头文件:https://zh.cppreference.com/w/c/header

包括函数原型,功能介绍,参数,返回值,代码举例…
大家可以去了解看看。

在这里插入图片描述
在这里插入图片描述

三、自定义函数

库函数只是为了便捷我们的使用,更重要的是自定义函数。语法如下:

ret_type fun_name(形式参数)
{
}
  • ret_type: 函数返回类型
  • fun_name: 函数名
  • 括号中是形式参数
  • {}中是函数体

eg:加法函数,完成两数相加。函数名:Add,接受两个整形类型的参数,计算的结果也是整形

#include<stdio.h>
int Add(int i, int j)
{
	return i + j;
}
int main()
{
	int i = 0;
	int j = 0;
	scanf("%d %d", &i, &j);
	int a = Add(i, j);//调用加法函数
	printf("%d\n", a);
	return 0;
}

在这里插入图片描述

四、函数的参数

函数的参数分为实参和形参

1.实参

根据上面的举例:在这里插入图片描述
这块的 i 和 j 为实际参数(实参就是真实传递给函数的参数

2.形参

在这里插入图片描述
这块的 i 和 j 为形式参数,(如果只是定义了Add函数而不去调用的话,Add函数的参数只是形式上存在,不会向内存申请空间,不真实存在,所以叫形式参数。它只有在函数被调用过程中为了存放实参时才会向内存申请空间,这个过程就是形参的实例化。调用的话就会发现,形参和实参的地址是不一样的,形参是实参的一份临时拷贝

3.数组做函数参数

数组也可以做函数参数
eg:写一个函数,将一个数组中的内容全部变为6,再写一个函数将其打印出来

#include<stdio.h>
void set_arr(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		arr[i] = 6;
	}

}
void printf_arr(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
}

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	set_arr(arr,sz);//设置数组内容为6
	printf_arr(arr,sz);
	return 0;
}

在这里插入图片描述
执行结果:
在这里插入图片描述
注:

  • 函数的形参要和实参个数匹配
  • 函数的实参是数组,形参也可写成数组形式
  • 形参如果是一维数组,数组大小可以省略
  • 形参如果是二维数组,行可以省略,列不能省略
  • 数组传参,形参不会创建新的数组

4.return 语句

  • return 后面可以是一个数值,也可以是一个表达式,返回的是表达式的结果;
  • 返回类型是void时,return后面可以什么都不写;
  • return语句执行后,函数返回,后面的代码将不再执行;
  • return返回的值和函数返回的类型不一致时,系统将自动定义为函数的返回类型;
  • 函数中如果有if 语句,每种情况下都得有return返回;
  • 函数的返回类型如果不写,则默认返回类型是Int;
  • 写了返回类型,但没写return返回值,则返回值未知

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

1.嵌套调用

嵌套调用就是函数之间的互相调用,下面用一个例子来表达一下吧
eg:计算某年某月有多少天

  • is_leap_year() : 判断闰年
  • get_days_of_month : 调用 is_leap_year()后,再计算某月的天数
#include<stdio.h>
int is_leap_year(int y)//判断闰年
{
	if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
		return 1;
	else
		return 0;
}
int get_days_of_month(int y, int m)//计算某月天数
{
	int days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 3 };
	int day = days[m];
	if (is_leap_year(y) && m == 2)//调用
		day += 1;
	return day;
}

int main()
{
	int y = 0;
	int m = 0;
	scanf("%d %d", &y, &m);
	int d = get_days_of_month(y, m);
		printf("%d\n", d);
	return 0;
}

执行结果:输入2024年2月
在这里插入图片描述

2.链式访问

链式访问就是将一个函数的返回值作为另一个函数的参数

int main()
{
	printf("%d",printf("%d",printf("%d",68)));
	return 0;
}

在这里插入图片描述

printf函数返回的是打印在屏幕上的个数,所以最终打印 6821

六、函数的声明和定义

函数的定义就是函数的具体实现
还用上面的代码来举例吧
这个就是函数的定义:

int is_leap_year(int y)//判断闰年
{
	if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
		return 1;
	else
		return 0;
}

函数的声明:

int is_leap_year(int y)

函数的使用必须先声明后使用,其实函数的定义也是一种特殊的声明,所以函数定义放在调用之前也是可以的。

总结:

C语言函数这一章节,是我们想成为编程高手,必掌握的一步,我们通过定义和使用函数,可以构建出结构清晰,功能强大的C语言程序。好了,这一篇就讲到这里了,感觉有收获的话,别忘了留下你的关注和三连哦!

内容: 这个合成医疗保健数据集的创建是为了作为数据科学、机器学习和数据分析爱好者的宝贵资源。 灵感: 医疗保健数据通常很敏感,并受隐私法规的约束,因此难以访问以进行学习和实验。为了解决这一差距,我利用 Python 的 Faker 库生成了一个数据集,该数据集反映了医疗保健记录中常见的结构和属性。通过提供这些合成数据,我希望促进医疗保健分析领域的创新、学习和知识共享。 表格信息: 每列都提供有关患者、其入院情况和提供的医疗保健服务的特定信息,使此数据集适用于医疗保健领域的各种数据分析和建模任务。以下是数据集中每一列的简要说明 - 名字:此列表示与医疗保健记录关联的患者的姓名。 年龄:患者入院时的年龄,以年表示。 性:指示患者的性别,“男性”或“女性”。 血型:患者的血型,可以是常见的血型之一(例如,“A+”、“O-”等)。 医疗状况:此列指定了与患者相关的主要医疗状况或诊断,例如“糖尿病”、“高血压”、“哮喘”等。 入学日期:患者入住医疗机构的日期。 医生:在患者入院期间负责护理的医生的姓名。 医院:标识患者收治的医疗机构或医院。 保险提供商:此列指示患者的保险提供商,可以是多个选项之一,包括“Aetna”、“Blue Cross”、“Cigna”、“UnitedHealthcare”和“Medicare”。 账单金额:患者在入院期间为他们的医疗保健服务开具的账单金额。这表示为浮点数。 房间号:患者入院期间入住的房间号。 入场类型:指定入院类型,可以是“紧急”、“选择性”或“紧急”,以反映入院的情况。 出院日期:患者从医疗机构出院的日期,基于入院日期和实际范围内的随机天数。 药物:确定患者在入院期间开具或服用的药物。例子包括“阿司匹林”、“布洛芬”、“青霉素”、“扑热息痛”和“立普妥”。
评论 173
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值