系列连载
- 【python / C / C++】
参考
- 《C语言程序设计(第四版)谭浩强》
- 【C语言】C语言视频教程
- 《郝斌 C 语言自学教程》
文章目录
- 为什么需要函数
- 什么叫函数
- 如何定义函数
- 函数的分类
- 注意的问题
- 常用的系统函数
为什么需要函数
避免重复性操作
有利于程序模块化
什么叫函数
逻辑上 :能够完成特定功能的独立代码块
物理上:
- 能够接收数据(也可以不接收)
- 能够对接收的数据进行处理
- 能够将数据处理的结果返回(也可以不返回)
总结:函数是个工具,它是为了解决大量类似问题而设计的
函数可以当做一个黑匣子
如何定义函数
函数的返回值 函数的名字(函数的形参)
{
函数的执行体
}
1)函数定义的本质是详细描述函数之所以能够实现某个特定功能的具体方法
2)return 表达式的含义
- 终止被调函数,向主调函数返回表达式的值
- 如果表达式为空,则只终止函数,不向被调函数返回任何值
- break 是用来终止循环和 switch 的,return 是用来终止函数的
3)函数返回值类型称为函数的类型,因为如果函数名前的返回值类型和函数执行体中的 return 表达式不同的话,则最终
函数返回值的类型以函数名前的返回值类型为准
#include<stdio.h>
int f(){
return 10.5;
}
int main(){
float x = f();
printf("%f\n", x);
return 0;
}
output
10.000000
函数的分类
有参函数和无参函数
有返回值和无返回值
库函数和用户自定义函数
普通函数和主函数
值传递函数和地址传递函数
一个程序必须有且只能有一个主函数
主函数可以调用普通函数,普通函数不能调用主函数
普通函数可以相互调用
主函数是程序的入口,也是程序的出口
注意的问题
1)函数调用和函数定义的顺序
- 如果函数调用写在了函数定义的前面,则必须加函数前置声明,
函数前置声明的作用:- 告诉编译器即将可能出现的若干个字母代表的是一个函数
- 告诉编译器即将可能出现的若干个字母所代表的函数的形参和返回值的具体情况
- 函数声明是一个语句,末尾必须加分号
- 对库函数的声明是通过 #include<库函数所在的文件的名字.h> 来实现的
2)形参和实参
个数相同
位置一一对应
数据类型必须相互兼容
#include<stdio.h>
int f(int i, int j){
return i;
}
int main(){
float x = f(6.5, 5);
printf("%f\n", x);
return 0;
}
out
6.000000
3)如何在软件开发中合理的设计函数来解决实际问题
一个函数的功能尽量独立,单一,多学习,多模仿牛人的代码
4)函数是 C 语言的基本单位,类是 java C++ 的基本单位
5)变量的作用域和存储方式
按作用域分
- 全局变量
在所有函数外面定义的变量叫全局变量
使用范围:从定义位置到整个程序结束
#include<stdio.h>
void f(void){
printf("%d\n", k);
return;
}
int k = 1000;
int main(){
printf("%d\n", k);
return 0;
}
output
错误 1 error C2065: “k”: 未声明的标识符
- 局部变量
在一个函数内部定义的变量或者函数的形参都统称为局部变量
使用范围:只能在本函数内部使用
【注意】
全局变量与局部变量命名冲突的问题
在一个函数的内部,如果定义的局部变量的名字和全局变量名字一样时,局部变量会屏蔽掉全局变量
#include<stdio.h>
int k = 1000;
void f(int k){
printf("%d\n", k);
return;
}
int main(){
f(8);
return 0;
}
output
8
按变量的存储方式
静态变量
自动变量
寄存器变量
常用的系统函数
double sqrt(double x);
int abs(int x);
double fabs(double x)