function //功能
//函数
函数:
思想?
c的角度:
实现 atm的功能!
//自顶向下逐步求精
[atm机]
| //功能
|
|
1.检查卡片 2.验证信息 3.查询 4.存钱 5.取钱 6.退出 //业务逻辑
| |
读 卡 比对 卡号 和 密码
|
识 别
|
给出提示
checkCard(); verifyCard(); searchCard(); saveCash(); getCash(); exit();
函数来体现功能
--------------------------------------------
int main();
{
printf("Please Insert your card!");
checkCard();
printf("Please input passwd:");
verifyCard();
while (1)
{
int n = 0;
switch(n)
{
case 1:
searchCard();
break;
case 2:
saveCash();
break;
case 3:
getCash();
break;
case 4:
exit();
break;
}
}
}
-----------------
C语言函数:
1.函数定义
语法:
类型标识符 函数名(形式参数) //函数头 --head
{ //函数体 body
声明部分
语句部分
}
函数头:
1. 类型标识符 //数据类型
2. 函数名 //名字 --标识符 --- 函数名 命名规则 与 变量名命名规则一致
3. 形式参数 //接收外部传进来的数据
函数体:
4. 函数体 //实现函数具体功能的代码
输入 --->[函数] --->输出
//函数形式
返回值类型 函数名(形式参数) //函数头 --head
{ //函数体 body
声明部分
语句部分
}
功能:
实现两个int 数相加
//输入 --- 两个数 int 型
//函数体 --- 求和
//输出 --- 返回值
形式参数:
1. 就是用来接收实际传过来的数据的
格式 是一个一个的变量
int a,b,c; //形参这块不能这么写
数据类型 变量名,数据类型 变量名 ...
2. 实参 与 形参对应关系
个数相同
类型匹配
int Add(int a,int b)
{
int sum;
sum = a + b;
return sum; //表示从函数 返回,意味着函数执行结束
}
return 语句语法:
return 表达式;
函数调用:
语法格式:
函数名(实际参数);
练习:
找出两个数的最大值
函数调用的形式:
1.函数调用语句
Add(1,2);
2.函数表达式
int ret ;
ret = Add(a,b);
4.函数的参数(实参)
printf("sum = %d\n",Add(1,2));
函数的返回值:
1.函数返回值类型 ,不一定 与 返回的结果 的类型一致
不一致时,
以函数返回值类型为准
2.如果函数本身不需要返回结果,
此时,返回值类型,可以设计为 void 表示返回值为空(没有)
3.如果不需要给函数传递参数,则形参也可以写成void 表示没有参数
4.不写返回值类型 ,此时默认为int型
练习:
判断闰年?
形参: int year
函数名:
isLeapYear
函数体:
y%4==0&&y%100 || y%400==0
返回值:
0 -- 假
1 -- 真
函数的嵌套定义:
标准C是不支持的
gnu组织扩展的语法 支持
一般函数定义放在了 main函数之后,
函数的声明:
将函数头复制一份,
放到要用之前,
后面加分号
练习:
打印月份的天数
main()
{
主逻辑
月份天数的功能 //函数
}
练习:
//判断素数?
找出100以内的素数
isPrimeNum()
{
}
printPrimeNumIn100()
{
//
if (isPrimeNum())
{
}
}
main
{
printPrimeNumIn100();
}
函数:
函数的嵌套调用
函数为什么能够实现层层调用?
此处设计栈知识点
函数的嵌套调用:
特殊的嵌套调用 --递归
自己调用自己
直接递归
间接递归
递归是一种特殊的循环