- 函数
//函数 难点 重点
函数?
例子:
ATM机?
需求出发 --- 提供哪些功能
ATM机
|
验 证
|
取钱 存钱 查询 转账 修改 退出
提示菜单功能
|
选择取钱
|
提示输入金额
|
确认一下金额
|
驱动点钞机
|
给到用户
c语言提供函数:
函数的语法:
函数定义的一般形式:
//返回值类型
类型标识符 函数名(形式参数) //函数头 head
{
//函数体 -- body
声明部分
语句部分
}
输入 --- 处理 --- 输出
函数头:
类型标识符 --- 写数据类型的 --- 表示的函数处理完之后,要带出的结果的类型 ---
函数名 --- 体现函数功能 --- 命名规则 符合标识符命名规则
形式参数 --- 用来接受 传递给函数中的数据的
函数体:
就是完成函数对应功能的代码
需求:
计算两个整型数相加
step1:
从功能 可以先确定函数名称
add
sum
step2: //从输入数据角度考虑
传递两个 整型数据过去
形式参数
格式:
类型名 变量名1,类型名 变量名2, 类型名 变量名3, ...
int a,int b
//int a,b; ---形参变量不能这样写
step3:
//处理数据 -- 函数体 对应的代码
int result;
result = a + b;
step4:
//结果
return 表达式; //作用将结果返回
函数调用:
语法:
函数名(实际参数)
使用方式:
add(a,b); //1.函数调用 语句
result = add(a,b) + 3; //2.函数调用表达式
printf("ret = %d\n",add(1,2)); //3.充当别的函数的参数
练习:
从两个整型数中找出最大值
写成函数
注意:
1.形参 和 实参
一一对应
个数相同
类型匹配
顺序一致
2.函数不需要输入数据,此时形参可以设计为void 表示不需要参数
3.返回值类型
如果函数不需要带出什么结果,此时返回值类型 设计为 void
4.返回值类型
没写
此时 默认为 int类型
5.返回值类型 与 要带出的结果值的类型 可以不一致
但是 最终,以 返回值类型 为准
6. main函数
程序的入口函数
7. 从调用关系上
main 函数 -- 主调函数
其它函数 -- 被调函数
8. 函数定义 可以放到 main函数后面
但是
需要在使用之前,做 函数声明
函数声明写法 --- 将函数头复制 + 分号
练习1:
输入一个数,判断是不是素数 ? //函数
练习2:
打印100以内所有的素数//函数
练习3:
输入年份 和 月份 打印对应月份的天数
void primeNum(int a)
{
...
printf("yes\n");
...
printf("no\n");
}
函数设计中的问题:
1.拆分依据? ---什么时候需要拆分成函数
a.功能独立
b.重复使用
2.大原则
高内聚 ,低耦合
------------------------------------------------------
数组函数参数:
int a[10] = {1,2,3,4,5};
//数组元素 做函数参数 --- 和普通变量做函数参数 用法一样
//数组本身 做函数参数
a //数组名
写法:
函数的形参 --- 数组形式形参,数组长度的形参
函数的实参 --- 数组名 , 数组长度
void printArray(int a[])//形式
编译器
void printArray(int *a)//本质上 --数组传参 只是把数组所在空间的首元素地址传过去了
32位 --- 地址的大小 4字节
64位 --- 地址的大小 8字节
练习:
找出数组中的最大值
int maxOfArray(int a[],int len)
{
a[i]
}
练习:
数组逆序
void reverseArray(int a[],int len)
{
}
main(void)
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
}
函数传参 --- 值传递 (将实参的值传递给形参变量 ==相当于是赋值)