资源描述
二级计算机笔试选择复习题
1.下列有关数据库的描述,正确的是______。
A、数据库是一个DBF文件
B、数据库是一个关系
C、数据库是一个结构化的数据集合
D、数据库是一组文件
数据库(Database,简称DB)是数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享。数据库中的数据具有"集成"、"共享"之特点。
本题答案为C。
2.下列关于栈的叙述中正确的是______。
A、在栈中只能插入数据
B、在栈中只能删除数据
C、栈是先进先出的线性表
D、栈是先进后出的线性表
栈是限定在一端进行插入与删除的线性表。
栈是按照"先进后出"的或后进先出的原则组织数据的,因此,栈也被称为"先进后出"表或"后进先出"表。
本题答案是D。
3.在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是______。
A、概要设计
B、详细设计
C、可行性分析
D、需求分析
通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。
软件生命周期的主要活动阶段为:
(1)可行性研究和计划制定。确定待开发软件系统的开发目标和总的要求,给出它的功能、性能、可靠性以及接口等方面的可能方案,制定完成开发任务的实施计划。
(2)需求分析。对待开发软件提出的需求进行分析并给出详细定义,即准确地确定软件系统的功能。编写软件规格说明书及初步的用户手册,提交评审。
(3)软件设计。系统设计人员和程序设计人员应该在反复理解软件需求的基础上,给出软件的结构、模块的划分、功能的分配以及处理流程。
(4)软件实现。把软件设计转换成计算机可以接受的程序代码。即完成源程序的编码,编写用户手册、操作手册等面向用户的文档,编写单元测试计划。
(5)软件测试。在设计测试用例的基础上,检验软件的各个组成部分。编写测试分析报告。
(6)运行和维护。将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必要而且可能的扩充和删改。
本题答案是D。
4. 在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是______。
A、可行性分析
B、需求分析
C、详细设计
D、程序编码
软件开发阶段包括需求分析、总体设计、详细设计、编码和测试五个阶段。其中需求分析阶段常用的工具是数据流图和数据字典。
本题答案为B。
5.以下数据结构中不属于线性数据结构的是______。
A、队列
B、线性表
C、二叉树
D、栈
线性表、栈和队列等数据结构所表达和处理的数据以线性结构为组织形式。栈是一种特殊的线性表,这种线性表只能在固定的一端进行插入和删除操作,允许插入和删除的一端称为栈顶,另一端称为栈底。一个新元素只能从栈顶一端进入,删除时,只能删除栈顶的元素,即刚刚被插入的元素。所以栈又称后进先出表(Last In First Out);队列可看作是插入在一端进行,删除在另一端进行的线性表,允许插入的一端称为队尾,允许删除的一端称为队头。在队列中,只能删除队头元素,队列的最后一个元素一定是最新入队的元素。因此队列又称先进先出表(First In First Out)。
本题答案为C。
6.结构化程序设计主要强调的是______。
A、程序的规模
B、程序的易读性
C、程序的执行效率
D、程序的可移植性
结构化程序设计主要强调的是结构化程序清晰易读,可理解性好,程序员能够进行逐步求精、程序证明和测试,以保证程序的正确性。
本题答案为B。
7.下列说法中,不属于数据模型所描述的内容的是______。
A、数据结构
B、数据操作
C、数据查询
D、数据约束
数据模型所描述的内容有3个部分,它们是数据结构、数据操作和数据约束。其中,数据模型中的数据结构主要描述数据的类型、内容、性质,以及数据库的联系等;数据操作主要是描述在相应数据结构上的操作类型与操作方式。
本题答案为C。
8.对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为______。
A、N+1
B、N
C、(N+1)/2
D、N/2
在进行顺序查找过程中,如果线性表中被查的元素是线性表中的最后一个,或者被查元素根本不在线性表中,则为了查找这个元素需要与线性表中所有元素进行比较,这是顺序查找最坏的情况。
本题答案为B。
9.下面不属于软件设计原则的是______。
A、抽象
B、模块化
C、自底向上
D、信息隐蔽
在软件设计过程中,必须遵循软件工程的基本原则:这些原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可靠性。
本题答案为C。
10.视图设计一般有3种设计次序,下列不属于视图设计的是______。
A、自顶向下
B、由外向内
C、由内向外
D、自底向上
视图设计一般有3种设计次序,它们分别是自顶向下、自底向上和由内向外,它们又为视图设计提供了具体的操作方法,设计者可根据实际情况灵活掌握,可以单独使用也可混合使用。
本题答案为B。
11.有以下程序
void fun(char *a, char *b)
{ a=b; (*a)++; }
main()
{ char c1='A',c2='a',*p1,*p2;
p1=&c1; p2=&c2; fun(p1,p2);
printf("%c%c\n",c1,c2);
}
程序运行后的输出结果是______。
A、Ab
B、aa
C、Aa
D、Bb
本题的考查点是函数。
fun函数用了两个指向字符型数据的指针作为形参。该功能是把b的地址赋给a,然后a存储单元里的值再加1。
(*a)++表示的是a所指向的元素值加1,注意:是元素值加1,而不是指针值。
main函数中,p1里存放的是c1的地址,p2里存放的是c2的地址,fun(p1,p2)后,p2的地址赋给了p1,此时p1和p2都指向了c2,即a,(*a)++,a的值加了1,变为了b。所以此时c2的值为b,而c1的值没变,仍为A。注意,这里变的是p1的地址和c2的值。
故本题答案为A。
12.若程序中已包含头文件stdio.h,以下选项中,正确运用指针变量的程序段是______。
A、int *i=NULL;
scanf("%d",i);
B、float *f=NULL;
*f=10.5;
C、char t='m',*c=&t;
*c=&t;
D、long *L;
L='\0';
本题的考查点是指针变量的运用。
选项A、B指针定义错误,都将指针指向了NULL,都为空值。其中空指针是由对指针变量赋予0值而得到的。例如: #define NULL 0 int *p=NULL; 对指针变量赋0值和不赋值的时候意义是不同的:指针变量未赋值时,它是指向任意不确定的存储单元的,所以不能使用,否则将造成意外错误;而指针变量赋0值后,则可以使用,只是它不指向具体的变量而已。而在选项C中最后一个*c=&t;错误,&t是地址,*c是值。选项D是让指针L指向字符串的末尾,即字符串结束符。
故本题答案为D。
13.以下不能正确定义二维数组的选项是______。
A、int a[2][2]={{1},{2}};
B、int a[][2]={1,2,3,4};
C、int a[2][2]={{1},2,3}
D、int a[2][]={{1,2},{3,4}}
本题的考查点是二维数组的定义和初始化。
选项A定义的数组中各元素实际上是这样的:
1,0
2,0
选项B定义的数组中各元素实际上是这样的:
1,2
3,4
选项C定义的数组中各元素实际上是这样的:
1,0
2,3
选项D错在:C中在对数组进行初始化时,如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。
故本题答案为D。
14.以下选项中可作为C语言合法整数的是______。
A、10110B
B、0386
C、0Xffa
D、x2a2
本题的考查点是C语言中的整型常数。
整型常数可以用十进制、八进制或十六进制表示,并分为有符号数、无符号数和长整数。由此可知选项A错;
选项B,用0386表示八进制错误,因为八进制数为0-7八个数字,含有8是不对的;
选项D,数字前加“0x”表示十六进制数,所以D也不对。
故本题答案为C。
15.以下能正确定义一维数组的选项是______。
A、int num[]
B、#define N 100
int num[N]
C、int num[0..100]
D、int N=100;
int num[N]
本题的考查点是一维数组的定义。
数组的常量表达式中可以包括整型常量和符号常量,不能包括变量。也就是说,C不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值,所以选项A不正确。而选项B事先定义一个字符常量N,所以可以在数组中作常量表达式,选项B正确。而选项C中不能用区间表示数组大小;在D中N虽然被赋为100,但N仍然为变量,所以不对。
故本题答案为B。
16.以下程序中函数scmp的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址。
#include <stdio.h>
#include <string.h>
char *scmp(char*s1,char*s2)
{ if (strcmp(s1,s2)<0) return(s1);
else return(s2);
}
main()
{ int i; char string[20],str[3][20];
for(i=0;i<3;i++) gets(str[i]);
strcpy(string,scmp(str[0],str[1]));/*库函数strcpy对字符串进行复制*/
strcpy(string,scmp(string,str[2]));
printf("%s\n",string);
}
若运行时依次输入:abcd、abba和abc三个字符串,则输出结果为______。
A、abcd
B、abba
C、abc
D、baca
本题的考查点是返回指针值的函数。
一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据,即地址。在main函数中,分别定义了一个一维和二维数组,通过循环,gets(str[i])是从终端输入一个字符串到字符数组,并且得到一个函数值,该函数值是字符数组的起始地址。
strcmp(字符串1,字符串2)函数的作用是比较字符串1和字符串2。比较结果由函数值带回。如果字符串1=字符串2,函数值为0;如果字符串1>字符串2,函数值为一正整数;如果字符串1<字符串2,函数值为一负整数。
所以scmp函数的作用是比较s1和s2的大小,对函数的返回值进行判断,如果字符串1<字符串2,则返回字符串1的值,反之返回字符串2的值。所以main函数里scmp(str[0],str[1])的返回值应该是abba,strcpy(string,scmp(str[0],str[1]))再把这个返回值复制到string里,所以这时string为abba。在执行strcpy(string,scmp(string,str[2])),同样scmp(string,str[2])时比较abba和abc的值,返回值为abba,所以再次复制到string里,所以最后string的值为abba。
故本题答案为B。
17.要求以下程序的功能是计算:s=1+1/2+1/3+…+1/10。
main()
{ int n; float s;
s=1.0;
for(n=10;n>1;n--)
s=s+1/n;
printf("%6.4f\n",s);
}
程序运行后输出结果错误,导致错误结果的程序行是______。
A、s=1.0;
B、for(n=10;n>1;n--)
C、s=s+1/n;
D、printf("%6.4f\n",s);
本题的考查点是查找程序运行错误的原因。主要考察运算中字符的转换。
初看此题,可能不太容易发现错误,该题的运行结果是 1.0000,算法错误。s=s+1/n; 1/2=0,因为n为整型,所以1/n都为0。这就是导致本题出错的原因。s=s+1/n应改为s=s+1.0/n。
故本题答案为C。
18.有以下程序
#include <string.h>
main()
{ char str[][20]={"Hello","Beijing"},*p=str;
printf("%d\n",strlen(p+20));
}
程序运行后的输出结果是______。
A、0
B、5
C、7
D、20
本题的考查点是字符数组和指针的运用。
strlen()是测试字符串长度的函数。函数的值为字符串中实际长度,不包括'/0'在内。str[][20]={"Hello","Beijing"}实际上是定义了一个2行20列的数组,数组的首地址是str[0][0],p+20应该是向后移了20位,所以指向了数组的str[1][0]处,所以此时测试函数的长度,应该时从str[1][0]开始往后,即"Beijing"的长度,所以输出结果是7。
故本题答案为C。
19.有定义语句:int a=1,b=2,c=3,x;,则以下选项中各程序段执行后,x的值不为3的是______。
A、if (c<a) x=1;
else if (b<a) x=2;
else x=3;
B、if (a<3) x=3;
else if (a<2) x=2;
else x=1;
C、if (a<3) x=3;
if (a<2) x=2;
if (a<1) x=1;
D、if (a<b) x=b;
if (b<c) x=c;
if (c<a) x=a;
本题的考查点是if语句。
if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的几种操作之一。
选项A,因为前面两个条件都不满足,所以执行最后一种操作,x=3;
选项B,a<3成立,执行第一种操作,x=3;
选项C,a<3成立,执行第一种操作,x=3;a<2成立,执行第二种操作,此时x=2;a<1不成立,最后的不执行,所以执行此段程序后x=2;
选项D,a<b成立,执行x=b,此时x=2;b<c成立,执行x=c,此时x=3;c<a不成立,不执行x=a,所以执行此段程序后x=3。
故本题答案为C。
20.下列选项中正确的语句组是______。
A、char s[8]; s={"Beijing"}
B、char *s; s={"Beijing"}
C、char s[8]; s="Beijing"
D、char *s; s="Beijing"
本题的考查点是字符串的定义和赋初值。
选项A、C是对字符数组初始化,可以是逐个字符赋给数组中各元素,也可以对整个字符串赋初值,但必须是字符型(s型),并且C语言规定,只有静态存储(static)数组和外部存储(extern)数组才能初始化。所以选项A、C都不对。应该这样来实现:static char s[ ]="Beijing";选项B、D是想通过字符指针来实现,正确的格式是char *s; s="Beijing"。
故本题答案为D。
21.设变量x为float型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是______。
A、x=x*100+0.5/100.0;
B、x=(x*100+0.5)/100.0
C、x=(int)(x*100+0.5)/100.0;
D、x=(x/100+0.5)/100.0;
本题的考查点是实型数据。
对于此类题目,我们可用排除法,题目要求保留到小数点后两位,选项A、B、D都不合题面要求。选项C中,x=(int)(x*100+0.5)/100.0中,x为float型,所以小数点后有6位小数,x*100后有4位,x*100+0.5仍为4位,且在这里已经将第三位四舍五入了,取整后再除以100.0,结果中小数点后为2位。
故本题答案为C。
22.有定义语句:int x,y;。若要通过scanf("%d,%d",&x,&y);语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是______。
A、11 12↙
B、11,12↙
C、11, 12↙
D、11,↙12↙
本题的考查点是格式输入函数。
格式输入函数的一般形式:
scanf( 格式控制,地址表列)
需要注意的是:
如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。所以输入的两个数字之间的逗号是不可少的。
故本题答案为A。
23.有以下程序:
main()
{ int k=4,n=0;
for( ; n<k ; )
{ n++;
if(n%3!=0) continue;
k--; }
printf("%d,%d\n",k,n);
}
程序运行后的输出结果是______。
A、1,1
B、2,2
C、3,3
D、4,4
本题的考查点是循环和continue语句。
continue语句是结束本次循环。n从0开始循环,判断n%3!=0是否成立,为真,跳出循环,继续下一轮for循环条件的判断,为假,执行k--,并继续下一轮for循环条件的判断,当条件不满足时,则结束循环,输出k、n的值。
故本题答案为C。
24.以下叙述中正确的是______。
A、C程序中注释部分可以出现在程序中任意合适的地方
B、花括号"{"和"}"只能作为函数体的定界符
C、构成C程序的基本单位是函数,所有函数名都可以由用户命名
D、分号是C语句之间的分隔符,不是语句的一部分
本题的考查点是C程序设计的初步知识。
选项A,C程序中/*……*/表示注释部分,注释只是给人看的,对编译和运行不起作用,可以加在程序中任何位置,所以选项A是对的;
选项B,函数体是函数的主体,从左花括号开始,到与之匹配的右花括号结束。
选项C,一个C程序中必须有且只能有一个由“main”命名的主函数,其他函数由用户自行命名。
选项D,C语句是组成C程序的基本单位,具有独立的程序功能。所有的C语句都以分号结尾。
故本题答案为A。
25.已定义c为字符型变量,则下列语句中正确的是______。
A、c='97'
B、c="97";
C、c=97;
D、c="a";
本题的考查点是字符型变量。
C语言中,字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。所以把整型数据赋给字符型变量,直接用c=97即可,所以选项C正确。看上去选项A也是正确的,但题目要求选的是正确的语句,由于选项A少分号,所以不能构成语句,所以选项A是错误的。
故本题答案为C。
26.有以下程序段
main()
{ int a=5,*b,**c;
c=&b; b=&a;
……
}
程序在执行了c=&b;b=&a;语句后,表达式:**c的值是______。
A、变量a的地址
B、变量b中的值
C、变量a中的值
D、变量b的地址
本题的考查点是指向指针的指针。
*c表示c间接指向的对象的地址,而**c是c间接指向的对象的值。而在c=&b中,已经把b的地址存放在c里了,*c就指向了b的地址,b里存放的就是a的地址,那么**c应该是变量a的值了。而且也可以用排除法排除选项A,B,由b=&a可知,这两个选项是同一个意思,变量b中的值就是变量a的地址。所以可以排除。
故本题答案为C。
27.若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为______。
A、0
B、1
C、-1
D、一个非0值
本题的考查点是feof()函数的应用。
用fgetc()函数从指定文件读入一个字符时,当读的过程中遇到文件结束符时,函数会返回一个文件结束标志EOF,EOF在stdio.h中定义为-1。由于ASCII码不可能出现-1,因此EOF定义为-1是合适的。当读入的字符值等于-1时,表示读入的已不是正常字符而是文件结束符。但以上只使用于读文本文件的情况。现在ANSIC已允许用缓冲文件系统处理二进制文件,而读入某一个字节里的二进制文件数据的值有可能是-1,而这又恰好是EOF的值。这就出现了需要读入有用数据而却被处理为“文件结束”的情况。为了解决这个问题,ANSIC提供一个feof()函数来判断文件是否真的结束。
feof(fp)用来测试fp所指向的文件当前状态是否“文件结束”。如果是文件结束,函数feof(fp)的值为1(真),否则为0(假)。
故本题答案为A。
28.有以下程序
main()
{ int a[3][3],*p,i;
p=&a[0][0];
for(i=0;i<9;i++) p[i]=i+1;
printf("%d\n",a[1][2]);
}
程序运行后的输出结果是______。
A、3
B、6
C、9
D、2
本题的考查点是指向数组元素的指针变量定义和赋值。
所谓数组的指针是指数组的起始地址,数组元素的指针是数组元素的地址。p=&a[0][0]是把该数组的第一个元素的地址赋给指针变量p,而且此时指针变量p也是int型。a[1][2]刚好是数组中的第6个元素,此时也就是p所指的地址,所以输出结果是6。
故本题答案为B。
29.有以下程序
fun(int a, int b)
{ if(a>b) return(a);
else return(b);
}
main()
{ int x=3,y=8,z=6,r;
r=fun(fun(x,y),2*z);
printf("%d\n",r);
}
程序运行后的输出结果是______。
A、3
B、6
C、8
D、12
本题的考查点是函数的返回值。
fun函数的作用是比较a、b的值,如果a>b,就返回a的值,反之,返回b的值。在main函数中,r=fun(fun(x,y),2*z),先对括号里的进行运算,fun(x,y)的返回值为8,再比较8和12,得到r的返回值为12。
故本题答案为D。
30.有以下结构体说明和变量定义,如下图所示,指针p、q、r分别指向一个链表中的三个连续结点。
struct node
{ int data;
struct node *next;
}*p,*q,*r;
data next data next data next
┌─┬─┐ ┌─┬─┐ ┌─┬─┐
─→│ │ ┼→│ │ ┼→│ │ ┼→
└─┴─┘ └─┴─┘ └─┴─┘
↑p ↑q ↑r
现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是______。
A、r->next=q;q->next=r->next;p->next=r;
B、q->next=r->next;p->next=r;r->next=q;
C、p->next=r;q->next=r->next;r->next=p;
D、q->next=r->next;r->next=q;p->next=r;
本题的考查点是指向结构体变量的指针以及用指针处理链表。
一个结构体变量的指针就是该变量所占据的内存字段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组的元素。
在C语言中,q->next相当于(*q).next。即:q所指向的是结构体变量中的next成员。
链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它根据需要开辟内存单元。链表中的各元素在内存中可以不是连续存放的。所以必须利用指针变量才能实现。即:一个结点中应包括一个指针变量,用它存放下一结点的地址。
r->next=q表示让q指向新开辟的结点,r指向链表中最后一个结点,把r所指的结点连接在q所指的结点后面。同样,p->next=r表示让r指向新开辟的结点,p指向链表中最后一个结点,把p所指的结点连接在r所指的结点后面。那么在A中,执行r->next=q后,r->next指向了q。此时第2句相当于q->next=q;所以q的下一个结点指向了自己,而不是指向原来r的下一个结点。
故本题答案为A。
31.以下不能定义为用户标识符的是______。
A、scanf
B、Void
C、_3com_
D、int
本题的考查点是用户标识符的辨别。
标识符是C语言中用来表示变量名、数组名、函数名、指针名、结构名、联合名、枚举常数名、用户定义的数据类型名、语句标号等用途的字符序列。
标识符由1~32个字符组成,第一个字符必须是字母或下划线,后面的字符可以是字母、数字或下划线。标识符不能与C关键字相同,并区分大小写。
由上可知选项D是不对的,因为int是C语言中的关键字。
故本题答案为D。
32.下列函数定义中,会出现编译错误的是______。
A、max(int x,int y,int *z)
{*z=x>y ? x:y;}
B、int max(int x,y)
{ int z;
z=x>y ? x:y;
return z;}
C、max(int x,int y)
{ int z;
z=x>y?x:y; return(z);}
D、int max(int x,int y)
{ return(x>y?x:y); }
本题的考查点是函数的返回值。
函数的返回值是由return语句带回的,如果被调用的函数中没有return语句,并不带回一个确定的、用户所希望得到的函数值,但实际上,函数并不是不带回值,而只是不带回有用的值,带回的是一个不确定的值。但并不影响程序的运行。故选项A、C 虽然没有return语句,但没有语法错误,而选项B中,定义max函数时,里面的行参也要分别定义。而选项中只定义了x的数据类型,而y并未定义,所以会出现错误。
故本题答案为B。
33.下列关于c语言数据文件的叙述中正确的是______。
A、文件由ASCII码字符序列组成,C语言只能读写文本文件
B、文件由二进制数据序列组成,C语言只能读写二进制文件
C、文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件
D、文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件
本题的考查点是文件的基本概念。
文件一般指:存储在外部介质上数据的集合。C语言把文件看作是一个字符(字节)的序列,即由一个字符(字节)的数据顺序组成。它不是由记录组成的,而是一个数据流。根据数据的组织形式,可分为ASCII文件和二进制文件。ASCII文件又称文本文件,它的每一个字节存放一个ASCII代码,代表一个字符。二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。
故本题答案为D。
34.以下选项中不能正确把cl定义成结构体变量的是______。
1、typedef struct
{int red;
int green;
int blue;
} COLOR;
COLOR cl;
2、struct color cl
{ int red;
int green;
int blue;
};
3、struct color
{ int red;
int green;
int blue;
}cl;
4、struct
{int red;
int green;
int blue;
}cl;
A、1
B、2
C、3
D、4
本题的考查点是结构体变量的定义。
将一个变量定义为标准类型与定义为结构体类型不同之处在于:后者不仅要求指定变量为结构体类型,而且要求指定为某一特定的结构体类型(例如,struct color),不能只指定结构体名。其一般形式为"
struct 结构体名
{
成员表列
}变量名表列;
其中可以不出现结构体名,选项D就是缺省结构体名的情况。而变量名列表必须放在成员列表后面,所以B选项不能正确将c1定义为结构体变量。
故本题答案为B。
35.有以下程序
main()
{ int x=3, y=2, z=1;
printf("%d\n",x/y&~z);
}
程序运行后的输出结果是______。
A、3
B、2
C、1
D、0
本题的考查点是位运算符的知识点。
&是“按位与”运算符,参加运算的两个运算量的相应位都为1,则该位的结果值为1,否则为0。~是“取反”运算符,用来对一个二进制数按位取反,即将0变1,1变0。本题x/y&~z,x/y的值为1,~z的值为0,所以进行&运算后,整个表达式的值为0。
故本题答案为D。
36.已定义以下函数:
fun(int *p)
{ return *p; }
该函数的返回值是______。
A、不确定的值
B、形参p中存放的值
C、形参p所指存储单元中的值
D、形参p的地址值
本题的考查点是函数的返回值。
本题函数中形参为*p,它是一个指针变量,函数调用后,返回的是p所指向的存储单元里的值。
故本题答案为C。
37.已定义以下函数
fun(char *p2, char *p1)
{ while((*p2=*p1)!='\0'){p1++;p2++;} }
函数的功能是______。
A、将p1所指字符串复制到p2所指内存空间
B、将p1所指字符串的地址赋给指针p2
C、对p1和p2两个指针所指字符串进行比较
D、检查p1和p2两个指针所指字符串中是否有'\0'
本题的考查点是函数。
while((*p2=*p1)!='\0'表示将p1所指向的值赋给*p2,即将p1所指字符串复制到p2所指内存空间。在这里“*P2=*p1”是赋值操作,而不是比较是否相等,比较应当为双等号“==”。所以B,C,D都不对。
故本题答案为A。
38.若有定义:int *p[3];,则以下叙述中正确的是______。
A、定义了一个基类型为int的指针变量p,该变量具有三个指针
B、定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针
C、定义了一个名为*p的整型数组,该数组含有三个int类型元素
D、定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素
本题的考查点是指针数组。
一个数组,其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都是指针变量。
int *p[3]表示此数组是指针类型的,每个数组元素(指针变量)都可指向一个整型的指针变量。
故本题答案选B。
39.有以下程序
#include <stdio.h>
#define F(x,y) (x)*(y)
main()
{ int a=3,b=4;
printf("%d\n",F(a++,b++));
}
程序运行后的输出结果是______。
A、12
B、15
C、16
D、20
本题的考查点是带参数的宏定义。
本题的程序中就定义了一个带参数的宏,对F(a++,b++)进行展开后,宏的返回值为12,注意a++,b++都是先使用变量值,再自增。
故本题答案为A。
40.有以下程序:
struct s
{ int x,y; } data[2]={10,100,20,200};
main()
{ struct s *p=data;
printf("%d\n",++(p->x));
}
程序运行后的输出结果是______。
A、10
B、11
C、20
D、21
本题的考查点是结构体变量的初始化。
该题是一个对外部存储类型的结构体变量进行的初始化。初始化后,x的值为10,y的值为100。++(p->x)中首先p->x是把p指向结构体变量s中的x成员,此++(p->x)就相当于++x,这时x先自增,再使用,所以此时x的值为11。
故本题答案为B。
展开阅读全文