国家二级C语言机试(选择题)模拟试卷8(共285题)_第1页
国家二级C语言机试(选择题)模拟试卷8(共285题)_第2页
国家二级C语言机试(选择题)模拟试卷8(共285题)_第3页
国家二级C语言机试(选择题)模拟试卷8(共285题)_第4页
国家二级C语言机试(选择题)模拟试卷8(共285题)_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

国家二级C语言机试(选择题)模拟试卷8(共9套)(共285题)国家二级C语言机试(选择题)模拟试卷第1套一、选择题(本题共40题,每题1.0分,共40分。)1、以下选项中关于程序模块化的叙述错误的是A、把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块B、可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序C、把程序分成若干相对独立的模块,可便于编码和调试D、可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序标准答案:B知识点解析:如果应用结构化程序设计方法设计程序,那么可采用自顶向下,逐步细化的设计方法把若干独立模块组装成所要求的程序。2、下列关于栈的叙述中正确的是()。A、栈按“先进先出”组织数据B、栈按“先进后出”组织数据C、只能在栈底插入数据D、不能删除数据标准答案:B知识点解析:栈是只允许在栈顶进行插入和删除运算的线性表,按“先进后出”组织数据。3、下列叙述中正确的是()。A、线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B、线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构C、线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D、线性表的链式存储结构所需要的存储空间与顺序存储结构没有任何关系标准答案:B知识点解析:线性链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。4、设循环队列的存储空间为Q(1:35),初始状态为front=rear=35。现经过一系列入队与退队运算后,fronl=15,rear=15,则循环队列中的元素个数为A、15B、16C、20D、0或35标准答案:D知识点解析:循环队列的队头指针和尾指针都等于15,此循环队列中元素的个数有两种情况,第一种情况是队头指针和尾指针都是第一次到达15,此时元素个数为0;第二种情况是队头指针第一次到达15,而尾指针第二次到达15,此时元素个数为35。5、下列关于栈的描述中正确的是A、在栈中只能插入元素而不能删除元素B、在栈中只能删除元素而不能插入元素C、栈是特殊的线性表,只能在一端插入或删除元素D、栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素标准答案:C知识点解析:栈是限定在一端进行插入与删除的线性表,在栈中。允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。6、以下叙述中正确的是A、标识符的长度不能任意长,最多只能包含16个字符B、语言中的关键字不能作变量名,但可以作为函数名C、用户自定义的标识符必须“见名知义”,如果随意定义,则会出编译错误D、标识符总是由字母、数字和下划线组成,且第一个字符不得为数字标准答案:D知识点解析:标识符就是C语言中的变量名、函数名、数组名、文件名、类型名等。C语言合法标识符的命名规则是:①标识符由字母、数字和下划线组成;②第一个字符必须为字母或下划线;③大写字母与小写字母被认为是两个不同的字符;④C语言规定了一个标识符允许的字符个数,为32,超过的字符将不被识别。C语言的标以符可分为以下3类:①火键字,不能用于为自定义标识符命名。②预定义标识符。③用户标识符。由用户根据需要定义的标识符称为用户标识符,又称自定义标识符,一般用来给变量、函数、数组等命名,一般做到见名知义,但是没有特殊规定。7、下列叙述中正确的是A、对长度为n的有序链表进行查找,最坏情况下需要的比较次数为nB、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2)C、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(log2n)D、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(nlog2n)标准答案:A知识点解析:本题主要考查的知识点为查找技术。顺序查找的使用情况:①线性表为无序表;②表采用链式存储结构。二分法查找只适用于顺序存储的有序表,并不适用于线性链表。8、表达式:(int)((double)9/2)-9%2的值是A、0B、4C、3D、5标准答案:C知识点解析:这个表达式的计算过程为,首先求出9除以2的商等于4,再把其强制转化为实型数据为4.0,然后再强制转4,减去9对2求余数1,得到其结果等于3。9、已知字符’A’的ASCII代码值是65,字符变量c1的值是’A’,c2的值是’D’。则执行语句printf("%d,%d",c1,c2-2);的输出结果是A、A,68B、A,BC、65,66D、65,68标准答案:C知识点解析:在C语言中,字符常量在内存中占一个字节,存放的是字符的ASCII码值。所有的字符常量都作为整型量来处理。在本题中输出语句用整型格式输出字符时,输出的是其ASCII码值。因为字符’A’和’D’的ASCII码值分别为65和68,所以c2-2=68-2=66。10、在软件开发中,需求分析阶段产生的主要文档是A、可行性分析报告B、软件需求规格说明书C、概要设计说明书D、集成测试计划标准答案:B知识点解析:需求分析的最终结果是生成软件需要规格说明书,可以为用户、分析人员和设计人员之间的交流提供方便,可以直接支持目标与确认,又可以作为控制软件开发进程的依据。11、以下叙述中正确的是A、赋值语句是一种执行语句,必须放在函数的可执行部分B、scanf和printf是C语言提供的输入和输出语句C、由printf输出的数据都隐含左对齐D、由printf输出的数据的实际精度是由格式控制中的域宽和小数的域宽来完全决定的标准答案:A知识点解析:C语言本身没有提供输入输出语句,但是可以通过调用标准库函数中提供的输入和输出函数来实现输入和输出,选项B错误;采用printf输出数据,输出数据都默认为右对齐,若要左对齐,可以存格式控制中的”%”和宽度之间加一个”-”号来实现,选项C错误;printf的输出精度由变量的类型决定,与域宽无关,选项D错误。12、设有定义:inta;floatb;执行scanf(’’%2d%f’,&a,&b);语句时,若从键盘输入876543.0则a和b的值分别是A、876和543.0B、87和6.0C、87和543.0D、76和543.0标准答案:B知识点解析:在输入函数scanf的输入格式符%2d%f中,2d表示输入的数据的宽度为2,所以当从键盘输入876543.0<CR>时,这时把输入数字串的前两位87赋给变量a,然后将紧接着将6按照格式控制符%f的形式赋给变量b,所以b的值为6.000000。13、设有关系表学生S(学号,姓名,性别,年龄,身份证号),每个学生学号唯一。除属性学号外,也可以作为键的是()。A、姓名B、身份证号C、姓名,性别,年龄D、学号,姓名标准答案:B知识点解析:在二维表中凡能唯一标识元组的最小属性集成为该表的键或码。根据这个概念,在以上选项中,身份证号可以作为该表的键,答案选B。14、数据流图(DFD)中的有向箭头(→)表示A、数据流B、控制流C、输入流D、输出流标准答案:A知识点解析:数据流图(DataFlowDiagram):简称DFD,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。数据流程图中有以下几种主要元素:→:数据流。数据流是数据在系统内传播的路径,因此由一组成分固定的数据组成;□:数据源或宿(“宿”表示数据的终点)。代表系统之外的实体;○:对数据的加工(处理)。加工是对数据进行处理的单元,它接收一定的数据输入,对其进行处理,并产生输出:〓:数据存储。表示信息的静态存储。15、程序调试的任务是A、设计测试用例B、验证程序的正确性C、发现程序中的错误D、诊断和改正程序中的错误标准答案:D知识点解析:程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件中的错误。先要发现软件的错误,然后借助于一定的调试工具去执行并找出错误的具体位置。软件测试贯穿整个软件生命期,调试主要在开发阶段。16、设变量已正确定义并赋值,以下正确的表达式是()。A、x=y+z+5,++yB、int(15.8%5)C、x=y*5=x+zD、x=25%5.0标准答案:A知识点解析:考查运算符与表达式。求余运算符"%"要求参与运算的量均为整型,选项B)、D)错;赋值运算符的左侧必须为变量而不能是表达式,选项C)错。选项A)为正确的逗号表达式,答案选A)。17、设有以下函数:voidfun(intn,char*s){…},则下列对函数指针的定义和赋值均正确的是()。A、void(*pf)(int,char);pf=&fun;B、void*pf();pf:fun;C、void*pf();*pf=pf=fun;D、void(*pf)(int,char*);pf=fun;标准答案:D知识点解析:函数的参数可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中。函数名代表函数的人口地址,指向函数的指针应该定义为void(*pf)()。如果定义为void*pf(),则表示函数pf的返回值是一个基类型为void的指针,因此D选项正确。18、以下选项中,合法的实数是()。A、4.5E2B、E1.3C、7.11ED、1.2E1.2标准答案:A知识点解析:科学计数法中,e/E前后必须有数字并且后面的数字必须为整数,答案选A。19、有以下程序:#include<stdio.h>struetS{inta,b;}data[2]={10,100,20,200};main(){struetSp=data[1];prinff("%d\n",++(p.a));}程序的运行结果是()。A、10B、11C、20D、21标准答案:D知识点解析:声明data是结构s数组,初始化data[0].a=10;data[0].b=100;data[1].a=20;data[1].b=200。主函数中p=data[1];即p.a=data[1].a;p.b=data[1].b;,执行语句printf("%d\n",++(p.a));,打印输出时,p.a先增1再打印,p.a=data[1].a=20,先增1等于21。20、以下叙述中正确的是A、C语言程序总是从最前面的函数开始执行B、C语言程序总是从main函数开始执行C、C语言程序中main函数必须放在程序的开始位置D、C语言程序所调用的函数必须放在main函数的前面标准答案:B知识点解析:C语言中一个源程序都有一个且只能有一个main函数,即主函数;C语言规定必须用main作为主函数名。其后的一对圆括号中可以是空的,但不能省略。程序中的main()是主函数的起始行,也是C程序执行的起始行。每一个程序都必须有一个且只能有一个主函数。一个C程序总是从主函数开始执行,到main函数体执行完后结束,而不论main函数在整个程序中的位置如何。而调用函数的定义位置和调用没有直接关系。21、阅读以下程序#include<stdio.h>main(){intcase;floatprintF;printf("请输入2个数:");scanf("%d%f",&case,&printF);printf("%d%f\n",case,printF);}该程序在编译时产生错误,其出错原因是A、定义语句出错,printF不能用作用户自定义标识符B、定义语句出错,case是关键字,不能用作用户自定义标识符C、定义语句无错,scanf不能作为输入函数使用D、定义语句无错,printf不能输出case的值标准答案:B知识点解析:case是C语言中的一个关键字,不能用作用户标识符来使用,所以这段程序代码在编译时就会出错。22、与数学表达式x≥y≥z对应的C语言表达式是A、(x>=y>=z)B、(x>=y)&&(y>=z)C、(x>=y)!(y>=z)D、(x>=y)‖(y>=x)标准答案:B知识点解析:若要表示x大于等于y,同时y大于等于z,需要用逻辑与表达式连接。23、有以下程序main(){intk=5,n=0;do{switch(k){case1:case3:n+=1;k--;break;default:n=0;k--;case2:case4:n+=2;k--;break;}printf("%d",n);}while(k>0&&n<5)}运行以后的输出结果是A、0235B、235C、02356D、2356标准答案:B知识点解析:因为变量的初始值分别为k=5,n=0,所以程序第1次进入循环时,执行default语句,“n=0,k=4”,没有break语句,因此执行case2分支语句,n为2,k为3,程序进行第2次循环,执行“case3:n=3,k=2”,输出n值为3,程序进行第3次循环,执行case3这个分支,结果是“n=5,k=1”,打印出5;这时因为n=5不满足n<5的循环条件,因此退出循环,程序运行结束。24、一名员工可以使用多台计算机,每台计算机只能由一名员工使用,则实体员工和计算机间的联系是A、一对多B、多对多C、多对一D、一对一标准答案:C知识点解析:一名员工可以使用多台计算机,每台计算机只能由一名员工使用,所以实体员工和计算机间的联系是多对一。所以选项C正确。25、若有以下程序#includeintk=7,m=5;voidf(int**s){int*t=&k;s=&t;*s=&m;printf("%d,%d,%d,",k,*t,**s);}main(){inti=3,*p=&i,**r=&p;f(r);printf("%d,%d,%d\n",i,*p,**r);}则程序的输出结果是A、7,5,7,3,3,3,B、7,5,7,3,5,7,C、7,5,5,3,3,3,D、7,7,5,3,3,3,标准答案:C知识点解析:本题考查二级指针作为函数的参数,可以通过函数调用来改变主函数中一级指针的指向。主函数中指针变量p指向i,r指向p,调用f函数,形参指针s指向p,流程转到f函数执行,指针变量t指向k,s指向t,此时更改了s的指向,s指向了t,更改了s指向的地址空间内容为m的地址,同时t也指向变量m,因此**s的值为m的值,*t为m的值,k为7。流程返回到主函数,没有对主函数空间的数据和指向作出更改,因此全部为3。26、能够减少相同数据重复存储的是A、数据库B、字段C、文件D、记录标准答案:A知识点解析:数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库主要特点:实现数据共享、减少数据的冗余度、数据的独立性、数据实现集中控制、数据一致性和可维护性,以确保数据的安全性和可靠性和故障恢复。27、有以下程序#include<stdio.h>#include’’string.h’’typedefstruct{charname[9];charsex;floatscore[2];}STU;voidf(STUa){STUb={”Zhao’’,’m’,85.0,90.0);inti;strcpy(a.name,b.name);a.sex=b.sex;for(i=0;i<2;i++)a.score[i]=b.score[i];}程序的运行结果是A、Qian,m,85,90B、Zhao,m,85,90C、Zhao,f,95,92D、Qian,f,95,92标准答案:B知识点解析:本题考查在结构体中函数的实参和形参的传递,调用ffc1后,实参传向形参,进行f()函数功能的实现,但程序中没有返回语句,故形参不能将值传回实参,它们值的传递具有不可逆性,所与printf输出的还是c中实参的值。28、s1和s2已正确定义并分别指向两个字符串。若要求:当s1所指串大于s2所指串时,执行语句S;则以下选项中正确的是A、if(s1>s2)S;B、if(strcmp(s1,s2))S;C、if(strcmp(s2,s1)>0)S;D、if(strcp(s1,s2)>0)S;标准答案:D知识点解析:字符串标记使用strcmp函数,该函数有两个参数分别是需要比较大小的两个字符串s1和s2,如果s1大于s2则返回值大于0,如果s1小于s2则返回值小于0,否则s1和s2相同返回0。题目要求s1大于s2时执行语句s,因此strcmp(s1,s2)的返回值大于0时执行S。29、若要求从键盘读入含有空格字符的字符串,应使用函数()。A、gets()B、getc()C、getchar()D、scanf()标准答案:A知识点解析:getc()、getchar()能输入单个字符,在C语言中能输入字符串的函数有scanf()和gets(),但是在scanf()函数中,空格和回车都会作为分隔符,而gets()函数则会将空格作为普通字符输入,回车作为分隔符,所以答案选A。30、有下列程序,程序执行后的输出结果是fun(charP[][10]){intn=0,i;for(i=0;i<7;i++)if(P[i][0]==’T’)n++;returnn;}main(){charstr[][10]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};printf("%d\n",fun(str));}A、1B、3C、0D、2标准答案:D知识点解析:本题在主函数中定义了一个字符二维数组str[][10],并用{“Mon”,“Tue”,“Wed”,“Thu”,“Fri”,“Sat”,“Sun”}初始化。函数fun(charp[][10])的功能是统计出p[][10]中p[i][0]等于字符T的个数。所以fun(str)的功能是统计一周七天中英文名称首字母为“T”的个数。因为字符串“Tue”和“Thu”的首字符是“T”,所以n=2。31、在数据管理技术发展的三个阶段中,数据共享最好的是()。A、人工管理阶段B、文件系统阶段C、数据库系统阶段D、三个阶段相同标准答案:C知识点解析:数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。其中最后一个阶段结构简单,使用方便逻辑性强物理性少,在各方面的表现都最好,一直占据数据库领域的主导地位,所以选择C)。32、若有定义语句:intk[2][3],*pk[3];,则以下语句中正确的是A、pk=k;B、pk[0]=k[1][2];C、pk=k[0];D、pk[1]=k;标准答案:B知识点解析:本题考查多维数组和数组指针。k是一个二维数组,pk是一个指针数组,该数组有3个元素,每个元素都是一个指向整型对象的指针。选项A)错误,等号的左边是一个数组地址,不是变量:选项B)是把元素k[1][2]赋值给pk[0];选项C)中等号左边不是变量;选项D)类型不匹配,pk[1]是指向一个整型对象,而k是一个二维数组首地址。33、有以下程序#includemain()#defineN4{intx[][N]={{1,2,3),{4),{5,6,7,8),{9,10}},voidfun(inta[][N],intb[])y[N],i;{inti;fun(x,y);for(i=0;iA、1,2,3,4,B、1,4,5,9,C、1,0,7,0,D、3,4,8,10,标准答案:C知识点解析:函数fun(inta[][N],intb[])的功能是把矩阵a[N][N]主对角线上的元素赋给…维数组b[]。在主函数中由想[][N]的初始化可知,其主对角线上的元素是1,0,7,0。所以当执行完函数fun(x,y)后,一维数组元素y[]中的元素值为1,0,7,0。34、以下叙述中正确的是A、结构体类型中的各个成分均不能是数组或指针B、结构体类型的变量,不能在声明结构体类型组成时一起定义C、使用typedef定义新类型名后,新类型名与原类型名实际上是等价的D、元素为结构体类型的数组,只能在声明过结构体类型之后,单独进行定义标准答案:C知识点解析:C语言允许用tyoedef说明一种新类型名,typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。结构体变量定义有下面三种形式;(1)先定义结构,再说明结构变量。(2)在定义结构类型的同时说明结构变量。(3)直接说明结构变量。35、有以下程序#includemain(){chara=4;printf("%d\n",a=a<<1);}A、8B、16C、40D、4标准答案:A知识点解析:本题主要考查按位右移运算。a=4的二进制为00000100,a<<1后为00001000,其值为十进制数值8。36、设有定义:doublea,b,c;若要求通过输入分别给a、b、c输入1、2、3,输入形式如下(注:此处□代表一个空格)□□1.0□□2.0□□3.0<回车>则能进行正确输入的语句是A、scanf("%lf%lf%lf",a,b,c);B、scanf("%lf%lf%lf",&a,&b,&c);C、scanf("%f%f%f",&a,&b,&c);D、scanf("%5.1lf%5.1lf%5.1lf",&a,&b,&c);标准答案:B知识点解析:scanf函数的一般形式为scanf(格式控制,变量1地址,变量2地址,…),其中,格式字符串要与数据类型保持一致,所以格式字符串中应为%lf,后面应该为变量地址,所以需要加上符号"&",所以选择B。37、有以下程序#includemain(){intk,j,s;for(k=2;k<6;k++,k++){s=1;for(j=k;j<6;j++)s+=j;}printf("%d\n",s);}程序运行后的输出结果是A、6B、10C、24D、40标准答案:B知识点解析:本题重点考察for语句循环嵌套,首先k=2,进行一次循环后,k自增两次,变成4,这时s为1。即当k=4的时候,s=1,j=4,执行内层循环,s=1+4,j自增1后等于5,s=5+5,j再自增1后即为6,跳出内层循环。k自增两次后等于6,不成立,跳出外层循环。最后输出s的值,即为10。因此B选项正确。38、有以下程序#includetypedefstructstu{charname[10];chargender;intscore;}STU;voidf(STU*a,STU*b){*b=*a;printf("%s,%c,%d,",b->name,b->gender,b->score);}main(){STUa={"Zhao",’m’,290},b={"Qian",’f’,350};f(&a,&b);printf("%s,%c,%d\n",,b.gender,b.score);}程序的运行结果是()。A、Zhao,m,290,Zhao,m,290B、Zhao,m,290,Qian,f,350C、Qian,f,350,Qian,f,350D、Qian,f,350,Zhao,m,290标准答案:A知识点解析:结构体变量地址作为函数参数为地址传参,形参和实参指向的为同一块内存地址,所以对数组元素的改变能够影响到实参。语句"*b=*a;"则将a指向的结构体变量中的数据赋值给b指向的结构体变量,实参b的值也发生改变,输出结果为选项A)。39、以下叙述中错误的是A、gets函数用于从终端读入字符串B、getchar函数用于从磁盘文件读入字符C、fputs函数用于把字符串输出到文件D、fwrite函数用于以二进制形式输出数据到文件标准答案:B知识点解析:本题考查的是输入输出函数的使用,gets和getchar函数用于从标准输入设备终端读入字符串和字符,并非从磁盘文件读入,fputs用于把字符串输出到文件,fwrite用于以二进制形式输出数据到文件。40、以下叙述中正确的是A、在一个程序中,允许使用任意数量的#include命令行B、在包含文件中,不得再包含其他文件C、#include命令行不能出现在程序文件的中间D、虽然包含文件被修改了,包含该文件的源程序也可以不重新进行编译和连接标准答案:A知识点解析:本题考查预处理中文件包含的概念,包含文件中可以包含其他文件,B选项错误,#include可以出现在程序文件的中间,C选项错误,包含文件被修改了,包含该文件的源程序必须重新进行编译和连接。国家二级C语言机试(选择题)模拟试卷第2套一、选择题(本题共25题,每题1.0分,共25分。)1、下列叙述中正确的是()。A、有一个以上根节点的数据结构不一定是非线性结构B、只有一个根节点的数据结构不一定是线性结构C、循环链表是非线性结构D、双向链表是非线性结构标准答案:B知识点解析:线性结构应满足:有且只有一个根节点;每个节点最多有一个前件,也最多有一个后件,所以B选项正确。有一个以上根节点的数据结构一定是非线性结构,所以A选项错误。循环链表和双向链表都是线性结构的数据结构。2、某带链栈的初始状态为top=bottom=NULL,经过一系列正常的入栈与退栈操作后,top=bottom=20。该栈中的元素个数为()。A、0B、1C、20D、不确定标准答案:B知识点解析:带链的栈就是用一个单链表来表示的栈,栈中的每一个元素对应链表中的一个结点。栈为空时,头指针和尾指针都为NULL;栈中只有一个元素时,头指针和尾指针都指向这个元素。3、下列叙述中正确的是A、栈是“先进先出”的线性表B、队列是“先进后出”的线性表C、循环队列是非线性结构D、有序线性表既可以采用顺序存储结构,也可以采用链式存储结构标准答案:D知识点解析:本题主要考查了栈、队列、循环队列的概念,栈是先进后出的线性表,队列是先进先出的线性表。根据数据结构中各数据元素之间的前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。有序线性表既可以采用顺序存储结构,又可以采用链式存储结构。4、设循环队列的存储空间为O(1:35),初始状态为front=rear=35。现经过一系列入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为A、15B、16C、20D、0或35标准答案:D知识点解析:循环队列的队头指针和尾指针都等于15,此循环队列中元素的个数有两种情况,第一种情况是队头指针和尾指针都是第一次到达15,此时元素个数为0;第二种情况是队头指针第一次到达15,而尾指针第二次到达15,此时元素个数为35。5、下面不属于软件设计阶段任务的是()。A、软件总体设计B、算法设计C、制订软件确认测试计划D、数据库设计标准答案:C知识点解析:软件设计阶段总体分为两部分:概要设计和详细设计,此阶段的主要任务就是将需求规格说明文档转换为软件设计文档,将需求阶段提出的问题一一解释,形成详细设计文档,并根据功能要求定制相应数据结构、各种流程图等,为下一步编码做准备。6、有以下程序#includevoidmain(){intn=2,k=-1;while(!(k>0‖n++));printf("%d%d\n",k,n);}程序运行后的输出结果是()。A、02B、13C、57D、12标准答案:D知识点解析:在程序中整型变量n的初始值等于2,整型变量k的初始值等于1,在执行while语句时,由于表达式k的值大于0为真,所以不再需要判断“n++”是否为真,“(k>0∥n++)”表达式的值为真。“!(k>0∥n++)”表达式的值为假,所以while语句中的条件不满足,循环语句不会执行,变量n的值也不会加1,所在输出变量k和n的值是1和2。7、若有以下程序#includemain(){inta=0,b=0,c=0c=(a+=++b,b+=4);printf("%d,%d,%d\11",a,b,c);}则程序的输出结果是A、1,5,1B、-1,4,4C、1,5,5D、-1,4,-1标准答案:C知识点解析:对于语句c=(a+=++b,b+=4);首先计算a=a+(++b),a,b初值为0,则计算以后a为1,b为1,然后计算b+=4,得到b的值为5,此时表达式b+=4的值为整个逗号表达式的值,因此c的值为5。8、数据库技术的根本目标是要解决数据的()。A、存储问题B、共享问题C、安全问题D、保护问题标准答案:B知识点解析:数据库中的数据具有“集成”“共享”之特点,即数据库集中了各种应用的数据。进行统一的构造与存储,而使它们能被不同的应用程序所使用。因而数据库技术的根本目标是解决数据的共享问题。9、下面不属于结构化程序设计风格的是A、程序结构良好B、程序的易读性C、不滥用Goto语句D、程序的执行效率标准答案:D知识点解析:结构化程序设计(stmcturedprogramming)是进行以模块功能和处理过程设计为主的详细设计的基本原则。结构化程序设计是过程式程序设计的一个子集,它对写入的程序使用逻辑结构,使得理解和修改更有效更容易。10、C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述中正确的是()。A、预定义标识符(如库函数中的函数名)可用作用户标识符,但失去原有含义B、用户标识符可以由字母和数字任意顺序组成C、在标识符中大写字母和小写字母被认为是相同的字符D、关键字可用作用户标识符,但失去原有含义标准答案:A知识点解析:用户标识符不能以数字开头,C语言中标识符是区分大小写的,关键字不能用作用户标识符。11、有以下程序:#includevoidfun(char*c,intd){*c=*c+1:d=d+1:prinff(“%c,%c,”,*c,d);}main(){charb=’a’,a=’A’;fun(&b,a);printf(“%c,%c\n”,b,a);}程序的运行结果是()。A、b,B,b,AB、b,B,B,AC、a,B,B,aD、a,B,a,B标准答案:A知识点解析:本题重点考查函数的调用。首先要了解字母对应的ASCII码,例如A为65,a为97,字母+1可得到下一个字母。其次是函数形参和实参的问题,运行过程如下:在fun(&b,a)中,*e=‘a’,d=65。*c+1=’b’,d+1=66,prinff(“%c,%c,”,*c,d);输出b,B;因为指针c指向地址的值为b,此时b=*c=’b’;函数返回执行prinff(“%c,%c\n”,b,a);输出b,A,因此A选项正确。12、以下选项中不属于字符常量的是A、’C’B、"C"C、’LxCC’D、\072标准答案:B知识点解析:本题考查字符型常量。选项A)正确,是大小字母c;选项B)错误,使用双引号括起来的是字符串,不是字符;选项C)正确,使用了转义字符“\”,xcc表示16进制的CC;选项D)正确,使用了转义字符“\”,072表示8进制的72。13、设有课程关系模式:R(C#,Cn,T,TA)(其中,C#为课程号,Cn为课程名,T为教师名,Ta为教师地址)并且假定不同课程号可以有相同的课程名,每个课程号下只有一位任课教师,但每位教师可以有多门课程。关系R中对主属性的传递依赖为A、(C#,T)→TaB、C#→Cn,Cn→TaC、C#→T,T→TaD、C#→Tn标准答案:C知识点解析:R关系模式中,不同课程号可以对应相同的课程名而每个课程号下自由一位任课教师,因此课程号和教师名为传递依赖、教师名和教师地址为传递依赖,因此R对主属性的传递依赖为“C#→T,T→Ta”。14、有以下程序:#include<stdio.h>main(){FILE*f;f=fopen("filea.txt","w");fprintf(f,"abc");fclose(f);}若文本文件filea.txt中原有内容为hello,则运行以上程序后,文件filea.txt中的内容为()。A、abcloB、abcC、helloabcD、abchello标准答案:B知识点解析:本题考查文件操作函数。执行f13rintf(f,"abc");后,f文件的内容就变为了abc,所以B选项正确。15、以下选项中,值为1的表达式是A、1一’0’B、’1’一0C、1一’\0’D、’\0’一’0’标准答案:C知识点解析:在C程序中,字符量可参与任何整数运算。字符参与运算时,首先要将字符转换为其对应的ASCII码值再参与整数运算。字符“’1’”对应的ASCII码值是49,字符’0’对应的ASCII码值是48,字符“’\0’”是字符串结束标识符NULL,其对应的ASCII码值是0。16、表达式3.6-5/2+1.2+5%2的值是A、4.8B、3.3C、3.8D、4.3标准答案:C知识点解析:表达式的计算过程为:3.6-5/2+1.2+5%2=3.6-2+1.2+1=3.8。此题要注意5/2的结果是2,而不2.5,因为除法运算符两边的数值类型均为整型,故运算结果的数值类型也被认定为整型。17、有以下程序#include#defineN4voidfun(inta[][N],intb[]){inti;for(i=0;i<N;i++)b[i]=a[i][i]-a[i][N-1-i];}voidmain(){intx[N][N]={{1,2,3,4),{5,6,7,8},{9,10,11,12},{13,14,15,16)),y[N],i;fun(x,y);for(i=0;i<N;i++)printf("%d,",y[i]);printf("\n");}程序运行后的输出结果是A、-12,-3,0,0,B、-3,-1,1,3,C、0,1,2,3,D、-3,-3,-3,-3,标准答案:B知识点解析:fun函数的功能是求出二维数组a中第i行第i个元素与第N-1-i元素的差,赋给b[i]。在主函数中,把实参二维数组x和一维数组y传递给形参a和b,最后输出一维数组y中元素的值。18、要求通过while循环不断读入字符,当读入字母N时结束循环。若变量已正确定义,以下正确的程序段是A、while(ch=getchar()=’N’)printf("%c",ch);B、while(ch=getchar()=="N")printf("%c",ch);C、while((ch=getchar())!=’N’)printf("%c",ch);D、while((ch=getchar())==’N’)printf("%c",ch);标准答案:C知识点解析:while循环的执行过程如下:①计算while后面圆括号中表达式的值,当值为非0时,执步骤②;当值为0时,执行步骤④:②执行循环体一次:③转去执行步骤①;④退出循环。在选项C)中,表达式(ch=getchar())!=’N’表示输入的字符不等于N,如果这个条件表达式成立,则执行循环体,打印输出输入的字符。如果这个条件表达式不成立,即输入的字符等于N,则退出循环。19、有以下程序#include<stdio.h>main(){intx=8;for(;x>0;x--){if(x%3){printf("%d,",x--);continue;}prinff("%d,",--x);}}程序的运行结果是A、8,7,5,2,B、9,7,6,4,C、7,4,2,D、8,5,4,2,标准答案:D知识点解析:“x--”表示先执行程序,再令x的值减1;而“--x”表示令x的值减1,再执行程序。x=8时,x%3为非0值,执行语句“{printf("%d,”,x--);continue;}”,输出“8,”,此时经过x--,x的值变为7,跳出此次循环;执行“x--,x=6,x%3=0”,后面语句不执行,执行语句“prjnt("%d,",--x);”,输出“5,”;执行for语句中的x--,得到x=4,判断x%3,输出“4,”,执行两次x--后,x=2,执行“{printf("%d,",x--);continue;}”后,输出“2,”;然后执行两次x--后,x=0,不符合“x>0”,循环全部结束。20、以下定义数组的语句中错误的是A、int=num[][3]={{1,2},3,4,5,6};B、intnum[]={1,2,3,4,5,6};C、intnum[][4]={1,2,3,4,5,6};D、intnum[2][4]={{1,2},{3,4},{5,6}};标准答案:D知识点解析:在选项D)的数组定义中,赋值号左边定义了一个2行4列的二维数组,而在右边定义了一个3行2列的二维数组。21、有以下程序#include<stdio.h>main()intf(intx,inty){inta=3,b=4,c=5,d;{return((y-x)*x);}d=f(f(a,b),f(a,c));printf("%d\n",d);}程序运行后的输出结果是A、10B、8C、9D、7标准答案:C知识点解析:本题考查函数的嵌套调用。首先计算f(a,b)与f(a,c),f(a,b)=(b—a)*a=3,f(a,c)=(c—a)*a=6,然后计算f(3,6)=(6—3)*3=9。22、设有宏定义:#definelsDIV(k,n)((k%n==1)?1:0)且变量m已正确定义并赋值,则宏调用:IsDIV(m,5)&&IsDIV(m,7)为真时所要表达的是A、判断m是否能被5和7整除B、判断m被5或者7整除足否余1C、判断m被5和7整除是否都余1D、判断m是否能被5或者7整除标准答案:C知识点解析:本题考查宏定义和三目运算符。三目运算符的格式为:test?语句1:语句2其中,test可以是任何Boolean表达式。语句1,当test是true时执行该语句,可以是复合语句;语句2,当test是false时执行该语句,可以是复合语句。isDIV(k,n)要表达的是当k除n的余数是1时表达式的值为1,否则为0,所以题中要表达的是m被5和7整除是否都余1。23、有以下程序,程序运行后的输出结果是main(){intm=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,2B、1,2,2,1C、2,1,2,1D、2,1,1,2标准答案:B知识点解析:在主函数定义了3个整数指针变量p,q,r,并且使p指向m,q指向n,再执行“r=p;p=q;q=r;”这三条语句,使q指向m,p指向n,再输出变量“m,n,*p,*q”时,它们值分别为1,2,2,1。24、不能正确表示数学式的表达式是A、a/c*bB、a*b/cC、a/b*cD、a*(b/c)标准答案:C知识点解析:/号和*号的优先级处于平级,结合性都是自左至右,所以选择C,C式子表示的是。25、有以下程序#includemain(){inti=1;i=i^i;printf("%d\n",i);}程序运行后的输出结果是A、1B、-1C、0D、7标准答案:C知识点解析:本题考查位运算中按位异或运算符,异或运算只有在两个比较的位不同时其结果是1,否则结果为0,i^i运算符两边相同,所以结果为0,选项C正确。国家二级C语言机试(选择题)模拟试卷第3套一、选择题(本题共25题,每题1.0分,共25分。)1、下列叙述中正确的是A、算法就是程序B、设计算法时只需要考虑数据结构的设计C、设计算法时只需要考虑结果的可靠性D、以上三种说法都不对标准答案:D知识点解析:所谓算法是指解题方案的准确而完整的描述。是一组严谨地定义运算顺序的规则,并且每一个规则都是有效的,且是明确的,此顺序将在有限的次数下终止。算法不等于程序,也不等于计算方法。设计算法时不仅要考虑对数据对象的运算和操作,还要考虑算法的控制结构。2、下列叙述中正确的是A、循环队列是队列的一种链式存储结构B、循环队列是队列的一种顺序存储结构C、循环队列是非线性结构D、循环队列是一种逻辑结构标准答案:B知识点解析:本题主要考查循环队列的概念,循环队列作为队列的一种也应该是线性结构。队列是一种逻辑结构,而循环队列是一种顺序存储结构的队列。3、有以下程序:#include<stdio.h>main(){intsum=0,x=5;do{sum+=x;}while(!——X);printf(″%d\n″,sum);}程序的运行结果是()。A、0B、5C、14D、15标准答案:B知识点解析:先执行do中的表达式sum+=x,则sum=sum+x=0+5=5,再执行while中的表达式,结果为0,退出循环,所以运行结果是5。4、若有以下程序#includemain(){inta=0,b=0,c=0,d;c=(a+=b,,b+=a);/*第4行*/d=c;;/*第5行*/;/*第6行*/printf(“%d,%d,%d\n”,a,b,c);/*第7行*/}编译时出现错误,你认为出错的是A、第4行B、第5行C、第6行D、第7行标准答案:A知识点解析:第4行出错,在第4行括号中两个逗号不可以为空。单独的分号为C语言的空语句,是编译程序可以识别并且编译的,因此第5、6行都是正确的。5、从工程管理角度看,软件设计一般分为两步完成,它们是A、概要设计与详细设计B、数据设计与接□设计C、软件结构设计与数据设计D、过程设计与数据设计标准答案:A知识点解析:软件设计是开发阶段最重要的步骤。从王程管理的角度来看可分为两步:概要设计和详细设计。概要设计是将软件需求转化为软件体系结构,确定系统级接口、全局数据结构或数据库模式:详细设计是指确立每个模块的实现算法和局部数据结构,用适应方法表示算法和数据结构的细节。从技术观点来看,软件设计包括软件结构设计(定义软件系统各主要部件之间的关系)、数据设计(将分析时创建的模型转化为数据结构)、接口设计(描述软件内部、软件与协作系统之间以及软件与人之问如何通信)、过程设计(把系统结构部件转换成软件的过程)四个步骤。6、下面不属于软件设计阶段任务的是()。A、软件的详细设计B、软件的总体结构设计C、软件的需求分析D、软件的数据设计标准答案:C知识点解析:软件的需求分析属于软件的定义阶段的任务,答案选C。7、有以下程序:#includeintfun(intx,inty){if(x==y)return(x);elsereturn((x+y)/2);}main(){inta=1,b=2,c=3;printf("%d\n",fun(2*a,fun(b,c)));}程序运行后的输出结果是()。A、2B、3C、4D、5标准答案:A知识点解析:fun(b,c)即fun(2,3),2!=3,所以返回(2+3)/2=2;fun(2*a,2)即fun(2,2),2==2,所以返回2。8、有以下程序:#includeinta=1,b=2;voidfunl(inta,intb){printf(“%d%d”,a,b);}voidflun2(){a=3;b=4;}main(){funl(5,6);fun2();printf(“%d%d\n”,a,b);}程序运行后的输出结果是()。A、5634B、3456C、1256D、5612标准答案:A知识点解析:在一个源文件中,如果外部变量和局部变量同名,则在该局部变量的作用域内,该外部变量会被“屏蔽”,所以函数funl()输出的是局部变量a、b的值:56;fun2()改变的是全局变量a、b的值,输出结果为34,答案选A。9、下面描述中不属于数据库系统特点的是A、数据共享B、数据完整性C、数据冗余度高D、数据独立性高标准答案:C知识点解析:数据系统的基本特点有数据的集成性、数据的高共享性与低冗余性、数据的独立性、数据统一管理与控制。10、设已有定义floatx;,则下列对指针变量P进行定义且赋初值的语句中正确的是()。A、int*p=(float)X;B、float*p=&x;C、floatp=&x;D、float*p=1024;标准答案:B知识点解析:指针是用来存放地址的变量,用(类型名*指针变量名)的形式定义。赋值时应将某个变量地址即&x赋给指针变量,所以选择B。11、有三个关系R、S和T如下:其中关系T由关系R和S通过某种操作得到,该操作为A、选择B、投影C、交D、并标准答案:D知识点解析:由关系T中的数据可以看出,其数据由关系R和S的数据组成。所以关系T是由关系R和T通过并运算得到的。12、数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和A、编码设计B、测试阶段C、运行阶段D、物理设计标准答案:D知识点解析:数据库设计目前一般采用生命周期法,即把整个数据库应用系统的开发分解成目标独立的四个阶段。它们分别是需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段。13、以下选项中合法的变量是A、5aB、A%C、_10_D、sizeof标准答案:C知识点解析:对于变量的命名要利用标识符命名,所谓标识符就是C语言中的变量名、函数名、数组名、文件名、类型名等。其中标识符构成如下:①标识符由字母、数字和下划线组成;②第一个字符必须为字母或下划线;因此选项A中数字开头,选项B出现了非法字符%,而选项D中sizeof为关键字,不能为变量命名。14、下列函数的功能是()。voidfun(char*a,char*b){while((*b=**a)!=’\0’){a++;b++;}}A、将a所指字符串赋给b所指空间B、使指针b指向a所指字符串C、将a所指字符串和b所指字符串进行比较D、检查a和b所指字符串中是否有’\0’标准答案:A知识点解析:while循环条件为:(*b=*a)!=’\0’,执行时先把指针a所指向的字符赋给指针b所在的内存单元,如果该字符不是结束标识“\0”,执行循环体“a++;b++;”,指针a、b分别指向下一个字符单元。再判断循环条件,如果成立,继续把指针a所指向的字符赋给指针b所在的内存单元,直到遇到结束标识为止,因此A选项正确。15、以下叙述中正确的是A、函数的类型不能足指针类型B、函数的形参类型小能是指针类型C、基类型不同的指针变量可以相互混用D、设有指针变量为double*p,则p+1将指针p移动8个字节标准答案:D知识点解析:在对指针进行加、减算术运算时,数字1表示1个存储单元的长度。而double类型数据在内存中占8个字节,因此移动一次移动8个字节。其他三个都不正确。16、以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。#include<stdio_h>#defineN10voidfun(intx[N]){inti=0;while(i<N)scanf("%d",_______);}在程序中下划线处应填入的是A、x+iB、x[i+1]C、x+(i++)D、x[++i]标准答案:C知识点解析:本题考查数组和scanf函数的使用。程序通过while循环来给数组元素赋值,赋值语句通过调用seanf函数来实现。scanf函数从键盘接收数据,第二个参数是数据保存的地址,因此选项B)和选项D)不是地址,错误。选项A)和选项C)是地址,但是选项A)的i值不会发生变化,循环体内每次都是给同一个元素赋值,不满足要求,选项C)正确。17、有以下程序#includemain(){intx=1,y=2,z=3;if(x>y)if(yA、1B、41C、2D、331标准答案:A知识点解析:嵌套的if-else语句执行条件不满足所以整个条件嵌套语句并没有执行,只执行了最后一句"printf("%d\n",x++);",输出x的值为1,答案选A。18、有以下程序#include#includevoidfun(chars[][10],intn){chart;intij;for(i=0;is[j][0]){t=s[i][0];s[i][0]=s[j][0];s[j][0]=t;}}main(){charss[5][10]={"bcc","bbcc","xy","aaaacc","aabcc"};fun(ss,5);printf("%s,%s\n",ss[0],ss[4]);}程序的运行结果是A、aaaacc,xyB、bcc,aabccC、xy,aaaaccD、aabcc,bcc标准答案:C知识点解析:函数fun(chars[][10],intn)通过两重for循环语句,比较二维字符数组s[][10]的每个字符串的首字符大小,如果前一个字符串首字符大于后一个字符串的首字符,则交换这两个字符串的首字符。在主函数中,语句fun(ss,5)的作用是对二维字符数组ss[5][10]的5个字符串的首字符进行从小到大的排序,不影响各个字符串另外的字符。所以排序结束后,5个字符串的第一个字符依次变为a、a、b、b和x:最后输出第1个和第4个字符串。19、有以下程序#includemain()voidfun(char*a,char*b){char*s="*****a*b****",t[80];{while(*a==’*’)a++;fun(s,t);puts(t);while(*b=*a){b++;a++;}}}程序的运行结果是A、a*bB、*****a*bC、a*b****D、ab标准答案:C知识点解析:主函数main()定义了指向字符串的指针和一个字符数组,接着调用fun(s,t)函数,进行实参向形参传递,函数fun()第一个while语句判断*a中的值为“*”时继续扫描,当遇到不是“*”时结束,接着第二个while循环语句,将*a中从“a”开始的后续所有字符都赋予.b,也就是t[80]中的内容为“a.b,……。20、下面选项中关于“文件指针”概念的叙述正确的是A、文件指针就是文件位置指针,表示当前读写数据的位置B、文件指针指向文件在计算机中的存储位置C、文件指针是程序中用FILE定义的指针变量D、把文件指针传给fscanf函数,就可以向文本文件中写入任意的字符标准答案:C知识点解析:文件指针实际上是指向一个结构体类型的指针,这个结构体中包含如缓冲区的地址、在缓冲区中当前存取的字符的位置、对文件是“读”或“写”、是否出错、是否已经遇到文件结束标志等信息。一般称文件指针结构体类型名为FILE,可以用此类型名来定义文件指针。【格式】FILE*指针变量名【说明】FILE是一个存储文件信息的结构体类型的变量。注意不要和文件位置指针混淆,在文件内部有一个位置指针,用以指示文件内部的当前读写位置。使用fetc函数,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。而文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。fscanf函数可以向文本文件和二进制文件输入数据。21、以下叙述中错误的是A、可以用typedef将已存在的类型用一个新的名字来代表B、可以通过typedef增加新的类型C、用typedef定义新的类型名后,原有类型名仍有效D、用typedef可以为各种类型起别名,但不能为变量起别名标准答案:B知识点解析:C语言允许用typedef说明一种新类型名:typedef类型名标示符;。其中“类型名”必须是在此语句之前已定义的类型标识符;“标识符”是一个用户定义标识符,用作新的类型名:typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。22、有以下程序main(){charch[]="uvwxyz",*pc;pc=ch;printf("%c\n",*(pc+5));}程序运行后的输出结果是A、0B、元素ch[5]的地址C、zD、字符y的地址标准答案:C知识点解析:在程序中语句pc=ch;的功能是字符指针pc指向字符串数组ch[]的地址,而*(ps+5)表示字符串数组ch[]中第6个字符z。23、有以下程序#includemain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;}printf("a=%d,b=%d\n",a,b);}程序运行后的输出结果是A、a=1,b=0B、a=1,b=1C、a=2,b=1D、a=2,b=2标准答案:C知识点解析:本题重点考察switch语句,switch语句中case分支后面如果没有break,那么就会顺序执行下面的case,直到遇到break跳出。由于变量a和变量b均赋初值为0,当程序执行完语句case0:a++;break;后,a的值为1,继续执行语句case2:a++;b++;break;a的值为2,b的值为1。因此C选项正确。24、若有以下程序structstu{char*name,gender;intscore;};main(){structstua={NULL,’m’,290},b;=(char*)malloc(10);strcpy(,"Zhao");b=a;b.gender=’f’;b.score=350;strcpy(,"Qian");printf("%s,%c,%d,",,a.gender,a.score);printf("%s,%c,%d\n",,b.gender,b.score);}则程序的输出结果是A、Zhao,m,290,Qian,f,350B、Qian,f,350,Qian,f,350C、Zhao,m,290,Zhao,f,350D、Qian,m,290,Qian,f,350标准答案:D知识点解析:主函数中定义结构体类型structstu,有三个成员,第一个成员为字符指针变量。主函数中为stu类型变量a赋值,首先为成员分配存储空间,存入数据。b=a;语句执行完毕以后,a和b的各个成员值相同,需要注意的是和成员都保存了同一段内存的地址,因此当为变量b赋值的时候,同样更改了a的name成员,而其他成员由于有单独的存储空间而不会发生改变。25、设有定义:doublea[10],*s=a;,以下能够代表数组元素a[3]的是()。A、(*s)[3]B、*(s+3)C、*s[3]D、*s+3标准答案:B知识点解析:题中,首先定义了double型的数组a,并将数组首地址赋给指针s。s[3]能够表示a[3],故选项A、C不能表示a[3];选项D的*s+3=a[0]+3。故本题答案为B选项。国家二级C语言机试(选择题)模拟试卷第4套一、选择题(本题共40题,每题1.0分,共40分。)1、设R是一个2元关系,有3个元组,S是一个3元关系,有3个元组。如T=R×S,则T的元组的个数为()。A、6B、8C、9D、12标准答案:C知识点解析:R为n元关系,有p个元组S为m元关系,有q个元组。两个关系笛卡儿积是一个n+m元的关系,元组个数是q×p。所以T的元组的个数为9个。2、下列叙述中正确的是A、有一个以上根结点的数据结构不一定是非线性结构B、只有一个根结点的数据结构不一定是线性结构C、循环链表是非线性结构D、双向链表是非线性结构标准答案:B知识点解析:在数据结构中,树这类的数据结构只有一个根结点,但它不是线性结构。3、某二叉树的前序序列为ABCDEFG,中序序列为DCBAEFG,则该二叉树的深度(根结点在第1层)为()。A、2B、3C、4D、5标准答案:C知识点解析:二叉树的前序序列为ABCDEFG,则A为根结点;中序序列为DCBAEFG,可知结点D、C、B位于根结点的左子树上,结点E、F、G位于根结点的右子树上。另外,结点B、c、D在前序序列和中序序列中顺序相反,则说明这三个结点依次位于前一个结点的左子树上;结点E、F、G顺序未变,则说明这三个结点依次位于前一个结点的右子树上。故二叉树深度为4。4、在带链队列中,经过一系列正常的操作后,如果front=rear,则队列中的元素个数为A、0或1B、0C、1D、队列满标准答案:A知识点解析:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作。而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列的链式存储也称为链队列。为了便于操作,可给链队列添加1个头结点,并令头指针指向头结点。队列为空的判断条件是头指针和尾指针的值相同,且均指向头结点。当队列为空(0)或1时,front=rear。5、以下叙述中错误的是()。A、使用3种基本结构构成的程序只能解决简单问题B、结构化程序由顺序、分支、循环3种基本结构组成C、C语言是一种结构化程序设计语言D、结构化程序设计提倡模块化的设计方法标准答案:A知识点解析:使用顺序、选择(分支)、循环3种基本结构构成的程序可以解决所有问题,而不只是解决简单问题,所以A选项错误。6、下列叙述中错误的是A、向量是线性结构B、非空线性结构中只有一个结点没有前件C、非空线性结构中只有一个结点没有后件D、只有一个根结点和一个叶子结点的结构必定是线性结构标准答案:D知识点解析:线性结构是n个数据元素的有序(次序)集合。①集合中必存在唯一的一个“第一个元素”;②集合中必存在唯一的一个“最后的元素”;③除最后元素之外,其它数据元素均有唯一的“后件”;④除第一元素之外,其它数据元素均有唯一的“前件”。相对应于线性结构,非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个后继。向量符合线性结构特点。非线性结构也会存在只有一个根结点和叶子结点的情况。7、下列各排序法中,最坏情况下的时间复杂度最低的是A、堆排序B、快速排序C、希尔排序D、冒泡排序标准答案:A知识点解析:堆排序法,最坏情况需要O(nlog2n)次比较。相比以上几种“除希尔排序法外”,堆排序法的时间复杂度最小,故选项A正确。8、以下程序的输出结果是()。#includevoidprt(int*x,int*y,int*z){printf("%d,%d,%d\n",++*x,++*y,*(z++));}main(){inta=10,b=40,c=20;prt(&a,&b,&c);prt(&a,&b,&c);}A、11,42,3112,22,41B、11,41,2012,42,20C、11,21,4011,21,21D、11,41,2112,42,22标准答案:B知识点解析:本题考查的是函数参数的传递及自加运算符。主函数中第一次调用函数“prt(&a,&b,&c);”,此函数中的输出语句“printf("%d,%d,%d\n",++*x,++*y,*(z++));”使得a和b的值均加1,而“*(z++)”由于先执行“z++”,所以c的值不变;第二次调用函数“prt(&a,&b,&c);”使得a和b在上一次的基础上再各自加1(因为形参和实参进行的是地址传递),而c的值仍不变。9、在软件生命周期中,能准确确定软件系统必须做什么和必须具备哪些功能的阶段是A、概要设计B、详细设计C、可行性分析D、需求分析标准答案:D知识点解析:软件需求是指用户对目标软件系统在功能、行为、设计约束等方面的期望。需求分析的任务是发现需求、求精、建模和定义需求的过程。10、设有定义:intx=2;,以下表达式中,值不为6的是()。A、2*x,x+=2B、x++,2*xC、X*=(1+x)D、x*=x+1标准答案:A知识点解析:A选项中逗号表达式先计算第一表达式2*x,然后计算表达式x+=2的值,即x=x+2即4,整个逗号表达式为第二个表达式的值4,所以选择A选项。B选项中首先计算逗号表达式中第一表达式x++,此时x为3,再执行第二个表达式2*x=2*3=6,所以逗号表达式为第二个表达式的值6。C选项的赋值表达式可以表示为x=x*(1+x)=2*(1+2)=6。D选项中的表达式可以表示为x=x*(x+1)=2*3=6。11、以下叙述中正确的是A、a表示一个字符常量B、’\0’表示字符0C、表达式:’a’>’b’的结果是“假”D、’\"’是非法的标准答案:C知识点解析:字符常量可以参加关系运算,按照其存储的ASCII码值进行比较,’a’>’b’不成立,值为假。而’\0’表示NULL,ASCII码值为0。12、有以下程序main(){intx=1,y=0,a=0,b=0switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf("a=%d,b=%d\n",a,b);}程序的运行结果是A、a=2,b=2B、a=1,b=1C、a=1,b=0D、a=2,b=1标准答案:D知识点解析:本题考查的是用switch语句实现多分支选择结构,首先进入第一个switch(x)判断,进入case1中进行嵌套判断.如果switch(y)也成立,a自加1,遇到break,退出嵌套,接着执行case2,a自加为2,b自加为1,遇到break,结束循环,此时a=2,b=1。13、下列对于软件测试的描述中正确的是A、软件测试的目的是证明程序是否正确B、软件测试的目的是使程序运行结果正确C、软件测试的目的是尽可能多地发现程序中的错误D、软件测试的目的是使程序符合结构化原则标准答案:C知识点解析:软件测试是为了发现错误而执行程序的过程。一个好的测试用例是指很可能找到迄今为止尚未发现的错误的用例;一个成功的测试是发现了至今尚未发现的错误的测试。软件测试的目的要以查找错误为中心,而不是为了演示软件的正确功能。14、有以下程序main(){inta=-2,b=0;while(a++&&++b);printf("%d,%dha",a,b);}程序运行后输出结果是A、0,3B、1,2C、1,3D、0,2标准答案:B知识点解析:循环体为空,共执行2次。第一次变量a初值为-2,b初值为0,表达式a++&&++b值为1,同时a的值为-1,b的值为1,第二次循环条件判断以后,a的值为0,b的值2,执行循环体空,第三次判断条件表达式值为0,不执行循环体,而a的值为l,但是表达式a++的值为0,因此不计算表达式++b的值,b的值仍为2。15、负责数据库中查询操作的数据库语言是A、数据定义语言B、数据管理语言C、数据操纵语言D、数据控制语言标准答案:C知识点解析:负责数据库中查询操作的数据库语言是数据操纵语言。16、阅读以下程序#includemain(){intcase;floatprintF:printfi("请输入2个数:");scanf("%d%f",&case,&printF);printf("%d%f\n",case,printF);}该程序在编译时产生错误,其出错原因是A、定义语句出错,printF不能用作用户自定义标识符B、定义语句出错,case是关键字,不能用作用户自定义标识符C、定义语句无错,scanf不能作为输入函数使用D、定义语句无错,printf不能输出case的值标准答案:B知识点解析:case是C语言中的一个关键字,不能用作用户标识符来使用,所以这段程序代码在编译时就会出错。17、有以下程序段:intfun(char*s){char*P;P=s:if(*s==0)return0;while(*++P);return(P—S);}该段程序是用来()。A、计算字符串所占字节数B、实现字符串的赋值C、计算字符串的长度D、将字符串逆序存放标准答案:C知识点解析:在fun()函数中定义了指针p,首先把s地址赋给p,再通过while函数移动指针p,当p指针指向单元为0时,退出while循环,返回此时p和s地址之差,即字符串长度。18、下列选项中,不是面向对象主要特征的是A、复用B、抽象C、继承D、封装标准答案:A知识点解析:面向对象技术是目前流行的系统设计开发技术,它包括面

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论