复习题八答案及详细分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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。