a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 99|回复: 1

[软件设计师] 2012年软件水平考试软件设计师基础习题(6)

[复制链接]
发表于 2012-8-2 09:08:23 | 显示全部楼层 |阅读模式
6.1  单项选择题
" r) n" M# _8 `4 G9 r3 K  1.函数调用语句“f((el,e2),(e3,e4,e5));”中参数的个数是(  ); ~+ L7 U6 x7 e: ^1 D& _6 W1 P% H- m
  ①1            ②2; b4 N; A6 ]- i) \, k6 p! m
  ③4             ④5; s  Y+ E$ L9 G1 ?
  【解】上述函数调用中,(e1,e2)和(e3,e4,e5)是两个带括号的表达式,所以函数调用只提供两个实参,其中第一个实参先计算el的值,然后计算e2,并以e2的值为实参。第二个实参顺序计算e3,e4,e5,并以e5的值为实参。所以解答是②。; [  e7 G2 a; K6 `8 H3 q
  2.C语言中,函数的隐含存储类型是(  )
. S% X9 F+ ^4 N0 w' a1 ]& ^  ①auto              ②static( m' l$ ^+ ]+ m$ s' `5 Q6 E% v
  ③extern           ④无存储类别
8 f, a0 Q+ }7 b  【解】由于C函数内不能再定义函数,C函数的存储类型只能是静态的或外部的之一。若定义函数时不指定存储类型是静态的,则它的存储类型就是外部的(extern),即函数允许被程序的其它函数调用。所以解答是③。: U3 k& A2 t6 K7 H6 q
  3.以下对C语言函数的有关描述中,正确的是(  )
$ ^7 E) [/ k9 J  p) G8 s9 `+ P* M: y  ①在C语言中,调用函数时,只能把实参的值传递给形参,形参的值不能传递给实参
, A8 v9 u1 F9 l3 n( L8 l  ②C函数既可以嵌套定义,又可以递归调用
2 c' E0 {! s: Q# Z* [4 p  ③函数必须有返回值,否则不能定义成函数9 q$ d+ K6 w+ h2 R, s) _
  ④C程序中,有调用关系的所有函数必须放在同一个源程序文件中
$ F3 i) D" k) R& g) P+ |4 M3 {  【解】C语言规定,调用函数时,只能把实参的值传递给函数的形参。函数调用时,形参从实参表达式得到初值,报参也是函数的一种局部变量,其值可以改变,但形参的值不能传回给对应的实参。当函数设置非指针类型的形参时,实参可以是同类型的一般表达式;当函数设置指针类型的形参时,对应的实参也必须是同类型的指针表达式。所以叙述①是正确的。C语言虽可以递归调用,但同时规定,在函数内不能再定义函数,所以叙述②是错误的。通常C函数会有返回值,但也可以没有返回值。有许多情况,函数的执行是完成某种预定的工作,并没有返回值,所以叙述③是不正确的。在C程序中,如函数未指定是静态的,则就是外部的,能让别的文件中的函数调用。但函数要调用别的文件中的函数,在调用代码之前,需对它作说明,所以叙述④也是不正确的。正确的解答只有①。
& }: Q# D1 J3 n7 \" ^$ r6 V  4.设函数的功能是交换X和y的值,且通过正确调用返回交换结果。不能正确执行此功能的函数是(  )* T2 r, c- w2 b/ l/ V! b
  ① funa(int *x, int *y)
+ X  }5 e/ ]; y! {  { int * p;
, B5 o3 W" c( s3 g" a  * p=*x; *x=*y; *y=*p;) X7 D# ]" n' g  q- W
  }
: d2 v0 T" s+ A$ C5 M  ② funb(int x, int y)
, [. q. k+ ~& Y6 z. s9 S  { int t;9 r4 B  V7 M0 K" N
  t=x;x=y;y=t;9 G5 P& R& }/ i) q- U
  }
4 o: v) [7 N8 K2 Z3 N6 Z  ③ func(int *x, int *y)
8 S0 t/ i/ d6 h8 J6 b  { int p;  H3 v4 V- o/ E
  p=*x; *x=*y; * y=p;, t4 `' P+ C+ Q* }
  }
% C/ |2 b9 F4 Z8 k& `7 t  ④fund( int *x,int *y)1 C# q9 ]$ \! ?- h
  {
- W0 Q: E- Z0 G* t' @+ N  *x=*x+ *y;*y=*x- *y;*x= *x- *y;
0 t1 N6 V$ g! f* I6 W! Z  【解】设计实现交换两个变量值的函数。希望函数调用能改变调用环境中的变量,方法之一是让函数设置指针类型的形参,实参传送给形参的是希望交换值的两个变量的指针。函数的两个形参得到这两个变量的指针后,函数就能通过形参间接引用要交换值的变量,或引用它们的值,或改变它们的值。从而实现从函数传回信息存于调用环境的变量中。以上所述是设计交换变量值函数的一般原则,具体编写函数时还需注意对上述原则的正确应用。
0 y& m% V$ }8 V/ t) V  对于函数funa,该函数的定义满足设置指针形参,并通过指针形参间接引用环境变量的要求。但是在函数体中定义了指针变量p,并在p宋明确设定它所指向的变量下,代码*p=* x企图将值存入它所指的变量中,这是初学者经常出现的一种严重的错误。该函数因有错,不能实现交换变量值的功能。
8 L8 W' p' f3 C  对于函数funb,该函数不定义指针形参,函数体也没有可用的指针间接引用调用环境中的变量,所以该函数也不能实现交换变量值的功能。$ j5 {* Q8 x4 T% Y- Y( a
  对于函数func,该函数正确定义了指针形参,函数体也正确通过指针形参间接引用环境中的变量,并正确定义了自己的局部变量。该函数能实现交换变量值的功能。
$ G* E6 L% ]1 M! ]. w1 A  对于函数fund,该函数也正确定义指针形参和函数体通过形参间接引用环境变量。特别要指出的是,该函数是利用*x和*y的;日值与新值之间的关系实现问题要求的。其中第一个赋值使。x存有原来未交换之前的*x与*y之和;第二个赋值从这个和中减去原来的*y,并将差赋给*y,使*y的值是交换之前的*x的值;第三个赋值再次从和中减去新的*y,即减去交换之前的*x,这个差就是交换之前的*y,并将差赋给*x。经以上三个赋值,实现两变量之间的值交换。所以不能正确执行交换变量值的函数是funa和funb,即正确选择是①②。
回复

使用道具 举报

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

2012年软件水平考试软件设计师基础习题(6)

  5.要求函数的功能是在一维数组a中查找x值。若找到,则返回所在的下标值;否则,返回0。设数据放在数组元素的a[1]到a[n]中。在以下给出的函数中,不能正确执行此功能的函数是(  )
& }7 J# s% O7 ^) ^0 V  ① funa(int *a,int n, int x)) |- ^; v" ~. t: b  D3 R
  { *a=x;
* N( `- G1 l' z4 _2 x* @! L4 N  whlie(a[n]!=x) n--;. ^  B8 H6 |5 H4 w' @
  return n;
3 |: M* L/ o/ n1 O& k3 w3 {7 s  }
/ f1 ?+ L: A- T! ]3 u' T  ② funb(int *a, int n, int x)6 V! R  E- J$ g- o( \
  { int k ;
; C* T8 e$ w  X; C- s8 B  for( k=l; k
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 23:47 , Processed in 0.267189 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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