ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:64.03KB ,
资源ID:13053416      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/13053416.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言基础七函数docx.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言基础七函数docx.docx

1、C语言基础七函数docx七、函数本章概述:以笔试和上机两种形式考核。笔试中常考察下面大纲要求(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,) /函数体函数返回值类型:是函数返回值的数据类型,可以是C语言中的char int short long、float、double 等任何一种基本的数

3、据类型。返回类型可以省略不写,如不写则默认为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()函数可以带有参数,并且参数只能有两个,第一个参数类型为整型,用來 记下命令行的参数个数;第二个参数为一个字符型指针数组,或字符型二级指针变量(指向 一个数组,数组元素又是一个一级字符指针),其各个元素用来记下从命令行各参数字符串 的首地址。故本题只有C选项不符合要求。考点3函数的类型与

5、返回值函数返回值:函数的返冋值是指函数被调用之后,所取得的并返冋给主调函数的值。通过函数内部的 return语句来返回这个值,格式是:return表达式;函数的类型:return语句返回的表达式的值的数据类型要与定义函数时,该函数返回值类型一致, 称为函数的类型。没有返回值的函数函数也可以没有返回值,这种函数的返回类型被定义成void类型,例如下面函数:void SayllelloOputs( Hello, everyone!v );void类型的函数中也可以有return语句,但return后面不可以有任何表达式,如:void fun(float x)if(x0) return; /在xy?

6、x:y);形式参数与实在参数,参数值传递解析:调用Max函数后值不确定,例如Max(l, 2)的值不一定是2。 G.考点4形参与实参在定义函数时,函数名后而圆扌忑号屮的变量称为“形式参数”(简称形参”);在主 调函数屮,函数名后面圆括号中的参数(可以是表达式)称为“实陋参数”(简称“实参”)。说明:(1) 形参出现在函数定义屮,必须有名称及类型。在整个函数体内都可以使用,离开 该函数则不能使用;(2) 实际参数的个数与类型必须与形式参数一致,实际参数可以是变量,常数、表达 式、甚至是一个函数;(3) 如实际参数的类型与形式参数的类型不完全一致,至少是可以赋值转换的,否则 会发生“类型不匹配”的

7、错误;【特别提醒】:(1) 实参不一定要与相应形参同名,在内存中,形参与实参占据不同的存储单元。(2) 在函数调用时,给形参分配存储单元,并将对应实参的值传递给给存储单元。调 用结束后,形参单元被释放,实参单元仍保留并维持原值。(3) C语言规定,实参对形参的数据传送是“值传递”,即单向的,只能由实参传送给 形参,而不能由形参反向地传送给实参。因此函数调用过程中,形参值的变化不会影响到实 参值的变化。 试题解析1.以下叙述中错误的是(D)A) C程序必须由一个或一个以上的函数组成B) 函数调用可以作为一个独立的语句存在C) 若函数有返回值,必须通过return语句返回D) 函数形参的值也可以传

8、冋给对应的实参解析:形参是函数定义时由用户定义的形式上的变量,实参是函数调用时,主调函数为被调函数提供的原始数据。在C语言屮,实参向形参传送数据的方式是“值传递雹2. 以下程序的输出结果是f (int b , int m, int n) int i,s=0;for (i=m; i 0) /*函数调用位于条件表达式式中*/n_max=max (x, y, z) ; /*函数调用位于赋值语句右侧的表达式中*/因为耍参与表达式中的计算,所以要求函数有一个确定的返回值提供给表达式。(1) (2)函数参数:函数调用结果作为另外一个函数的实参。例如: printf ( “dn” , max (x, y,

9、z) ; /* max 函数是 printf 函数的部分参数 */funl ( fun2 ( t ) ) ; /* fun2 函数是 funl 函数的实参 */被调用函数必须返回一个确定的返回值,提供给主调函数作为实际参数,一进行后续操 作。函数的声明:(1) 函数的声明用户(自定义)函数一般应定义在前,调用在后。若被调函数出现调用在前,定义在后 时,则应在主调函数的适当位置,对被调函数作声明。函数声明的一般格式为:函数类型 函数名(参数类型1,参数类型2,)或函数类型 函数名(参数类型1参数名1,参数类型2参数名2,)注意:此处的参数名完全是虚设的,即不必与函数首部的形参名一致,又可以与程序

10、中任意用 户标示符同名,实际上,这里的参数名常常省略。函数声明语句屮的“函数类型”必须与函数返回值的类型一致。函数的嵌套调用C语言的函数之间都是独立的、平行的,函数之间没有从属关系,即不能在一个函数内 定义另外一个函数。但可以嵌套调用,即函数调用中又存在调用。如函数1调用函数2,函 数又调用函数3每个函数既可以被其它幣数调用,也可以调用其它幣数。函数的递归调用函数的“递归调用”是指一个函数直接调用自己(即直接递归调用)或通过其它函数间 接地调用自己(即I可接递归调用)。 试题解析1. 下面程序的运行结果是: Ofun(int t , int n)int i, m;if(n=l)return t

11、 0;elseif(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返回数值。答案112. 有以下程序int fun(int n)if (n=l)return 1;elsereturn(n+fun(nT);mai n ()int x;scanf (%d, &x); x=fun(x) ; printf (%dn, x);执行程序吋,给变量X

12、输入10,程序的输出结果是 (A)A) 55 B)54C) 65 D)45解析:本程序考察的是函数的递归调用,在调用一个函数的过程中乂出现直接或间接地 调用该函数本身,称为函数的递归调用,执行结果为1+2+3+4+5+6+7+8+9+10二55。3. 有以下程序void f(int a, int i, int j) int t;if(iJ) 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; i5; i+) printf(%d, “,aai);printf (n);

13、执行后输出结果是A) 5,4, 3,2, 1, B) 5,2, 3, 4, 1, C) 1,2, 3,4, 5, D) 1,5, 4,3,2,答案:A解析:f (aa, 0, 4)调用是地址双向传递.i=0, j=4,交换aa=0、aa4的值使 aa5 = 5, 4, 3, 2,1);接着递归调用 f (a, i+1, j-l)即 f(a, 1,3),交换 aal、aa=3的值使 aa5 = 5, 4, 3, 2, 1;接着递归调用f(a, i + 1, j-l)即f (a, 2, 2),由于i=j=2,退出函数调用,依 次输出aa5的数组元素为5, 4, 3, 2, 1, 答案:A4. 以下

14、程序的输出结果是 。main () int x=0;sub (&x,& 1);printf (%dn, x);sub (int *a,int n, int k) if (k=n) sub (a, n/2,2*k);*a+二k;解析:在主函数中定义了一个变量x并赋初值0,然后执行函数调用语句,该语句的执 彳亍过程为 sub(&x, 8, 1)调用 sub(&a, 4, 2), sub(&a, 4, 2)调用 sub(&a, 2, 4), sub(&a, 2, 4)屮由于24,所以if后面括号里的判断为假,递归结束,执行其后的*a+二k;语句此 时x=x+k=0+4=4,回退到上一层调用函数sub

15、(&x, 4, 2)中,执行后面的语句,x=x+k=4+2=6, 再回推到最上一层调用函数sub(&x, 8, 1)执行后面的语句,x=x+k=6+l=7,所以最后输出7。 G.考点 变量的作用域、局部和全局变量变量的作用域:变量的作用域指(从空间角度来看)变量的有效范围或者变量的可见性。变量定义的位置 决定了变量的作用域。变量从作用域的角度可以分为:局部变量,全局变量。局部变量:所谓“局部变量”指在一定范围内有效的变量。C语言中,在以下各位置定义的变量均 属于局部变量,其作用域也不同。(1) 在函数体内定义的变量,在本函数范围内有效,即其作用域只局限在本函数体内。(2) 在复合语句内定义的变

16、量,仅在本复合语句范围内有效。(3) 有参函数中的形式参数也是局部变量,只在其所在的函数范围内有效。说明:(1) 局部变量所在的函数被调用或执行时,系统临时给相应的局部变量分配存储单元, 一旦函数执行结束,则系统立即释放这些存储单元。(2) 因为所有局部变量的定义都位于函数中,且从宏观角度来说,局部变量的作用域也 都局限于函数内,所以局部变量也可称作内部变量。(3) 不同函数中和不同的复合语句中可以使用(即定义)同名变量。因为它们的作用域 不同,程序运行时在内存中占据不同的存储单元,各自代表不同的对象,所以它们之间互不 干预。全局变量:所谓“全局变量”是指在函数之外定义的变量。全局变量的定义位

17、置可以在所有函数Z 前、各个函数之间。当然从理论上讲,也可以在所有函数之后(但实际应用中很少用)。全 局变量作用域:从定义全局变量的位置起到本源程序结朿为止。说明:(1) 因为全局变量的定义位置都在函数Z外(且作用域范围较广,不局限于一个函数 内),所以全局变量又可称为外部变量。(2) 使用全局变量可以增加各个函数之间数据传输的渠道,即在某个函数中改变一全 局变量的值,就可能影响到其它函数的执行结果。但它会使函数的通用性降低,使程序的模 块化、结构化变差,所以应慎用、少用全局变量。(3) 全局变量可以和局部变量同名,当局部变量有效时,同名的全局变量不起作用。 试题解析1. 程序如下:main

18、() int i=5;funl(i/2); printf(i=%drT, i);funl(i=i/2); printf(i=%drT, i);funl(i/2); printf(i=%dn, i);fun2(i); printf(i=%dn, i);funl(int i) i二i=2? 15:0;return (i);fun2(int i) i二(i%i)*(i*i)/(2*i)+4);printf (/zi=%dn, i);return (i);解析:该程序运行结果为:i二5i=2i=2i=0i=2该例中三个函数main、funl和fun2中的局部变量均是i,要注意它们各自的作用域。2. 程

19、序如下:int d=l;fun(int p) int d二5;d+二p+;printf d);main() int a二3;fun ;d+=a+;printf (%dn, d);以上程序运行后,输出结果是A) 84 B) 99 C)95 D)44解析:由程序可见,全局变量d和fun函数中定义的局部变量d同名了。根据它们的作 用域及使用规律可知,在fun函数中局部变量d起作用,全局变量d不起作用,在main函 数中全局变量d起作用。故该题结果应选A)。3. 程序如下:int xl=30, x2=40;main() int x3=10, x4=20;sub (x3, x4);sub(x2, xl)

20、;printf (%d, %d, %d, %drT, x3, x4, xl, x2);sub(int x, int y) xl=x;x=y;y=xl;该程序的运行结果为:10,20,40,40变量的存储类别(生存期)解析:该程序在运行过程中,全局变量xl发生两次变化。第一次是调用sub函数后,xl 变为10,第二次也是调用sub函数后,xl变为40。从变量的作用域(即空间角度)来看,变量可分为局部变量和全局变量。若从变量存在 的吋I可长短(即吋间角度)来划分,变量还可以分为:动态存储变量、静态存储变量。变量 的存储方式决定了变量的生存期。动态存储方式:在程序运行期间根据需要为相关的变量动态分配

21、存储空间的方式。动态存储方式主要 有:(1) 自动型存储方式(auto)(2) 寄存器型存储方式(register)自动型存储方式(auto)白动型存储方式(auto)是C语言中使用最多的存储方式,也是系统默认的存储方式。由 自动型存储的变量也称为自动变量。自动变量定义的一般格式为:auto类型说明符 变量名1,变量名2,;其屮,auto为自动存储类别符,它可以省略。当其缺省时,系统默认为autoo比如在 函数体内定义变量时,下面两种写法是等价的。int x, y, z;auto int x, y, z;说明:(1) 自动变量属于局部变量范畴。通常情况下,其作用域局限于定义它的函数范围内。(2

22、) C语言允许在复合语句内定义白动变量,此时,其作用域仅局限于该复合语句内。(3) 当自动变量所在函数(或复合语句)执行后,系统即动态地为相应的自动变量分配 存储单元。(4) 自动变量的生存期为该变量所在的函数(或复合语句)的执行时间,当函数(或复 合语句)执行结束后,自动变量已失效,即其存储单元被系统释放掉了。所以,其原来的值 不能保留下来。若对同一函数进行再次调用时,系统会对相应的白动变量重新分配存储单元。 寄存器型存储方式(register)是C语言中使用较少的一种存储方式。该存储方式是将相关变量的值存储在CPU的通用 寄存器内。从通用寄存器内读取数据比由内存中读取数据要快得多。因此,对

23、于一些需要反 复操作的数据,可使用寄存器型存储方式。由该存储方式存储的变量也可称为寄存器变量。寄存器变量定义的一般格式为:register类型说明符 变量名1,变量名2,;其中,register是寄存器型存储方式类别符,不可省略。寄存器变量也属于局部变量范畴。静态存储方式:在程序编译时就给相关的变量分配固定的存储空间(在程序运行的整个期间内都不变) 的方式。静态存储方式主要有:(1) 静态存储的局部变量(static)(2) 静态存储的全局变量静态存储的局部变量:静态存储方式存储的局部变量也可称为静态局部变量。该类变量的定义格式为:static类型说明符 变量名二初始化值,;其中,static

24、是静态型存储方式类别符,不可省略。(1) 静态局部变量的存储空间是在程序编译时由系统分配的,且在程序运行的整个期间 都固定不变。因此,该类变量在其所在函数调用结束后仍然可以保留变量值。(2) 静态局部变量的初值是在程序编译时一次性赋予的,即在程序运行期间不再赋初 值。如上例在程序编译时给变量a赋予10,对未给定初值的变量b, C编译系统自动给它赋 0值。若变量b为字符型变量,则C编译系统自动给它赋x0(即ASCH代码为0的字符)。静态存储的全局变量全局变量全部是静态的,不必用static修饰。如果全局变量用static修饰,并不是 限定全局变量为静态的,而是声明全局变量只能用于本模块(本文件)

25、,不能被其他文件所引 用。也就是说,不加static声明的全局变量是可以被其他文件所引用的。即:这两种形式 所定义的全局变量都是静态存储方式,只是作用范围不同而已。用extern声明全局变量全局变量(即外部变量)的作用域是从定义的位置起到本文件的末尾止。若在全局变 量作用域之外采欲引用全局变量,则要在引用前用extern來声明全局变量,以扩大全局变 量的作用域。内部函数所谓“内部函数”是指只能被本文件中的各个函数所调用,不能被其他文件中的函数 所调用的一类函数而言。它们必须用static来说明,其一般格式为:static函数类型说明符 函数名(形式参数)说明:(1) 内部函数又可称为静态函数。

26、它的使用范围仅限于定义它的源程序文件内。对其 他文件而言,它是屏蔽的、不可见的。因而,内部函数的保密性很好。(2) 不同文件中的内部函数可以同名,因它们的作用范围不同,不会造成混淆。 内部函数的static不可省略。外部函数所谓“外部函数”是指可以被任何文件的任何函数所调用的一类函数。它们可以用 extern来说明,其一般格式为:extern函数类型说明符 函数名(形式参数)说明:(1) 外部函数的extern可省略。如果在定义函数时省略extern,则系统默认该函数是 外部函数。(2) 外部函数可以被其他文件所调用。当某文件需调用其他文件定义的外部函数时,需 在该文件的适当位置(通常在其首部

27、)用extern来声明所用的函数是外部函数。 试题解析1. 在C语言中,形参的缺省存储类是A) autoB) registerC) staticD) extern答案:A解析:本题考核的知识点是定义函数时形参的缺省存储类。在C语言屮,形参的缺省 存储类为autOo2. 有以下程序int fun(int x , int n)static int sum=O, i;for (i=0; i return sum;main()int a 二1,2, 3, 4, 5, b =6, 7, 8, 9, s二0;s=fun(a, 5) +fun(b, 4) ; printf (%d n, s);程序执行后的输出结果是 (C)A) 45 B)50060 D)55解析:内部静态变量是始终存在的,当函数被调用退出后,内部静态变量会保存数据, 再次调用该函数时,以前调用时的数值仍然保留着。Fun5)的值是15,再次调用后simF15, 所以 Fun(b, 4)=45, s二45+15二60。3. 以下程序的输出结果是int x=3;main () int i;for (i=l; i

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1