学完c语言的函数可以理解面向过程的语言
函数是c语言的重点
一、为什么需要函数?
1.避免了重复性操作
2.有利于程序的模块化(每一个功能可以用不同函数去实现)
二、什么叫做函数?
逻辑上:能够完成特点功能的独立的代码单元
物理上:能够接收数据
能够对接收的数据进行处理
能够将处理的结果返回
总结: 函数是个工具,他是为了解决大量类似问题而设计的
函数可以当做一个黑匣子(不需要知道内部具体实现)
三、如何定义函数?
函数返回值 函数名(函数的形参列表){
函数的执行体
}
1.函数定义的本质是详细描述函数之所以能够实现某个特定功能
的具体实现方法
2.return 表达式; 的含义
终止被调函数,向主调函数返回表达式值
如果表达式为空,则只终止函数,不向主调函数返回任何值
------------------------------------------------------------------------------
# include <stdio.h>
void f(void){
int i;
for(i=0; i<5; i++){
printf("大家辛苦了!
");
return; //return 是终止函数的,break是终止循环的
}
printf("同志们好!
");
}
int main(void){
f();
}
------------------------------------------------------------------------------
3.函数返回值的类型也称为函数的类型,因为如果函数名前的返回值
类型和函数执行体中的return 表达式,中表达式的类型不同的话,则
最终函数返回值的类型以函数名前的返回值类型为准
-------------------------------------------------------------------------------
int f(){
return 10.5;
}
int main(){
float f;
f = f();
printf("f = %d", f)
return 0;
}
最终结果: f = 10.000000
-------------------------------------------------------------------------------
四、函数的分类
有参函数 和 无参函数
有返回值 和 无返回值
库函数 和 用户自定义函数
值传递 和 地址传递函数
普通函数 和 主函数
一个程序必须有且只能有一个主函数,
主函数可以调用普通函数,普通函数不能调用主函数
主函数是程序的入口,也是程序的出口
--------------------------------------------------------------------------------
/*
判断一个数是否为素数
*/
# include <stdio.h>
bool isPrime(int val);
int main(){
int val;
printf("请输入一个数判断是否为素数:");
scanf("%d", &val);
bool flag = isPrime(val);
if(flag)
printf("是素数
");
else
printf("不是素数
");
return 0;
}
bool isPrime(int val){
int i;
for( i=2; i<val; ++i){
if(val%i == 0) break;
}
if(val == i)
return true;
else
return false;
}
--------------------------------------------------------------------------------
五、注意的问题
函数调用和函数定义的顺序
函数前置声明;
1.告诉编译器即将可能出现的若干个字母代表的是一个函数
2.告诉编译器即将可能出现的若干个字母所代表的函数的形参和返回值的具体情况
3.函数的声明是一个语句,末尾加分号。
4.对库函数的是声明是通过 # include <库函数所在的文件的名字.h> 来实现的
<stdio.h> std表示标准的 io表示输入输出流 .h 表示头文件
形参和实参之间的关系
1.个数必须相同,位置必须一一对应,数据类型必须相互兼容。
如何在软件开发中合理的设计函数来解决实际问题
1.功能尽量独立单一,可以使代码重用率提高。
函数是c语言的基本单位,类是java,c#,c++的基本单位
六、常用的系统函数
# include <math.h>
double sqrt(double x);
求x的平方根
int abs(int x);
求x的绝对值
double fabs(double x)
求x的绝对值
推荐一本书:
《turboc2.0实用大全》机械工业
七、递归
栈:所有先进后出的存储结构
A---------->B
A---------->A
变量的作用域和存储方式
按作用域分
全局变量
在所有的函数外边定义的变量
局部变量
在一个函数内部定义的变量或者函数的形参都统称为局部变量。
---------------------------------------------------------------------------------------
void g(){
printf("k = %d
", k);
}
int k = 100;
会出现错误,k的使用范围是从定义位置开始到整个程序结束
void g(int i){
int i; //不能重复定义变量
}
# include <stdio.h>
int i = 100;
void g(int i){
printf("i = %d", i);
}
int main(){
g(8);
return 0;
}
在一个函数中如果全局变量和局部变量名相同
局部变量会屏蔽掉全局变量
---------------------------------------------------------------------------------------
按变量的存储方式
静态变量
自动变量
寄存器变量