复习题八答案及详细分析

  • 格式:doc
  • 大小:51.50 KB
  • 文档页数:7

对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:CMain()函数的参数通常是两个,第一个必须是int型,第二个必须是字符串的指针。

2.有以下程序:#include<string.h>main(int argc,char *agrv[]){ int i,len=0;for(i=1;i<argc;i+=2) len+=strlen(argv[i]);printf("%d\n",len);}经编译链接后生成的可执行文件是ex.exe 若运行后输入以下带参数的命令行ex abcd efg h3 k44执行后输出结果是A14 B 12 C 8 D 62:D程序的含义表明将输入的参数命令行看作字符串,将第1,3个字符串即(abcd h3)的字符个数相加,存放到len中,输出。

3.在说明语句:int *f();中,标识符f代表的是A一个用于指向整数数据的指针变量。

B 一个用于指向一维数组的行指针C 一个用于指向函数的指针变量D 一个返回值为指针型的函数名3:DInt*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 :DA,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 06: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;elsereturn (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 457: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;结果为558.以下叙述中正确的是A预处理命令行必须位于源文件的开头。

B 在源文件的一行上可以有多条预处理命令C 宏名必须用大写字母表示。

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

8:DA项:预处理命令不一定要放在程序开头,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,649: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 <stdio.h>#define F(X,Y) (X)*(Y)main(){ int a=3,b=4;printf("%d\n",F(a++,b++));}A12 B 15 C 16 D 2010:AF(X,Y) 为代参数的宏,F(a++,b++)相当于(a++)*(b**),结果为1211.程序中头文件typel.h的内容是#define N 5#define M1 N*3程序如下:#include "type.h"#define M2 N*2main(){ int i;i=M1+M2; printf("%d\n",i);}程序编译后运行的输出结果是A10 B 20 C 25 D 3011:M1+M2相当于(N*3)+(N*2),而N相当于5所以结果为25。

12.以下叙述中正确的是A局部变量说明为static存储数,其生存期将得到延长。

B 全局变量说明为static存储类,其作用域将被扩大。

C 任何存储类的变量在未赋初值时,其值都是不确定的。

D 形参可以使用的存储类说明符与局部变量完全相同。

12:BA正确,B作用域没有发生变化。

C:不一定。

比如数组,D:不像同。

13.在C语言中,形参的缺省存储类是A autoB registerC staticD extern13:A略14.有以下程序:void fun2(char a,char b) { printf("%c%c",a,b); }char a='A',b='B';void fun1() {a='C'; b='D'; }main(){ fun1();printf("%c%c",a,b);fun2('E','F');}程序的运行结果是ACDEG B ABEF C ABCD D CDAB14:B主函数中的printf(“%c%c”,a,b);中a,b用的是全局变量,而fun(…E‟,‟F‟)传递给的是函数fun2()的局部变量。

所以答案是B。

15以下程序的输出结果是int f(){static int i=0;int s=1;s+=i; i++;return s;}main(){ int i,a=0;for(i=0;i<5;i++) a+=f();printf("%d\n",a);}A20 B 24 C 25 D 1515:C D f()中的i是static类型,所以其值会保留为上一次起算的结果。

正确答案是1516.若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是A p=2*(int*)malloc(sizeof(int));B p=(int*)malloc(2*sizeof(int));C p=(int*)malloc(2*4);D p=(int*)calloc(2,sizeof(int));16:Amalloc()函数的括号里是字节数,根据题意,选择A17.有以下程序:#include <stdio.h>main(){ char *p,*q;p=(char*)malloc(sizeof(char)*20); q=p;scanf("%s%s",p,q); printf("%s%s\n",p,q);}若从键盘输入:abc def<回车>,则输出结果是A def defB abc defC abc dD d d17:A指针p和q指向同意存储区域,因此,scanf(“%s%s”,p,q);实际是给一块内存区域进行了两次付值,值为def,因此输出为def def.18.以下叙述中错误的是A可以通过typedef增加新的类型B 可以用typedef将已存在的类型用一个新的名字来代表。

C 用typedef定义新的类型名后,原有类型名仍有效。

C 用typedef可以为各种类型起别名,但不能为变量起别名。

18:A19.若要说明一个类型名STP,使得定义语句STP s等价于char *s,以下选项中正确的是A typedef STP char *s;B typedef *char STP;C typedef stp *char;D typedef char *STP;19:C20.用C语言编写的代码程序A可立即执行 B 是一个源程序 C 经过编译可执行 D 经过编译解释才能执行20:DC语言必须经过编译解释成为机器语言,生成EXE文件,才能执行。

21.以下叙述中正确的是A C语言比其它语言高级。

B C语言可以不用编译就能被计算机识别执行C C语言已接近英语国家的自然语言和数学语言作为语言的表达形式。

D C 语言出现的最晚,具有其他语言的一切优点。

21:C22.C语言中用于结构化程序设计的三种基本结构是A顺序结构、选择结构、循环结构 B if、switch、breakC for、while、do-whileD if 、for、continue22:A23.以下叙述中错误的是A C语言源程序经编译后生成后缀为.obj的目标程序。

B C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件。

C 用C 语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中。

D C 语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令。

23:D非执行语句不一定会转换成二进制代码,例如程序的注释部分。

24.要把高级语言编写的源程序转换为目标程序,需要使用A编译程序 B 驱动程序 C 诊断程序 D 编译程序24:D25.以下叙述中正确的是A用C 程序实现的算法必须要有输入和输出操作。