c语言函数, 函数调用及函数递归
1. 函数的定义: 返回值类型 函数名(形参列表) {函数体(函数的实现内容)}, 注意: 如果没有参数, 小括号也是必不可少的.
函数与函数之间可以嵌套调用(也就是在一个函数内部可以调用另外一个函数), 但是不能嵌套定义(不能在一个函数内部定义另外一个函数)
形参: 形式上的参数, 在函数定义时, 给定的参数叫做形参, 是一个一个的变量, 存储的数据在调用之前完未知
实参: 函数调用时给定的参数叫做实参, 是一个唯一确定的数据. 实参向形参传递的过程是一个拷贝的过程
函数相当于公司的部门, 每一个部分完成特定的功能, 部门与部门之间的并列关系决定了函数与函数之间也是并列关系
函数的功能: 实现代码的模块化管理. 把复杂的逻辑进行拆分, 而主函数只起到宏观调控的功能即可, main函数是应用程序执行的入口
函数定义过程中可能出现的错误:
a. Function definition is not a allowed here: 原因: 函数内部又定义了一个新的函数, 嵌套定义
solution:函数之间是并列关系, 把内部定义的函数定义在外部
b. Control reaches end of non-void function: 原因: 返回值不能为空, 函数内部没有通过return返回数据
solution: 通过return返回对应数据
2. 函数定义形式:
a. 函数定义第一种形式: 无参数, 无返回值
void buyMike() {
printf("还没给钱\n");
}
函数名的命名规范: 有多个英文带刺组成, 除了第一个单词的首字母小写, 其余单词首字母大写
b. 函数定义的第二种形式: 有返回值, 无参数
float salary() {
printf("同志们今年干的不错, 明年好好干, 不要跳槽\n");
return 1.0;//ruturn 将该函数的值返回给主调函数
//千万不要把代码放到return下面, 会执行不到
}
c. 函数定义的第三种形式: 无返回值, 有参数
void buyMike2(float money) {
if (money < 10) {
printf("钱不够\n");
} else {
printf("OK, 买了牛奶\n");
}
}
d. 函数定义的第四种形式: 有返回值, 也有参数
//求两个数的最大值
int maxValueOfTwo(int a, int b) {
return a > b ? a : b;
}
//求两个数的最小值
int minValueOfTwo(int a, int b) {
return a < b ? a : b;
}
//求三个数的最大值
int maxOfThreeNumber(int a, int b, int c) {
//1.先求a与b的最大值max
//int max = 0;//存储最大值
//max = maxValueOfTwo(a, b);
//2.再求max与c的最大值
return maxValueOfTwo(maxValueOfTwo(a, b), c);
}
3.函数调用(让函数干活)
a. 无返回值的函数: 函数名(传递的是实参表); 如buyMike2(3.2);
b. 有返回值的函数: 定义一个和返回值类型对应的变量, 用来接收函数调用返回的值. 如: int max = maxValue(2, 3);
4. 数组与函数的关系, 数组作为函数的参数:
a. 当数组作为函数参数时, 只传递函数名称如int a[10] = {0}; outputArray(a, 10);//outputArray(int arr[], int n)是自己定义的一个函数
5. 函数的使用分为三部分:(在xcode中)
a. 函数声明, 类似于使用说明书, 写在.h文件中
b. 函数定义(函数的实现),实现写在.m文件中
c. 函数的调用(导入头文件, 本质就是将.h文件中的内容全部拷贝到该文件中)
6. 变量的作用域: 变量可访问的范围
局部变量: 在函数内部定义的变量叫做局部变量, 只在函数内部可访问, 函数执行时开辟空间, 函数执行结束空间自动回收
全局变量: 在函数外部定义的变量叫做全局变量, 在全局都可访问, 空间不会回收(warning:全局变量非常危险, 使用需谨慎)
静态变量: 凡是被static修饰的变量都叫静态变量.
特点: 1. 如果不赋初值, 默认为0
2. 只初始化一次(该变量只会定义一次)
3. 空间一旦开辟, 不会回收
7. 函数递归: 函数的递归是调用一个与自己功能完全相同的函数(注意: 递归一定要有出口, 否则会造成死循环), 如:
//函数模拟吃苹果
void eatApple(int n) {
//一旦发现苹果个数为0, 通过return结束当前函数执行
//递归一定要有出口, 否则会造成死循环
if (n == 0) {
return;//返回空
}
//如果不为零
//1. 留一个苹果
n--;
//2. 找下一个人来吃苹果
eatApple(n);
//3. 吃自己手中的苹果
printf("第%d个人吃苹果:\n", 10 - n);
}
在main函数中直接进行函数调用即可: eatApple(10);
//倒序报数54321
void reverse(int n) {
if (n == 0) {
return;
}
//1. 留个数
int m = n % 10;
//2. 报数
printf("%d", m);
//3. 找下一个人报数
reverse(n / 10);
}
//正序
void positive(int n) {
if (n == 0) {
return;
}
//1. 留个数
int m = n % 10;
//2. 找下一个人报数
positive(n / 10);
//3. 报数
printf("%d", m);
}
//阶乘
int fac(int n) {
if (n == 0 || n == 1) {//0和1的阶乘都为1
return 1;
}
return n * fac(n - 1);
}
c语言函数, 函数调用及函数递归的更多相关文章
- c语言函数定义、函数声明、函数调用以及extern跨文件的变量引用
1.如果没有定义,只有声明和调用:编译时会报连接错误.undefined reference to `func_in_a'2.如果没有声明,只有定义和调用:编译时一般会报警告,极少数情况下不会报警告. ...
- 【C语言】函数和自定义函数
函数,我之前也提到过一点点内容.其实函数是很好理解的,但是写起来又十分麻烦. 一. 函数引入 我们知道,C源程序是由函数组成的.请看下面的简单函数例子 #include <stdio.h ...
- Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数
本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...
- Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数 目录 Pycharm使用技巧(转载) Python第一天 ...
- 《Go程序设计语言》读书笔记-函数
函数包含连续执行的语句,可以使用代码中通过调用函数来执行他们,函数能够将一个复杂的工作切分成多个更小的模块,使多人写作变得容易.另外,函数对他的使用者隐藏了实现细节.这几方面的特性使得函数成为多数编程 ...
- C++学习(二十一)(C语言部分)之 函数2
复习 函数名 函数名称 调用时需要函数名加上相应的参数函数类型 void 返回值(根据函数的需要)参数函数体 用来写函数的一个定义 函数怎样实现都现在其中函数声明 函数定义 定义如果放在调用的后面, ...
- JavaScript语言精粹 笔记02 函数
函数函数对象函数字面量调用参数返回异常给类型增加方法递归作用域闭包回调模块级联套用记忆 函数 1 函数对象 在JS中函数就是对象.对象是“名/值”对的集合并拥有一个连接到原型对象的隐藏连接.对象字 ...
- python基础编程: 编码补充、文件操作、集合、函数参数、函数递归、二分查找、匿名函数与高阶函数
目录: 编码的补充 文件操作 集合 函数的参数 函数的递归 匿名函数与高阶函数 二分查找示例 一.编码的补充: 在python程序中,首行一般为:#-*- coding:utf-8 -*-,就是告诉p ...
- C语言随笔5:函数、函数指针
函数 C语言中函数参数传递时,将实参的值拷贝到函数参数的存储区中.这种传递参数的方式称为按值传递. 函数不会访问实参本身,访问的是函数存储在栈区的副本,不会改变实参.函数凋用结束,函数在栈区的内容释放 ...
随机推荐
- dubbo(转载)
1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需 ...
- 关于html转pdf
本篇作为一个备忘,记录一下html转pdf中遇到的问题. 没有具体做这个东西的时候不知道,网络上能将html转换成pdf的资源并不太多,使用上有很多都存在一些问题.能完美将一个站点中的页面(这里说一个 ...
- Ext5实现树形下拉框ComboBoxTree
最近为了实现一个属性下拉框被Ext框架折腾了好几天.. 所以,首先要说的是,不管你要做什么系统.强烈建议你不要选择Ext.据我这几天的搜索,应该这个框架现在用的人也很少了. Ext框架的缺陷:框架沉重 ...
- 如何用photoshop把图片白色背景变成透明?
1.当提示配置文件丢失时,选择“指定RGB模式”. 2.Ctrl+J是一个复合动作,复制+新建,会得到一个新图层. 3.选中新图层,点击鼠标左边工具条里面的魔棒工具,再用鼠标点击下图片的某处白色部分, ...
- set集合(set是一个无序且不重复的元素集合)
功能: 一.可以去掉列表,元组中的重复项 二.可以求交集,合集,差集等 def add(self, *args, **kwargs): """ 添加 "&quo ...
- JAVA 1.7 流程控制语句 续
1. Java中的循环控制语句一共有3种,分别是while,do… while以及for循环.2. while循环,形式为:while(布尔表达式){//待执行的代码}3. do…while循环,新式 ...
- ajax post 请求415\ 400 错误
今天用ajax 向后台发送 post请求时,出现了两个问题: 1, 发送请求后,控制台 返回 Unsupported media type-415(不支持的媒体类型),这时突然想起来,post 请求 ...
- 如何将本地文件上传到github托管
Github开源代码库以及版本控制系统,可以托管各种git库,可以将个人Blog或小型项目托管到github,方便看起来又高大上的样子,哈哈哈,下面就看一下实践过程和成果吧!一:注册账号:地址: ([ ...
- MySQL 语句使用到的关键字 函数 记录
一 处理重复数据 1 使用 UNIQUE 唯一键 (添加数据) 创建表的时候设置 2 使用 DISTINCT (查询数据--过滤) eg:SELECT DISTINCT `name` from ...
- Python_Day11_同步IO和异步IO
同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network IO. ...