a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 122|回复: 2

[程序员] 2012年软件水平考试程序员考前练习试题及答案解析(7)

[复制链接]
发表于 2012-8-2 08:51:15 | 显示全部楼层 |阅读模式
 二、程序分析   1.main()
/ o# C& B) K1 V2 G: V$ j  { char str[]="1234567";4 Z8 \9 f  }  R. A
  int i;) l- e& ^3 B1 L+ l

( N$ F, S7 p% E8 B  h( W( w  for(j=0;i
回复

使用道具 举报

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

2012年软件水平考试程序员考前练习试题及答案解析(7)

 3.main()   { int x1,x2,x3,x4;
7 z( l. J( a0 }  I+ [/ f+ j8 ?' v  x1=x2=x3=x4=1;8 m% E4 d3 N$ b
  switch(x1)
& V) r* J5 s/ Q, m4 D  { case 1:switch(x2)7 _1 o3 e* W# v7 y
  { case 0:x3++;break;9 ~) X. u, h: u7 \" T
  case 1:x4--;4 ]9 b5 U5 s) v$ U! s
  }
4 s. ?7 d- F5 a7 G" K  case 2:x3++,x4--;
) h. S4 N" U5 E, o7 ^6 Y2 e, V0 H  }
6 R3 a8 `! v5 y3 X4 n  printf("%d%d",x3,x4);
9 V5 M( r6 ?4 `. f. o9 ]  }$ j  C# x" Y5 M/ U7 O0 Z; w3 f
  【解析】本题的关键是嵌套的多分支语句switch。注意在执行switch语句前,变量x1、x2、x3、x4已经赋值,他们的值均为1。执行外层switch语句时,用于控制分支选择的变量x1的值为1,所以要执行的是“case 1”的分支。该分支又是一个switch语句,用于控制分支选择的变量x2的值为1,所以需要执行的是“case 1”的分支。该分支执行的语句是“x4--”,使得x4的值变为0。接着退出该分支,即退出内层的switch语句。由于外层的switch语句的“case 1”分支中没有“break”语句,所以将继续执行其后的“case 2”分支,即执行“x3++,x4--;”,结果x3等于2, x4等于-1。再退出外层switch语句,执行输出语句,此时,变量x3的值为2;变量x4的值为-1。所以输出结果是2-1。* c2 E. C% d+ |# o
  【参考答案】2-1。7 E( z% @! r+ T1 ~) m
  4.conv(b)
0 o7 k; e' A# m+ ?  int b;1 y& W+ O9 u% O+ @6 J- N# i
  { if(b>=2)conv(b/2);* K! f9 L; o& Z8 t) l) c5 Y
  printf("%d",b%2);
9 q- R- @+ ]! E( |: w: \$ I$ J  return;
! F. ]3 D& H; V) t; b  }! P& Q3 {* y/ i  R2 e$ `* N
  main()
2 O9 r2 O7 T5 s. H; G* w  { int d;+ K: i. ^5 ]2 X: M! }
  scanf("%d",&d);
$ f& R5 |: m# w+ D$ A( {  conv(d);
' L0 ^- N0 q8 e$ p# }0 t: m. P! p7 i  }3 q! C( y/ ?) F$ ~
  说明:本程序执行时从键盘上输入:22后跟回车键。  v- t5 t& }/ W" j. ]
  【解析】主函数中输入整数22存入变量d中,然后调用函数。conv()。此时将把实参d中的22传递给形参b。然后再执行函数体,函数体中前面一条语句是单分支语句,当b>=2时再用“b/2”调用自己,显然这是一个递归调用的函数。下面我们来详细分析递归调用的过程:8 X6 w! _3 H+ c  Z% b  ~) q
  第1次调用函数(b=22),满足条件,引起第2次调用自己(b/2=11)0 ?4 Z* }7 \* y& ?+ n& b& A  N
  第2次调用函数(b=11),满足条件,引起第3次调用自己(b/2=5)
) f: z% ?  u# J3 n3 ^  第3次调用函数(b=5),满足条件,引起第4次调用自己(b/2=2): Q0 [8 ?  ^! x3 J4 j
  第4次调用函数(b=2),满足条件,引起第2次调用自己(b/2=1)
2 i- b+ x/ m( R# X4 |( v, O  第5次调用函数(b=1),不满足条件,执行输出语句,输出结果为 b%2=1%2=1
. C" P4 z7 C4 h- E# i, X: N  执行第5次调用的返回,执行第今次调用时的输出语句,输出结果为b%2=2%2=0
2 e0 `& z; {4 R8 J4 x1 z  d  执行第4次调用的返回,执行第3次调用时的输出语句,输出结果为b%2=5%2=1
9 j0 S* _" b; C; i$ A, a; q  执行第3次调用的返回,执行第2次调用时的输出语句,输出结果为b%2=11%2=1( ~3 M/ x' {" T3 U/ ]  B
  执行第2次调用的返回,执行第1次调用时的输出语句,输出结果为b%2=22%2=0* q( r* C  {! M* U! h" U
  执行第1次调用的返回,将返回主函数,结束程序的运行。0 M' _4 O# n7 L6 w4 m8 V2 D- T
  所以程序运行的输出结果是:10110。
3 e: J( x8 `8 z  【参考答案】10110。
回复 支持 反对

使用道具 举报

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

2012年软件水平考试程序员考前练习试题及答案解析(7)

 5.void f(p1,p2)   int *p1,*p2;
& m7 Z4 L( a* W: x2 ~% h  { int i,j;
* }9 \$ N# K+ y  *p2=0;# r% `% U5 G/ k6 v! @9 @
; D+ H/ T5 H) k" x$ E3 F1 i
  for(i=0;i
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 09:57 , Processed in 0.649146 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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