1、二级 C 语言笔试-100 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:50,分数:50.00)1.有以下程序#define N 20fun(int a,int n,:Int m)int i,i;for(i=m; in; i-) ai+1);ai;main()int i,aN=1,2,3,4,5,6,7,8,9,10;fuu(a,2,9);for(i=0; i5; i+) printf(“%d“,ai);程序运行后的输出结果是(分数:1.00)_2.下列对于线性链表的描述中正确的是(分数:1.00)A.存储空间不一定是连续,且各元素的存储顺序是任意的B.存储空间不
2、一定是连续,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且前件元素一定存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的3.以下叙述中错误的是(分数:1.00)A.二进制文件打开后可以先读文件的末尾,而顺序文件不可以B.在程序结束时,应当用 fclose 函数关闭已打开的文件C.在利用 fread 函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据D.不可以用 FILE 定义指向二进制文件的文件指针4.有以下程序:void fun(char* a,char* B) ;a=b;(*(分数:1.00)A.+;main()char c1=A,c2=a,*p
3、1,*p2;p1=printf(“/“%s/“/n“,cf1);(分数:1.00)A.“AAAA“B.“BBB“C.“BBBCC“D.“CC“7.下列关于单日运算符+、-的叙述中正确的是(分数:1.00)A.它们的运算对象可以是任何变量和常量B.它们的运算对象可以是 char 型变量和 int 型变量,但不能是 float 型变量C.它们的运算对象可以是 int 型变量,但不能是 double 型变量和 float 型变量D.它们的运算对象可以足 char 型变量、int 型变量和 float 型变量8.以下选项中合法的实型常数是(分数:1.00)A.5E2.0B.E-3C2E0D.1.3E9
4、.设有定义:int k=1,m=2;float f=7;,则以下选项中错误的表达式是(分数:1.00)A.k=k=kB.-k+C.k%int(f)D.k=f=m10.设有定义:inca,*pa;p+)if(_)s=p;return(*S);main()int x5=12,21,13,6,18);printf(“%d/n“,findmax(x5);在下划线处应填入的是(分数:1.00)A.psB.*p*sC.apasD.p-ap-s12.算法的空间复杂度是指(分数:1.00)A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.算法执行过程中所需要的存储空间13.有以下程序:V
5、oid f(int a,iht i,int j)int t;if(ij)t=ai; ai=aj; aj=t;f(a,i+1,i-1);main()int i,aa5=1,2,3,4,5;f(aa,0,4);for(i=0;i5;i+) printf(“%d“ ,aai);printf(“/n“);执行后输出结果是(分数:1.00)A.5,4,3,2,1,B.5,2,3,4,1,C.1,2,3,4,5,D.1,5,4,3,2,14.以下 4 个选项中,不能看作一条语句的是(分数:1.00)A.;B.a=0,b=0,c=0;C.if(a0);D.if(b=0)m=1;n=2;15.若有以下说明和语
6、句int c4 5,(*p)5;p=c;能够正确引用 c 数组元素的是(分数:1.00)A.p+1B.*(p+3)C.*(p+1)+3D.*(P0+2)16.源程序中应包含一些内部文档,以帮助阅读和理解程序,源程序的内部文档通常包括选择合适的标识符、注释和(分数:1.00)A.程序的视觉组织B.尽量不用或少用 GOTO 语句C.检查输入数据的有效性D.设计良好的输出报表17.有以下程序main()int a3=(1,2,3,4,5,0,(*p(分数:1.00)A.3,i;18.若要打开 A 盘上 user 了目录下名为 abc.txt 的文本文件进行读、写操作,下面符合此要求的函数调用是(分数
7、:1.00)A.fopen(“A:/user/abc.txt“,“,“r“)B.fopen(“A:/user/abc.txt“,“r+“)C.fopen(“A:/user/abc.txt“,“rb“)D.fopen(“A:/user/abc.txt“,“w“)19.有以下程序main()int a32=0,(*ptr)2,i,i;for(i=0; i2; i+)ptr=a+i; scanf(“%d“,ptr); ptr+; for(i=0;i3;i+)foil(j=0;j2;j+) printf(“%2d“,aij);printf(“/n“);若运行时输入:1 2 3回车,则输出结果为(分数:
8、1.00)_20.算法具有五个特性,以下选项中不属于算法特性的是(分数:1.00)A.有穷性B.简洁性C.可行性D.确定性21.有以下程序point(char *p) p+=3; main()char b4=ab,c,d, *p=b;point(p);printf(“%c/n“,*p);程序运行后的输出结果是(分数:1.00)A.aB.bC.cD.d22.有以下程序vold soru(int a, int n)int i,i,t;for(i=0;in-1;i+)for(j=i+1;jn;j+)if(aiaj)t=ai;ai=ai;aj=t;main()int aa10=1,2,3,4,5,6,
9、7,8,9,10),i;sore(aa+2, 5);for(i=0;i10;i+) printf(“%d,“,aai);printf(“/n“);程序运行后的输出结果是(分数:1.00)A.1,2,3,4,5,6,7,8,9,10,B.1,2,7,6,3,4,5,8,9,10,C.1,2,7,6,5,4,3,8,9,10,D.1,2,9,8,7,6,5,4,3,10,23.以下选项中非法的表达式是(分数:1.00)A.0=x100B.i=i=0C.(char)(65+3)D.x+1=x+124.下面不属于软件设计原则的是(分数:1.00)A.抽象B.模块化C.自底向上D.信息隐藏25.有以下程
10、序:main()int a33,*p,i;p=fun(p);int fun(int *p)ints; p=B.B ) main()int *p;fun(int fun(int *p)int s; *p=)C.#includemain()int *p;fun(int fun(int *p)*p=(int*)malloc(2);D.#includemain()iht *p;fun(p);iht fun(iht *p)p=(int*)malloc(sizeof(int);30.以下符合 C 语言语法的实犁常量是(分数:1.00)A.1.2E0.5B.3.14159EC.5E-3D.E1531.以下叙
11、述中正确的是(分数:1.00)_32.以下叙述中错误的是(分数:1.00)A.C 语句必须以分号结束B.复合语句在语法上被看作一条语句C.空语句出现在任何位置都不会影响程序运行D.赋值表达式末尾加分号就构成赋值语句33.数据的存储结构是指(分数:1.00)A.数据所占的存储空间量B.数据的逻辑结构在汁算机中的表示C.数据在计算机中的顺序存储方式D.存储在外存中的数据34.有以下程序段:main)int a=5,*b,*C;c=d=fla,B) ; d=f1(d,C) :e=f2a,B) ; e=f2(e.C) ;f=a+b+c-d-e;printf(“%d,%d,%d/n“,d,f,e);执行
12、后输出的结果是(分数:1.00)A.3,4,5B.13,4C.5,4,3D.3,5,439.若有定义:inl a=8,b=5,c;,执行语句 c=a/b+0.4;后,c 的值为(分数:1.00)A.1.4B.1C.2.0D.240.有以下程序段:int a10=1,2,3,4,5,6,7,8,9,10,*p=main()char c1=A,c2=a,*p1,*p2;p1=printf(“/“%s/“/n“,cf1);(分数:1.00)A.“AAAA“B.“BBB“ C.“BBBCC“D.“CC“解析:解析 ;维字符数组可以看成由若干个一维字符数组组成,每行是一个一维字符数组。本题首先定义了一个
13、数组 ch35并给它们按行赋初值,即相当于给 ch0赋值“AAAA”,给 ch1赋值“BBB”,给 ch2赋值“BBB”,最后输出转义字符“/”、ch1和转义字符“/”,因此输出为“BBB”所以,4 个选项中 B 为所选。7.下列关于单日运算符+、-的叙述中正确的是(分数:1.00)A.它们的运算对象可以是任何变量和常量B.它们的运算对象可以是 char 型变量和 int 型变量,但不能是 float 型变量C.它们的运算对象可以是 int 型变量,但不能是 double 型变量和 float 型变量D.它们的运算对象可以足 char 型变量、int 型变量和 float 型变量 解析:解析
14、本题考核的知识点是 c 语言中的+和-运算符,这两种运算符是单目运算符,其运算对象可以是整型、字符型、float 型和 double 型等基本数据类型。所以,D 选项为所选。8.以下选项中合法的实型常数是(分数:1.00)A.5E2.0B.E-3C2E0 D.1.3E解析:解析 在 C 语言中,实数有两种表示形式:十进制数形式与指数形式。一般形式的实数:小数形式的实数由整数部分、小数点和小数部分组成(必须要有小数点),指数形式的小数;指数形式的实数由尾数部分、 e(E)和指数部分组成(字母 e 或 E 的前后必须要有数字,且其后面的指数必须为整数)。选项 A 中,5E2.0 中 E 后面的 2
15、.0 不是整数;选项 B 中,E 前面没有数字:选项 D 中,E 后面没有数字。最终可以判断选项 C 正确。9.设有定义:int k=1,m=2;float f=7;,则以下选项中错误的表达式是(分数:1.00)A.k=k=kB.-k+C.k%int(f) D.k=f=m解析:解析 本题考查的是强制类型转换运算符。强制类型转换运算符的格式是:(类型名)变量名所以将浮点型变量 f 转换为整型应写作(int)f,故选项 C 是错误的。10.设有定义:inca,*pa;p+)if(_)s=p;return(*S);main()int x5=12,21,13,6,18);printf(“%d/n“,f
16、indmax(x5);在下划线处应填入的是(分数:1.00)A.psB.*p*s C.apasD.p-ap-s解析:解析 在 main()函数中定义了一个具有 5 个元素的 x 数组并赋初值,然后调用 findmax()函数求数组中元素的最大值。调用时把数组元素 x 的首地址,传给了形参指针变量 a,把 5 传给形参 n。在函数findmax()中定义了两种指针变量 p 和 s,其中 s 用来记录最大元素的地址,p 作为循环控制变量,表示每个元素的地址求最大值的算法是先将第一个元素(用 s 记下它的地址)做为最大值,然后用最大值(*s)与后面的每个元素比较(*p),若后面的元素大,则用 s 记
17、下它的地址,所以下划线应填“*s*s”。所以,4个选项中 B 为所选。12.算法的空间复杂度是指(分数:1.00)A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.算法执行过程中所需要的存储空间 解析:解析 算法的空间复杂度一般是指这个算法执行时所需要的内存空间,其中包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间,其中额外空间还包括算法程序执行过程的工作单元以及某种数据结构所需要的附加存储空间。13.有以下程序:Void f(int a,iht i,int j)int t;if(ij)t=ai; ai=aj; aj=t;f(a,i+
18、1,i-1);main()int i,aa5=1,2,3,4,5;f(aa,0,4);for(i=0;i5;i+) printf(“%d“ ,aai);printf(“/n“);执行后输出结果是(分数:1.00)A.5,4,3,2,1, B.5,2,3,4,1,C.1,2,3,4,5,D.1,5,4,3,2,解析:解析 在 C 语言中所谓函数的递归是在指在调用一个函数的过程中,又出现了直接或间接地调用该函数本身,直接调用该函数本身的称为函数递归,而间接调用该函数称为函数的间接递归调用由程序可以看出函数 f(a,i,j)为一递归函数,其功能是 i14.以下 4 个选项中,不能看作一条语句的是(分
19、数:1.00)A.;B.a=0,b=0,c=0;C.if(a0);D.if(b=0)m=1;n=2; 解析:解析 C 语言是一种表达式语言,所有的操作运算都通过表达式来实现,由表达式组成的语句称为表达式语句,它有一个表达式后接一个分号组成。本题中,选项 D 中 if(b=0) m=1;n=2;是两个表达式语句所以,4 个选项中选项 D 符合题意。15.若有以下说明和语句int c4 5,(*p)5;p=c;能够正确引用 c 数组元素的是(分数:1.00)A.p+1B.*(p+3)C.*(p+1)+3D.*(P0+2) 解析:解析 本题中定义了一个二维数组 c 和一个指针数组 p 并初始化让它指
20、向 c,显然此时 p 中的各元素为地址,选项 A 中 p+1,此时其中的 1 代表的长度是整个;维数组 c 的长度,故 p+1 将让 p 指向 c 数组后面的元素,故不能引用 c 数组中的成员,故选项 A 错误; 同理选项 B 和选项 C 都不正确,选项 D 中p0指的是指针数组中的第一个元素的地址即 c 的首地址,此时的 1 的长度代表的是数组 c 中一行的长度,故 p0+2 代表的是第三行的首地址,而*(p0+2)将代表第三行的第一个元素的地址,所以,4 个选项中选项 D 符合题意。16.源程序中应包含一些内部文档,以帮助阅读和理解程序,源程序的内部文档通常包括选择合适的标识符、注释和(分
21、数:1.00)A.程序的视觉组织 B.尽量不用或少用 GOTO 语句C.检查输入数据的有效性D.设计良好的输出报表解析:解析 源程序文档化主要包括三个方面的内容:标识符的命名、程序中添加注释以及程序的视觉组织。17.有以下程序main()int a3=(1,2,3,4,5,0,(*p(分数:1.00)A.3,i;解析:解析 本题定义了一个指向由 3 个元素组成的一维数组的指针变量 pa,通过赋值让它指向具有 2行 3 列的数组 a,此时用指针变量 pa,表示数组元素 aij的形式是 paij。for 循环执行了 3 次;第一次 i 值为 0,执行 pa10=pa10-1 执行后 a10的值变为
22、 3;第二次 i 值为 1,执行 pa11=pa11-1,执行后 a11的值为 4;第三次 i 值为 2,执行 pa12=1,执行后 a12的值变为1。故 printf 语句输入的值为 2+4+1=7。所以,A 选项为所选。18.若要打开 A 盘上 user 了目录下名为 abc.txt 的文本文件进行读、写操作,下面符合此要求的函数调用是(分数:1.00)A.fopen(“A:/user/abc.txt“,“,“r“)B.fopen(“A:/user/abc.txt“,“r+“) C.fopen(“A:/user/abc.txt“,“rb“)D.fopen(“A:/user/abc.txt“
23、,“w“)解析:解析 由于“/”是转义字符,所以在文件名中的“”用“/”来表示,因此选项 A 和选项 C 不正确。要打开文本文件进行读写,应使用读写模式“r+”,因此选项 D 不正确。所以, 4 个选项中 B 为所选。19.有以下程序main()int a32=0,(*ptr)2,i,i;for(i=0; i2; i+)ptr=a+i; scanf(“%d“,ptr); ptr+; for(i=0;i3;i+)foil(j=0;j2;j+) printf(“%2d“,aij);printf(“/n“);若运行时输入:1 2 3回车,则输出结果为(分数:1.00)_解析:解析 本题主要考查的是
24、scanf()函数的输入原理。scanf()函数执行时,先从键盘缓冲区中读取用户输入的数据,若缓冲区为空或输入数据少于所需数据,则暂停程序等待用户的输入,直到用户敲入回车,scanf()将继续到键盘缓冲区中读取输入,如此反复直到满足 scanf()函数所需数据,程序才继续执行下面的语句,而 scanf()没有取完的数据仍然会保存在键盘缓冲区内,到程序结束时还没取完就会被释放掉,不会影响其他的程序运行。另外,scanf()函数将取到的数据匹配给第 2 个及其后面的指针参数所指的内存地址中去,而不检查该参数的类型是否匹配。所以在本题中考生不要被指针 ptr 的定义所迷惑,它所做的只不过是临时保存一
25、下 a+i 的值,然后送到 scanf()函数中去。题目首先定义了一个二维数组a32并用020.算法具有五个特性,以下选项中不属于算法特性的是(分数:1.00)A.有穷性B.简洁性 C.可行性D.确定性解析:解析 一个算法应当具有以下 5 个特性:有穷性;确定性;可行性;有零个或多个输入;由一个或多个输出简洁性不属于这 5 个特性,所以本题应该选择 B。21.有以下程序point(char *p) p+=3; main()char b4=ab,c,d, *p=b;point(p);printf(“%c/n“,*p);程序运行后的输出结果是(分数:1.00)A.a B.bC.cD.d解析:解析
26、本题是一个陷阱,看似考查函数的传址调用,其实考的是传值调用。在 C 语言中,不管你给函数传递的参数是什么,指针也好数组名也罢,系统都是严格的将实参的值复制了一份作为函数的形参,即传值调用。在函数中,对形参中的值怎么改变都不会影响到实参。那传址调用又是怎么实现的呢?那是因为在函数中改变的不是形参指针变量中的值,而是形参指针变量所指内存中的值。其实骨子里还是将实参指针的值复制?一份给形参指针变量,它们是两个独立的互不相干的变量,只不过指向的内存地址值一模一样罢了。本题的函数只是改变了形参指针变量 p 的值,这对程序没有任何影响,主函数中 p 一开始就是指向 b0,最后输出时还是 b0的值a。所以应
27、该选择 A。22.有以下程序vold soru(int a, int n)int i,i,t;for(i=0;in-1;i+)for(j=i+1;jn;j+)if(aiaj)t=ai;ai=ai;aj=t;main()int aa10=1,2,3,4,5,6,7,8,9,10),i;sore(aa+2, 5);for(i=0;i10;i+) printf(“%d,“,aai);printf(“/n“);程序运行后的输出结果是(分数:1.00)A.1,2,3,4,5,6,7,8,9,10,B.1,2,7,6,3,4,5,8,9,10,C.1,2,7,6,5,4,3,8,9,10, D.1,2,9
28、,8,7,6,5,4,3,10,解析:解析 先看 sort()函数,它没有返回值,有两个参数,一个 int 型数组和一个 int 型变量。在函数中是一个;重循环,外循环变量 i 从 0 递增到 n-2,内循环变量 j 从 i+l 递增到 n-1。内循环体是一条if 语句“如果 ai23.以下选项中非法的表达式是(分数:1.00)A.0=x100B.i=i=0C.(char)(65+3)D.x+1=x+1 解析:解析 本题考核的知识点是表达式的赋值。选项 D 中将表达式的值赋给表达式,在 c 语言中是不允许给表达式赋值的,故选项 D 是非法的表达式,所以,4 个选项中选项 D 符合题意。24.下
29、面不属于软件设计原则的是(分数:1.00)A.抽象B.模块化C.自底向上 D.信息隐藏解析:解析 软件设计的原则包括:抽象、模块化,信息隐蔽和模块独立性。所以自底向上不是软件设计原则。答案为 C。25.有以下程序:main()int a33,*p,i;p=fun(p);int fun(int *p)ints; p=B.B ) main()int *p;fun(int fun(int *p)int s; *p=)C.#includemain()int *p;fun(int fun(int *p)*p=(int*)malloc(2); D.#includemain()iht *p;fun(p);i
30、ht fun(iht *p)p=(int*)malloc(sizeof(int);解析:解析 本题考核的知识点是指针变量作为函数的参数以及变量的作用域。在选项 A 中,main()函数中定义了一个指针变量 p,调用 fun()函数时把 p 传给形参 p,在函数中让 p 指向局部变量 s,由于函数调用返回后,局部变量 s 将被释放,因此无法实现让实参 p 指向一个整型单元,故选项 A 错误选项 B中实现的也是让实参 p,指向一个在函数 fun()定义的局部变量 s,因此也是错误的;选项 C 在函数 fun()中分配了两个字节的内存单元并把首地址赋值给形参 p 指向的变量,即 main()函数的指
31、针变量 p 中,由于整型变量占两个字节,因此,选项 C 是正确的;选项 D 在主函数中定义了一个指针地址变量 p,并把指针变量的值传给形参变量 p,在 fun()函数分配了一个整型单元并把首地址赋值给行参指针变量 p,由于C 语言中变量作为参数是传值的,所以并没有改变对应实参指针变量的值,因此选项 D 也是错误的所以,C 选项为所选。30.以下符合 C 语言语法的实犁常量是(分数:1.00)A.1.2E0.5B.3.14159EC.5E-3 D.E15解析:解析 实型常量只能用十进制形式表示,不能用八进制或十六进制形式表示,实型常量可以用小数形式或指数形式表示,在 C 语言中,可以用指数形式将
32、实型常量表示为数值和指数两部分,数值部分不能为空,指数部分只能为整数表示。选项 A 中 1.2 和 0.5 都不是整数,故选项 A 不正确;选项 B 中3.14159 也不是整数,故选项 B 不正确;选项 D 中数值部分不能为空,故选项 D 也不正确;所以,4 个选项中选项 C 符合题意。31.以下叙述中正确的是(分数:1.00)_解析:解析 “/*”与“*/”之间的信息称为注释信息,在 C 语言中,允许在任何能够插入空格符的位置插入注释,但 C 语言的注释不能进行嵌套,故选项 A 正确;在 C 语言中,函数体是从花括号“”开始,到花括号“”结束但没有规定花括号“”和“32.以下叙述中错误的是
33、(分数:1.00)A.C 语句必须以分号结束B.复合语句在语法上被看作一条语句C.空语句出现在任何位置都不会影响程序运行 D.赋值表达式末尾加分号就构成赋值语句解析:解析 C 语句必须以分号结束,选项 A 是正确的。复合语句在语法上被看作一条语句,选项 B 也是正确的。空语句也算是一条语句,因此如果空语句出现在条件或者循环语句中,一样会被当作条件子句或者循环体来看待,所以选项 c 是错误的。赋值表达式末尾加分号就构成赋值语句,选项 D 正确。故本题应该选择 C。33.数据的存储结构是指(分数:1.00)A.数据所占的存储空间量B.数据的逻辑结构在汁算机中的表示 C.数据在计算机中的顺序存储方式
34、D.存储在外存中的数据解析:解析 数据的存储结构是数据元素在计算机存储器内的表示。数据的存储结构是逻辑结构用计算机语言的实现,即建立数据的机内表示。34.有以下程序段:main)int a=5,*b,*C;c=d=fla,B) ; d=f1(d,C) :e=f2a,B) ; e=f2(e.C) ;f=a+b+c-d-e;printf(“%d,%d,%d/n“,d,f,e);执行后输出的结果是(分数:1.00)A.3,4,5B.13,4C.5,4,3 D.3,5,4解析:解析 本题考核的知识点是函数的定义与函数调用。函数 f1()的作用是返回形参 x 和 y 的较大值,函数 f2()的作用是返回
35、形参 x 和 y 的较小值,在 main()函数中通过调用两次 f1()函数,求得 a、b、c 的最大值并存放在变量 d 中,通过调用两次 f2()函数,求得 a、b、c 的最小值并存放到变量 e 中由程序可知 d 值为 5,f 的值为 4,e 的值为 3,因此最后输出的 d,f、e 的值为 5、4,3。所以, C 选项为所选。39.若有定义:inl a=8,b=5,c;,执行语句 c=a/b+0.4;后,c 的值为(分数:1.00)A.1.4B.1 C.2.0D.2解析:解析 在表达式中根据运算的结合性和运算符的优先级,首先计算的是 a/b (8/5=1),再将 1+0.4赋值给 C,由于
36、C 为整型变量所以要将 1.4 转换为整型,即舍弃小数位(c 的值变为 1)。所以,4 个选项中 B 符合题意。40.有以下程序段:int a10=1,2,3,4,5,6,7,8,9,10,*p=&a3,b;b=p5;b 中的值是(分数:1.00)A.5B.6C.8D.9 解析:解析 C 语言中规定:一个数组名代表它的起始地址本题中,定义了一个长度为 10 的数组 a 并赋初值,数组名 a 就是数组的起始地址,由于数组下标是从。开始,因此 a0地址也是 a 的值,a1的地址可以用 a+1 表示,也就是说 a+1 指向数组 a 中下标为 1 的元素,同样 a+1 是 ai的地址,*p=&a3表明
37、指针变量 p 指向元素 a3,即 p 指向数组 a 的第 4 个元素 4,p5的值应为数组 a 中的第 9 个元素的值即 a8的值,即 p5=9,所以 b=9。所以,4 个选项中选项 D 符合题意。41.在数据库管理系统提供的数据语言中,负责数据的完整性、安全性的定义与检查以及并发控制、故障恢复等功能的是(分数:1.00)A.数据定义语言B.数据转换语言C.数据操纵语言D.数据控制语言 解析:解析 在数据库管理系统提供的数据语言中,数据控制语言负责数据的完整性、安全性的定义与检查以及并发控制、故障恢复等功能。42.有以下程序main()int i=1, j=2,k=3;if(i+ = l &
38、(+j=3| k+=3)printf(“%d %d %d/n“,i,j,k);程序运行后的输出结果是(分数:1.00)A.1 2 3B.2 3 4C.2 2 3D.2 3 3 解析:解析 在计算由&或组成的逻辑表达式时一定要注意“短路”现象:&是逻辑与,要两边的运算分量同时为真的时候表达式的值才为真,否则为假,若&左边的运算分量为假的时候,无论&右边的运算分量如何,整个&表达式的结果都为假,因此 C 语言会忽略&右边的表达式;(逻辑或)也有同样现象,当左边为真时将忽略右边的表达式。本题的关键点在于逻辑表达式 i+=1&(+j)=3k+=3 的计算。因为的优先级最低, 所以先计算左边的于表达式
39、i+=1&(+j)=3, 而该表达式中&的优先级最低,所以先计算 i+=1,=的优先级低于+,所以最先计算的表达式为 i+,该表达式的值为 i 自增之前的值 1,因此子表达式 i+=1 等价于 1=1 结果为“真”,此时的&运算没有被“短路”继续运算右边的(+j)=3 子表达式,因为表达式(+j)的值为 6 自增之后的值 3,所以子表达式(+j)=3 等价于 3=3 结果还是“真”。 “真”&“真”的结果为“真”,即运算符的左边运算分量为“真”!注意,此时满足了“短路”的条件,C 语言将忽略|右边的表达式,而将整个 i+=1&(+j)=3k+=3 表达式的结果判定为“真”,子表达式 k+=3
40、没有被计算,即变量 k 没有自增!而 i 和 j 在前面均有得到自增 1 的机会,所以,4 个选项中选项 D 符合题意。43.有以下程序main()char s=“ABCD“, *p;for( p=s+1;ps+4;p+) printf(“%s/n“,p);程序运行后的输出结果是(分数:1.00)A.ABCD BCDCDB.ABCDC.BCDD.BCDCDD 解析:解析 本题中首先定义一个字符数组 s,并将字符串“ABCD”存到数组 s 中,定义了一个字符指针变量 p,在接下来 for 循环中,循环体共执行了三次,第一次 p 指向 31,所以此时输出的 p 所指的字符串的值为 BCD,第二次循
41、环 p 指向 s2,所以此时输出的 p 所指的字符串的值为 CD,第三次循环 p 指向 s3,因此此时输出的 p 所指的字符串的值为 D。所以,4 个选项中选项 D 符合题意。44.以下 4 组用户定义标识符中,全部合法的一组是(分数:1.00)A.main enclude sin B.If-maxturboC.txtREAL3COMD.int12_001解析:解析 标识符是以字母或下划线开头, 由字母、数字或下划线组成的字符序列 例如,-max 含非法字符-),并且用户标识符不能与 C 语言中的 32 个关键字同名(例如,int 是关键字,不是合法的用户标识符)。选项 B 中-max 不是字
42、母、数字或下划线组成的字符序列,故选项 B 不正确;选项 C 中 3COM 不是由字母或下划线开头,故选项 C 不正确;选项 D 中 int 为 C 语言中的关键字,故选项 D 不正确;选项 A中全部为合法的标识符,所以,4 个选项中选项 A 符合题意。45.以下能正确定义一维数组的选项是(分数:1.00)_解析:解析 本题考查的是一维数组的定义及初始化。定义并初始化一维数组的一般形式如下:类型名 数组名常量表达式=初始化列表;当使用初始化列表初始化数组时,需要注意以下几点:初始化列表项的个数必须小于等于常量表达式的值,因此选项 A 是错误的;常量表达式可以省略,但不能省略其外面的中括号,因此
43、选项 C 是错误的;特殊的,当类型名为 char 时,初始化列表46.以下选项中,与 k=n+完全等价的表达式是(分数:1.00)A.k=n,n=n+1 B.n=n+l,k=nC.k=+nD.k+=n+1解析:解析 在本题中 k=n+,为后缀运算。根据其运算规则,首先 n 先加一,但 n+表达式的值依然 n原来的值,即 k 的值没有改变。选项 A 中先给 k 赋值为 n,然后 n 再加 1,k 值没有变化,所以这个表达式和本题中表达式等价;选项 B 中先 n 加 1,然后将 n 加 1 后的值赋给 k,k 变化了比原来的值大 1,所以这个表达式和本题中表达式不等价;选项 C 中先计算表达式左边
44、的表达式+n 的值,执行+n 后,左边的表达式的值为 n 的值加 1,然后将 n+1 后的值赋给 k,所以这个表达式和本题中的表达式不等价; 选项 D中表达式展开为 k=k/(n+1),k 的值发生了变化,所以这个表达式和本题中的表达式不等价所以 4 个选项中 A 正确。47.不合法的 main 函数命令行参数表示形式是(分数:1.00)A.main(inta,char *c)B.mmn(int arc,char *arv)C.main(int argc,char *argv) D.majn(int argv,char *atgc)解析:解析 main()函数可以带有参数,并且参数只能有两个,
45、第一个参数类型为整型,用来记下命令行的参数个数,第二个参数为一个字符型指针数组,或字符型二级指针变量(指向一个数组,数组元素又是一个一级字符指针),其各个元素用来记下从命令行各参数字符串的首地址故本题只有 C 选项不符合要求。所以,4 个选项中 C 为所选。48.若有语句:char*line5,以下叙述中正确的是(分数:1.00)A.定义 line 是一个数组,每个数组元素是一个基类型为 char 的指针变量 B.定义 line 是一个指针变量,该变量可以指向一个长度为 5 的字符型数组C.定义 line 是一个指针数组,语句中的*号称为间址运算符D.定义 line 是一个指向字符型函数的指针
46、解析:解析 理解复杂定义要掌握两点:一、右结合原则本题中的定义 char*line5;等价于char*(line5);二、自外向内分解成 typedef 语句。char*(line5);等价于 typedef char*A;A line5;其中 A 被 typedef 定义成字符指针的别名,然后 line 被定义成 A 的一维数组,即字符指针的一维数组。再来看看行指针的定义 char(*line)5;它应该被分解成 typedef char B5;B*line;其中 B被定义成包含 5 个元素的一维字符数组,然后 line 被定义成指向 B 的指针,即指向包含 5 个元素的一维字符数组的指针。所以两者切不可混淆了,后者的括号不能省略。故本题应该选择 A。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1