第7章 函数
- 格式:doc
- 大小:104.00 KB
- 文档页数:11
第七章 函 数学习和解题要点1.函数的概念和作用函数:是具有一定功能的一个程序块;是C 语言的基本组成单位。
要求掌握函数定义方法,有关函数类型和返回值的相关知识。
要会调用函数,并能处理函数嵌套、递归调用的相关问题。
1) 函数的参数,返回数值(示意图):2.函数的定义存储类型 (返回的)数据类型 函数名(形参说明语句序列) (注:此地分不能有分号) {函数内用的变量说明序列;(临时工作单元) 可执行语句序列;(包括 return(表达式)语句) }函数的返回值一般是通过 return 语句获得的。
返回的数据类型说明一般应该和return 语句中的表达式类型一致,若不一致则以数据类型说明为准。
如函数中没有 return 语句或 return ;函数无返回值,返回一个用户很难确定的值。
说明:函数的数据类型:int char short long float double *类型。
缺省为 int 型。
不返回值为 void 型。
函数的存储类型:内部函数 本文件内有效 static外部函数 可被其他文件函数调用 extern3.函数调用:函数名(实参表)可以为独立语句:函数名(实参表); 表达式中:变量=函数名(实参表)+其他式;实参表与形参表的对应一般要做到三个一致:个数一致类型一致(在学指针时,指针变量和地址对应)次序一致实参都应该己预先说明的,并有确定的值。
一般,函数都应先定义后调用。
对函数返回值是 int 或 char 的可先调用后定义。
如果非int 或 char型的函数一定要先调用后定义,则在函数调用语句前先作一个“申明”,申明的方法是相当于把函数头部抄一遍,加一个分号:存储类型(返回的)数据类型函数名(形参表);(注:此地分号不可少) 4.函数调用的数据传递把实参数据复制给形参,形参变量内数据变化不影响实参--值调用。
main(){ int a=45,b=50;c=max(a,b);}int max(int x,int y){ .............}把实参的地址传给形参,这时形参变量应为指针变量,因此形参实参共用一个内存位置,形参值的变化也即实参值的变化--地址调用(名调用)。
第七章函数一、选择题1.以下函数声明正确的是: C 。
(02~03第一学期试题)A) double fun(int x, int y) B) double fun(int x; int y)C) double fun(int x, int y) ; D) double fun(int x , y)2.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是: B 。
(0级)A)地址传递;B)单向值传递;C)双向值传递;D)由用户指定传递方式3.以下关于C语言程序中函数的说法正确的是: B 。
(0级)A)函数的定义可以嵌套,但函数的调用不可以嵌套;B)函数的定义不可以嵌套,但函数的调用可以嵌套;C)函数的定义和调用均不可以嵌套;D)函数的定义和点用都可以嵌套。
4.以下正确的函数形式是: D 。
(1级)A)double fun(int x,int y) B)fun (int x,y){z=x+y;return z;} {int z;return z;}C)fun(x,y) D)double fun(int x,int y){int x,y ; double z; {double z;z=x+y; return z;} z=x+y; return z;}5.以下说法不正确的是: B 。
(1级)C 语言规定A)实参可以是常量、变量或表达式B)形参可以是常量、变量或表达式C)实参可以是任意类型D)形参应与其对应的实参类型一致6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 B 。
(0级)A) float型B) int 型C)long 型D)double 型7.以下错误的描述是 D 。
(0级)函数调用可以A)出现在执行语句中B)出现在一个表达式中C)做为一个函数的实参D)做为一个函数的形参8.若用数组名作为函数调用的实参,传递给形参的是 A 。
(0级)A)数组的首地址B)数组第一个元素的值C)数组中全部元素的值D)数组元素的个数9.以下正确的说法是 A 。
(完整版)答案第七章函数..第七章函数一、选择题1.以下函数声明正确的是: C 。
(02~03第一学期试题)A) double fun(int x, int y) B) double fun(int x; int y)C) double fun(int x, int y) ; D) double fun(int x , y)2.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是: B 。
(0级)A)地址传递;B)单向值传递;C)双向值传递;D)由用户指定传递方式3.以下关于C语言程序中函数的说法正确的是: B 。
(0级)A)函数的定义可以嵌套,但函数的调用不可以嵌套;B)函数的定义不可以嵌套,但函数的调用可以嵌套;C)函数的定义和调用均不可以嵌套;D)函数的定义和点用都可以嵌套。
4.以下正确的函数形式是: D 。
(1级)A)double fun(int x,int y) B)fun (int x,y){z=x+y;return z;} {int z;return z;}C)fun(x,y) D)double fun(int x,int y){int x,y ; double z; {double z;z=x+y; return z;} z=x+y; return z;}5.以下说法不正确的是: B 。
(1级)C 语言规定A)实参可以是常量、变量或表达式B)形参可以是常量、变量或表达式C)实参可以是任意类型D)形参应与其对应的实参类型一致6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 B 。
(0级)A) float型B) int 型C)long 型D)double 型7.以下错误的描述是 D 。
(0级)函数调用可以A)出现在执行语句中B)出现在一个表达式中C)做为一个函数的实参D)做为一个函数的形参8.若用数组名作为函数调用的实参,传递给形参的是 A 。
(0级)A)数组的首地址B)数组第一个元素的值C)数组中全部元素的值D)数组元素的个数9.以下正确的说法是 A 。
单项选择题0701. 一个C语言程序总是从( )开始执行的。
A. 主函数B. 主过程C. 主程序D. 子程序0702. 下面的函数调用语句中func函数的实参个数是( )。
func(f2(v1,v2),(v3,v4,v5));A. 2B. 3C. 4D. 50703. ( )是构成C语言程序的基本单位。
A. 函数B. 过程C. 0D. 10704. 函数double sqrt(x)的功能是( )。
A. 求x的平方根B. 求x的平方C. 求x的对数D. 求x的绝对值0705. 以下叙述中不正确的是( )。
A. 在C程序的函数中,最好使用全局变量B. 调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参C. 形参只是局限于所在函数D. 函数名的存储类别为外部0706. C语言程序从main()函数开始执行,所以这个函数要写在( )。
A. 程序文件的任何位置B. 程序文件的开始C. 它所调用的函数的前面D. 程序文件的最后0707. 表达式sizeof(double)是( )。
A. int型表达式B. 函数调用C. double型表达式D. 非法表达式0708. 若用数组名作为函数调用时的实参,则实际上传递给形参的是( )。
A. 数组首地址B. 数组的第一个元素值C. 数组中全部元素的值D. 数组元素的个数0709. 对函数形参的说明有错误的是( )。
A. int a(float x[10],int n)B. int a(float x[],int n)C. int a(float *x,int n)D. int a(float x,int n)0710. 在C语言中,函数的数据类型是指( )。
A. 函数返回值的数据类型B. 函数形参的数据类型C. 调用该函数时的实参的数据类型D.任意指定的数据类型0711. 已知如下定义的函数:fun1(a){ printf("\n%d",a);}则该函数的数据类型是( )。
A. 与参数a的类型相同B. void型C. 没有返回值D. 无法确定0712. 一个函数内有数据类型说明语句如下:double x,y,z(10);关于此语句的解释,下面说法正确的是( )。
A. 语句中有错误B. z是一个函数,小括号内的10是它的实参的值C. z是一个变量,小括号内的10是它的初值D. z是一个数组,它有10个元素0713. 已知函数定义如下:float fun1(int x,int y){ float z;z=(float)x/y;return(z);}主调函数中有int a=1,b=0;可以正确调用此函数的语句是( )。
A. 调用时发生错误B. printf("%f",fun1(a,b));C.printf("%f",fun1(&a,&b));D. printf("%f",fun1(*a,*b));0714. 下面函数的功能是( )。
a(s1,s2)char s1[],s2[];{ while(s2++=s1++) ;}A. 字符串复制B. 字符串比较C. 字符串连接D. 字符串反向0715. 在下列结论中,只有一个是错误的,它是( )。
A. 有些递归程序是不能用非递归算法实现的B. C语言允许函数的递归调用C. C语言中的continue语句,可以通过改变程序的结构而省略D. C语言中不允许在函数中再定义函数0716. 已知:int a, *y=&a;则下列函数调用中错误的是( ) 。
A. printf("%d", y);B. scanf("%d", y);C.printf("%d", a);D. scanf("%d", &a);0717. 函数的功能是交换变量x和y中的值,且通过正确调用返回交换的结果。
能正确执行此功能的函数是( )。
A. func (int *x, int *y) { *x=*x+*y;*y=*x-*y;*x=*x-*y;}B. funb (int x, int y) { int t; t=x;x=y;y=t;}C.func (int *x, int *y) { *x=*y;*y=*x;}D. funa (int *x, int *y) { int *p;p=x;*x=*y;*y=*p;}0718. 一个完整的C源程序是( )。
A. 由一个且仅由一个主函数和零个以上的非主函数构成B. 要由一个主函数或一个以上的非主函数构成C.要由一个主函数和一个以上的非主函数构成D.由一个且只有一个主函数或多个非主函数构成0719. 以下关于函数的叙述中正确的是( )。
A. C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束B. 可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C. C语言程序将从源程序中第一个函数开始执行D. main可作为用户标识符,用以定义任意一个函数0720. 以下关于函数的叙述中不正确的是( )。
A. 在C语言程序中,被调用的函数必须在main函数中定义B. C程序是函数的集合,包括标准库函数和用户自定义函数C. 在C语言程序中,函数的定义不能嵌套D. 在C语言程序中,函数的调用可以嵌套0721. 在一个C程序中( )。
A. main函数可以在任何地方出现B. main函数必须出现在所有函数之前C. main函数必须出现在所有函数之后D. main函数必须出现在固定位置0722. 若未说明函数的类型,则系统默认该函数的数据类型是( )。
A. intB.floatC. doubleD. bool0723. 以下关于函数叙述中,错误的是( )。
A. 形参可以是常量、变量或表达式B. 实参与形参的个数应相等,且实参与形参的类型必须对应一致C. 当形参是变量时,实参可以是常量、变量或表达式D. 函数未被调用时,系统将不为形参分配内存单元0724. C程序中各函数之间可以通过多种方式传递数据,下列不能用于实现数据传递的方式是( )。
A. 同名的局部变量B. 函数返回值C. 全局变量D. 参数的形实结合0725. 若函数调用时参数为基本数据类型的变量,以下叙述正确的是( )。
A. 实参与对应的形参分别占用不同的存储单元B. 实参与其对应的形参共占存储单元C. 只有当实参与其对应的形参同名时才共占存储单元D. 实参将数据传递给形参后,立即释放原先占用的存储单0726.函数调用时,当实参和形参都是简单变量时,他们之间数据传递的过程是( )。
A. 实参将其值传递给形参,调用结束时形参并不将其值回传给实参B. 实参将其地址传递给形参,并释放原先占用的存储单元C. 实参将其地址传递给形参,调用结束时形参再将其地址回传给实参D. 实参将其值传递给形参,调用结束时形参再将其值回传给实参0727.若用数组名作为函数调用的实参,则传递给形参的是( )。
A. 数组的首地址B. 数组的第一个元素的值C. 数组中全部元素的值D. 数组元素的个数0728. 若函数调用时,用数组名作为函数的参数,以下叙述中正确的是( )。
A. 实参与其对应的形参共用同一段存储空间B. 实参与其对应的形参占用相同的存储空间C. 实参将其地址传递给形参,同时形参也会将该地址传递给实参D. 实参将其地址传递给形参,等同实现了参数之间的双向值的传递0729. 如果一个函数位于C程序文件的上部,在该函数体内说明语句后的复合语句中定义了一个变量,则该变量( )。
A. 为局部变量,只在该复合语句中有效B. 为全局变量,在本程序文件范围内有效C. 为局部变量,只在该函数内有效D. 定义无效,为非法变量0730. C语言中函数返回值的类型是由( )决定。
A. 定义函数时所指定的函数类型B. return语句中的表达式类型C. 调用函数的主调函数类型D. 调用函数时临时0731.若在一个C源程序文件中定义了一个允许其他源文件引用的实型外部变量a,则在另一文件中可使用的引用说明是( )。
A. extern float aB. extern static float aC. float aD. extern auto float a0732. 定义一个void型函数意味着调用该函数时,函数( )。
A. 没有返回值B. 通过return返回一个用户所希望的函数值C. 返回一个系统默认值D. 返回一个不确定的值0733. 若定义函数float *fun( ),则函数fun的返回值为( )。
A. 一个指向实型变量的指针B. 一个实数C. 一个指向实型函数的指针D. 一个实型函数的入口地址0734. C语言规定,程序中各函数之间( )。
A. 既允许直接递归调用也允许间接递归调用B. 不允许直接递归调用也不允许间接递归调用C. 允许直接递归调用不允许间接递归调用D. 不允许直接递归调用允许间接递归调用0735. 若程序中定义函数float myadd(float a, float b){ return a+b;}并将其放在调用语句之后,则在调用之前应对该函数进行说明。
说明中错误的是( )。
A. float myadd( float a,b)B. float myadd(float b, float a)C. float myadd(float, float)D. float myadd(float a, float b)0736. 下列叙述中错误的是( )。
A. 主函数中定义的变量在整个程序中都是有效的。
B. 在其它函数中定义的变量在主函数中也不能使用。
C. 形式参数也是局部变量。
D. 复合语句中定义的变量只在该复合语句中有效。
0737. 若函数的形参为一维数组,则下列说法中正确的是( )。
A. 形参数组可以不指定大小。
B. 调用函数时的对应实参必为数组名。
C. 形参数组的元素个数必须等于实参数组的元素个数。
D. 形参数组的元素个数必须多于实参数组的元素个数。
0738. 在函数的说明和定义时若没有指出函数的类型,则( )。
A. 系统自动地认为函数的类型为整型。
B. 系统自动地认为函数的类型为字符型。
C. 系统自动地认为函数的类型为实型。
D. 编译时会出错。
0739. 下面叙述中正确的是( )。
A. 函数可以返回一个值,也可以什么值也不返回。
B. 说明函数时必须明确其参数类型和返回类型。
C. 对于用户自己定义的函数,在使用前必须加以说明。
D. 空函数不完成任何操作,所以在程序设计中没有用处。
0740. 下面正确的函数定义形式是( )。
A. double fun(int x,int y)B. double fun(int x;int y)C. double fun(int x,int y)D. double fun(int x,y)0741. 关于函数的调用,以下错误的描述是( )。