一、函数 --- 实现某一个功能的
函数的定义: //实现函数
类型标识符 函数名(形式参数)
{
声明部分
语句部分
}
(1).类型标识符 (返回值的类型标识符)
返回值类型
返回值 如果没有,返回值类型 一般写成void
返回的结果的类型 与 定义返回值类型 不一致 ,以定义的返回值类型为准
返回值的类型如果不写,默认为int型
(2).函数名 --- 一般和函数功能对应
(3).形式参数 --- 函数接收数据的入口
形参 --不是一定要有
看函数功能的需要
形参没有,一般写成 void
形参使用时:
a.个数相同
b.类型匹配
c.形参 与 实参匹配顺序 -- 在ubunt18.04平台上 顺序是 从 右向左
(4).函数体 --- 完成函数具体功能的代码
函数定义的位置:
1.main函数之前
2.main函数之后
函数的声明
函数头 + 分号
函数声明可以放的位置,
使用之前
函数调用的形式:
add(a,b); // 函数调用语句
int ret;
ret = add(a,b); //函数调用在表达式中
ret = add(a,b) + 3; //表达式的一部分
//函数调用作为某个函数的实际参数
printf("sum = %d\n",add(a,b));
返回值的类型标识符 函数名(形式参数) //函数头 --规定了一下函数的形式
{
函数体 //--实现函数具体功能代码
返回结果 //return 返回结果
}
----------------------------------------------------------------------------------------------
eg:
实现两个数求和?
a+b --复用
1+2
//功能:
求和
准备数据 --> 处理数据 --->输出结果
y = f(x) //x --> y
输入数据 -->处理数据 --->带出结果
----------------------------------------------------------------------------------------------
准备数据:
准备两个数据 --- 形式参数要能接收两个数据 ---本身其实就是变量
处理数据:
a+b
返回结果:
return
---------------------------------------------------------------------------------------------
函数名:
add
形式参数:
int a,b; //形参不能这样写
数据类型 形参变量名1,数据类型 形参变量名2,...
int a,int b
函数功能: a+b
结果:
return 结果;
函数调用:
语法:
函数名(实际参数);
----------------------------------------------------------------------
总结:
1.函数实现
主要是 代码逻辑
2.流程图 --- 某一个功能块
3.main函数
主逻辑
二、栈
栈 --- 数据结构 --先进后出 (FILO) //First In Last out
linux系统上 ,默认情况下 8M ,大小可以调整。
栈:
特点:
先进后出 (FILO)
8M
主要:
局部变量
自动申请 自动释放
int a;
堆:
特点:
大
手动申请,手动释放
字符串常量区:
char s[10] = "hello";
全局区(静态区)
全局变量(静态变量)
代码区
内存的5个区
程序 = 代码 + 数据
函数的嵌套调用:
特殊的嵌套调用 --- 递归 (自己调用自己)
递归 --就是循环
直接递归
间接递归
while (1) //死循环
{
}
递归:
1.
2.算法
递归的思路,实现代码?
eg:
1+...+100
int i = 0;
int sum = 0;
while (i <= 100)
{
sum += i;
}
//1.初始条件
//2.结束条件
//3.趋于结束的操作
//4.循环体
//sum()
递归来实现: //倒着来
sum(100)
|--sum(99)+100
|--sum(98)+99
|--sum(97)+98
...
|--sum(2)+3
|--sum(1)+2
|--1
写出代码:
1.递推关系 //重复的
第n项 与 第n-1项之间的关系
2.结束条件