软件水平考试辅导程序员笔试考前练习1
' p9 S8 r, h* Y+ f% f" y阅读以下程序说明和C程序,将应填入__(n)__ 处的字句,写在答卷的对应栏内。% d6 Q3 K/ N6 ~, Q& x# |
[程序说明]
5 D: o! ]/ B' E& {/ j 本程序中的函数factor( m,fac,cp )用来计算正整 m ( m 》 2 )的除自身以外的所有不同因子的和。该函数返回因子和,并把各因子从小到大依次存放在数组 fac 中,其因子个数存入在 cp 所指的变量中。& w0 }* z# c6 I) U4 j! I
例如 m=16,求得的因子为
+ _9 k# E* i: x, C (1,2,4,8)/ K5 f3 ~4 K: s* P6 V+ `8 E
提示:因子和为15,因子个数为4。
" v5 I& d! E8 ~( d, S7 P$ n 程序假定正整数 m 的不同因子个数不会超过100个。0 Y/ c5 d. R. w
[程序]& m9 ?2 D: l/ k8 B
# include6 J0 R( M- }3 Y4 P, x
# define N 100
) J6 a' _; L+ s' I+ D! P# ] long factor (int m,int fac[],int *cp)
/ u+ k2 j, _( G {4 B- z# n. ?( R7 U" l9 t' e
int c1, c2 , i, k;
- D7 t9 F2 y% a. u% @$ u long s;& v6 Q3 j$ T8 T8 t
fac[0] = 1;7 [( h) E |! W
for(c1 = s = 1,c2 = N-1,____(1)____;;)( B' N0 D% s9 I% w1 V% ^2 C
{% a. n. n0 X6 X
k = m/i;+ J2 f9 B! L$ P0 E
if (____(2)____)6 O! Z6 w0 c( [8 k
if (____(3)____)8 r& u+ T8 R7 P2 r& ]
{ fac[c1++] = i;
' Q$ E. r* d% A/ a' U$ T! j fac[c2--] = k;8 g0 \; }! s+ i! N) D
s + = i+k;
6 Z8 [8 _% F" J7 r o$ z }+ f/ Z* x# \) ^/ X: O9 x0 `
else {; D% i% H$ Q! p5 R+ `% u6 V" R5 h
fac[c1++] = i;* J6 q/ ?+ Y9 j
s + = i;
- S) v l! |8 I }
" T) [( b, ~. Y5 Q! E; i+ K i++;9 K. c$ A6 i7 |! o$ Y
if(i》=k) brdak;
; x: c6 W( M, l6 s' B }9 Y1 v* D8 j6 |* c
for (c2++;c2 《= N-1;c2++)
+ J7 `% D8 j _/ C: n& S9 X6 W( q ____(4)____;, w7 E, a: y0 b6 w) ^
*cp=c1;
+ L- n* ^; Q- o. n2 c4 G* e return ____(5)____;
+ D$ s# u" @+ N$ S | 答案:
! [9 _' C8 @ D* z! ^' M 1)3分 i = 2,或 cl + 1- r! ~% F4 R+ ?: ~% }# \" L. A; W7 D
2)3分 m % i == 0 (或 !(m % i) 或 m == i * k )
7 q2 q( e, m3 A) D 3)3分 i ! = k (或 i 《 k )
$ a) B$ K. w! r- ^+ O 4)3分 fac [ cl ++ ] = fac [ c2 ]
7 f/ V. ~& V% ]( m! E, I 答 cl ++ 给 1 分,‘ = ’左右只对一半给 1 分。
) T* \- A5 Q- G4 X) k9 D 5)3分 s |