一、选择题
11.1 以下叙述不正确的是
A) C程序的main函数可以没有参数。
B) C程序的main函数可以有参数。
C) C程序的main函数若有参数时,第一个参数的值最少是1。
D) main函数的第一个参数必须是整型,其名字必须是argv,第二个参数可以定义成:char
*argv[],名字必须是argv。
答案:D
11.2 若有以下定义和说明,则对fun函数的正确调用语句是
A) a=fun; a(w); B) a=fun; (*a)(&c);
C) b=fun; *b(w);D) fun(b);
main()
{ int (*a)(int *),*b(),w[10],c;
.
.
.
}
fun(int *c) { ... }
答案:B
11.3 以下叙述正确的是
A) C程序中各函数之间既允许直接递归调用也允许间接递归调用
B) C程序中各函数之间不允许直接递归调用也不允许间接递归调用
C) C程序中各函数之间允许直接递归调用不允许间接递归调用
D) C程序中各函数之间不允许直接递归调用允许间接递归调用
答案:A
11.4 以下程序的输出结果是
A) 8 B) 30 C) 16 D) 2
long fib(int n)
{ if(n>2) return (fib(n-1)+fib(n-2));
else return (2);
}
main()
{ printf("%ld\\n",fib(6)); }
答案:C
二、填空题
11.5 假定以下程序经编译和连接后生成可执行文件PROG.EXE,如果在DOS提示符下键入
PROG ABCD EFGH IJKL 则输出结果为_____。 main(int argc, char *argv[]) { while(--argc>0) printf("%s",argv[argc]); printf("\\n"); } 答案:IJKLEFGHABCD 11.6 以下程序的输出结果是_____。 fun(int x) { int p; if(x==0||x==1) return (3); p=x-fun(x-2); return p; } main() { printf("%d\\n",fun(9)); } 答案:7 11.7 以下程序的输出结果是_____。 fun(int n,int *s) { int f1,f2; if(n==1||n==2) *s=1; else { fun(n-1,&f1); fun(n-2,&f2); *s=f1+f2; } } main() { int x; fun(6,&x); printf("%d\\n",x); } 答案:8 11.8 以下程序调用invert函数按逆序重新放置a数组中元素的值,a数组中的值在main函数中读入。请填空。 #define N 10 void invert(int *s,int i, int j) { int t; if(i { t=*(s+i); *(s+i)=_____; *(s+j)=t; invert(s,_____,j-1); } } main() { int a[N],i; for(i=0; i invert(a,0,N-1); for(i=0; i printf("\\n"); } 答案:*(s+j) i+1 i 11.9 以下程序的输出结果是_____。 funa(int a,int b) { return a+b; } funb(int a,int b) { return a-b; } sub(int (*t)(),int x,int y) { return (*t)(x,y); } main() { int x,(*p)(int ,int); p=funa; x=sub(p,9,3); x+=sub(funb,8,3); printf("%d\\n",x); } 答案:17 11.10 以下程序中的trap函数是一个用梯形法求定积分的通用函数,梯形法求定积分s的公式为: n-1 x=((f(a)+f(b))/2+∑ f(a+i*h)*h, h=│(a-b)/n│ i=1 其中,n为积分小区间数,以下程序调用trap函数求积分,被积函数是: f(x)=x*x+3*x+2,且 n=1000,a=0,b=4。 #include "math.h" double trap(double _____,double a,double b) { double t,h; int i,n=1000; t=0.5*((*fun)(a)+(*fun)(b)); h=fabs(a-b)/(double)(n); for(i=1; i<=n-1; i++) t=t+_____; t=t*h; return (t); } double mypoly(double x) { return (x*x+3.0*x+2.0); } main() { double y,(*pf)(double); pf=_____; y=trap(pf,0.0,4.0); printf("%f\\n",y); } 答案:(*fun)(double) (*fun)(a+i*h) mypoly