资源描述
一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是()。A) 12345ABCDE B) EDCBA54321C) ABCDE12345 D) 54321EDCBA 参考答案:B【解析】栈是先进后出的原则组织数据,所以入栈最早的最后出栈,所以选择B)。下列叙述中正确的是()。A) 循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B) 在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C) 在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D) 循环队列中元素的个数是由队头指针和队尾指针共同决定 参考答案:D【解析】循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所以A)错误;在循环队列中只需要队头指针与队尾两个指针来共同反映队列中元素的动态变化情况,所以B)与C)错误。 在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是()。A) O(n)B) O(n2)C) D) 参考答案:C【解析】当有序线性表为顺序存储时才能用二分法查找。可以证明的是对于长度为n的有序线性表,在最坏情况下,二分法查找只需要比较次,而顺序查找需要比较n次。下列叙述中正确的是()。A) 顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的B) 顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C) 顺序存储结构能存储有序表,链式存储结构不能存储有序表D) 链式存储结构比顺序存储结构节省存储空间 参考答案:A【解析】链式存储结构既可以针对线性结构也可以针对非线性结构,所以B)与C)错误。链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以D)错误。数据流图中带有箭头的线段表示的是()。A) 控制流B) 事件驱动C) 模块调用D) 数据流 参考答案:D【解析】数据流图中带箭头的线段表示的是数据流,即沿箭头方向传送数据的通道,一般在旁边标注数据流名。在软件开发中,需求分析阶段可以使用的工具是()。A) NS图B) DFD图C) PAD图D) 程序流程图 参考答案:B【解析】在需求分析阶段可以使用的工具有数据流图DFD图,数据字典DD,判定树与判定表,所以选择B)。在面向对象方法中,不属于对象基本特点的是()。A) 一致性B) 分类性 C) 多态性D) 标识唯一性 参考答案:A【解析】对象有如下一些基本特点:标识唯一性、分类性、多态性、封装性、模块独立性好。所以选择A)。一间宿舍可住多个学生,则实体宿舍和学生之间的联系是()。A) 一对一B) 一对多C) 多对一D) 多对多 参考答案:B【解析】因为一间宿舍可以住多个学生即多个学生住在一个宿舍中,但一个学生只能住一间宿舍,所以实体宿舍和学生之间是一对多的关系。在数据管理技术发展的三个阶段中,数据共享最好的是()。A) 人工管理阶段B) 文件系统阶段C) 数据库系统阶段D) 三个阶段相同 参考答案:C【解析】数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。其中最后一个阶段结构简单,使用方便逻辑性强物理性少,在各方面的表现都最好,一直占据数据库领域的主导地位,所以选择C)。有三个关系R、S和T如下:由关系R和S通过运算得到关系T,则所使用的运算为()。A) 笛卡尔积B) 交C) 并D) 自然连接 参考答案:D【解析】自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据T关系中的有序组可知R与S进行的是自然连接操作。下列叙述中错误的是()。A) C程序可以由多个程序文件组成B) 一个C语言程序只能实现一种算法C) C程序可以由一个或多个函数组成D) 一个C函数可以单独作为一个C程序文件存在 参考答案:B【解析】在一个C语言程序中可以进行多种算法的实现,对算法的个数没有规定,所以B)错误。以下选项中,能用作数据常量的是()。A) 115LB) 0118 C) D) o115 参考答案:A【解析】A)选项中115L表示115是长整型数据,合法。B)选项是八进制常量的表示方法,但是在八进制中不能含有数字8,所以B)错误。C)选项中e后面应该是整数不能是小数,所以C)错误。D)选项中八进制常量应该是数字0开始,而不是字母o开始。按照C语言规定的用户标识符命名规则,不能出现在标识符中的是()。A) 大写字母B) 下划线C) 数字字符D) 连接符 参考答案:D【解析】C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。所以D)选项中的连接符不合法。设变量已正确定义并赋值,以下正确的表达式是()。A) xyz5, y B) int(15.8%5)C) xy*5xzD) x 参考答案:A【解析】B)与D)选项中取模运算符%的左右两个操作数均应为整数,所以B)、D)错误。C)选项中不能将xy的值赋给表达式y*5,所以C)错误。设有定义:int x2;,以下表达式中,值不为6的是()。A) 2*x,x+=2B) x,2*xC) x*(1x)D) x*x1 参考答案:A有以下程序:#include main()int x, y, z; xy1; zx,y,y; printf(%d,%d,%dn,x,y,z);程序运行后的输出结果是()。A) 2,3,3B) 2,3,2C) 2,3,1D) 2,2,1 参考答案:C【解析】zx,y,y;因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式表示成(zx),(y),(y)。然后从左向右先计算表达式zx,因为x先使用后自增,所以z的值为1,x的值为2。再计算逗号表达式第二个表达式y,此时y的值为2,最后计算第三个表达式y,y的值为3。有以下程序:#include main() char c1,c2;c1A84;c2A85;printf( %c,%dn,c1,c2);已知字母A的ASCII码为65,程序运行后的输出结果是()。A) E,68 B) D,69C) E,DD) 输出无定值 参考答案:A【解析】本题目中字符变量c1是字符A的ASCII码加上4,即69所对应的字符E。 字符变量c2是字符A的ASCII码加上3,即68所对应的字符D。但是打印输出时,c1以%c的格式输出,所以是E,c2以%d的格式输出,所以是68。若有定义int x,y; 并已正确给变量赋值,则以下选项中与表达式(xy)?(x) : (y)中的条件表达式(xy) 等价的是()。A) (xy0)B) (xy0)D) (xy0) 参考答案:A【解析】条件表达式:x表达式1?表达式2:表达式3 的含义是:先求解表达式1,若为非0(真),则求解表达式2,将表达式2的值赋给x。若表达式1的值为0(假),则求解表达式3,将表达式3的值赋给x。在本题中与表达式1:(xy)等价的是(xy0)。有以下程序:#include main() int x1, y0;if (!x) y;else if (x0)if (x) y2;else y3;printf(%dn, y);程序运行后的输出结果是()。A) 3B) 2C) 1D) 0 参考答案:D【解析】在if else语句中 else总是与离它最近的if配对。本题目中x为1所以!x为0,所以执行else if语句中的内容,判断(x0)是否成立,因为x为1所以条件不成立,所以else if 内部的ifelse语句不再执行,所以y的值还是初始值0。若有定义:float x; int a1,b3,c2; 则正确的switch语句是()。A) switch(ab) case 1: printf(*n);case 21: printf(*n); B) switch(int)x); case 1: printf(*n);case 2: printf(*n); C) switch(x): printf(*n);: printf(*n); D) switch(ab) case 1: printf(*n);case c: printf(*n); 参考答案:A【解析】B)选项中switch(int)x);语句中不应该有最后的分号。switch(expr1), 中的expr1不能用浮点类型或long类型,也不能为一个字符串,所以C)错误。case后面常量表达式的类型必须与switch后面表达式的类型一致,所以D)错误。有以下程序:#include main() int y9;for( ; y0; y) if(y%30) printf(%d, y);程序的运行结果是()。A) 852 B) 963C) 741D) 875421 参考答案:A【解析】第一次for循环,y的值为9,y%3的值为0,满足条件打印 y,即先减一后打印,所以打印8;第二次for循环,y的值为7,y%3的值为1,不执行打印语句;第三次for循环,y的值为6,y%3的值为0,满足条件打印y,即先减一后打印,所以打印5;第四次for循环,y的值为4,不满足if条件,不执行打印语句;第五次for循环,y的值为3,满足if条件,打印输出2;第六次for循环,y的值为1,不满足条件,不执行打印语句。有以下程序:#include main()int i,j,m1;for(i1;i0;j ) if(i*j3) break;m*i*j; printf(m%dn,m);程序运行后的输出结果是()。A) m4B) m2C) m6 D) m5 参考答案:C【解析】第一次外循环i的值为1,第一次内循环j的值为3,不满足条件执行m*i*j即m的值为3;第二次j的值为2,不满足条件执行m*i*j,即m的值为6;第三次j的值为1,不满足条件执行m*i*j,即m的值仍为6。第二次外循环i的值为2,j的值为3,满足条件,执行break语句,跳出循环。有以下程序:#include int fun (int x, int y )if (x!y) return ( (xy) /2 ); else return ( x );main()int a4, b5, c6; printf( %dn , fun(2*a,fun(b,c);A) 6B) 3C) 8D) 12 参考答案:A【解析】本题中第一次调用为fun(8,fun(5,6),因为fun(5,6)返回值为5,所以第二次调用为fun(8,5)6。所以选择A)。有以下程序:#include int add( int a,int b) return (ab); main() int k, (*f)(), a5,b10;fadd;则以下函数调用语句错误的是()。A) kf(a,b);B) kadd(a,b);C) k(*f)(a,b);D) k *f(a,b); 参考答案:D【解析】D)选项中*f(a,b)表示调用后返回一个指向整型数据的地址指针,即该函数的返回值为指针类型,所以不能将其赋值给整形变量k。有以下程序:#include main() int n,*pNULL;*p&n;printf(Input n:); scanf(%d,&p); printf(output n:); printf(%dn,p);该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是()A) int n,*pNULL;B) *p&n;C) scanf(%d,&p)D) printf(%dn,p); 参考答案:A【解析】选项B)的正确写法应为p&n;选项C)的正确写法应为scanf(%d,p);选项D)的正确写法应为 printf(%dn,*p)。下列定义数组的语句中,正确的是()。 A) #define N 10int xN;B) int N10;int xN;C) int x0.10;D) int x ; 参考答案:A【解析】数组说明的一般形式为:类型说明符数组名 常量表达式。B)中N是变量,不能用变量定义数组长度。C)选项中数组长度是非法的一串数字。定义数组时必须为其指明长度,D)选项中数组长度为空,所以非法。有以下程序:#include main() int a2,3,5,4,i;for(i0;i4;i)switch(i%2) case 0: switch(ai%2) case 0:ai;break; case 1:ai; break;case 1:ai0;for(i0;i4;i) printf(%d ,ai); printf(n);程序运行后的输出结果是()。A) 0 3 0 4 B) 2 0 5 0 C) 3 3 4 4D) 3 0 4 0 参考答案:D【解析】第一次循环i为0,i%2为0,执行switch(a0%2)中的case 0语句后内容即a0,a0的值变成3;第二次循环i的值为1,i%2为1,执行case 1:ai0;所以a1的值变成0;第三次循环i的值为2,i%2为0,执行switch(a2%2)中的case 1语句后的内容 a2,a2的值变成4;第四次循环i的值为3,i%2为1,执行case 1:ai0;所以a3的值变成0。有以下程序:#include main() int b330,1,2,0,1,2,0,1,2,i,j,t1;for(i0; i3; i)for(ji;ji;j) tbibji;printf(%dn,t);程序运行后的输出结果是()。A) 3B) 4C) 1D) 9 参考答案:B【解析】每次内循环只循环一次就结束,第一次外循环时ttb0b001b00101;第二次外循环时ttb1b111b11112;第三次外循环时ttb2b222b22224。以下语句中存在语法错误的是()。A) char ss620; ss1 right?;B) char ss()20 right?;C) char *ss6; ss1 right?;D) char *ss() right?; 参考答案:A【解析】数组定义后,不可以对数组整体赋值, s是二维数组,因ss1是一维字符数组,即字符串,字符串赋值可以使用strcpy(ss1,right);这样的形式,而选项A)中对二维数组中的第1维(相当于一个一维数组)赋值,是不可以的。选项B)和D)是定义时对数组初始化,这是可以的。选项C)中,将字符串在内存中的首地址赋给指针数组的一个元素,这是可以的。以下不能将s所指字符串正确复制到t所指存储空间的是()A) do*t*s;while(*s );B) for(i0;tisi;i);C) while(*t*s)t;s D) for(i0,j0;tisj; ); 参考答案:A【解析】do*t*s;while(*s); 不能因为当*s0时,while(*s)跳出循环,这样字符串结束标志0没有复制给*t,造成*t不完整。注意,*t*s是先执行t*s,然后才进行tt1,ss1。B),C),D)都能将0复制过去。有以下程序:#include void swap(char *x, char *y) char t;t*x; *x*y; *yt;main() char *s1abc, *s2123; swap(s1,s2); printf(%s,%sn,s1,s2);程序执行后的输出结果是()。A) 321,cbaB) abc,123 C) 123,abcD) 1bc,a23 参考答案:D【解析】字符串是一个特殊的数组,所以按照数组的规则,s1应该指向的是数组的首地址,即abc的第一个字符的地址。s2指向的是123的第一个字符的地址。调用swap函数之后交换的是两个字符串的第一个字符a和1的内容,所以打印输出为D)。有以下函数:int fun(char *x, char *y) int n0;while ( (*x*y) & *x!0 ) x; y; n;return n ;函数的功能是()。A) 将y所指字符串赋给x所指存储空间B) 查找x和y所指字符串中是否有0C) 统计x和y所指字符串中最前面连续相同的字符个数D) 统计x和y所指字符串中相同的字符个数 参考答案:C【解析】本题中由循环条件可知遇到0或x与y所指的字符的值不等中的一个条件时就结束,所以功能是统计x和y所指字符串中最前面连续相同的字符个数。有以下程序:#include int fun() static int x1;x*2;return x;main() int i, s1;for( i1; i3; i ) s*fun();printf(%dn, s);程序运行后的输出结果是()。A) 10 B) 30C) 0D) 64 参考答案:B【解析】本题目中静态局部变量x,在静态存储区内分配存储单元。在程序整个运行期间都不释放。所以第一次循环s的值为2,第二次循环中,返回的x的值为4,所以s的值为8,第三次循环,返回的x的值为8,所以s的值为64。在一个C源程序文件中所定义的全局变量,其作用域为()。A) 由具体定义位置和extern说明来决定范围 B) 所在程序的全部范围C) 所在函数的全部范围D) 所在文件的全部范围 参考答案:A【解析】全局变量的作用域是从声明处到文件的结束。所以选择A)以下叙述中错误的是()。A) 可以通过typedef增加新的类型B) 可以用typedef将已存在的类型用一个新的名字来代表C) 用typedef定义新的类型名后,原有类型名仍有效D) 用typedef可以为各种类型起别名,但不能为变量起别名 参考答案:A【解析】关键字typedef的作用只是将C语言中的已有的数据类型作了置换,并不是增加新的类型,所以A)错误。有以下程序:#include struct Sint a, b; data210,100,20,200;main()struct S pdata1; printf(%dn, (p.a) );程序运行后的输出结果是()。A) 10B) 11C) 20D) 21 参考答案:D【解析】声明 data 是结构 S 数组。初始化 data0.a10; data0.b100;data1.a20;data1.b200。主函数中pdata1 ; 即data1.a;data1.b;执行语句printf(%dn,(p.a); 打印输出时 p.a 先增1再打印。p.a data1.a20,先增1 等于21。有以下程序:#include #define PT 3.5 ;#define S(x) PT*x*x ;main()int a1, b2; printf(%4.1fn , S(ab); 程序运行后的输出结果是()。A) B) C) 程序有错无输出结果D) 参考答案:C【解析】宏定义不是C语句,末尾不需要有分号。所以语句printf(%4.1fn , S(ab);展开后为;*ab*ab;);所以程序会出现语法错误。有以下程序:# include main() unsigned char a2, b4, c5, d; d a | b; d & c; printf(%dn, d); 程序运行后的输出结果是()。A) 3B) 4C) 5D) 6 参考答案:B【解析】& 按位与,如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。| 按位或,两个相应的二进制位中只要有一个为1,该位的结果值为1。2的二进制为00000010,4的二进制为00000100,所以做或运算结果为00000110,该数与5即00000101做与操作结果为00000100,即4有以下程序:#include #include main() int *a,*b,*c;abc(int *)malloc(sizeof(int);*a1;*b2,*c3;ab;printf(%d,%d,%dn,*a,*b,*c);程序运行后的输出结果是()。A) 1,1,3B) 2,2,3C) 1,2,3 D) 3,3,3 参考答案:D【解析】malloc函数动态分配一个整型的内存空间,然后把函数返回的地址用(int*)强制类型转换为整型指针,再把它赋给a,b,c,即让指针变量a,b,c都指向刚申请的内存空间。所以只有最后一个赋值语句*c3的值保留在了该空间内,因为a,b,c三个指针变量均指向该空间,所以打印该空间内的数值为3。以下叙述中正确的是()。A) 当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失B) 打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖C) 在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据D) C语言中的文件是流式文件,因此只能顺序存取数据 参考答案:A【解析】B)选项中打开一个已存在的文件并进行了写操作后,原有文件中的全部数据不一定被覆盖,也可以对源文件进行追加操作等。C)选项中在一个程序中当对文件进行了写操作后,不用先关闭该文件然后再打开,才能读到第1个数据,可以用fseek()函数进行重新定位即可。D)选项中,C语言中的文件可以进行随机读写。
展开阅读全文