在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。
(1)下列数据结构中,属于非线性结构的是________。 A)循环队列 B)带链队列 C)二叉树 D)带链栈
(2)下列数据结构中,能够按照\"先进后出\"原则存取数据的是________。 A)循环队列 B)栈 C)队列 D)二叉树
(3)对于循环队列,下列叙述中正确的是________。 A)队头指针是固定不变的 B)队头指针一定大于队尾指针 C)队头指针一定小于队尾指针
D)队头指针可以大于队尾指针,也可以小于队尾指针
(4)算法的空间复杂度是指________。
A)算法在执行过程中所需要的计算机存储空间 B)算法所处理的数据量
C)算法程序中的语句或指令条数
D)算法在执行过程中所需要的临时工作单元数
(5)软件设计中划分模块的一个准则是________。
A)低内聚低耦合 B)高内聚低耦合 C)低内聚高耦合 D)高内聚高耦合 (6)下列选项中不属于结构化程序设计原则的是________。 A)可封装 B)自顶向下 C)模块化 D)逐步求精 (7)软件详细设计产生的图如下: 该图是 。
A)N-S图 B)PAD图 C)程序流程图 D)E-R图 (8)数据库管理系统是________。 A)操作系统的一部分
B)在操作系统支持下的系统软件 C)一种编译系统 D)一种操作系统
(9)在E-R图中,用来表示实体联系的图形是________。 A)椭圆形 B)矩形 C)菱形 D)三角形
(10)有三个关系R,S和T如下: R A B C a 1 2 b 2 1 c 3 1 S A B C d 3 2 T A B C a 1 2 b 2 1 c 3 1 d 3 2 其中关系T由关系R和S通过某种操作得到,该操作为________。
A)选择 B)投影 C)交 D)并
(11)以下叙述中正确的是________。
A)程序设计的任务就是编写程序代码并上机调试 B)程序设计的任务就是确定所用数据结构 C)程序设计的任务就是确定所用算法 D)以上三种说法都不完整
(12)以下选项中,能用作用户标识符的是________。 A)void B) 8_8 C)_0_ D)unsigned (13)阅读以下程序: #include { int case;float printF; printf(\"请输入2个数:\"); scanf(\"%d %f\",&case,&printF); printf(\"% d %f\\n\",case,printF); } 该程序在编译时产生错误,其出错原因是________。 A)定义语句出错,case是关键字,不能用作用户自定义标识符 B)定义语句出错,printF不能用作用户自定义标识符 C)定义语句无错,scanf不能作为输入函数使用 D)定义语句无错,printf不能输出case的值 (14)表达式:(int)((double)9/2)-(9)%2的值是________。 A)0 B)3 C)4 D)5 (15)若有定义语句:int x=10;,则表达式x-=x+x的值为________。 A)-20 B)-10 C)0 D)10 (16)有以下程序: #include { int a=1,b=0; printf(\"%d,\",b=a+b); printf(\"%d\\n\",a=2] 程序运行后的输出结果是________。 A)0,0 B)1,0 C)3,2 D)1,2 (17)设有定义:int a=1,b=2,c=3;,以下语句中执行效果与其他三个不同的是________。 A)if(a>b)c=a,a=b,b=c; B)if(a>b){c=a,a=b,b=c;} C)if(a>b)c=a;a=b;b=c; D)if(a>b){c=a;a=b;b=c;} (18)有以下程序: #include { int c=0,k; for (k=1;k<3;k++) switch(k) { default: c+=k; case 2:c++;break; case 4:c+=2;break; } printf(\"%d\\n\",c); } 程序运行后的输出结果是________。 A)3 B)5 C)7 D)9 (19)以下程序段中,与语句:k=a>b?(b>c?1:0):0;功能相同的是________。 A)if((a>b)&&(b>c))k=1; else k=0; B)if((a>b)‖(b>c))k=1; else k=0; C)if(a<=b)k=0; else if(b<=c)k=1; D)if(a>b)k=1; else if(b>c) k=1; else k=0; (20)有以下程序: #include { char s[]={\"012xy\;int i,n=0; for(i=0;s[i]!=0;i++) if (s[i]>='a'&&s[i]<='z') n++; printf(\"%d\\n\",n); } 程序运行后的输出结果是________。 A)0 B)2 C)3 D)5 (21)有以下程序: #include { int n=2,k=0; while(k++&&n++>2); printf(\"%d %d\\n\",k,n); } 程序运行后的输出结果是________。 A)0 2 B)1 3 C)5 7 D)1 2 (22)有以下定义语句,编译时会出现编译错误的是________。 A)char a='a'; B)char a='\\n'; C)char a='aa'; D)char a='\\x2d'; (23)有以下程序: #include { char cl,c2; cl='A'+'8'-'4'; c2='A'+'8'-'5'; printf(\"%c,%d\\n\",cl,c2); } 已知字母A的ASCIl码为65,程序运行后的输出结果是________。 A)E,68 B)D,69 C)E,D D)输出无定值 (24)有以下程序: #include p=d++; printf(\"%d\",p);} main() { int a=1; fun(a);printf(\"%d\\n\",a);} 程序运行后的输出结果是________。 A)32 B)12 C)21 D)22 (25)以下函数findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致 不能实现预定功能。 #define MIN - int findmax(int x[],int n) { int i,max; for(i=0;i A)定义语句int i,max;中max未赋初值 B)赋值语句max=MIN;中,不应给max赋MIN值 C)语句if(max { int m=1,n=2,*p=&m,*q=&n,*r; r=p;p=q;q=r; printf(\"%d,%d,%d,%d\\n\",m,n,*p,*q); } 程序运行后的输出结果是________。 A)1,2,1,2 B)1,2,2,1 C)2,1,2,1 D)2,1,1,2 (27)若有定义语句:int a[4][10],*p,*q[4];且0≤i<4,则错误的赋值是________。 A)p=a B)q[i]=a[i] C)p=a[i] D)p=&a[2][1] (28)有以下程序: #include main() { char str[][20]={\"Qne*World\",\"one*Dream!\,*p=str[1]; printf(\"%d,\",strlen(p));printf(\"%s\\n\",p); } 程序运行后的输出结果是________。 A)9,One*World B)9,One*Dream! C)10,One*Dream! D)10,One*World (29)有以下程序: #include { int a[]={2,3,5,4},i; for(i=0;i<4;i++) switch(i%2) { case 0:switch(a[i]%2) {case 0:a[i]++;break; case 1:a[i]--; }break; case 1:a[i]=0; } for(i=0;i<4;i++) printf(\"%d\",a[i]);printf(\"\\n\"); } 程序运行后的输出结果是________。 A)3 3 4 4 B)2 0 5 0 C)3 0 4 0 D)0 3 0 4 (30)有以下程序: #include { char a[10]=\"abcd\"; printf(\"%d,%d\\n\",strlen(a),sizeof(a)); } 程序运行后的输出结果是________。 A)7,4 B)4,10 C)8,8 D)10,10 (31)下面是有关C语言字符数组的描述,其中错误的是________。 A)不可以用赋值语句给字符数组名赋字符串 B)可以用输入语句把字符串整体输入给字符数组 C)字符数组中的内容不一定是字符串 D)字符数组只能存放字符串 (32)下列函数的功能是________。 fun(char *a,char *b) { while((*b=*a)!='\\0') {a++;b++;}} A)将a所指字符串赋给b所指空间 B)使指针b指向a所指字符串 C)将a所指字符串和b所指字符串进行比较 D)检查a和b所指字符串中是否有'\\0' (33)设有以下函数: void fun(int n,char *s){ …… } 则下面对函数指针的定义和赋值均正确的是________。 A)void (*pf)(); pf=fun; B)void *pf(); pf=fun; C)void *pf(); *pf=fun; D)void(*pf)(int,char); pf=&fun; (34)有以下程序: #include { int a=3,s; s=f(a);s=s+f(a);printf(\"%d\\n\",s); } int f(int n) { static int a=1; n+=a++; return n; } 程序运行后的输出结果是________。 A)7 B)8 C)9 D)10 (35)有以下程序: #include { int a=3,s,t; s=f(a+1);t=f((a+1)); printf(\"%d,%d\\n\",s,t); } 程序运行后的输出结果是________。 A)10,64 B)10,10 C)64,10 D)64,64 (36)下面结构体的定义语句中,错误的是________。 A)struct ord {int x;int y;int z;};struct ord a; B)struct ord {int x;int y;int z;}struct ord a; C)struct ord {int x;int y;int z;}a; D)struct {int x;int y;int z;)a; (37)设有定义:char *c;,以下选项中能够使字符型指针c正确指向一个字符串的是________。 A)char str[]=\"string\";c=str; B)scanf(\"%s\",c); C)c=getchar(); D)*c=\"string\"; (38)有以下程序: #include { int a;char b[10];double c;}; struct A f(struct A t); main() { struct A a={1001,\"ZhangDa\",1098.0); a=f(a); printf(\"%d,%s,%6.1f\\n\",a.a,a.b,a.c); } struct A f(struct A t) { t.a=1002;strcpy(t.b,\"changRong\");t.c=1202.0;return t;} 程序运行后的输出结果是________。 A)1001,ZhangDa,1098.0 B)1002,ZhangDa,1202.0 C)1001,ChangRong,1098.0 D)1002,ChangRong,1202.0 (39)若有以下程序段: int r=8; printf(\"%d\\n\",r>>1); 输出结果是________。 A)16 B)8 C)4 D)2 (40)下列关于C语言文件的叙述中正确的是________。 A)文件由一系列数据依次排列组成,只能构成二进制文件 B)文件由结构序列组成,可以构成二进制文件或文本文件 C)文件由数据序列组成,可以构成二进制文件或文本文件 D)文件由字符序列组成,其类型只能是文本文件 二、填空题 请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。 (1)某二叉树有5个度为2的结点以及3个度为1的结点,则该二叉树中共有__【1】__个结点。 (2)程序流程图中的菱形框表示的是__【2】__。 (3)软件开发过程主要分为需求分析、设计、编码与测试四个阶段,其中 __【3】__ 阶段产生\"软件需求规格说明书\"。 (4)在数据库技术中,实体集之间的联系可以是一对一或一对多或多对多的,那么\"学生\"和\"可选课程\"的联系为__【4】__。 (5)人员基本信息一般包括:身份证号,姓名,性别,年龄等。其中可以作为主关键字是__【5】__。 (6)若有定义语句:int a=5;,则表达式:a++的值是__【6】__。 (7)若有语句double x=17;int y;,当执行y=(int)(x/5)%2;之后y的值为__【7】__。 (8)以下程序运行后的输出结果是 __【8】__。 #include { int x=20; printf(\"%d\",0 { int a=1,b=7; do{ b=b/2; a+=b; } while(b>1); printf(\"%d\\n\",a);} (10)有以下程序: #include main() { int f,fl,f2,i; f1=0;f2=1; printf(\"%d %d \",f1,f2); for (i=3;i<=5;i++) { f=f1+f2;printf(\"%d\",f); f1=f2;f2=f; } printf(\"\\n\"); } 程序运行后的输出结果是__【10】__。 (11)有以下程序: #include a+=b;printf(\"%d\",a); } main() { int c=20; fun(c);a+=c;printf(\"%d\\n\",a); } 程序运行后的输出结果是__【11】__。 (12)设有定义: struct person { int ID;char name[12];}p; 请将scanf(\"%d\",__【12】__);语句补充完整,使其能够为结构体变量p的成员ID正确读入数据。 (13)有以下程序: #include { char a[20]=\"How are you?\",b[20]; scanf(\"%s\",b);printf(\"%s %s\\n\",a,b); } 程序运行时从键盘输入:How are you?<回车> 则输出结果为__【13】__。 (14)有以下程序: #include { int num;double s;}REC; void funl(REC x) {x.num=23;x.s=88.5;} main() { REC a={16,90.0); fun1(a); printf(\"%d\\n\",a.num); } 程序运行后的输出结果是__【14】__。 (15)有以下程序: #include fun(int x) { if(x/2>0) fun(x/2); printf(\"%d .\",x); } main() { fun(6),printf(\"\\n\");} 程序运行后的输出结果是__【15】__。 一、选择题 (1)C 【解析】 根据数据结构中各数据元素之间前后关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。线性结构表示数据元素之间为一对一的关系,非线性结构表示数据元素之间为一对多或者多对一的关系。根据各种结构的定义知二叉树是一种非线性结构。 (2)B 【解析】 栈是限定只在一端进行插入与删除的线性表,通常称插入、删除的这一端为栈顶,另一端为栈底。栈顶元素总是后被插入的元素,也是最先被删除的元素;栈底元素总是最先被插入的元素,也是最后才能被删除的元素。栈是按照\"先进后出\"或\"后进先出\"的原则组织数据的。 (3)D 【解析】 循环队列是将顺序队列首尾相连形成的,随着插入元素或删除元素的进行,其队头指针及队尾指针是在不断变化的,有时可能会出现队头指针大于队尾指针的情况,也可能是队尾指针大于队头指针,故答案为D)。 (4)A 【解析】 算法的空间复杂度是指:算法执行过程中所需的存储空间。一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。 (5)B 【解析】 模块划分应考虑的因素包括模块之间的耦合和内聚。一般来说,要求模块之间的耦合尽可能地低,即模块尽可能独立,要求模块的内聚程度尽可能地高,即遵循高内聚、低耦合的原则。 (6)A 【解析】 模块化、自顶向下、逐步求精都是结构化程序设计的原则;可封装是面向对象程序设计原则。 (7)C 【解析】 N-S图是由若干基本框图构成的流程图,其特点是没有流程线;PAD图即问题分析图(Problem Analysis Diagram),它是一种由左往右展开的二维树形结构;程序流程图用于描述问题解决的过程和步骤,其中方框表示处理步骤,菱形框表示逻辑判断,箭头表示控制流向;E-R图即实体-联系图(Entity Relationship Diagram),用来描述现实世界的概念模型,构成元素有实体、属性和联系,分别用矩形、椭圆形和菱形表示。本题答案为C)。 (8)B 【解析】 数据库管理系统是指位于用户与操作系统之间的数据管理软件。数据库管理系统是为数据库建立、使用和维护而配置的软件。 (9)C 【解析】 E-R图中用矩形表示实体(等同于表),用椭圆形表示实体的属性(等同于表中字段),用菱形表示实体关系(等同于外键)。 (10)D 【解析】 两个相同结构关系的并是由属于这两个关系的元组组成的集合。 (11)D 【解析】 程序设计通常分为问题建模、算法设计、编写代码和编译调试四个阶段。所以选项 A)、B)、C)说法都不完整。 (12)C 【解析】 C语言的标识符命名规则为:①只能由字母、数值和下划线3种字符组成;②第一个字符必须是字母或下划线;③不能与C语言中的关键字或保留字相同。 (13)A 【解析】 标识符不能与C编译系统已经预定义的、具有特殊用途的保留标识符(即关键字)同名,否则程序在编译时会出现错误。题目源程序中使用了已经预定义的关键字case,所以将出现错误。 (14)B 【解析】 (int)((double)9/2)的值为4,(9)%2的值为1,因此(int)((double)9/2)-(9)%2的值为3。 (15)B 【解析】 x-=x+x可化为:x=x-(x+x),由于x初始值为10,所以计算后,x=10-20=-10,因此选B)。 (16)D 【解析】 执行第一个printf语句时,b=a+b=1,所以输出1,执行第二个printf语句时,a=2*b=2, 所以输出结果为2。 (17)C 【解析】 逗号表达式的求解过程是:按表达式顺序从左往右依次求解。本题中由于判断条件a>b的值为假,所以选项A)、B)、D)中if语句后面的语句均未被执行,而C)中的后两条语句a=b和b=c被执行,因此选项C)的执行效果与其他三个不同。 (18)A 【解析】 第一次循环时,k=1,在switch语句中,先执行default后面的语句,即c=c+k=1,因为没有break语句,所以不会跳出switch结构,会接着执行case2后面的语句,即c=c+1=2,然后跳出switch;第二次循环时,k=2,直接执行case2后面的语句,即c=c+1=3,然后跳出switch语句,结束循环,执行输出语句。 (19)A 【解析】 表达式k=a>b?(b>c?1∶0)∶0表示:如果(a>b)条件为真,则k取值(b>c?1∶0),否则k取值0;当a>b的情况下,如果b>c,则k值为1,否则为0。所以该表达式与选项A)功能相同。 (20)B 【解析】 在字符串数组s[i]中,只有当下标i=3和i=4时,才满足if条件,所以n的值从0增加两次,结果为2。 (21)D 【解析】 本题考查逻辑运算符的\"短路\"现象,由于k的值为0,表达式首先去求k++的值,因为表达式k++的值为0,系统完全可以确定逻辑表达式的运算结果总是为0,因此将跳过n++>2,不再对它进行求值,即k的值加1,n的值不变。 (22)C 【解析】 aa是字符串,不用加上单引号。 (23)A 【解析】 c1输出字符的ASCII码比字母A大4,即字母E;c2以十进制数字形式输出,因此可以判断本题答案为A)。 (24)C 【解析】 程序运行后,首先输出的是p的值,然后输出a的值。p=d++,得到p的值为d的初始值2;a的值不变,仍为1。 (25)D 【解析】 对max赋初值,应该放在循环语句之前,不然每次循环都将是从MIN开始比较。 (26)B 【解析】 m和n的值不变,输出结果为1,2。指针*p和*q交换了指向的位置,即*p=&n,*q=&m, 输出结果分别为2,1。 (27)A 【解析】 直接将二维数组a赋给p不合法,两者类型不匹配。 (28)C 【解析】 可以将二维数组str看成是一个特殊的一维数组,其元素也是一个数组。那么,str[0]为\"One*World\",str[1]为\"One*Dream!\"。 (29)C 【解析】 第一次循环,i=0,i%2=0,a[0]%2=0,a[0]=a[0]+1=3;第二次循环,i=1,1%2=1,a[1]=0;第三次循环,i=2,a[2]%2=1,a[2]=a[2]-1=4;第四次循环,i=3,i%2=1,a[3]=0。 (30)B 【解析】 strlen()用来返回字符串的长度,而sizeof()返回的是一个对象或者类型所占的内存字节数,即数组所占的内存。 (31)D 【解析】 字符数组中的内容既可以是字符,也可以是字符串,选项D)说法不正确。 (32)A 【解析】 表达式*b=*a是将a所指的字符赋给b所指的空间,然后,指针a和b依次后移,直到到达指针a所指字符串的结尾。 (33)A 【解析】 函数指针的定义形式是:数据类型标识符(*指针变量名)()。void(*pf)()定义了一个没有返回值的函数指针pf,在给函数指针变量赋值时,只需给出函数名而不必给出参数。所以给pf赋值时,只把函数名fun赋给pf即可。所以正确答案为选项A)。 (34)C 【解析】 s=f(a)表达式第一次调用f(n)函数时,f(n)函数运行结果为n=4,a=2,即s等于4;s=s+f(a)表达式第二次调用f(n)函数时,f(n)函数运行结果为n=5,所以得到s值为9。 (35)A 【解析】 s=f(a+1)=a+1*a+1*a+1=10;s=f((a+1))=(a+1)*(a+1)*(a+1)=64。 (36)B 【解析】 定义结构体变量有三种方式:①先声明结构体类型,再定义变量名,如选项A)所示;②在声明类型的同时定义变量,如选项C)所示;③直接定义结构体类型变量,如选项D)所示。 (37)A 【解析】 选项B)、D)中,没有为字符串分配空间,因此不能用c指向字符串。选项C)中getchar()函数返回一个字符,不能将字符赋给字符指针c。选项A)中首先定义了字符数组str,然后将str的首地址赋给指针c,这样就使指针c指向了字符串\"string\"。 (38)D 【解析】 在主函数中,通过a=f(a)实现函数调用,所以输出的结构体变量相应变为1002,ChangRong,1202.0。 (39)C 【解析】 8用二进制表示为1000,右移1位后为0100,即十进制4。 (40)C 【解析】 文件由数据序列组成,可以构成二进制文件,也可以构成文本文件。 二、填空题 (1)【1】14 【解析】 在二叉树中,度为0的结点数是度为2的结点数加1,故二叉树中结点数的总和为度为0的结点数、度为1的结点数及度为2的结点数三者相加,得出结果为14个结点。 (2)【2】逻辑判断 【解析】 绘制流程图时事实描述用椭圆形表示、行动方案用矩形表示、问题用菱形表示、箭头 代表流动方向。 (3)【3】需求分析 【解析】 需求分析阶段的工作主要包括需求获取、需求分析、编写需求规格说明书和需求评审等四方面,产生的主要文档为软件需求规格说明书,它可以为用户、分析人员和设计人员之间的交流提供方便,直接支持目标软件系统的确认,也可以作为控制软件开发进程的依据。 (4)【4】多对多 【解析】 一名学生可以选择多门课程,一门课程也可以由多名学生选择,因此是多对多的联系。 (5)【5】身份证号 【解析】 主关键字是表中区别不同的记录的标识,在该表中只有身份证号能具有这个作用,所以用其作为主关键字。 (6)【6】5 【解析】 a++的含义是在使用a值以后,使a值加1,所以a++的值为5。 (7)【7】1 【解析】 y=(int)(x/5)%2=(int)(3.4)%2=3%2=1。 (8)【8】1 0 【解析】 第一个printf语句输出的结果是逻辑表达式(x>0||x<20)的值,显然为真,即为1;第二个printf语句输出的是逻辑表达式(x>0&&x<20)的值,该值为假,即为0。 (9)【9】5 【解析】 第一次循环执行后,b=3,a=4,满足条件b>1,循环继续;第二次循环执行后,b=1,a=5,不满足条件b>1,结束循环。所以输出的a值为5。 (10)【10】0 1 123 【解析】 第一个printf语句输出结果为0 1。循环体总共循环三次,第一次循环结果为,f=1,f1=1,f2=1;第二次循环结果为f=2,f1=1,f2=2;第三次循环结果为f=3,f1=2,f2=3。 (11)【11】3025 【解析】 fun(c)调用函数fun(b),函数执行结果为a=a+b=10+20=30;调用完函数后,主函数继续执行,输出结果a=a+c=5+20=25。 (12)【12】&p.ID 【解析】 结构体成员的引用通过符号\".\"来表示,通过scanf语句对变量进行赋值时,要用取地址符&。 (13)【13】How are you How 【解析】 用%s格式输入字符串时,空格和回车都作为输入数据的分隔符,不能被读入,因此数组b的输出结果为How。 (14)【14】16 【解析】 主函数中,通过funl( )函数将a值传递给x,但没有把形参x的值返回,此时变量a的值并没有发生变化,所以输出a.num的值为16。 (15)【15】1 3 6 【解析】 依次执行fun(6),fun(3),fun(1),当执行fun(6)时要调用fun(3),执行fun(3)时要调用fun(1),所以输出的结果为1 3 6。 因篇幅问题不能全部显示,请点此查看更多更全内容