a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 77|回复: 0

[软件设计师] 2012年软件水平考试软件设计笔试考前练习(13)

[复制链接]
发表于 2012-8-2 09:08:23 | 显示全部楼层 |阅读模式
2012年软件水平考试软件设计笔试考前练习(13)
' p5 S; [: g$ m3 w! a, l6 w1.设函数的功能是交换X和y的值,且通过正确调用返回交换结果。不能正确执行此功能的函数是( ), s  T/ m+ Y$ B7 D1 ~
  ① funa(int *x, int *y)
9 S3 W; a, t' B% C  {1 ]3 Y  I' s- o  U! c0 {, f* D
  int * p;1 {4 C" o: R' Z- Y/ D- ^
  * p=*x; *x=*y; *y=*p;0 Z) f1 y& c% z7 Z
  }. S  L5 {- ?0 G% |6 G& @
  ② funb(int x, int y)3 ?6 s- I0 Z% h
  {, U$ V, x6 x3 w4 e
  int t;4 Q+ D' }0 Y6 L  ^) ~
  t=x;x=y;y=t;
) \" D" D7 X' u$ Z, J5 l  }# V4 }2 P( p* E+ A1 X
  ③ func(int *x, int *y)6 R1 L+ Q  h0 ^" Q5 Q+ O2 B8 E. L4 W
  {' [6 q2 o2 P% p: s9 |5 {4 D
  int p;
' K5 x) ^$ f1 K+ c2 H: r* p. B/ a1 K0 t  p=*x; *x=*y; * y=p;$ S& G! {: ?4 F5 |, n- F
  }7 R% U) b. n5 a2 w' t) C; z
  ④fund( int *x,int *y)
) @9 V1 i" G. s  {* h* e# f: x+ l0 p8 ^' k7 W& j8 E
  *x=*x+ *y;*y=*x- *y;*x= *x- *y;) @4 v; n' x! i! t5 f9 Z7 _: n
  }! O. Y5 P/ c" `2 T5 x
  【解】设计实现交换两个变量值的函数。希望函数调用能改变调用环境中的变量,方法之一是让函数设置指针类型的形参,实参传送给形参的是希望交换值的两个变量的指针。函数的两个形参得到这两个变量的指针后,函数就能通过形参间接引用要交换值的变量,或引用它们的值,或改变它们的值。从而实现从函数传回信息存于调用环境的变量中。以上所述是设计交换变量值函数的一般原则,具体编写函数时还需注意对上述原则的正确应用。" O( E; H" L2 r$ k/ C1 Q' W
  对于函数funa,该函数的定义满足设置指针形参,并通过指针形参间接引用环境变量的要求。但是在函数体中定义了指针变量p,并在p宋明确设定它所指向的变量下,代码*p=* x企图将值存入它所指的变量中,这是初学者经常出现的一种严重的错误。该函数因有错,不能实现交换变量值的功能。
3 x5 M$ g! @5 `$ |  对于函数funb,该函数不定义指针形参,函数体也没有可用的指针间接引用调用环境中的变量,所以该函数也不能实现交换变量值的功能。) H9 H& j3 e5 ?7 `7 Z. @: B
  对于函数func,该函数正确定义了指针形参,函数体也正确通过指针形参间接引用环境中的变量,并正确定义了自己的局部变量。该函数能实现交换变量值的功能。* N. z& b' O* \6 i. L
  对于函数fund,该函数也正确定义指针形参和函数体通过形参间接引用环境变量。特别要指出的是,该函数是利用*x和*y的;日值与新值之间的关系实现问题要求的。其中第一个赋值使。x存有原来未交换之前的*x与*y之和;第二个赋值从这个和中减去原来的*y,并将差赋给*y,使*y的值是交换之前的*x的值;第三个赋值再次从和中减去新的*y,即减去交换之前的*x,这个差就是交换之前的*y,并将差赋给*x。经以上三个赋值,实现两变量之间的值交换。所以不能正确执行交换变量值的函数是funa和funb,即正确选择是①②。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 09:47 , Processed in 0.322723 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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