a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 67|回复: 1

[程序员] 2012年软件水平考试程序员之程序设计知识要点(21)

[复制链接]
发表于 2012-8-2 08:51:15 | 显示全部楼层 |阅读模式
6.2 函数挪用 $ o/ s/ X$ w2 {! ^
  函数被界说往后,凡要实现函数功能的处所,就可简单地经由过程函数挪用来完成。按函数挪用在轨范中的浸染,有两种分歧类型的应用:9 C+ n/ w# ?, I( |+ Y* n
  (1)函数挪用只是操作函数所完成的功能。此时,将函数挪用作为一个自力的语句。其挪用的一般形式为
3 T  y% D& d+ b: a3 p0 `0 D0 e( r  函数名(现实参数表);. O4 b0 j+ U0 b2 `# q
  这种应用不要求或轨范不操作函数的返回值。如轨范中经常挪用名目输入函数scanf()和名目输出函数printf()等。0 Y% ?; A% I) m+ K. k
  (2)函数挪用是操作函数的返回值。其挪用的一般形式为
5 ^3 p( j( |: W  函数名(现实参数表)
% A  @# J# |8 P) y- N: x0 k% F3 A+ n  这种应用是操作返回值继续进行表达式的计较,或输出函数返回值等。
; K  P9 F1 N3 p  函数挪用时供给的现实参数按它们呈现的挨次与函数界说中的形式参数-一对应,并要求现实参数类型与其对应的形式参数类型相一致。一般情形下,函数挪用应为函数界说中的每个形式参数供给现实参数,当有多个现实参数时,现实参数之间用逗号分隔。
- h; i. D( M& N) w, b& ~  函数挪用的执行过程描述如下:
5 K5 N& p  h  y( L# u  (1)为函数的形式参数分配内存空间;4 G% ~: w/ Y0 Y& ^( J
  (2)计较现实参数表达式的值,并将现实参数表达式的值赋给对应的形式参数;
1 M% z# e* V9 \4 P2 ~# C6 m0 D  (3)为函数的局部变量分配内存空间;
( \' ^: T9 r) ]0 `: T  (4)执行函数体内的语句序列;. w' B9 k, }8 E! Q6 d; n# I9 W: z
  (5)函数体执行完成,或执行了函数体内的return语句(若return语句带表达式,则计较出该表达式的值,并以此值作为函数的返回值)后,释放为此次函数挪用分配的全数内存空间;& O+ u, Q/ r  J3 a: |* S2 B6 b* T
  (6)将函数值(如不美观有)返回到函数挪用处继续执行。
  B! k& j$ {9 E* z  下面以简单的轨类型子声名函数挪用的执行过程。' [; @- P1 h: ?6 m$ v2 ?0 c
  【例6.l】函数挪用时,由现实参数向函数形式参数传递值的示意轨范。2 M2 U( e. s: C! `
  # include% z! M* m2 A+ H1 H
  double x,y,d;$ W- T6 t# x2 P; A
  double min(double a,double b)
8 f( ]  R3 H$ o% f6 R; T. v  {double temp;
, }1 q+ ^. Y/ s4 C2 X2 P  temp=a> b? b :a;) ?& H1 s" E6 Q  M( e
  return temp;$ x' t) z( |1 w/ o. I: q0 [

4 U0 l: q# K/ D4 {# b- W  }
回复

使用道具 举报

 楼主| 发表于 2012-8-2 08:51:16 | 显示全部楼层

2012年软件水平考试程序员之程序设计知识要点(21)

</p>  void main()
' t$ e4 p  l1 u7 }, U3 v  F8 Y  { printf(“Enter x, y.\n”);
$ s6 e( K" x2 V- P% r( `  scanf(“%lf%lf”,&x,&y);. Z: ~7 V. G$ ]! b# D
  d=min(x,y);1 y* K( Z# U. q' p$ |1 W1 O
  printf(“MIN(%.3f,%.3f=%.3f\n”, x, y,d)7 X  ~* V2 P% ~% ?, b/ J2 P
  }7 y" K3 [4 u  _
  以上示意轨范的大致执行过程如下:
+ O4 q- c# a. }& P  首先执行主函数的第一个语句,挪用名目输出函数输出提醒信息。接着挪用名目输入函数,期待用户输入数据。用户看到轨范输出的提醒信息,输入数据,输入的数据被名目输入函数所接管,并将输入数据译成内部形式后,存入变量X和y。接着执行赋值语句,求右瑞表达式的值。该表达式以x和y的值为现实参数,挪用函数main()。对函数min()的挪用发生时,系统先保留好节制的返回点。在执行被挪用函数min()之前,先为函数的形式参数a和b分配存储单元,并以它们对应的现实参数表达式的植给它们赋初值。接着为函数内部的变量(称为局部变量)分配存储单元。之后才起头执行被挪用函数体中的语句。执行完函数体的语句,或执行了return语句,函数筹备返回。在返回之前先将形式参数和局部变量所占用的存储单元全数释放。函数返回时,将函数的返回值带回挪用处,从原先保留的节制返回点,继续执行,将函数挪用的返回值存于变量d,输出结不美观,竣事轨范。综上所述,函数挪用时,系统要做良多辅助工作,函数挪用时发生的数据传递最首要的是现实参数向形式参数传递数据和函数的返回值传递给挪用处。为正确编写函数,实现函数挪用所但愿的要求,需正确体味以下几项内容:* J1 q" e7 ]7 @' g( W) i# ~
  (1)当函数执行return语句或执行完函数体的语句序列后,函数的此次挪用就执行竣事,随之将节制返回到函数挪用处继续执行。8 z% T. a. z! B8 K% X- n- e
  (2)函数的返回值是经由过程执行return语句时,计较return之后的表达式值而获得的。如不美观函数不供给返回值,则return语句不应包含表达式。
+ `% h$ k9 K0 T/ c' W$ i7 n6 f1 A  (3)如不美观函数有返回值,则应有确定的类型,并在函数界说时指明。同时,return语句的表达式类型应与函数界说中指明的返回值类型相一致。
$ `$ j& R6 Q: P4 s. P& `4 s  (4)为了明晰指明函数不供给返回值,建议在函数界似瘫,在函数名之前写上void。并在这样的函数体内,所有的return语句都不应该带表达式。' t- j* @) p) n- v7 e: ?
6.3 函数声名 " ^$ i- }) @; m' w: s$ v4 U
  C函数都是外部的,一般来说,任一函数都能被其它函数挪用。而一个函数要挪用另一个函数,应知道被挪用函数的一些有关若何正确挪用的信息。挪用函数与被挪用函数之间在轨范正文中可能会存在以下几种情形。
/ S7 e# O: f5 t! U1 H& I6 p( X; q7 B  (1)挪用统一轨范文件中前面已界说的函数。' S" @$ U- U7 P  K% w
  (2)挪用处于统一轨范文件后面界说的函数。
9 d# e) P+ }) v7 H/ A  (3)挪用此外轨范文件中界说的函数。/ w; i8 d% y8 |; j& J
  对于第一种情形,因在函数挪用处,被挪用函数的具体信息已被编译轨范所接管,在函数界说之后挪用前面已界说的函数,能便利地搜检挪用的正确性。对于后两种情形,这时因被挪用函数的信息还未被编译轨范所接管,不能搜检函数挪用的正确性,所以在挪用之前需对被挪用函数有关挪用的一些信息作作声名。如函数的返回值类型、函数名和函数有关形式参数的个数及其类星匀。这样的声名称作函数声名。函数声名的一般形式为- f; q( l3 ^) c/ N1 @) c
  存储类型声名符 数据类型声名符 函数名(形式参数声名表);& \/ j! n3 N  H/ r
  其中存储类型声名符可以省缺,或写成extern。形式参数声名表可觉得空,也可以挨次列出各形式参数的类型,同样也可以挨次列出各形式参数的类型和形式参数的名。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-22 21:42 , Processed in 0.937077 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表