《全国计算机等级考试二级教程——C语言程序设计》课后题及参考答案

main(int argc, char *argv[])

{ while(--argc>0) printf(\printf(\ } 答案:

IJKLEFGHABCD

11.6 以下程序的输出结果是_____。 fun(int x) { int p; if(x==0||x==1) return (3); p=x-fun(x-2); return p; } main()

{ printf(\ } 答案: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(\ }

答案:

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

for(i=0; i

答案:*(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(\ } 答案:

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 \

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(\ }

答案:(*fun)(double) (*fun)(a+i*h) mypoly 第十二章

一、选择题

12.1 以下程序的输出结果是

A) 1,6,3,1,3 B) 1,6,3,2,3 C) 1,6,3,6,3 D) 1,7,3,2,3 main()

{ int i=1,j=3; printf(\{ int i=0; i+=j*2;

printf(\}

printf(\ }

答案:B 12.2 以下程序的输出结果是

A) 1 2 3 4 B) 4 3 2 1 C) 0 0 0 0 main()

{ int a[]={1,2,3,4},i,x=0;

for(i=0; i<4; i++) { sub(a,&x); printf(\printf(\ }

sub(int *s,int *y) { static int t=3; *y=s[t]; t--; }

答案:B 12.3 以下程序的输出结果是

A) 8,17 B) 8,16 C) 8,20 main()

{ int k=4,m=1,p; p=func(k,m); printf(\p=func(k,m);

printf(\ }

func(int a,int b)

{ static int m,i=2; i+=m+1; m=i+a+b; return (m); }

答案:a 12.4 以下程序的输出结果是

A) 34756 B) 23445 C) 35745 void fun(int *s)

{ static int j=0; do

s[j]+=s[j+1]; while (++j<2); }

main()

{ int k,a[10]={1,2,3,4,5}; for(k=1; k<3; k++) fun(a);

for(k=0; k<5; k++) printf(\ }

答案:C 12.5 以下程序的输出结果是

D) 4 4 4 4 } D) 8,8 D) 12345 A) 3 B) 6 C) 5 D) 4 f(int a)

{ int b=0; static int c=3; a=c++,b++; return (a); }

main()

{ int a=2,i,k;

for(i=0; i<2; i++) k=f(a++); printf(\ }

答案:D 12.6 以下程序的输出结果是

A) 1 B) 2 C) 7 D) 10 int m=13;

int fun2(int x,int y) { int m=3; return (x*y-m); }

main()

{ int a=7,b=5; printf(\ }

答案:B

12.7 C语言中,形参的缺省的存储类说明是

A) auto(自动) B) static(静态) C) register(寄存器) D) extern(外部) 答案:A 12.8 以下叙述中不正确的是

A) 一个变量的作用域完全取决于变量定义语句的位置。 B) 全局变量可以在函数以外的任何部位进行定义。

C) 局部变量的“生存期”只限于本次函数调用,因此不可能将局部变量的运算结果保存至下一次调用。 D) 一个变量说明为static存储类是为了限制其它编译单位的引用。 答案:C 二、填空题

12.9 以下程序的输出结果是______。 main()

{ int a=3,b=2,c=1; c-=++b; b*=a+c;

{ int b=5,c=12; c/=b*2; a-=c;

printf(\ a+=--c; }

printf(\ }

答案:2,5,1,2,3,-2 12.10 以下程序的输出结果是_____。 void fun()

{ static int a; a+=2; printf(\ }

main()

{ int cc;

for(cc=1; cc<=4; cc++) fun(); printf(\ }

答案:2468

第十三章 编译预处理和动态存储分配

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4