当前位置:首页 » 《我的小黑屋》 » 正文

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

3 人参与  2024年12月12日 10:01  分类 : 《我的小黑屋》  评论

点击全文阅读


前言:

“函数”这个名词,我们每个人都是耳濡目染。高中数学中的函数已经够让我们头疼了,而现在在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);//设置数组内容为6printf_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;elsereturn 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;elsereturn 0;}

函数的声明:

int is_leap_year(int y)

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

总结:

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


点击全文阅读


本文链接:http://zhangshiyu.com/post/199968.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1