C语言基础七、函数.docx.pdf

上传人:tbuqq 文档编号:5615867 上传时间:2020-07-02 格式:PDF 页数:22 大小:269.48KB
返回 下载 相关 举报
C语言基础七、函数.docx.pdf_第1页
第1页 / 共22页
C语言基础七、函数.docx.pdf_第2页
第2页 / 共22页
C语言基础七、函数.docx.pdf_第3页
第3页 / 共22页
C语言基础七、函数.docx.pdf_第4页
第4页 / 共22页
C语言基础七、函数.docx.pdf_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《C语言基础七、函数.docx.pdf》由会员分享,可在线阅读,更多相关《C语言基础七、函数.docx.pdf(22页珍藏版)》请在三一文库上搜索。

1、七、函数 本章概述: 以笔试和上机两种形式考核。笔试中常考察下面大纲要求(6)、(7),分值约占14%。上机屮, 三种题型屮均有体现,其屮大纲要求(2)、(3)、(4)、(5)是考查重点,抽屮儿率约为37%。 考生要熟练掌握。 大纲要求: 1? 库函数的正确调用。 2.函数的定义方法。 3.函数的类型和返回值。 4.形式参数与实在参数,参数值传递。 5.函数的正确调用,嵌套调用,递归调用。 6.局部变量和全局变量。 7.变量的存储类别(自动,静态,寄存器,外部),变量的作用域和生存期。 重点难点: 1?函数的类型和返回值。 2.形式参数与实在参数,参数值传递。 3.局部变量和全局变量。 C语言

2、的函数分为 : 标准函数(系统函数):系统提供的,定义好的函数,用八直接调用即可。 自定义函数:用户根据实际需要,自己定义的函数。要先定义,再调用。 库函数: C语言提供了丰富的库函数,这些函数包括常用的数学函数、字符及字符串处理函数、各种输入 输出函数等。 调用C语言标准库函数时,要先将库函数所在的头文件,用#include命令包含进来。库函数的调 用: 同下面“考点5函数的调用”。 函数定义的一般形式: 函数返回值类型幣数名称(类型1参数1,类型2参数2,) / 函数体 函数返回值类型 : 考点分析 : 1 考点1 库函数 函数的定义 是函数返回值的数据类型, 可以是C语言中的char i

3、nt short long、float、double 等任何一种基 本的数据类型。返回类型可以省略不写,如不写则默认为int类型。 函数名称: 是用户自己定义的名称,与变量的命名规则一样。 函数形参列表: 函数可以有很多形参,每一个参数都有一个类型及名称,它们是函数的变量,各定义的形参之间 用逗号分隔。 若所定义的函数没有形参,函数名后的一对圆括号依然不能省略。女山 fun() 函数体: 是函数的程序代码,它们包含在一对大括号内。 函数体中,除形参外,所有用到的英他变量必须在说明部分进行定义,这些变量( 包括 形参) 只在 函数被调用时才被临时分配内存单元,退出函数时,这些临时存储单元将全部被

4、释放掉,即在该函数 体内部定义的变量都将不存在。因此这些变量只在函数体内部起作用,与其他函数的内部变量不相 关。 ? 试题解析 1.不合法的main函数命令行参数表示形式是 A main (int a, char *c ) B main (int arc, char *arv) C main (int argc, char argv) D main (int argv,char *argc ) 答案:C 解析:main()函数可以带有参数,并且参数只能有两个,第一个参数类型为整型,用來记下命令 行的参数个数;第二个参数为一个字符型指针数组,或字符型二级指针变量( 指向 一个数组,数组元素 又是

5、一个一级字符指针 ) ,其各个元素用来记下从命令行各参数字符串的首地址。故本题只有C选项不 符合要求。 函数返回值: 函数的返冋值是指函数被调用之后,所取得的并返冋给主调函数的值。通过函数内部的return语句 来返回这个值,格式是: return表达式; 函数的类型: return语句返回的表达式的值的数据类型要与定义函数时,该函数返回值类型一致,称为函数的类 型。 没有返回值的函数 函数也可以没有返回值,这种函数的返回类型被定义成void类型,例如下面函数: void SayllelloO puts( “Hello, everyone! v ); void类型的函数中也可以有return语

6、句,但return后面不可以有任何表达式,如: 考点 3 函数的类型与返回值 void fun(float x) if(xy?x:y); 解析:调用Max函数后值不确定,例如Max(l, 2)的值不一定是2。 形参与实参 在定义函数时,函数名后而圆扌忑号屮的变量称为“形式参数”(简称“形参”);在主调函数 屮,函数名后面圆括号中的参数(可以是表达式)称为“实陋参数”(简称“实参”)。 说明: (1)形参出现在函数定义屮,必须有名称及类型。在整个函数体内都可以使用,离开该函数则 不能使用; (2)实际参数的个数与类型必须与形式参数一致,实际参数可以是变量,常数、表达式、甚至 是一个函数; (3)

7、如实际参数的类型与形式参数的类型不完全一致,至少是可以赋值转换的,否则会发生 “类型不匹配”的错误; 【特别提醒】: (1)实参不一定要与相应形参同名,在内存中,形参与实参占据不同的存储单元。 (2)在函数调用时,给形参分配存储单元,并将对应实参的值传递给给存储单元。调用结束 后,形参单元被释放,实参单元仍保留并维持原值。 (3) C语言规定,实参对形参的数据传送是“值传递”,即单向的,只能由实参传送给形参, 而不能由形参反向地传送给实参。因此函数调用过程中,形参值的变化不会影响到实参值的变化。 ? 试题解析 1.以下叙述中错误的是(D) A) C程序必须由一个或一个以上的函数组成 B)函数调

8、用可以作为一个独立的语句存在 C)若函数有返回值,必须通过return语句返回 D)函数形参的值也可以传冋给对应的实参 解析:形参是函数定义时由用户定义的形式上的变量,实参是函数调用时,主调函 _G . 考点 4 形式参数与实在参数 , 参数值传递 数为被调函数提供的原始数据。在C语言屮,实参向形参传送数据的方式是“值传递雹 2.以下程序的输出结果是 f (int b , int m, int n) int i,s=0; for (i=m; i 0)/* 函数调用位于条件表达式式中*/ n_max=max (x, y, z) ; /* 函数调用位于赋值语句右侧的表达式中*/ 因为耍参与表达式中

9、的计算,所以要求函数有一个确定的返回值提供给表达式。 (1)( 2)函数参数:函数调用结果作为另外一个函数的实参。例如:printf ( “ n” , max (x, y, z) ; /* max 函数是printf 函数的部分参数 */ funl ( fun2 ( t ) ) ; /* fun2 函数是funl 函数的实参 */ 被调用函数必须返回一个确定的返回值,提供给主调函数作为实际参数,一进行后续操作。 函数的声明: (1)函数的声明 用户( 自定义 ) 函数一般应定义在前,调用在后。若被调函数出现调用在前,定义在后时,则应在 主调函数的适当位置,对被调函数作声明。函数声明的一般格式为

10、: 函数的调用 函数类型函数名 ( 参数类型1,参数类型2, ) 或 函数类型函数名 ( 参数类型1参数名1,参数类型2参数名2, ) 注意: 此处的参数名完全是虚设的,即不必与函数首部的形参名一致,又可以与程序中任意用户标示符 同名,实际上,这里的参数名常常省略。 函数声明语句屮的“函数类型”必须与函数返回值的类型一致。 函数的嵌套调用 C语言的函数之间都是独立的、平行的,函数之间没有从属关系,即不能在一个函数内定义另外 一个函数。但可以嵌套调用,即函数调用中又存在调用。如函数1调用函数2,函 数又调用函数3每个 函数既可以被其它幣数调用,也可以调用其它幣数。 函数的递归调用 函数的“递归调

11、用”是指一个函数直接调用自己( 即直接递归调用 ) 或通过其它函数间接地调用自 己( 即I可接递归调用 ) 。 ? 试题解析 1.下面程序的运行结果是: _ O fun(int t , int n) int i, m ; if(n=l)return t 0 ; else if(n=2)m=fun(t, n-1) ; return m; main () int a =11, 4, 6, 3, 8, 2, 3, 5, 9, 2 ; printf (“%drT, fun (a, 10) ; 解析:此题涉及函数的调用和if语句。程序先执行第二个if语句,然后在执行第一个if语句,最 后用return返

12、回数值。答案11 2.有以下程序 int fun(int n) if (n=l)return 1 ; else return(n+fun(nT) ; mai n () int x ; scanf (“%d“, x=fun(x) ; printf (“%dn“, x) ; 执行程序吋,给变量X输入10,程序的输出结果是(A) A) 55 B)54 C) 65 D)45 解析:本程序考察的是函数的递归调用,在调用一个函数的过程中乂出现直接或间接地调用该函 数本身,称为函数的递归调用,执行结果为1+2+3+4+5+6+7+8+9+10二55。 3.有以下程序 void f(int a, int i,

13、 int j) int t; if(i t=ai; ai=aj; aj=t; f (a, i+1, j-1); main() int i, aa5 = l, 2, 3, 4, 5; f (aa, 0, 4); for (i=0; iy?x:y; intf2 (int x, inty) returnxy?y:x; main () int a=4, b=3, c=5, d=2, e, f, g; e二f2 (fl (a, b) , fl (c, d); f=fl (f2 (a,b) ,f2 (c,d); g二a+b+c+d-e-f; printf (“%d, %d%drT, e, f, g); 程

14、序运行后的输出结果是 _ 。 A) 4, 3, 7 B) 3, 4, 7 C) 5, 2, 7 D) 2, 5, 7 (4)有以下程序 #define P 3 #define F (int x) return (P*x*x) ; main () printf (“%dn“, F (3+5); 程序运行后的输出结果是 _ o A) 192 B) 29 C) 25 D)编译岀错 (5)若程序中定义了以下函数 double myadd (double a, double B) return (a+B) ; 并将其放在调用语句之后,则在调用之前应该对该两数进行说明,以下选项中错误的说明是 _ o A)

15、double myadd (double a, B); B)doub1e myadd (double,double); C)double myadd (double b,double A); D)double myadd (double x,double y); (6)有以下程序 char fun (char x , char y) if (xb) return (a); else return (b); if (xy) else if (yz) el se f( x,y); (y, z); f (x, z); D) 2, 3, 1 ma i n () int x=3, y=8, z=6, r

16、; r=fun (fun (x,y) , 2*z); printf (“%dn“, r); rintf (“%dn“, r); z=6,s=font-family:TimesNewRomanPSMT;font-size:31.5;color:#000000; 程序运行后的输出结果是 _ O A ) 3 B ) 6 8 D) 12 ( 12)有以下程序 intfl (intx, int y) rcturnxy?x:y; intf2 (intx, int y) returnxy?y:x; main () int a二4, b=3, c=5, d, e, f ; d二fl (a, b) ; d二fl

17、 (d, c); e=f2 (a, b) ; e=f2 (e, c); f=a+b+c-de; printf (“%d, %d, %drT, d, f, e); 执行后输出结果是_ O A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 3,5,4 (13)有如下程序 void f (int x, int y) int t; if (x void play (var void play (int void play (int Sub play (a as :Integer, var b:Integer) a, b) a, int b) integer, b as integer) C)

18、 void D) C) 31 D)无定值 D) (19) _ 以下程序的输出结果是o A) 0 B) 29 fun (int x, int y, int z) z二x*x+y*y; main () int a=31; fun (5, 2, a); printf ( “d” , a); (20)有如下函数调用语句 func (reel,rec2+rec3, (rec4, rec5); 该函数调用语句中,含有的实参个数是o A) 3 B) 4 5 D)有语法错 (21)有如下程序 int rune (int a, int b) return (a+b) ; mainO int x=2, y=5,

19、z=8, r; r=func (func (x,y) , z); n” , r); 该程序的输出的结果是_ 。 A) 12 B) 13 14 D) 15 (22)以下叙述中不正确的是_ o A)在不同的函数中可以使用相同名字的变量 B)函数中的形式参数是局部变量 C)在一个函数内定义的变量只在本函数范围内有效 D)在一个函数内的复合语句中定义的变量在本函数范围内有效 (23)有以下程序 viod fun (int a, int b,int c) a二456; b二567; c=678; main () int x=10, y=20, z=30; fun (x, y, z); printf (“

20、%d,/%dn“, c, d); 输出结果是 _ O A) 30, 20, 10 B) 10,20,30 C) 456, 567, 678 D) (24)有以下程序 # include “atdio.h“ int abc (int u, intv); main () int a=24, b=16, c; C) 678, 567, 456 c=abc (a, b); printf (%dn“, c); nt abc (int u, int v) int w; while (v) w二u%v; u=v; v二w return u; 输出结果是 _ 。 A ) 6 B ) 7 8 D) 9 (25)

21、 _ 以下说法中正确的是o A)C语言程序总是从第一个的函数开始执行 B)在C语言程序中,要调用的函数必须在main ()函数中定义 C)C语言程序总是从main ()函数开始执行 D)C语言程序中的main ()函数必须放在程序的开始部分 (26)请读程序: #include func ( int a, int b) int c; c=a+b; return c; main () int x二6, y二7, z=8, r; r=fimc ( x一, y=, x+y ) , z一) ;printf r); 上面程序的输出结果是_ 。 A ) 11 B ) 20 21 D) 31 二、填空题 (

22、1)有以下程序 int sub (int n) return (n/10+n%10); main () int x, y; scanf (“%d, y=sub (sub (sub (x) printf (“%drT, y); 若运行时输入:1234回车,程序的输出结果是【1】o (2)通过函数求f (x)的累加和,其中f (x) =x2+l main () printf (“The sum=%dn /, , SunFun (10); SunFun (int n) int x, s二0; for (x=0;xb ?a:b) : (7)若有以下程序 intf (int x, int y) retu

23、rn (y-x) *x; main () int a=3, b二4, c二5, d; d二f (f (3,4) ,f (3,5); printf (“%dn“, d); 执行后输出的结果是91 (8)以下程序运行后的输出结果是【10】o void fun (int x, int y) x二x+y;y二x-y;x二x-y; printf ( d, %d, ” ,x, y) ; main () int x二2, y二3; fun (x, y); n” , x, y); (9)函数pi的功能是根据以下近似公式求31值: /6=1+1/ (2*2) +1/ (3*3) +. ? +1/ (n*n) 现

24、在请你在下面的函数屮填空,完成 求n的功能。 #include “math, h” double pi (long n) double s=0.0; long i; for (i=l;i二n;i+) s二s+ 11; return (sqrt (6*s); (10)下面程序的输出是【12】o unsigned fun6 ( unsigned num) unsigned k=l; do k*二num%10; num/二10; whi1e (num); :return (k) ; main () unsigned n=26; printf (“%dn“, fun6 (n); (ID 下面Pi函数的

25、功能是根据以下的公式,返回满足精度要求的n值。请 填空。 double pi (double eps) double s二0. 0, t=l. 0; 二、填空题 (1)10 (2)x (3)x*x+l (4)fun (a, 4) +fun (b, 4) -fun (a+b, 3); (5)a=l. 0;b=l. 0;s二1. 0; (6)-f (7)fun (10) (8)double max int n; for ( 【13 】 s+二t; ;teps; n+) ; 14 】 ) 汀 答案: 一、选择题 1) B 2) D3)A 4)D 5) 11) B 12)C 13) D14) 19) C 20) A 21) D 22)D 23) A24) A6)D 7) C8)D 9)C 10)D B 15)B 16) c 17)A 18) c c25)C 26)c (9)9 (10)3, 2, 2, 3 (11)1.0/ (i*i) (12) 12 (13)n二1 (14)s

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1