资源描述:
《C语言 第08章 函数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第八章函数8.1概述8.2函数的定义8.3函数参数和函数值8.4函数的调用8.5函数的嵌套调用8.6函数的递归调用8.7数组作为函数参数8.8局部变量和全局变量8.9变量的存储类别第八章目录8.1概述8.1概述mainabcdefghhieg8.1概述#include“stdio.h”voidprintstar(){printf(“**********”);}voidprint_message(){printf(“Howdoyoudo!”);}voidmain(){printstar();print_message();printstar(
2、);}例.简单的函数调用。运行结果**********Howdoyoudo!**********8.1概述(1)一个C程序由一个或多个源程序文件组成。说明(2)一个源程序文件由一个或多个函数组成。(3)C程序的执行从main函数开始,调用其他函数后返回到main函数,在main函数中结束整个程序的运行。(4)所有函数都是平行的,即在定义函数时是互相独立的,函数不能嵌套定义。函数间可以互相调用,但不能调用main函数。8.1概述(5)从函数使用的角度来看,C语言的函数可以分为两类:标准库函数和用户自定义函数。①标准库函数与头文件执行效率高,用户需要时
3、,可在程序中直接进行调用。C语言库函数所用到的常量、外部变量、函数类型和参数说明,都在相应的头文件(.h)中声明,这些文件通常存放在系统目录include。②用户自定义函数无参函数有参函数8.2函数的定义8.2函数的定义有参函数定义形式一函数值类型函数名(形式参数类型及参数说明){声明部分语句}函数返回值的类型,可以是简单类型、void类型或构造类型等。函数名是函数的标识符,遵循C语言标识符的命名规则,区分大小写。如:intmax(inta,intb){}形式参数简称形参。注意:无论函数是否有形式参数,圆括号不可省。8.2函数的定义有参函数定义形式
4、二函数值类型函数名(形式参数列表)形式参数说明{声明部分语句}如:intmax(a,b)inta,b;{}8.2函数的定义例.定义符号函数sign。intsign(intx){inty;y=x>0?1:(x==0?0:-1);returny;}/*函数返回值类型未说明,默认为int,建议给出函数类型说明*//*形式参数说明*//*函数局部变量*//*返回函数值*/8.3函数参数和函数值8.3函数参数和函数值1.形式参数和实际参数实参调用函数使用的参数形参定义函数使用的参数单向值传递复制单向值传递方式是指在函数调用时,将实参之值传递给对应的形式参数,
5、使形参具有与实参相同的值。8.3函数参数和函数值例.调用函数时的数据传递。#include“stdio.h”intmax(intx,inty)/*定义有参函数*/{intz;z=x>y?x:y;return(z);}运行情况7,8↙Maxis8abxyvoidmain(){inta,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“Maxis%d”,c);}8.3函数参数和函数值有关形参与实参的几点说明:实参可以是常量、变量或表达式。不论是何种类型,函数调用时,必须有确定的值,以便将值传递给形参。在函数定义
6、中指定的形参,未调用时,它们不占用存储单元。只有调用该函数时,形参才被分配空间,函数调用结束后,形参所占的存储单元被释放。8.3函数参数和函数值实参与形参的数据传递为单向传递,只可由实参向形参传递,不能由形参传回实参。实参与形参处在不同的函数中,作用的区域不同,即使实参与形参同名,也是不同的变量。定义函数时,必须指定形参的类型。调用函数时,实参类型、个数及排列次序应与形参一一对应。8.3函数参数和函数值2.函数的返回值功能①用于结束函数的执行并返回到调用者。②用来向主调函数传递一个返回值。return语句的表示形式return表达式;orretur
7、n(表达式);8.3函数参数和函数值intsign(intx){inty;returny=x>0?1:(x==0?0:-1);}if(x>0)return(1);elseif(x<0)return(-1);elsereturn(0);8.3函数参数和函数值说明:return语句中表达式值的类型应与函数值的类型一致。如果不一致,则以函数类型为准。对于数值型数据,可以自动进行类型转换(不是所有类型都能互相转换)。8.3函数参数和函数值例.返回值类型与函数类型不一致。#include“stdio.h”intmax(floatx,floaty){float
8、z;z=x>y?x:y;return(z);}voidmain(){floata,b,c;scanf(“%f,%f”,&a