复习题八答案及详细分析

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

对c语言的深入讨论

1.不合法的main函数命令行参数表示形式是

A main(int a,char *c[])

B main(int arc,char **arv)

C main(int argc,char *argv)

D main(int argv,char *argc[])

1:C

Main()函数的参数通常是两个,第一个必须是int型,第二个必须是字符串的指针。

2.有以下程序:

#include

main(int argc,char *agrv[])

{ int i,len=0;

for(i=1;i

printf("%d\n",len);

}

经编译链接后生成的可执行文件是ex.exe 若运行后输入以下带参数的命令行

ex abcd efg h3 k44

执行后输出结果是

A14 B 12 C 8 D 6

2:D

程序的含义表明将输入的参数命令行看作字符串,将第1,3个字符串即(abcd h3)的字符个数相加,存放到len中,输出。

3.在说明语句:int *f();中,标识符f代表的是

A一个用于指向整数数据的指针变量。 B 一个用于指向一维数组的行指针

C 一个用于指向函数的指针变量

D 一个返回值为指针型的函数名

3:D

Int*f()表示返回值是指针的函数

4.有以下程序:

int add(int a,int b) { return (a+b) }

main()

{ int k,(*f)(),a=5,b=10;

f=add;

......

}

则以下函数调用语句错误的是

A k=(*f)(a,b);

B k=add(a,b);

C k=*f(a,b);

D k=f(a,b);

4 :D

A,B,C选项正确,D选项中,f是指向函数的指针不能这样调用

5.在函数调用过程中,如果函数funA调用了函数funB,函数funB 又调用了函数funA,则A称为函数的直接递归调用 B 称为函数的间接递归调用

C 称为函数的循环调用

D c语言中不允许这样的递归调用

5:B

函数的递归调用分为直接地归调用和间接递归调用两种,其中间接递归调用自己的称为间接递归调用

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(7));

}

A7 B 3 C 2 D 0

6:C

这是函数递归调用:

Fun(7)调用后等价于7-fun(5),又去调用fun(5),fun(5)又相当于5-fun(3)这时程序相当于计算7-(5-fun(3)),即7-5+fun(3), 又去调用fun(3),fun(3)又相当于3-fun(1),程序相当于计算7-5+3-fun(1),结果为2。

7.有以下程序

int fun(int n)

{ if(n==1) return 1;

else

return (n+fun(n-1));

}

main()

{int x;

scanf("%d",&x); x=fun(x); printf("%d\n",x);

}

执行程序时,给变量x输入10.程序的输出结果是

A55 B 54 C 65 D 45

7:A

这是函数递归调用:x的输入值为10,调用fun(10),相当于以下过程:

fun(10)=10+fun(9);

10+fun(9)=10+9+fun(8)

10+9+fun(8)= 10+9+8+fun(7)

10+9+8+fun(7)= 10+9+8+7+fun(6)

10+9+8+7+fun(6)= 10+9+8+7+6+fun(5)

..........

10+9+8+7+6+5+4+3+2+fun(1)= 10+9+8+7+6+5+4+3+2+1;

结果为55

8.以下叙述中正确的是

A预处理命令行必须位于源文件的开头。

B 在源文件的一行上可以有多条预处理命令

C 宏名必须用大写字母表示。

D 宏替换不占用程序的运行时间。

8:D

A项:预处理命令不一定要放在程序开头,B:一行只能有一条预处理命令。C 宏名可以小写,但一般用大写进行区别,D正骨俄

9.有以下程序运行后的输出结果是

#define f(x) (x*x)

main()

{ int i1,i2;

i1=f(8)/f(4);i2=f(4+4)/f(2+2);

printf("%d,%d\n",i1,i2);

}

A64,28 B 4,4 C 4,3 D 64,64

9:f(x)为代参数的宏,f(8)相当于8*8,f(4)相当于4*4,同样f(4+4)相当于(4+4)*(4+4),f(2+2) 相当于(2+2*2+2)所以结果是4,3.

10.有以下程序运行后的输出结果是

#include

#define F(X,Y) (X)*(Y)

main()

{ int a=3,b=4;

printf("%d\n",F(a++,b++));

}

A12 B 15 C 16 D 20

10:A

F(X,Y) 为代参数的宏,F(a++,b++)相当于(a++)*(b**),结果为12

11.程序中头文件typel.h的内容是

#define N 5

#define M1 N*3

程序如下:

#include "type.h"

#define M2 N*2

main()

{ int i;

i=M1+M2; printf("%d\n",i);

}

程序编译后运行的输出结果是

A10 B 20 C 25 D 30

11:M1+M2相当于(N*3)+(N*2),而N相当于5所以结果为25。

相关文档
最新文档