一九九七年度程序员级下午试题 试题一 阅读以下程序说明和C程序,将应填入__(n)__ 处的字句,写在答卷的对应栏内。 [程序说明] 本程序中的函数factor(m,fac,cp)用来计算正整m(m>2)的除自身以外的所有不同因子的和。该函数返回因子和,并把各因子从小到大依次存放在数组fac中,其因子个数存入在cp所指的变量中。 例如 m=16,求得的因子为 (1,2,4,8) 因子和为15,因子 个数为4。 程序假定正整数m的不同因子个数不会超过100个。 [程序] # include <stdio.h> # define N 100 long factor(int m,int fac[],int * cp) { int c1, c2 , i, k; long s; fac[0]=1; for(c1=s=1,c2=N-1,____(1)____;;) { k=m/i; if(____(2)____) if(____(3)____ { fac[c1++]=i fac[c2--]=k; s +=i; } i++ if(i>k)brdak; } for9c2++;c2<=N-1;c2++) ____(4)____; *cp=c1; return____(5)____; } 试题二 阅读以下程序说明和FORTRAN程序,将应填入__(n)__处的字句,写在答卷的对应栏内。 [程序说明] 函数FACTOR(M,FAC,L)用来计算正整数M(M>2)的除自身以外的所有不同因子之各,该函数值返回因子和,并把M的各因子从小到大依次存放在数组FAC中,其因子个数存放在L中。 例如:M=16 ,其因子之和为15(1+2+4+8),因子个数为4。本程序假定正整数M的因子个数不会超过100个。 [程序] FUNCTION FACTOR(M,FAC,L) INTEGER FAC(100),FACTOR,S,R FAC(1)=1 L=1 R=100 S=1 ____(1)____ K=M/I
IF(____(2)____)THEN
IF(____(3)____)THEN
L=L+1
FAC(L)=I
FAC(R)=K
R=R-1
S=S+1
FAC(L)=I
ENDIF
ENDIF
I=I+1
IF(I.LT.K)GOTO 10
DO 20 I=R+1,100
____(4)____
L=L+100-R
____(5)____
END
试题三
阅读以下程序说明和C程序,将应填入 __(n)__处的字句,写在答卷的对应栏内。
[程序说明]
本程序列举从整数0至n-1中任取r个整数的所有组合。设求得组合中的各数分别存储于数据组C的C0,C1……Cr-1中,并假定C0<C1<…<Cr-1,则Ci有性质Ci<n-r+i(o<i<r)。
如设n=5,r=3,则i<2+i(0<i<3)。由初始组合0,1,2开始,可心依次产生以下组合序列:
012,013,014,023,024,034,123,124,134,234
产生组合的方法是:
对上一组合C0,C1,…Cr-1,自右端开始递增的Ci ; 递增Ci后仍满足Ci的性质,表示可以开成下一个组合,则递增Ci,并顺序生成Ci+1至Cr-1; 递增Ci后不满足Ci的性质,则回溯; 直至i减至小于0为止。
[程序]
# include <stdio.h>
#define N 100
void enumall(int n,int r)
{ int i, j, c[N];
for(j=-0;j<r;j++) c[j]/*开成初始组合*/
for(j=0;j<r;j++) printf(“%d”,c[j]);
printf(“”);
i=____(1)____;
do{if(____(2)____)/*如调整c[i]是可接受的*/
{ c[i]++; /*递增c[i]*/
for(j=0;j<r;j++) printf(“%d”,c[j]);
prihtf(“”);
____(5)____
}
else____(6)____;/*回溯*/
}while(____(7)____;
}
main()
{int,n, r;
do{printf(“Enter n, r:”);
scanf(%d %d,%n,%r);
[1] [2] [3] [4] [5] [6] 下一页 |
|
|
|