C语言基础——函数

函数是指将一组能完成一个功能或多个功能的语句放在一起的代码结构。在C语言程序中,至少会包含一个函数,及主函数main()。本章将详细讲解关于函数的相关内容。

一.函数概述

C语言重要组成部分。本质是将一个语句块通过命名的方式独立出来。通过调用函数,可以实现对部分代码的反复使用,。

函数类似于循环结构,可以节约大量代码。不同的是,函数在使用时不用被连续使用,而循环结构必须被连续使用。

二.使用函数

1.定义函数

定义函数由函数首部与函数体组成。其中,函数首部由void、函数名和小括号组成;函数体由大括号和语句块组成。

void函数名()
{
     语句块;
}

由于函数名属于标识符,所以函数名必须符合标识符的命名规则。命名的函数名要有较好的可读性。

2.调用函数

调用函数是通过语句实现的。函数名、小括号与分号组成调用函数语句。

函数名();

在这里插入图片描述

3.函数说明

在使用函数时,默认为先定义函数、后调用函数。在这里插入图片描述
由于计算机执行程序是顺序执行。所以在调用函数时,将定义函数放在主函数之前

三.使用参数

最基本的函数形式相当于一个封闭空间,该函数的功能不受外界影响。如果函数的功能需要外部传递一些值进入函数,并参与函数的运算,这种函数在C语言中被称为带参函数。

1.参数声明

对参数进行声明

void 函数名(类型 形式参数)

其中,类型为形式参数的类型。形式参数简称形参,其本质为一个变量。声明形参后等于为函数声明了变量,可以在函数体内进行使用。
形参的个数可以为一个也可以为多个。如果要声明多个形参,它们之间用逗号隔开即可。

void(类型形参1,类型形参2,……)
{
}

形参的作用就是一个接受站台,用于接收数据。在函数中,声明几个形参等于建立了个接收站。

2.参数传递

指将数据通过参数传递到函数的形参中。参数传递方式为通过调用函数语句,将值传递到函数中。

函数名(实际参数)

实际参数简称实参,表示实际传递的数值。实参可以为常数,也可以为变量。
实参的个数、数据类型及顺序要与形参的一致。如果传递多个实参,咋要用逗号将其分隔,

函数名(实参1;实参2;实参3;……);

实参的类型与形参的类型要一致;当实参与形参类型不同时,如果实参的类型可以被自动转换为形参的类型,也是可以进行参数传递的。

四.返回值

返回值是指函数在被执行完后返回的值。通过返回值,我们可以确定函数执行的情况,还可以得到函数的运行结束。

1.声明函数类型

声明函数类型是指声明函数返回值的类型。

类型 函数名()
{
}

其中,类型是指函数返回值的类型。函数返回值可以为一个常数或一个变量。无论是带参函数还是无参函数都可以声明函数类型。

void 函数名()
{
}

这里的void表示该函数没有返回值。没有返回值就是没有反馈信息。

2.传递返回值

传递返回值要使用return语句。通过return语句可以将函数返回值进行传递

return 返回值;

其中,return语句可以有多个;返回值为表达式,其类型必须和声明函数类型一致或兼容。这里的兼容也可以指可以自动转换。
变量或常量也属于表达式

类型 函数名(形参1,形参2,形参3,……)
{
     ……
     return 0;
}

五.局部变量

局部变量是指在一定范围内有效的变量。一定范围即有效范围,具体是指局部变量所属的函数范围。在这个范围中,局部变量是有效的。在函数内定义的变量及形参都属于局部变量。在这里插入图片描述

a.作用域

作用域是指变量可以使用的范围。局部变量的作用域是从声明该变量开始一直到所有语句块的结束

局部变量的有效范围与局部变量的作用域是不同的,在局部变量的有效范围中,该局部变量是有效的,但不一定可以被使用。

b.生命周期

生命周期是指变量处于“存活”状态的时间长短。局部变量只有在被当次调用期间存在,而在没有被调用期间处于“死亡”状态。

可以让当前没有使用的变量处于“休眠状态“,以减轻硬件的加载负担。

六.全局变量

全局变量又称外部变量,是指在整个程序内都有效的变量。全局变量在函数外部进行声明。全局变量的作用域是从声明该变量开始一直到所有程序结束。

七.递归

在C语言中,使用递归编写程序可以大量减少程序中的代码。

1.什么是递归

递归来源于英文单词recursion,其意思为递推、递归。递归就是按照特定规律将复杂的问题逐步简化的一个过程。递归由递推、终止条件、回溯及递归方式 4个部分组成。 程序调用自身的编程技巧称为递归(recursion)。递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义域说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大减少了程序的代码量。递归主要思考方式在于:把大事化小
递推:是将复杂数据进行简化的过程。
终止条件:是递推过程的中止界限
回溯:是将简化的所有数据进行回推的过程。
递归方式:是在递推与回溯过程中都要遵循的简化数据和回推数据的规律

2.递归的两个必要条件

存在限制条件,当满足这个限制条件的时候,递归便不再继续。
每次递归调用之后越来越接近这个限制条件。

八.库函数

将大量常用的相关函数放在一起,形成一个库(仓库)。其中,将库中的所有函数称为库函数,将仓库称为系统库文件,又称头文件,其文件名后缀为.h。

1.使用库函数

不同的头文件中包含了不同类型的库函数。如果想要使用库函数,就要将对应的头文件引入程序中,引入头文件等于将头文件所包含的所有库函数导入程序中,这时就可以直接调用库函数。

#include<文件名>

其中<> 可以用英文双引号代替

#include"文件名"

在引入头文件时,结尾不能加分号

2.常见头文件

C语言提供了很多头文件,不同的编译器支持的头文件不同。下面我们将常用的几个头文件进行展示。

头文件包含的库函数
math.h数字库函数
ctyph.h字符函数与字符串函数
stdio.h输入/输出函数
stdlib.h动态分配函数与随机函数

3.库函数printf()和scanf()

在C语言中,我们常调用的库函数就是stdio.h头文件提供函数printf()与库函数scanf()。

printf("格式化字符串",参量表);

其中格式化字符串包括正常字符与格式化规定字符。正常字符会被原样输出,而格式化规定字符为"%“开头的占位符由斜杠” \ "组成的转义字符,如%d、%c、\n等
参量表是指要输出的一系列参数。参量由表达式组成。参数必须与格式化字符串中的占位符的个数、类型及顺序相符,且每个参数之间用逗号分开。
如果一个格式化字符串中没有占位符,此时参量表可以被省略。

库函数scanf()为输入函数

scanf("格式化字符",参量表);

其中格式化字符由“%”开头的占位符组成。格式化字符规定了用户输入的数据类型,如“%d”表示用户输入的数据类型必须是整型。
如果格式化字符中由多个占位符,他们之间可以用空格或其它符号作为分隔符。
参量表由“&”与参数组成,如&a。参数必须与占位符的个数、类型及顺序相符,每个参数之间用逗号分开。

九.数值运算函数

math.h头文件中的库函数

1.绝对值运算函数

绝对值是指一个数在数轴上所对应点到原点的距离。

函数功能
abs(x)求整数的绝对值
cabs(znum)求复数的绝对值
fabs(s)求双精度的绝对值
labs(x)求长整形的绝对值

2.三角函数运算函数

函数功能
sin(x)求正弦值
cos(x)求余弦值
asin(x)求反正弦值
acos(x)求反余弦值
sinh(x)求双曲正弦值
cosh(x)求双曲余弦值
tan(x)求x的正切值,其中x的单位是弧度
tanh(x)求x的双曲正切值
atan(x)求x的反正切值,其中x的单位是弧度
atan2(y,x)求y/x的反正切
ceil()求出不小于指定值的最小整数(取上整)
floor()求出不大于指定值的最大整数(取下整)
fmod()返回两参数相除的余数,该余数符号与被除数的相同
modf(val,&iptr)把双精度val分解为整数部分和小数部分,把整数部分存到iptr指向的单元
frexp(val,&iptr)把双精度数val分解为位数x和以2为底的指数n,及val=x*2n,将n存放在eqtr指向的变量中。
srand()初始化随机数发生器
rand()产生-90到32767之间的随机整数
ldexp(x,exp)返回x乘以2的exp次幂
log(x)返回x的自然对数
log10(x)返回x的常用对数(底数为10的对数)
sqrt(x)返回x的平方根
exp(x)返回e的x次幂的值
pow(x,y)返回x的y次方的值
  • 43
    点赞
  • 228
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
sscanf函数C语言中一个非常常用的函数,它可以将一个字符串按照指定的格式转换成相应的数据类型。在嵌入式开发中,sscanf函数也是非常常见的,因为很多时候需要从串口或者其他外部设备中读取数据,并将其转换成相应的数据类型进行处理。下面是一些sscanf函数的使用技巧: 1. 使用sscanf函数时一定要注意格式字符串的正确性。格式字符串中的占位符必须与待转换的数据类型相对应,否则会发生未知错误。 2. 如果待转换的字符串中包含多个数据,可以使用多个占位符进行转换。例如,如果待转换的字符串为"1,2,3",可以使用" %d,%d,%d"的格式字符串进行转换。 3. 可以使用sscanf函数的返回值来判断转换是否成功。如果返回值等于待转换字符串的长度,则说明转换成功,否则转换失败。 4. 如果待转换的字符串中包含浮点数,可以使用"%f"或者"%lf"的格式字符串进行转换。 5. 如果待转换的字符串中包含十六进制数,可以使用"%x"的格式字符串进行转换。 6. 如果待转换的字符串中包含字符或字符串,可以使用"%c"或者"%s"的格式字符串进行转换。 7. 如果待转换的字符串中包含指针类型的数据,可以使用"%p"的格式字符串进行转换。 总之,在使用sscanf函数时一定要注意格式字符串的正确性,否则很容易出现转换错误的情况。同时,还应该注意sscanf函数返回值的判断,以确保转换的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dataowu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值