2019投影5省二级C等级考试基础考点4 函数

发布 2023-04-19 17:46:28 阅读 1344

c语言中函数从用户的角度分为标准函数和用户自定义函数。

1) 标准函数(库函数)

用include将包含该函数的头文件包含进来。

2)用户自定义函数。

用户自定义函数由用户按需要编写的函数,分为函数定义和函数调用两部分。

函数有两个部分组成:函数首部和函数体。

函数首部只有一行,包含函数类型、函数名和形参类型说明表。

注意:函数首部没有分号“;”

函数体为包含在一对花括号中的说明部分和语句部分。

1)函数定义格式。

函数类型函数名(形参类型说明表)

说明部分。

语句部分。函数名为c语言的合法标识符,尽量与库函数名不同。

2)函数类型。

函数类型为函数返回值类型。

函数返回值类型可以为基本数据类型、结构体类型、指针类型。

1 函数返回值类型,如果为“int”,则可以缺省,若缺省则表示为“int”型。

2 不返回函数值的函数,函数类型定义为“空类型”,在函数类型处必须写“void”。

3)函数形式参数的声明。

函数参数定义形式:

类型形参1,类型形参2, …

1 形参个数和类型的设计应根据具体应用需要。

2 每个形式参数名前都要有类型说明,参数与参数之间用逗号“,”隔开。

3 如果是无参函数,则没有参数,但是括号“( 必须有。也可以在括号里写void,如:

int f();或者 int f(void);

无参函数不存在参数的传送,通常用来完成指定的功能。

(1)函数体定义。

函数体由一对花括号括起来,由说明部分和语句部分组成。

说明部分包含变量定义和函数声明。

语句部分是函数执行的语句。

2) 函数返回值与return语句的使用。

函数的返回值。

指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。

如果需要把被调函数的值带回主调函数,就需要使用return语句。

函数是否需要返回值,由具体应用决定。返回值由return语句实现。

return语句的一般形式如下:

return 表达式 ; 或者 return (表达式) ;或者 return ;

1 当执行return语句时,即使调用的函数主体中还有其他语句,函数执行也会停止。

2 return语句只能出现在函数体内,出现在**中的其他任何地方都会造成语法错误。

3 对于返回类型为void的程序,return;语句是可选的。

4 对于返回类型非void的程序,必须至少包括一条明确的return语句。

5 程序体可以包含不只一条,但只会执行其中的一个return语句,只能返回一个值,如果需要带回多个值,借助于指针或者外部变量实现。

6 函数返回值的类型应该与函数定义时的类型保持一致,若不一致,自动转换为函数定义时的类型。

函数要先定义后才能使用。

若定义写在调用位置之后,必须在调用位置之前用函数原型声明。

声明方式:函数类型函数名(形参类型说明表);

有以下三种情况可以不作函数声明,其他情况都必须进行函数声明:

1)定义写在调用位置之前。

2)函数返回值为int型。

3)在所有函数之前已经声明过。

所有的函数定义,包括主函数在内,都是平行的,也就是说,在一个函数体内,不能再定义另一个函数。

但是,函数之间可以相互调用,也可以嵌套调用,就是函数a调用了函数b,函数b又调用了函数c,还可以自己调用自己,即递归调用。

main函数可以调用其他函数,但是不能被其他函数调用。

若在函数a中调用函数b,则称a为主调函数,b为被调函数。

1)函数调用形式。

1)对于没有返回值的函数,即函数类型为“void”的函数,调用形式为:

函数名(实参1,实参2,……

2)对于有返回值的函数,调用形式为:

变量名=函数名(实参1,实参2,……

实参与形参个数相等,类型一致,按顺序一一对应,参数与参数之间用逗号隔开。

2)函数执行过程。

c程序必须有且只能有一个名为main的主函数,c程序的执行总是从main函数开始。

当执行到main函数中的函数调用语句时,程序会跳转到被调用函数定义体内,同时将主调函数中的值通过参数传递给被调函数,当执行到被调函数的return语句时或者最后一个语句后返回到主调函数。

3)函数调用方式。

1)函数语句。

在函数调用后加一分号构成函数语句。例如:

printstar();

printf("hello,world!");

2)函数表达式。

将函数调用的返回值作为操作数使用,构成表达式。例如:

m=max(a,b)*2;

3)函数实参。

将函数调用的返回值作为另一个函数的实际参数。例如:

printf("%d",max(a,b));

m=max(a,max(b,c));

4)函数调用和函数声明的区别。

1) 函数调用是函数的执行部分;函数声明是函数的说明部分。

2) 函数调用中使用的参数是实际参数,函数声明中的参数是形式参数,有时括号中只写参数类型即可。

3) 函数声明是为函数调用服务的,如果没有调用,就不需要声明。

1)形式参数。

形式参数是定义函数时使用的变量名,等待接收从主调函数传来的实际参数值,简称形参。

形参变量只有在被调用时才分配内存,调用结束,释放内存,只在函数内部有效。

2)实际参数。

实际参数是调用函数时用到的变量名,调用函数时函数名后圆括号中的常量、变量名、表达式或者函数。

当函数调用时,将主调函数中的该值传给被调函数,简称实参,已经在主调函数中定义过。

1 形参与实参类型一致,个数相同。

2 形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放。

形参与实参是数据传送的关系,是将实参传给形参。参数传递有两种形式:值传递和地址传递。

1)传数值。

值传递只是将实参的数值传给形参,如以下的参数传递都是值传递:

1)将常量或表达式的值传递给被调函数。

2)将基本类型变量的值传递给被调函数。

3)将数组元素的值传递给被调函数,数组元素作参数与普通变量是相同的。

4)将结构体变量中一个成员的值传递给被调函数。

5)将结构体变量全部成员的值传递给被调函数。

值传递是单向的,只能是实参传给形参,不能由形参传回实参,所以形参的值改变不会影响实参的值。

2)传地址值。

如果将实参的地址值传给形参,那么可以在被调函数中改变主调函数中的变量值。

地址传递主要有下面的两种形式:

1)通过指针实现地址传递。

将基本类型变量的地址、结构体变量的地址、基本类型数组元素的地址、结构体类型数组元素的地址传递给函数。

2)数组名作函数参数。

数组名表示数组的起始地址,当参数为数组时,传递的是实参的起始地址。

1 地址传递是双向的,将实参的地址传给形参,形参的值的改变会影响实参的值。

2 数组名作函数参数,在主调函数(实参)与被调函数(形参)中要分别定义数组,且类型必须相同。

3 实参数组和形参数组大小可以不一致,编译时只是将实参的首地址传递给形参,这两个数组共享同一内存空间。

在函数中对形参数组元素的操作,就是对实参数组元素的操作。

如果要求形参数组得到实参数组的全部元素值,则大小应一致。

4 形参若是一维数组,其大小可不指定,若是二维数组,第一维可不指定。

形参与实参类型一致,个数相同。若形参与实参类型不一致,自动按形参类型转换,这就是函数调用转换。

函数直接或间接的调用自身叫函数的递归调用。

递归调用就是在函数执行的过程中不断反复地调用函数自己,每调用一次就进入一个新的层次,每次调用都要返回到调用的地方,执行函数中未执行完的语句。

1 递归函数中每次调用,都要从头执行到未,被调函数执行完,返回到调用点继续执行。

2 在递归调用的过程中,最后调用的函数最先执行完,最先调用的函数最后执行完。

3 在递归程序中,一般没有循环结构。

1)函数嵌套允许在一个函数中调用另外一个函数,它是一个语言提供的程序设计的方法,也就是语言的特性。

2)递归就是函数调用自身,是函数嵌套的一个特例。

1 递归函数,问题本身要有递归性,即能把问题分解成与原问题相似,但层次较低的问题。

2 递归要有递归边界,必须要设定一个终止条件。到了边界,问题不再递归,可以直接得到结果,否则程序会不断递归下去直至崩溃。而嵌套函数就不用考虑这些。

3 递归是一种思想,只不过在程序中,就是依靠函数嵌套这个特性来实现了。

变量的作用域是指变量的有效性范围,即在某区域内有效。从变量的作用域来分,可以把变量分为局部变量和全局变量。

1)局部变量 (*

局部变量也称内部变量,局部变量在函数内部定义,只在本函数内有效。

1 main中定义的变量只在main中有效,主函数也不能使用其他函数中的局部变量。

2 不同函数中的同名变量,占用不同的内存单元。

3 函数的形参属于被调函数的局部变量,只在被调函数中有效。实参属于主调函数的局部变量,只在主调函数中有效。

4 可在复合语句中定义局部变量,只在该复合语句中有效。

2)全局变量 (*

全局变量也称外部变量,外部变量定义在函数之外,不属于哪个函数,属于整个程序。

全局变量的作用范围为从定义变量的位置开始到本源程序结束。

1 若外部变量与内部变量同名,则外部变量被屏蔽,内部变量起作用。

2 应尽量少使用外部变量,因为:

外部变量在程序全部执行过程中占用存储单元。

降低了函数的通用性、可靠性,可移植性。

降低程序清晰性,容易出错。

3 如果用extern加以说明,可以把外部变量的作用域扩大到定义处之前及其它源程序中。

外部变量说明格式如下:

extern 数据类型变量表;

2019投影5省二级C等级考试基础考点4 函数

c语言中函数从用户的角度分为标准函数和用户自定义函数。1 标准函数 库函数 用include将包含该函数的头文件包含进来。2 用户自定义函数。用户自定义函数由用户按需要编写的函数,分为函数定义和函数调用两部分。函数有两个部分组成 函数首部和函数体。函数首部只有一行,包含函数类型 函数名和形参类型说明...

2019投影5省二级C等级考试基础考点4 函数

c语言中函数从用户的角度分为标准函数和用户自定义函数。1 标准函数 库函数 用include将包含该函数的头文件包含进来。2 用户自定义函数。用户自定义函数由用户按需要编写的函数,分为函数定义和函数调用两部分。函数有两个部分组成 函数首部和函数体。函数首部只有一行,包含函数类型 函数名和形参类型说明...

2019云南省计算机等级考试二级 必备

1 不属于计算机数据处理的应用是 b a 管理信息系统b 实时控制。c 办公自动化d 决策支持系统。2 微型计算机硬件系统中最核心的部件是 b a 显示器b cpuc 内存储器 d i o设备。3 汉字在计算机内的表示方法一定是 b a 国标码b 机内码。c 最左位置为1的2字节 d ascii码。...