- 初识函数
- 函数的定义
- 格式化输入,输出
- 函数调用
- 函数调用方式
- 嵌套调用
- 递归调用
- 内部函数和外部函数
- 外部函数
- 内部函数
- 爱你们
- 爱你们
- 爱你们
什么是函数呢?
- 函数是C语言的模块,一块块的,有较强的独立性,可以相互调用,也就是说,你可以在函数A中调用函数B,又可在函数B中调用函数C,不仅如此,你还可以调用函数自身(比如递归调用)。
- 函数是完成一个个完成特定任务的功能集合,它能完成你所想要的某种特定功能,当你要用时,只需要调用它即可,在后续的修改或是维护过程中,只需要针对这一个进行修改即可。
为什么需要函数呢?
- 在我们写代码的时候,有时候会重复写一段代码,而这段代码所执行的功能,操作是一样的,只是针对的数据不一样,这个时候,只需要将这段功能写成一个函数模块,在需要用到的时候调用即可,进而避免了写重复的代码,避免了重复性操作。
- 方便代码的维护,当我们知道哪个部分出问题后,或者需要修改某个功能,那就只需要修改那部分的代码即可。
在C程序设计模块化编程思想中,模块的功能是由若干个函数实现的,每个函数负责相应的功能
函数可以分为为库函数和自定义函数
一个 C程序由一个main( )函数和若干个普通函数构成,main( )函数是这个程序的入口。
定义一个函数的语法格式如下:
返回值类型 函数名(参数类型 参数名1,参数类型 参数名2,......参数类型 参数名n)
{
执行语句
.....
return 返回值;
}
( )括号中的为参数列表
- 无参函数
即在上面格式中,如果函数不需要接受参数,参数列表为空,这样的函数称为无参函数
#includevoid func()//定义一个将字符串,打印输出到控制台的功能 { printf("这是我第一个调用函数!n"); } int main() { func();//调用func无参函数 return 0; } 运行结果: 这是我第一个调用函数!
- 有参函数
有参函数需要在定义时,在函数名称后面的括号中填写参数,用于接收调用函数传入的数据
#include格式化输入,输出void func(int x,int y) { int sum; sum=x+y; printf("x+y=%dn",sum); } int main() { func(1,2);//调用func函数 return 0; } 运行结果: x+y=3
- printf( )函数用于向控制台输出数据
#includeint main() { printf("%cn",'h');//输出字符 printf("%sn","你好,世界");//输出字符串 printf("%f %.1fn",3.14,3.14);//以十进制输出一个浮点数 ,。1f表示保留一位小数 printf("%d%2d%6d%n",5,2,0);//以十进制输出一个有符号整数 ,%3d表示,每个数据占据3位 printf("%un",25);//以十进制输出一个无符号整数 printf("%on",25);//以八进制输出一个整数 printf("%xn",25);//以十六进制输出一个小写整数 printf("%Xn",25);//以十六禁止输出yi个大写整数 printf("%en",3.14);//以科学计数法输出一个小写浮点数 printf("%En",3.14);//以科学计数法输出一个大写浮点数 } h 你好,世界 3.140000 3.1 5 2 0 25 31 19 19 3.140000e+000 3.140000E+000 我感觉我敲的代码不怎么对
- scanf( )函数用于读取用户输入的数据
#include函数调用int main() { printf("请输入字符串:"); char str[64]; scanf("%s",str); printf("%sn",str); return 0; } 运行结果: 请输入字符串:你的名字 你的名字
一个良好的应用程序,不因该在一个函数中实现所有的功能,程序由若干功能不同的函数组成,函数之间会存在互相调用的情况。
函数调用方式主函数可以调用其他普通函数,普通函数可以互相调用,但是普通函数不能调用主函数
函数名(实参1,实参2,...,实参n);
根据函数在程序中出现的位置不同,可将函数的调用方式分3种
- 将函数作为表达式调用
将函数作为表达式调用时,函数的返回值参与表达式的运算,此时要求函数必须有返回值
int a=max(10,20);
上述代码中,函数max( )为表达式的一部分,max的返回值被赋予整型变量a
- 将函数作为语句调用
函数以语句的形式出现时,可以将函数作为一条语句进行调用
printf("nihao,shijie");
此时,调用了输出函数printf( ),此时不要求有返回值,只要求函数完成一定的功能
- 将函数作为实参调用
将函数作为实参调用时,其实就是将函数返回值作为函数参数,此时要求函数必须有返回值
printf("%dn",max=(10,20));
此时,将max函数的返回值最为printf函数的实参来使用
嵌套调用上面的代码中,我们都见到或者遇到过,我们需要理解每行代码的内容及其含义
C语言中函数的定义是独立的,即一个函数不能定义在另一个函数的内部,
但在调用一个函数时,可以在一个函数中调用另一个函数
#include递归调用int fun2(int m) { return m*m; } int fun1(int x,int y) { return fun2(x)+fun2(y); } int main(){ int a=0,b=0; scanf("%d%d",&a,&b); printf("a和b的平方和:%d ",fun1(a,b)); return 0; } 运行结果: 1 2 a和b的平方和:5
程序中函数自己调用自己
作用:大大减少了程序的代码量
#include内部函数和外部函数int digui(int n);//递归函数的函数说明 int main() { printf("你所输入的数字之内所有之和:"); int i,ret; scanf("%d",&i) ; ret =digui(i);//ret等于函数的返回值 printf("%d内所有数字之和为%d",i,ret); return 0; } int digui(int n) { if(n>=1) { return n+digui(n-1); } else return 0; } 运行结果: 你所输入的数字之内所有之和:100 100内所有数字之和为5050
函数的调用不局限在一个函数同一个源文件,不同源文件中的函数可以互相调用。根据函数能否被其他函数调用,将函数分为内部函数和外部函数
外部函数开发大型项目,可能包含很多源文件来分别实现,最终,再整合在一起,有时,一个源文件中,需要调用其他源文件中的函数
被其他源文件调用的函数称为外部函数
格式:
extern int add(int x,int y); //add()函数是定义在其他源文件中的外部函数 //使用extern关键字声明要调用的外部函数
first.c
extern int add(int x,inty)//编译器默认add()为外部函数
{
return x+y;
}
second.c
extern int add(int x,int y)
void main
{
printf("%d",add(1,2));//调用外部addj函数
内部函数
外部函数,只要声明一个函数原型,就可以调用其他源文件中的函数,但是,当多人开发时,可能出现函数重名的情况,不同源文件中的同名函数会相互干扰
此时,就需要一些特殊函数,只在定义的文件中有效,这类函数称为内部函数
只能在当前源文件中被调用,不能被其他源文件所调用
格式:
static void show(int x)
{
printf("%dn",x);
第一个文件 #includevoid show() { printf("%s n","first.c"); } 第二个文件 #include static void show() { printf("%s n","second.c"); } void main() { show(); } 如果把static去掉,就会出错
###全局变量与局部变量的区别大家去这里观看点这里
| 从现在做起,坚持下去,一天进步一小点,不久的将来,你会感谢曾经努力的你! |
如果又出错的,请各位友友指正。
新人报到,各位友友们,给我个三联(点赞,关注,收藏)
爱你们 爱你们 爱你们


