C语言“函数”总结

函数内容

目录

 函数是什么

库函数

自定义函数

函数的参数

在参数调用用中 有 传值调用 和 传址调用

知识点 布尔类型

函数的嵌套调用

链式访问

函数递


 函数是什么

用于执行某项特定任务,具有独立性的代码。    

C语言中函数的分类

函数分为库函数和自定义函数

C语言是结构化的程序设计语言

一般有

-顺序结构

-选择结构

-循环结构

比如求和代码

C语言“函数”总结_第1张图片

中 定义了add函数

Add 执行 x+y=z 之后 返回 z结果

Add只是个名字 括号内的是参数 大括号内的是函数体 int是返回类型

定义好后可以反复调用

(简化版)C语言“函数”总结_第2张图片

库函数

库函数是经常用的函数是过去经常使用的函数为了方便的积累

在网站 www.cplusplus.com/reference/ 中能查到以往的库函数

自定义函数

自定义函数是做库函数不能做的事情

自定义函数想库函数一样,有函数名,返回值类型和函数参数

自定义函数相对重要一些

它用于编出自己需要的函数

就是 返回类型 + 名字 +(参数A,参数B) 可以没有 一个 或者两个参数

比如取大自定义函数C语言“函数”总结_第3张图片

C语言“函数”总结_第4张图片 如果用void就可以不返回

特殊知识点 形参 与 实在参数

C语言“函数”总结_第5张图片在下面的a和b是实参

X,y是形参 改x和y与a和b没关系。用指针改 间接改 要改为C语言“函数”总结_第6张图片

用指针定位可以改变(在初识已经理解了指针的用法)

C语言“函数”总结_第7张图片

但取地址后 就是 间接控制两个实参了 而且没有虚参数

又比如求和参数

C语言“函数”总结_第8张图片这个函数不需要回地址 是因为它只要把值返回就行了

函数的参数

实参;也就是真的传给函数的参数是实参

它可以使 常量 变量 表达式 函数等

形参;也就是形指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化,当函数调用完以后,这个参数就被消除了

在参数调用用中 有 传值调用 和 传址调用

传值调用只能是返回值 或者 在自定义函数中操作出结果

但传址调用 可以 直接操纵外部变量 操纵实参

练习 打印100-200之间的素数

C语言“函数”总结_第9张图片

新知识点 开平方数学库函数 sqrt他需要的头函数是 math.h

对于这个也可以弄出基数就行了

//查是否是闰年的精简版

C语言“函数”总结_第10张图片

 

然后用函数来判断

函数版本其实就是给就是给里面的判断程序移出去作为一个函数运用,可以缩减主题的内容

就比如C语言“函数”总结_第11张图片

的方法,那么之歌函数如果要调用,就会很方便了,需要函数的功能足够单一足够简单

高内聚低耦合,只用来处理单一的功能。

比如再写一个二分查找的函数

一般取名是binary_search(arr,k);

可以在主函数中写怎么用,再在外面详细的写功能代码。

提出一个功能代码

C语言“函数”总结_第12张图片

是二分代码 这个代码很重要,需要记住

然后是 这些功能尽量用 1 和 0作为返回值也就是 真 和 假

返回值是自己设计的 这里也是说明 代码风格 需要养成一个很好的代码风格

自定义函数能接收不止两个东西进行编制

在自定义函数中,因为形参的情况,建议代码功能单一化,不要集成那么多功能 因为容易出现BUG 还难找到BUG出现的原因。

比如如果C语言“函数”总结_第13张图片这种情况,其中 arr 只是一个指针变量

它只是指针/指针 只能等于1.

知识点 布尔类型

在C语言中 最开始就 char short int long longlong float double 是内置类型

在C语言最初设计中就有

但在C99中引入了布尔类型 也就是bool这个玩意

这个玩意是用来表示真假的变量

比如

Boll flaf = true;或者 boll flaf = flase

但需要引入 #include

C语言“函数”总结_第14张图片

并且返回false 和 true两个情况

但是 1可以表示真 0可以表示假

这样也可以用于判断 其实也就是给1和0封装一下罢了 bool的字节长度也是1而已

这个bool的意义不大……但是可以更精简?

C语言“函数”总结_第15张图片作业 写个函数加一自定义函数不建议用全局变量

函数的嵌套调用

解释为 main调用three_lined 然后 three_line调用 new_line但是不能嵌套定义

C语言“函数”总结_第16张图片

解释不能再函数里面定义函数

链式访问

把一个函数的返回值作为另一个函数的返回值

比如这个玩意也能打印出来,可以打印出返回值

或者一个更抽象的D

当函数不屑返回类型是 默认返回int

不写返回类型的函数是很糟糕的

如果不写返回结果,自定义函数会返回最后一条函数的结果

比如这个 返回不了什么好东西

代码要写的严谨 要写的没BUG 要写的有用 (公司找了一个程序员去维护)

对于这个main函数

它也是有参数的

Main有 int argc char*argv[] char &envp[]

函数的定义与声明

应该先定义函数再用函数也就是先生们再使用

函数定义是指函数的具体实现,交代函数的功能实现,

而且函数的声明一般放在头文件

C语言“函数”总结_第17张图片

然后函数的声明放在头文件

函数的定义放在源文件里面去

然后包含这个头文件

也就是头文件也可以自定义了

包含头文件实际上是把头文件的东西复制过来

然后是编译静态库 使用静态库

编译是用属性模式lib 使用h

就是pragma comment(lib,”静态库文件“)  (防小人不防君子的玩意)

分模块 能使人的思维更加清晰 更加清楚

还有个

函数递归

也就是程序调用自身的编程技巧。

一边是把一个大型复杂问题转化为一个与原问题相似的规模较小的问题来求解

也就是用少量的程序来描述解题过程中需要的多次重复计算,大大减少了程序的代码量

也就是把大事化小

Eg; 接收一个整型 然后分开打印整型

(知识点再提 ,无符号整型 unsigned int 函数 用%u)

%d是打印有符号的整数 包含正负数 %u是打印无符号整数 再%u中没有负数

例子代码C语言“函数”总结_第18张图片

我写的C语言“函数”总结_第19张图片

但顺序都不是想要的

所以不可取

                            

用递归法

C语言“函数”总结_第20张图片

这个是自我函数调用的递归法的展现

递归里面要嵌套条件 不然就会死循环溢出 会跳出 Stack overflow 是溢出

Eg2;

编写函数不允许创建临时变量,求字符串长度;

也就是写出 strlen函数的代码

C语言“函数”总结_第21张图片

解释一下 这个指针变量再传输的时候 其指针所指的是数组的第一个字母 然后此后过程中,增加一个数字就是算下一个字符 直到\0  但是不能有这个变量

解决方法C语言“函数”总结_第22张图片

 

比如n! 计算n! 用函数的迭代来计算

C语言“函数”总结_第23张图片

下面是迭代 也就是非递归的方式

C语言“函数”总结_第24张图片

例子 求斐波那契数  这是递归

C语言“函数”总结_第25张图片

但是这玩意进行计算次数过多时就很难求出来

现在我们用迭代计算

C语言“函数”总结_第26张图片

这样可以减少计算量 ,也减少了思维量

我自己认为 迭代就是在函数中塞了个循环

递归是自己计算自己 也就是把本身当作一个循环计算

(汉诺塔问题)(青蛙跳台问题)

你可能感兴趣的:(#,C语言基础,C语言,c语言,算法,数据结构)