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

下载本文档

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

文档简介

国家二级C语言机试(选择题)模拟试卷38(共9套)(共225题)国家二级C语言机试(选择题)模拟试卷第1套一、选择题(本题共25题,每题1.0分,共25分。)1、线性表的链式存储结构与顺序存储结构相比,链式存储结构的优点有()。A、节省存储空间B、插入与删除运算效率高C、便于查找D、排序时减少元素的比较次数标准答案:B知识点解析:线性表的顺序存储结构称为顺序表,线性表的链式存储结构称为链表,两者的优缺点如下表所示。2、某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是A、10B、8C、6D、4标准答案:C知识点解析:根据二叉树的性质,在任意二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。3、有以下程序:#includemain(){charch=’Z’;ch=(ch一’A’+1)%26+’A’;putchar(ch);prinff(“\n”);}程序的运行结果是()。A、ZB、YC、BD、A标准答案:D知识点解析:z的ASCII码是90,A的AScII码是65,所以ch=(ch一’A’+1)%26+’A’=26%26+65=65,65对应的字符即A。4、两个或两个以上的模块之间关联的紧密程度称为()。A、耦合度B、内聚度C、复杂度D、连接度标准答案:A知识点解析:耦合度是模块间互相连接的紧密程度的度量;内聚度是一个模块内部各个元素间彼此结合的紧密程度的度量。5、下列各排序法中,最坏情况下的时间复杂度最低的是A、堆排序B、快速排序C、希尔排序D、冒泡排序标准答案:A知识点解析:堆排序法,最坏情况需要O(nlog2n)次比较。相比以上几种“除希尔排序法外”,堆排序法的时间复杂度最小,故选项A正确。6、某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)()。A、3B、4C、6D、7标准答案:D知识点解析:根据二叉树的基本性质:在任意一棵二叉树中,度为0的叶子结点总比度为2的结点多一个,因此本题中度为2的结点为1—1=0个,据此可以知道本题中的二叉树的每一个结点都有一个分支,所以共有7个结点、共7层,即深度为7,选择D。7、下列关于软件工程的描述中正确的是A、软件工程只是解决软件项目的管理问题B、软件工程主要解决软件产品的生产率问题C、软件工程的主要思想是强调在软件开发过程中需要应用工程化原则D、软件工程只是解决软件开发中的技术问题标准答案:C知识点解析:软件工程是建立并使用充善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。软件工程主要思想是强调在软件开发过程中需要应用工程化原则。8、若有定义语句:inta,b,c,*p=&c;,接着执行以下选项中的语句,则能正确执行的语句是()。A、scanf(’’%d’’,a,b,c);B、scanf(’’%d%d%d’’,a,b,c);C、scanf(’’%d’’,p);D、scanf(’’%d’’,&p);标准答案:C知识点解析:本题重点考查的知识点是标准输入函数scanf()。scanf()函数要求,除了第一个参数为格式化字符串以外,其余参数均为相应变量的地址值。本题中,只有p是地址值,因此C选项正确。9、有以下程序:#includevoidfun(char*t,char*s){while(*t!=0)t++;while((*t++=*s++)!=0);}main(){char85[10]=“acc”,aa[10]=“bbxxyy”;fun(ss,aa);prinff(“%s,%s\n”,ss,aa);}程序的运行结果是()。A、ace,bbxxyyB、accbbxxyy,bbxxyyC、accxxyy,bbxxyyD、accxyy,bbxxyy标准答案:B知识点解析:本题重点考查while循环语句的简单应用。在函数fun()中,前一个while循环的作用是:如果形参指针t所指内容不为0,则让t增1,直到它指向0。后一个while循环的作用是:将s所指内容赋给t所指地址,然后两者同时增1,直到赋给t的内容为0。由此可见,函数fun()的作用就是将形参s所指字符串连接到形参t所指字符串末尾,相当于库函数中的streat()。主函数中使用fun()将数组aa中的字符串连接到了数组ss中原有字符串之后,所以执行完后,ss中的字符串为“aeebbxxyy”。程序最后输出的结果是:accbbxxyy,bbxxyy,因此B选项正确。10、软件测试的目的是A、评估软件可靠性B、发现并改正程序中的错误C、改正程序中的错误D、发现程序中的错误标准答案:D知识点解析:软件测试的目的是为了发现程序中的错误,而软件调试是为了更正程序中的错误。11、数据独立性是数据库技术的重要特点之一,所谓数据独立性是指A、数据与程序独立存放B、不同的数据被存放在不同的文件中C、不同的数据只能被对应的应用程序所使用D、以上三种说法都不对标准答案:D知识点解析:数据独立性是指数据库中数据独立于应用程守而不依赖于应用程序,即数据与程序问的互不依赖性。也就是说数据的逻辑结构、存储结构与俘取方式的改变不会影响应用程序。数据的独立性包括物理独立性和逻辑独立性两级。①物理独立性:数据的物理结构(包括存储结构、存取方式等)的改变,如存储设备的更换、物理存储的更换、存取方式改变等都不影响数据库的逻辑结构,从而不致引起应用程序的变化。②逻辑独立性:数据库总体逻辑结构的改变,如修改数据模式、增加新的数据类犁、改变数掘问联系等,不需要相应的应用程序改变,这就是数据的逻辑独立性。12、以下叙述中正确的是A、标识符的长度不能任意长,最多只能包含16个字符B、语言中的关键字不能作变量名,但可以作为函数名C、用户自定义的标识符必须“见名知义”,如果随意定义,则会出编译错误D、标识符总是由字母、数字和下划线组成,且第一个字符不得为数字标准答案:D知识点解析:标识符就是C语言中的变量名、函数名、数组名、文件名、类型名等。C语言合法标识符的命名规则是:①标识符由字母、数字和下划线组成;②第一个字符必须为字母或下划线;⑨大写字母与小写字母被认为是两个不同的字符;④C语言规定了一个标识符允许的字符个数,为32,超过的字符将不被识别。C语言的标识符可分为以下3类:①关键字,不能用于为自定义标识符命名。②预定义标识符。③用户标识符。由用户根据需要定义的标识符称为用户标识符,又称自定义标识符,一般用来给变量、函数、数组等命名,一般做到见名知义,但是没有特殊规定。13、以下能正确定义字符串的语句是A、charstr="\x43":B、charstr[]="\0";C、charstr=";D、charstr[]={’\064’};标准答案:B知识点解析:字符串常量是用一对双括号括起来的一串字符。它用字符数组来存放,不用一对大括号对括起来。14、若有定义和语句:inta,b;scanf("%d,%d,",&a,&B);以下选项中的输入数据,不能把值3赋给变量a、5赋给变量b的是A、3,5B、3,5,C、3,5D、3,5,4标准答案:C知识点解析:在格式控制字符串中插入其他字符,则在输入的时候应该据实加入到输入流中,不能随意加入空格等,否则无法得到正确的输入结果。15、有以下程序#includemain(){inta=1,b=3,c=5;int*p1=&a,*p2=&b,*p=&c;*p=*p1*(*p2);printf("%d\n",c);}执行后的输出结果是A、1B、2C、3D、4标准答案:C知识点解析:该程序中int*p1=&a,*p2=&b,*p=&c;指定义三个指针变量,并赋值,即使p1指向a;p2指向b;p指向c。*p=*p1*(*p2);该条语句是给p所指的存储单元c赋值,就是p1所指的存储单元的值,即a的值,与p2所指的存储单元b的值相乘,也就是c=a*b,等价于c=1*3=3;因此C选项正确。16、设有定义语句:char*aa[2]={"abcd","ABCD"};则以下叙述正确的是A、aa数组的两个元素只能存放含有4个字符的一维数组的首地址B、aa数组的值分别是字符串"abcd"和"ABCD"C、aa是指针变量,它指向含有两个元素的字符型数组D、aa[0]存放了字符串"abcd"的首地址标准答案:D知识点解析:题目中char*aa[2],定义了指针数组aa,有两个元素,aa[0]存放"abcd".地址,而aa[1]存放"ABCD"地址。17、若变量已正确定义并赋值,以下不能构成C语句的选项是A、B++;B、A=a+b;C、a=a+bD、A?a:b;标准答案:C知识点解析:C语言规定,C语句必须以分号";"结束,C选项中没有结束符号,所以错误。18、有以下程序#includemain(){intn,*p=NULL;*p=&n;printf("Inputn:");scanf("%d",&p);printf("outputn:");printf("%d\n",p);}该程序试图通过指针P为变量n读入数据并输出,但程序有多处错误,以下语句正确的是A、intn,*p=NULL;B、*p=&n;C、scanf("%d",&p)D、printf("%d\n",p);标准答案:A知识点解析:选项A表示在程序中,声明定义变量语句“intn,*p=NULL;”定义了整型变量n和指针变量p,并且指针变量p初始化为空。其他的语句都是错误的。其中选项B,&n的地址应存放到指针变量p中,而选项C中数据输入项错误,选项D输出地址信息。19、以下选项中有语法错误的是A、charstr[3][10];str[1]="guest";B、charstr[][10]={"guest"};C、char*str[3];str[1]="guest";D、char*str[]={"guest"};标准答案:A知识点解析:本题考查字符数组的定义和使用。选项A定义了一个二维字符数组,第二句是直接给字符数组赋值错误,C语言中不能直接给字符数组赋值;选项B、C)和D)都是正确的。20、C语言程序中,运算对象必须是整型数的运算符是A、&&B、/C、%D、*标准答案:C知识点解析:%取余运算是二目运算符,且要求运算对象必须为整数,所以选C。21、有以下程序#include<stdio.h>#defineS(x)4*(x)*x+1voidmain(){intk=5,j=2;printf("%d\n",S(k+j));}程序运行后的输出结果是A、197B、143C、33D、28标准答案:B知识点解析:这道题涉及到带参数的宏的定义和替换这个知识点。在程序中定义了带参数的宏S(x),当在主函数中用参数k+j调用宏S时,根据宏替换的原则,则S(k+j)=S(5+2)=4*7*5+2+1=143。22、有以下程序#include#defineS(x)x/xmain(){intk=5,j=2;printf("%d,%d\n",S(k+j),S(j+k));}程序的运行结果是()。A、7,9B、1,1C、7,7D、9,9标准答案:A知识点解析:宏替换是使用宏名代替一个字符串,是一种机械、简单的置换,所以表达式S(k+j)=k+j/k+j=5+2/5+2=7,S(j+k)=j+k/j+k=2+5/2+5=9,答案选A。23、若有以下程序main(){intc;c=13|5;printf("%d\n",c);}则程序的输出结果是A、15B、18C、13D、5标准答案:C知识点解析:按位或(|)的运算规则是:参加运算的两个运算数中,只要两个相应的二进制位中一个为1,则该位的运算结果即为1;只有当两个相应位的数都为0时,该位的运算结果才为0。13的二进制位1101,5的二进制位0101,或运算的结果为1101,因此值为13。24、以下叙述中正确的是A、在scanf函数的格式串中,必须有与输入项一一对应的格式转换说明符B、只能在printf函数中指定输入数据的宽度,而不能在scanf函数中指定输入数据占的宽度C、scanf函数中的字符串,是提示程序员的,输入数据时不必管它D、复合语句也被称为语句块,它至少要包含两条语句标准答案:A知识点解析:在printf和scanf函数中都可以指定数据的宽度,所以B错误,scanf()的格式控制串可以使用其他非空白字符,如逗号,但在输入时必须输入这些字符,以保证匹配,所以C错误?复合语句可以由任意多条语句构成,可以使一条也可以没有,所以D错误。25、结构化程序设计中,下面对goto语句使用描述正确的是A、禁止使用goto语句B、使用goto语句程序效率高C、应避免滥用goto语句D、以上说法均错误标准答案:C知识点解析:结构化程序设计中,要注意尽量避免goto语句的使用,故选C。国家二级C语言机试(选择题)模拟试卷第2套一、选择题(本题共25题,每题1.0分,共25分。)1、以下描述中,不是线性表顺序存储结构特征的是()。A、可随机访问B、需要连续的存储空间C、不便于插入和删除D、逻辑相邻的数据物理位置上不相邻标准答案:D知识点解析:线性表的顺序存储是用一片连续的空间来存放数据元素,其特点是逻辑上相邻的元素在物理位置上也相邻。数据元素之间逻辑上的先后关系自动隐含在物理位置的相邻元素之中,因此不需要另外开辟空间来保存元素之间的关系。2、下面描述中,不属于软件危机表现的是A、软件过程不规范B、软件开发生产率低C、软件质量难以控制D、软件成本不断提高标准答案:A知识点解析:软件危机主要表现在以下6个方面:①软件需求的增长得不到满足:②软件开发成本和进度无法控制;③软件质量难以保证;④软件不可维护或维护程度非常低:⑤软件的成本不断提高;⑥软件开发生产率的提高赶不上硬件的发展和应用需求的增长。3、对关系S和关系R进行集合运算,结果中既包含关系S中的所有元组也包含关系R中的所有元组,这样的集合运算称为()。A、并运算B、交运算C、差运算D、除运算标准答案:A知识点解析:关系的并运算是指,由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元组。4、代码编写阶段可进行的软件测试是A、单元测试B、集成测试C、确认测试D、系统测试标准答案:A知识点解析:单元测试是对软件组成单元进行测试,其目的是检验软件基本组成单位的正确性,测试的对象是软件设计的最小单位是模块,可在代码编写阶段测试。集成测试也称联合测试,将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功。系统测试主要包括功能测试、界面测试、可靠性测试、易用性测试、性能测试。功能测试主要针对包括功能可用性、功能实现程度(功能流程&业务流程、数据处理&业务数据处理)方面测试。5、下列关系表达式中,结果为“假”的是()。A、(3+4)>6B、(31=4)>2C、3<=4‖3D、(3<4)=1标准答案:B知识点解析:在一个表达式中,括号的优先级高,先计算3!=4,为真即1,1>2为假。6、以下程序的输出结果是()。main(){intx=1,y=0;if(!x)y++;elseif(x==0)if(x)y+=2;elsey+=3;printf(’’%d\n’’,y);}A、一1B、0C、1D、2标准答案:B知识点解析:如果不满足if语句的条件,函数将不执行本题中x=1,if和elseif的条件都不满足,故y值不改变输出。7、以下不合法的字符常量是A、\’B、’\\’C、’\018’D、’\xcc’标准答案:C知识点解析:在C语言中,一个字符常量代表ASCⅡ字符集中的一个字符,在程序中用单引号把一个字符括起来用为字符常量。转义字符常量也是必须括在一对单引号内,以一个反斜线开头后跟一个特定的字符,用来代表菜一个特定的ASCII字符。在选项C)中,’\018’是用八进制数来代表一个字符常量,所以其中的数字只能小于8,并不包括8。8、在数据库中,数据模型包括数据结构、数据操作和A、查询B、数据类型C、关系运算D、数据约束标准答案:D知识点解析:在数据库系统中的数据模型有三个要素:数据结构、数据操作和数据的约束条件。其中数据的约束条件包括三种:实体完整性约束条件、参照完整性约束条件和用户定义的完整性约束条件。因此选项D正确。9、若有定义typedefcharT[10];T*a;上述定义中a的类型与下面选项中完全相同的是A、char(*a)[10];B、char*a;C、chara[10];D、char*a[10];标准答案:D知识点解析:题目中利用typedef定义了字符数组类型T,而后定义了该类型的指针a,因此a为指针数组。10、有以下结构体说明、变量定义和赋值语句structSTD{charname[10];intage;charsex;}s[5],*ps;ps=&s[0];则以下scanf函数调用语句有错误的是A、scanf("%d",&s[0].age);B、scanf("%c",&(ps->sex));C、scanf("%s",s[0].name);D、scanf("%d",ps->age);标准答案:D知识点解析:程序段定义了结构体变量数组s[5]和指针变量ps,然后ps指向数组s[5]中的第一个元素,因而ps->age引用s[0].age。因为在输入scanf()函数中,第2个参数应该表示为地址变量,而选项A)表示的值,而不是一个地址值。11、以下叙述中正确的是A、函数既可以直接调用自己,也可以间接调用自己B、任何情况下都不能用函数名作为实参C、函数的递归调用不需要额外开销,所以效率很高D、简单递归不需要明确的结束递归的条件标准答案:A知识点解析:一个C语言源程序可以由一个或多个源文件组成,每个源文件可由一个或多个函数组成,各函数之间是平行的,除了主函数外,函数之间可以相互调用,甚至C语言中的函数可以直接或间接地自己调用自己,称之为递归调用,该调用主要用于把要解决的问题转化为一个新的问题,而这个新问题的解决方法仍与原来的解法相同,只是所处理的对象有规律地涕增或递减,可以应用这个转化过程使问题得到解决,同时为了有效使用递归调用必定要有一个明确的结束递归的条件。而每次进行递归调用时候,需要利用栈保存现场信息,因此并不会提高效率,选项C)和选项D)不正确。函数名表名了函数的入口地址,如果函数的形参为指向函数的指针变量,那么对应的实参必须为函数名,因此函数名可以为函数的参数,选项B)错误。12、以下叙述中错误的是A、函数的返回值类型不能是结构体类型,只能是简单类型B、只要类型相同,结构体变量之间可以整体赋值C、可以通过指针变量来访问结构体变量的任何成员D、函数可以返回指向结构体变量的指针标准答案:A知识点解析:函数的返回值类型可以是结构体类型。结构体变量之间可以相互复制。13、以下叙述中正确的是()。A、每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元B、一条语句只能定义一个数组C、数组说明符的一对方括号中只能使用整型常量,而不能使用表达式D、在引用数组元素时,下标表达式可以使用浮点数标准答案:A知识点解析:同类元素的集合称为数组,数组元素在内存中占据连续的存储空间,答案A)正确。在使用逗号运算符的情况下,一条语句可以定义多个数组,选项B)错。方括号中可以为整型变量或者常量表达式,选项C)错。数组元素在数组中的下标为整型常量或者变量构成的整型表达式,不能为浮点数,选项D)错。答案选A)。14、若变量已正确定义,有以下程序段i=0;doprintf("%d,",i);while(i++);printf("%d\n",i);其输出结果是A、0,0B、1,1C、0,1D、程序进入无限循环标准答案:C知识点解析:do…while循环的执行过程如下:①执行do后面的循环体中的语句。②计算while后一对圆括号中表达式的值。当值为非0时,转去执行步骤①:当值为0时,执仃步骤③。③退出do…whiIe循环。对于本题变量i的初始值等于“0”,接着执行do后而的循环体中的语句,输出变量i的值0。再判断while后面括号中表达式i++的值,其值为0,所以循环结束。此时变量i的值经过自加已经变为1,所以再次输出i值“1”。15、下列选项中,能正确定义数组的语句是A、intnum[];B、intN=2008;intnum[N];C、intnum[0.2008];D、#defineN2008intnum[N];标准答案:D知识点解析:在定义一维数组时,数组的下标应该是一个确定的整数值。要注意的是在定义二维数组时,其第一维下标可以省略,但第二维下标不能省略。16、有以下程序段charname[20];intnum;scanf("name=%snum=%d",name,&num);当执行上述程序段,并从键盘输入:name=Lilinum=1001后,name的值为A、name=LiliB、Lilinum=C、name=Lilinum=1001D、Lili标准答案:D知识点解析:在题目中以字符串的形式给字符数组赋值,所以字符数组name的值为Lili。17、有以下程序#includeintfun(){staticintx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=2;i++)s=fun();printf("%d\n",s);}程序运行后的输出结果是()。A、4B、1C、0D、8标准答案:A知识点解析:fun()中的x为一个静态变量。静态变量在编译时就被分配存储空间,所占用存储单元直到程序结束时才释放,它的值在程序运行过程中一直存在,且变量的初始化只进行一次。所以第一次调用函数fun()时,得s=2;第二次调用函数fun()时,x仍保留第一次调用时的计算结果2,计算后s=4,所以答案选A。18、以下选项中有语法错误的是A、charstr[3][10];str[1]="guest";B、charstr[][10]={"guest"};C、char*str[3];str[1]="guest";D、char*str[]={"guest"};标准答案:A知识点解析:本题考查字符数组的定义和使用。选项A)定义了一个二维字符数组,第二句是直接给字符数组赋值错误,C语言中不能直接给字符数组赋值;选项B)、C)和D)都是正确的。19、有以下程序#includemain(){inta[]={2,4,6,8,10},x,*p,y=1;p=&a[1];for(x=0;x<3;x++)y+=*(p+x);printf("%d\n",y);}程序的输出结果是()。A、19B、13C、11D、15标准答案:A知识点解析:考查指针与一维数组。语句p=&a[1];意味着将指针p指向数组a的第二个元素,p+1则是指向数组a的第三个元素,同理,p+x则是指向数组a的第x+2个元素,x取值为0、1、2,然后用y和对应数组的元素累加,y=1,即是1+2+4+6+8=19,结果选A)。20、以下叙述中正确的是A、int*p1;int**p2;int*p3;都是合法的定义指针变量的语句B、指针变量只能通过求地址运算符(&)来获得地址值C、语句p=NULL;与p=\0;是等价的语句D、语句p=NULL;执行后,指针p指向地址为0的存储单元标准答案:A知识点解析:B选项描述不正确,指针变量可以通过求地址运算符(&)来获得地址值,可以通过指针变量获得地址值,还可以通过标准函数获得地址值;C选项中,p=NULL;和p=0;或p=’\0’;等价;D选项中,语句p=NULL;执行后,指针p并不是指向地址为0的存储单元,而是具有一个确定的值-"空"。因此A选项正确。21、有以下程序#include<stdio.h>structtt{intx;structtt*y;)*p;structtta[41={20,a+1,15,a+2,30,a+3,17a};main(){inti;p=a;for(i=1;i<=2;i++){printf("%d,",p->x);p=p->y;}}程序的运行结果是A、20,15,B、30,17C、15,30,D、20,30,标准答案:A知识点解析:程序定义了结构体类型tt,其成员包括一个整型数据x和指向其自身结构的指针变量y。程序在定义结构体数组a的同时对其进行了初始化。其元素a[0]的成员y被赋值为元素a[1]的地址,a[1].y被赋值为a[2]的地址,a[2].y被赋予a[3]的地址,a[3].y被赋予a[0]的地址。这就形成了一个单向的循环链表,每个元素的指针成员都指向下一个元素的地址。在主函数中,通过一个for循环语句,输出该链表前2个节点数值成员的值,即a[0].x和a[1].x。22、以下叙述中正确的是A、如果p是指针变量,则*p表示变量P的地址值B、如果p是指针变量,则&p是不合法的表达式C、在对指针进行加、减算术运算时,数字1表示1个存储单元的长度D、如果p是指针变量,则*p+1和*(p+1)的效果是一样的标准答案:C知识点解析:移动指针是对指针变量加上或减去一个整数,或通过赋值运算,使指针变量指向相邻的存储单元。因此,只有当指针指向一串连续的存储单元时,指针的移动才有意义。当指针指向一串连续的存储单元时,可以对指针变量进行加上或减去一个整数的运算,也可以对指向同一串连续存储单元的两个指针进行相减的运算。除此之外,不可以对指针进行任何其他的算术运算。C语言提供了一个间接访问运算符(*),又称间址运算符,它是一个单目运算符,优先级比较高,高于普通的算术运算符,但是低于()运算符,因此*p+1和*(p+1)的含义是不一样。当指针变量中存放了一个确切的地址值时,就可以用“间接访问运算符”通过指针来引用该地址的存储单元。23、下列关于C语言文件的叙述中正确的是A、文件由结构序列组成,可以构成二进制文件或文本文件B、文件由一系列数据依次排列组成,只能构成二进制文件C、文件由数据序列组成,可以构成二进制文件或文本文件D、文件由字符序列组成,其类型只能是文本文件标准答案:C知识点解析:在C语言中,对输入、输出的数据都按“数据流”的形式进行处理。数据可以按文本形式或二进制形式存放在介质上,因此文件可以按数据的仔放形式分为文本文件和二进制文件。24、有以下程序#include#includevoidfun(int*p1,int*p2,int*s){s=(int*)calloc(1,sizeof(int));*s=*p1+*p2;free(s);}main(){inta[2]={1,2},b[2]={40,50},*q=a;fun(a,b,q);printf("%d\n",*q);}程序运行后的输出结果是A、42B、41C、1D、0标准答案:C知识点解析:本题考查把数组名作为函数参数,执行fun函数后,s的值并没有发生变化,仍然是指向a,所以输出结果为1,选项C正确。25、有以下程序#includevoidfun(char*c,intd){*c=*c+1;d=d+1;printf("%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)中,*c=’a’,d=65。*c+1=’b’,d+1=66,printf("%c,%c,",*c,d);输出bB因为指针c指向地址的值为b,此时b=*c=’b’;函数返回执行printf("%c,%c\n",b,a);输出b,A,因此A选项正确。国家二级C语言机试(选择题)模拟试卷第3套一、选择题(本题共25题,每题1.0分,共25分。)1、下列叙述中正确的是A、算法的效率只与问题的规模有关,而与数据的存储结构无关B、算法的时间复杂度是指执行算法所需要的计算工作量C、数据的逻辑结构与存储结构是一一对应的D、算法的时间复杂度与空间复杂度一定相关标准答案:B知识点解析:算法的时间复杂度是指执行算法所需要的计算工作量。算法的工作量用算法所执行的基本运算的次数来度量,而算法所执行的基本运算次数是问题规模的函数;算法的空间复杂度一般是指执行这个算法所需要的内存空间。算法的时间复杂度与空间复杂度并不相关。数据的逻辑结构就是数据元素之间的逻辑关系,它是从逻辑上描述数据元素之间的关系,是独立于计算机的;数据的存储结构是研究数据元素和数据元素之间的关系如何在计算机中表示,它们并非一一对应。算法的执行效率不仅与问题的规模有关,还与数据的存储结构有关。2、在长度为64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为A、63B、64C、6D、7标准答案:B知识点解析:顺序查找又称顺序搜索。顺序查找一般是指在线性表中查找指定的元素,其基本方法是:从线性表的第一元素开始,依次将线性表中的元素与被查找的元素进行比较,若相等则表示找到(即查找成功),若线性表中所有元素都与被查元素进行了比较但都不相等,则表示线性表中没有要找的元素(即查找失败)。如果线性表中的第一个元素就是要查找的元素,则只需要做一次比较就查找成功;但如果要查找的元素是线性表中的最后一个元素,或者要查找元素不在线性表中,则需要与线性表中所有元素进行比较,这是顺序查找的最坏情况,比较次数为线性表的长度。3、sizeof(double)是A、一个双精度型表达式B、一个整型表达式C、一个不合法的表达式D、一种函数调用标准答案:B知识点解析:sizeof关键字为C语言的运算符,用于测试()内类型其变量所占内存,表达式结果返回十进制整数,因此为整型表达式,表明变量所占的内存字节数。4、在希尔排序法中,每经过一次数据交换后A、能消除多个逆序B、只能消除一个逆序C、不会产生新的逆序D、消除的逆序个数一定比新产生的逆序个数多标准答案:A知识点解析:希尔排序法(缩小增量法)属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序的方法。插入排序能够消除多个逆序,也会产生新的逆序。消除的逆序与新产生的逆序有多有少。5、软件设计中模块划分应遵循的准则是A、低内聚低耦合B、高内聚低耦合C、低内聚高耦合D、高内聚高耦合标准答案:B知识点解析:耦合性和内聚性是模块独立性的两个定性标准,各模块的内聚性越强,则耦合性越弱。软件设计应该遵循高内聚低耦合。6、在面向对象方法中,实现信息隐蔽是依靠A、对象的继承B、对象的多态C、对象的封装D、对象的分类标准答案:C知识点解析:对象的封装性是指从外部看只能看到对象的外部特征,即只需知道数据的取值范围和可以对该数据施加的操作,而不需要知道数据的具体结构以及实现操作的算法。对象的内部,即处理能力的实行和内部状态,对外是不可见的。从外面不能直接使用对象的处理能力,也不能直接修改其内部状态,对象的内部状态只能由其自身改变。7、设有定义:inta;floatb;执行scanf(”%2d%f.’,&a,&b);语句时,若从键盘输入876543.0,则a和b的值分别是()。A、87和6.0B、876和543.0C、87和543.0D、76和543.0标准答案:A知识点解析:scanf()函数的一般形式为:scan(格式控制,地址表列)。其中,“格式控制”是用双引号括起来的字符串,也称为“转换控制字符串”,它包括两种信息:①格式说明,由“%”和格式字符组成;②普通字符,即需要原样输入的字符。“地址表列”是需要接收输入数据的一系列变量的地址。本题中的“格式控制”是“%2d%f”,“%2d”的意思是要输入一个整数,但该整数最宽只占2个字符,而“%2d”是要输入一个浮点数。题目要求输入的是876空格543.0,所以scanf()函数将87赋给a,将6赋给b。8、数据库管理系统中负责数据模式定义的语言是A、数据定义语言B、数据管理语言C、数据操纵语言D、数据控制语言标准答案:A知识点解析:数据库管理系统一般提供相应的数据语言,它们分别是:数据定义语言,负责数据的模式定义与数据的物理存取构建;数据操纵语言,负责数据的操纵,包括查询及增、删、改等操作;数据控制语言,负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等功能。9、软件(程序)调试的任务是A、诊断和改正程序中的错误B、尽可能多地发现程序中的错误C、发现并改正程序中的所有错误D、确定程序中错误的性质标准答案:A知识点解析:在对程序进行了成功的测试之后将进入程序调试(通常称Debug,即排错)。程序调试的任务是诊断和改正程序中的错误;它与软件测试不同,软件测试是尽可能名地发现软件中的错误。先要发现软件的错误,然后借助于一定的调试工具去执行并找出错洪的具体位置。软件测试贯穿整个软件生命周期,调试主要在开发阶段。10、执行下列程序时输入“456<空格>789<空格>123<回车>”,输出结果是()。#includemain(){charm[80];intc,i;scanf("%c",&c);scanf("%d",&i);scanf("%s",&m);printf("%c,%d,%s\n",c,i,m);}A、456,789,123B、4,789,123C、4,56,789,123D、4,56,789标准答案:D知识点解析:scanf。函数中的“%c”表示通过键盘只读入一个字符型的数据,“&c”表示将该数据赋值给c,所以c=4。另外,以“%d”格式读入数据时,只有遇到空格或者换行等间隔符时才停止读入,所以i=56,m=789。11、有以下程序:#include<stdio.h>main(){inti,t[][3]={9,8,7,6,5,4,3,2,1};for(i=0;i<3;i++)printf("%d",t[2-i][i]);}程序的运行结果是()。A、357B、753C、369D、751标准答案:A知识点解析:二维数组t[][3]实际上指t[3][3]={{9,8,7},{6,5,4},{3,2,1}},通过循环语句for语句可以得到i=0,t[2][0]=3、i=1,t[1][1]=5、i=2,t[0][2]=7、i=3时循环结束,即t[2][0]=3、t[1][1]=5、t[0][2]=7,因此A选项正确。12、以下程序段中的变量已正确定义for(i=0;i<4;i++,i++)for(k=1;k<3;k++);printff’’*’’);程序段的输出结果是A、********B、****C、**D、*标准答案:D知识点解析:本题考查循环语句,题中第二个(内层)for循环之后有一个分号,意思是每次循环中的操作为空,不执行任何操作。再循环结束后执行printf语句,即只打出一个*。13、设intx[2][3];则以下关于二维数组x的叙述错误的是()。A、数组x可以看作是由x[0]和x[1]两个元素组成的一维数组B、可以用x[0]=0;的形式为数组所有元素赋初值0C、元素x[0]可看作是由3个整型元素组成的一维数组D、x[0]和x[1]是数组名,分别代表一个地址常量标准答案:B知识点解析:C语言中二维数组的元素在内存中占一系列连续的存储单元。数组元素在内存中的排列顺序是先存放第0行的元素,再存放第1行的元素……称这种存放顺序为按行存放。可以把一个二维数组看成是一个一维数组,每个数组元素又是包含有若干个元素的一维数组。另外在给二维数组赋初值时可以不用含花括号对。例如,inta[4][3]={1,2,4,5};在编译时,系统将按a数组元素在内存中排列的顺序,将花括号内的数据一一对应地赋给各个元素,若数据不足,系统将给后面的元素自动补初值0。以上将给a数组第一行的元素和第二行的第一个元素依次赋予1、2、4、5,其他元素的初值都为0。14、以下叙述中正确的是A、在赋值表达式中,赋值号的右边可以是变量,也可以是任意表达式B、a是实型变量,a=10在C语言中是允许的,因此可以说:实型变量中可以存放整型数C、若有inta=4,b=9;执行了a=b后,a的值已由原值改变为b的值,b的值变为0D、若有inta=4,b=9;执行了a=b;b=a;之后,a的值为9,b的值为4标准答案:A知识点解析:选项B)中a=10,在赋值时会把10自动转换为double类型然后赋值,实型变量中不可能存放整型。而选项C)中执行a=b后,b的值不变还是9,选项D)中执行a-b;b=a;后,a的值为9,b的值也为9。15、以下选项中不能作为C语言合法常量的是A、cd’B、0.1e+6C、"ia"D、"\011"标准答案:A知识点解析:常量指的是在程序的运行过程中,其值不能被改变的量。在C语言中,包括整型常量、实型常量、字符常量和字符串常量等类型。选项B)0.1e+6是用指数形式表示的实型常量。在C语言中,用以“e”或“E”后一个整数来表示以10为底的幂数,以用这种形式表示实型常量时要注意C语言的语法规定,字母e或E之前必须要有数字,且e或E后面的指数必须为整数,并且在字母e或E的前后以及数字之间不得插入空格。选项C)中用双引号括起来表示的字符串“\a”。选项D)中’\011’表示用单引号括起来的转义字符八制进数011。选项A)表示的字符常量是非法的,在用单引号表示的字符常量中,只能包含一个字符,而选项A)中包含两个字符。16、下列结构体的定义语句中错误的是()。A、gtruetord{intx;inty;intz;}structorda;B、struetord{intx;inty;intz;};struetorda;C、structord{intx;inty;intz;}a;D、struet{intx;inty;intz;}a;标准答案:A知识点解析:A选项错误,不能在定义结构体的同时,又用结构体类型名定义变量,应该写成B选项或者D选项的格式。17、有以下程序main(){inta=-2,b=0;while(a++&&++b);printf("%d,%dkn",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的值为1,但是表达式a++的值为0,因此不计算表达式++b的值,b的值仍为2。18、若有定义:floatx=1.5;inta=1,b=3,c=2;则正确的switch语句是()。A、switch(a+b){case1:printf("*\n");case2+1:printf("**\n");}B、switch((int)x);{case1:printf("*\n");case2:printf("**\n");}C、switch(x){case1.0:printf("*\n");case2.0:printf("**\n");}D、switch(a+b){case1:printf("*\n");casec:printf("**\n");}标准答案:A知识点解析:switch(表达式)后不能有分号,选项B)错误;switch语句的圆括号中表达式的值必须为整型或者字符型,不能为实型,选项C)错误;case后面的表达式可以是求得整型量和字符型量的常量表达式,但是常量表达式中不能含有变量,选项D)错误;答案选A)。19、定义学生、教师和课程的关系模式STC(SNO,SN,SA,TN,CN,G),其中的六个属性分别为学生的学号、姓名、年龄、教师的姓名、课程名以及学生的成绩,则该关系为A、第一范式B、第二范式C、第三范式D、BCNF范式标准答案:A知识点解析:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。简单的说,就是每一个列(属性)只有一个,没有重复。第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。对于本题学生、教师和课程的关系模式STC(SNO,SN,SA,TN,CN,G),其中的六个属性分别为学生的学号、姓名、年龄、教师的姓名、课程名以及学生的成绩。六个属性都是不可分的基本数据项。所以这个关系模式是第一范式。选项A正确。20、表达式a+=a-=a=9的值是A、-9B、0C、18D、9标准答案:B知识点解析:第一步a=9,然后计算a-a的值,并将此值赋给a,因此此时a=0,最后计算a+a,并将此值赋给a,因此最终结果为0。21、有以下程序intfun(intn){if(n==1)return1;Elsereturn(n+fun(n-1));}main(){intx;scanf("%d",&x);x=fun(x);printf("%d\n",x);}执行程序时,给变量x输入10,程序的输出结果是A、54B、65C、45D、55标准答案:D知识点解析:在C语言中函数可以递归调用,即直接或间接地自己调用自己。本题在函数intfun(intn)的定义中又出现了对函数fun的调用,所以函数fun是递归函数。因而在主函数中调用x=fun(x)时,当输入10赋给变量x时,递归调用的过程为:fun(10)=10+fun(9)=10+9+fun(8)=10+9+8+fun(7)=10+9+8+7+fun((6)=10+9+8+7+6+fun(6)=10+9+8+7+6+5+fun(4)=10+9+8+7+6+5+4+fun(3)=10+9+8+7+6+5+4+3+fun(2)=10+9++8+7+6+5+4+3+2+fun(1)=10+9+8+7+6+5+4+3+2+1=5522、若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是A、0B、2C、1D、不知道a的值,不能确定标准答案:C知识点解析:在逻辑表达式中,a||b,只有在a跟b都为0时,表达式的结果才为0。在题中所给的表达式中a要么等于1,要么不等于1,肯定会有一方的值不为真,表达式值为1。23、有三个关系R、S和T如下:由关系R和S通过运算得到关系T,则所使用的运算为。A、笛卡尔积B、交C、并D、自然连接标准答案:D知识点解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据T关系中的有序组可知R与S进行的是自然连接操作。24、有下列程序:#include<stdio.h>/*fun函数的功能是将a所指数组元素从大到小排序*/voidfun(int*a,intn){intt,i,j;for(i=0;i<n-1.j++)ford=i+1;j<n;j++)if(a[i]<a[j]){t=a[i];a[i]=a[j];a[i]=t;}}main(){intc[10]={1,2,3,4,5,6,7,8,9,0},i;fun(c+4,6);for(i=0;i<10;i++)printf("%d,",c[i]);printf("\n");}程序的运行结果是A、1.2,3,4,9,8,7,6,5,0,B、0.9,8,7,6,5,1,2,3,4,C、0.9,8,7,6,5,4,3,2,1,D、1,2,3,4,5,6,7,8,9,0,标准答案:A知识点解析:fun()函数的功能是对数组a[]的元素从大到小进行排序。所以在主函数执行fun(c+4,6)语句时,将从数组c的第5个元素开始的后6个元素进行从大到小排序。排序之后,数组c的内容变为{1,2,3,4,9,8,7,6,5,0}。25、若有定义“inta,b,c,*p=&c;”,接着执行以下选项中的语句,则能正确执行的语句是()。A、scanf("%d",a,b,c);B、scanf("%d%d%d",a,b,c);C、scanf("%d",p);D、scanf("%d",&p);标准答案:C知识点解析:本题重点考查格式输入函数scanf。seanf函数要求:输入的变量为地址形式。4个选项中,C选项符合要求。故本题答案为C选项。国家二级C语言机试(选择题)模拟试卷第4套一、选择题(本题共25题,每题1.0分,共25分。)1、下列各组排序法中,最坏情况下比较次数相同的是()。A、简单选择排序与堆排序B、简单插入排序与希尔排序C、冒泡排序与快速排序D、希尔排序与堆排序标准答案:C知识点解析:对于长度为n的线性表,最坏情况下查找或排序的次数如下表:2、某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)A、3B、4C、6D、7标准答案:D知识点解析:根据二叉树的性质,度为0的结点(即叶子结点)总是比度为2的结点多一个。题目中的二叉树的叶子结点为1,因此度为2的结点的数目为0,故该二叉树为7层,每层只有一个结点。3、设一棵完全二叉树共有700个结点,则此二叉树中的叶子结点数为A、85B、120C、250D、350标准答案:D知识点解析:①具有n个结点的完全二叉树的深度为[long2n]+1,计算出该完全二叉树的深度为10。②设度为0的结点(即叶子结点)为n0,度为1的结点为n1,度为2的结点为n2,总结点数为n,深度为k。n=n1+n2+n0,由于n0=n2+1则n2=n0-1,故n=n1+n0-1+n0=n1+2n0-1。由于完全二叉树中度为1的结点数只有两种可能:0或1。③假设度为1的结点数为0即满二叉树,根据满二叉树的定义,其2m-1个结点,根据以上计算所得的深度10来计算,应有210-1=1024-1=1023个结点,显然与题目中700个结点不符。因此,度为1的结点数必然为1。故n=n1+2n0-1=1+2n0-1=2n0,则n0=n/2=700/2=350。4、以下叙述中正确的是A、字符变量在定义时不能赋初值B、同一英文字母的大写和小写形式代表的是同一一个字符常量C、字符常量可以参与任何整数运算D、转义字符用@符号开头标准答案:C知识点解析:一个字符常量代表ASCII字符集中的一个字符,在C程序中,字符常量可参与任何整数运算,转义字符以一个反斜线开头后跟一个特定的字符。5、设数据元素的集合D={1,2,3,4,5},则满足下列关系R的数据结构中为线性结构的是()。A、R={(1,2),(3,2),(5,1),(4,5)}B、R={(1,3),(4,1),(3,2),(5,4)}C、R={(1,2),(2,4),(4,5),(2,3)}D、R={(1,3),(2,4),(3,5),(1,2)}标准答案:B知识点解析:A选项2的前面有1和3两个数值,带有不确定性;c选项2的后面有4和3两个数值;D选项1的后面有3和2两个数值,所以只有B选项是线性结构。6、软件设计中模块划分应遵循的准则是A、低内聚低耦合B、高内聚低耦合C、低内聚高耦合D、高内聚高耦合标准答案:B知识点解析:耦合性与内聚性是模块独立性的两个定性标准。一般一个较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。7、有以下程序#includemain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){ease0:a++;break;case1:b++;break;}case2:a++;b++;break;}printf("a=%d,b=%d\n",a,b);}程序运行后的输出结果是A、a=1,b=lB、a=1,b=0C、a=2,b=1D、a=2,b=2标准答案:C知识点解析:本题考查的是用switch语句实现多分支选择结构,首先进入第一个switch(x)判断,进入case1中进行嵌套判断,如果switch(y)也成立,a自加1,遇到break,退出嵌套,接着执行case2,a自加为2,b自加为1,遇到break,结束循环,此时a=2,b=1。8、设有定义: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选项。9、“商品”与“顾客”两个实体集之间的联系一般是A、一对一B、一对多C、多对一D、多对多标准答案:D知识点解析:实体集间的联系的个数可以是单个也可以是多个。两个实体集之间的联系实际上是实体集间的函数关系,这种关系有三种:一对一的联系,简记为1:1;一对多或多对一联系,简记为1:m或m:1:多对多联系,简记为m:n。本题中“商品”与“顾客”两个实体集之间的联系是多对多联系。因为一种“商品”可以被多个“顾客”购买,而一个“顾客”也可以购买多个“商品”10、设有语句typedefstruetTT{charc;inta[4];}CIN;,则下列叙述中正确的是()。A、CIN是struetTT类型的变量B、,IT是struct类型的变量C、可以用TT定义结构体变量D、可以用CIN定义结构体变量标准答案:D知识点解析:本题考查typedef重新声明一种结构体类型。其中CIN为结构体类型名,而不是结构体变量,所以D选项正确。11、下列结构体的定义语句中错误的是()。A、structord{intx;inty;intz;}structorda;B、structord{intx;inty;intz;};structorda;C、structord{intx;inty;intz;}a;D、struct{intx;inty;intz;}a;标准答案:A知识点解析:A选项错误,不能在定义结构体的同时,又用结构体类型名定义变量,应该写成B选项或者D选项的格式。12、关于地址的叙述中错误的是()。A、改变函数形参的值,不会改变对应实参的值B、函数可以返回地址值C、当在程序的开头包含头文件stdio.h时,可以给指针变量赋:NULLD、可以给指针变量赋一个整数作为地址值标准答案:D知识点解析:C语言中指针变量的值只能是存储单元地址,而不能是一个整数,选项D的描述错误。函数可以返回内存空间的地址,同时函数形参和实参分别占用不同的内存单元,改变形参的值不会改变对应实参的值,在头文件stdio.h中,NULL被定义为void型的指针。13、设floata[10],*s=a;以下能够代表数组元素a[3]的是()。A、(*s)[3]B、*s[3]C、*s+3D、*(s+3)标准答案:D知识点解析:C语言中,指针可以指向一个数组,语句*s=a,使用指针变量s指向一维数组a的首地址,所以*(s+3)表示的是引用数组a[3]。14、有以下程序#includemain(){inta,b,c=241;a=c/100%9;b=(-1)&&(-1);printf("%d,%d\n",a,b);}程序运行后的输出结果是()。A、2,1B、6,1C、6,0D、2,0标准答案:A知识点解析:考查运算符与表达式。若除法运算符"/"的参与量均为整型,则结果也为整型,所以a=2。在C语言中,用非0表示真,用0表示假,所以逻辑表达式"(-1)&&(-1)"的结果为真,b=1,答案选A。15、C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述正确的是A、关键字可用作用户标识符,但失去原有含义B、在标识符中大写字母和小写字母被认为是相同的字符C、用户标识符可以由字母和数字任意顺序组成D、预定义标识符可用作用户标识符,但失去原有含义标准答案:D知识点解析:预定义标识符是C语言中的标识符,在C语言中也有特定的含义,如函数pfintf、scanf、sin等和编译预处理命令名(如define和include)。预定义标识符可以作为用户标识符使用,只是这样会失去系统规定的原义。16、若有以下定义和语句#includechars1[10]="abcd!",*s2="\n123\\";printf("%d%d\n",strlen(s1),strlen(s2));则输出结果是A、107B、105C、55D、58标准答案:C知识点解析:strlen函数返回字符串的长度,求字符串长度时,遇到结束标志’\0’为止,但是长度不包括结束标识。字符数组s1的后5个元素没有赋值,都为’\0’,即"abcd!"后为’\0’。所以strlen(s1)的值为5。字符指针s2所指向的字符串中,\n为转义字符换行符,表示1个字符,\\也为转义字符,代表\,也是1个字符,其后为字符串结束标识’\0’;所以strlen(s2)的值也为5。因此C选项正确。17、程序中已构成如下图所示的不带头结点的单向链表结构,指针变量s、p、q均已正确定义,并用于指向链表结点,指针变量s总是作为头指针指向链表的第一个结点。若有以下程序段:q=s;s=s->next;p=s;while(p->next)p=p->next;p->next=q;q->next=NULL;该程序段实现的功能是A、尾结点成为首结点B、首结点成为尾结点C、删除首结点D、删除尾结点标准答案:B知识点解析:分析程序可知,程序段首先让:q指向链表的首结点,s指向链表的第二结点,p此时指向链表的第二个结点。然后在while循环中,当p的后继结点非空时,让p指向链表的最后一个结点,退出循环。然后让尾结点指向首结点,并使首结点的后继结点为NULL。所以最终实现链表的首结点成为尾结点。18、有以下程序voidfun(inta,intb,intC){a=b;b=c;c=a;}main(){inta=10,b=20,c=30;fun(a,b,@C)@;printf("%d,%d,%d\n",c,b,a);)程序运行后的输出结果是A、10,20,30B、20,30,10C、30,20,10D、0,0,0标准答案:C知识点解析:函数fun中采用了变量作为参数,那么参数传递以后,形参a,b,c的变化对于实参a,b,c是没有影响的,因此主函数中a,b,c的值经过fun调用以后,值没有变化。19、有以下程序段intn,t=1,s=0;scanf("%d",&n);do{s=s++;t=t-2;}while(t!=n);为使此程序段不陷入死循环,从键盘输入的数据应该是A、任意正奇数B、任意负偶数C、任意正偶数D、任意负奇数标准答案:D知识点解析:本题考查基本输入和循环。程序代码的功能是通过scanf给变量n赋值,在do…while循环中,s变量自增,t变量每次减2,t的初值为1,循环执行执行一次后t的值变成-1,然后是-3、-5…,直到t的值和n的值相同循环结束。从t的值的变化可知,t是一个变化的负奇数,因此输入的n如果是负奇数,则循环能退出,否则是死循环。20、有以下程序#includemain(){inta,b;for(a=1,b=1;a<=100;a++){if(b>=20)break;if(b%3==1){b=b+3;continue;}b=b-5;}printf("%d\n",a);}程序的输出结果是()。A、8B、10C、9D、7标准答案:A知识点解析:考查break和continue的用法。break语句用于循环体,其作用是跳出当前层循环,continue语句是跳过当前循环层余下未执行的语句,继续执行下一次循环。该程序中的for语句的循环条件是a小于等于100,当b的值大于等于20的时候就跳出循环并输出当前a的值。b值的变化逻辑是每次判定"b%3"的值若为1,则b自增3,否则,b自减5。其实该程序中,选择语句"if(b%3==1)"的判定条件一直为真,所以b的值为"1+a*3",易求得满足跳出条件的a值为8,答案选A。21、设有定义:inta=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;}标准答案:A知识点解析:在C语言中,用分号表示一条语句的结束,用{}把几条语句放在一块表示一个语句块,其整体表示一个功能。因而在题目给出的四个选项中,选项B)、C)、D)表示的功能相同,而选项A)表示的是一条if语句,两条赋值语句。22、有以下程序fun(intx,inty)main(){staticintm=0,i=2;{intj=l,m=1,k;i+=m+1;m=i+x+y;returnm;k=fun(j,m);printf("%d,",k);}k=fun(j,m);printf("%d\n",k);}执行后的输出结果是A、5,5B、5,11C、11,11D、11,5标准答案:B知识点解析:子函数fun(intx,inty),将变量m和i声明为局部静态变量,因此第1次调用主函数后,局部静态变量m和i的值为5和3,第1次函数调用结束时,它们的值不释放保持不变,所以第2次调用时,局部静态变量m和i的初始值分别为5和3,即在执行“i+=m+1”时,i的值为9,因此最终m的值为11。23、有如下程序#includeintsum(inta,intb){returna+b-2;}main(){inti;for(i=0;i<5;i++)printf("%d",sum(i,3));printf("\n");}程序运行后的输出结果是()。A、12345B、01234C、45678D、54321标准答案:A知识点解析:函数fun()的作用是返回a+b-2的值,所以循环依次输出sum(0,3)、sum(1,3)、sum(2,3)、sum(3,3)、sum(4,3),输出结果为选项A)。24、以下叙述中错误的是A、用typedef可以说明一种新的类型名B、typedef的作用是用一个新的标识符来代表已存在的类型名C、可以用typedef说明的新类型名来定义变量D、typedef说明的新类型名必须使用大写字母,否则会出编译错误标准答案:D知识点解析:本题考查typedef的使用方法,typedef对已存在的类型使用一个新的名字,新类型可以使用小写,所以D选项错误。25、已定义以下函数intfun(int*p){return*p;}fun函数返回值是A、一个整数B、不确定的值C、形参p中存放的值D、形参p的地址值标准答案:A知识点解析:返回值为指针变量指向的数据,该数据已被定义为整型。因此A选项正确。国家二级C语言机试(选择题)模拟试卷第5套一、选择题(本题共25题,每题1.0分,共25分。)1、在DOS环境下,代表键盘和显示器的设备文件名为A、PRNB、CONC、NULD、LPT标准答案:B知识点解析:本题考查DOS下面的虚拟设备文件,选项A的PRN表示打印机,选项B中的CON表示键盘或屏幕,选项C的NUL表示虚拟空设备,选项D的LPT表示并口。2、下列描述中正确的是A、一个逻辑数据结构只能有一种存储结构B、数据的逻辑结构属于线性结构,存储结构属于非线性结构C、一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D、一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率标准答案:D知识点解析:数据的逻辑结构是指数据集合中各数据元素之间所固有的逻辑关系;数据的存储结构是在对数据进行处理时,各数据元素在计算机中的存储关系。数据的存储结构是指数据的逻辑结构在计算机中的表示,一种逻辑结构可以表示成多种存储结构;而采用不同的存储结构,其数据处理的效率是不同的。3、某系统结构图如下图所示该系统结构图的深度是()。A、1B、2C、3D、4标准答案:D知识点解析:深度表示控制的层数。本题中,“某系统”为第1层,“功能1、功能2…功能n”为第二层,“功能2.1、功能2.2、功能2.3、功能n.1、功能n.2”为第3层,“功能2.2.1、功能2.2.2”为第4层,共4层,故深度为4。4、函数rewind(fp)的作用是()。A、使fp指定的文件的位置指针重新定位到文件的开始位置B、将fp指定的文件的位置指针指向文件中所要求的特定位置C、使fp指定的文件的位置指针向文件的末尾D、使fp指定的文件的位置指针自动移至下一个字符位置标准答案:A知识点解析:位置指针重返文件头函数rewind()的调用形式为:rewind(fp)。其中,“fp”是指向文件的文件型指针。rewind(fp)的功能是:使fp指定的文件的位置指针重新定位到文件的开始位置。5、下列选项中属于面向对象设计方法主要特征的是A、继承B、自顶向下C、模块化D、逐步求精标准答案:A知识点解析:面向对象设计方法的主要特征有封装性、继承性和多态性。而结构化程序设计方法的主要原则有自顶向下,逐步求精,模块化,限制使用goto语句。6、设顺序表的长度为40,对该表进行冒泡排序。在最坏情况下需要的比较次数为A、780B、820C、40D、41标准答案:A知识点解析:冒泡排序(BubbleSort),是一种计算机科学领域的较简单的排序算法。冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大,就交换他们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数;针对所有的元素重复以上的步骤,除了最后一个;持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。冒泡排序的最坏时间复杂度为(n*(n-1))/2=780。7、通过键盘输入数据,为数组中的所有元素赋值,在程序中下划线处应填入的是()。#nclude#defineN10voidfun(intx[N]){inti=0;while(i<N)scanf(’’%d’’,______);}A、x[i+1]B、x+iC、x+(i++)D、X[++i]标准答案:C知识点解析:程序通过while循环来给数组元素赋值,赋值语句通过调用scanf函数来实现。scanf函数从键盘接收数据,注意scanf的第二个参数必须是地址,选项A和选项D不是地址,错误。选项B和选项C是地址,但是选项B的i值不会发生变化,循环体内每次都是给同一个元素赋值,不满足要求,选项C正确。8、以下选项中,合法的一组C语言数值常量是()。A、12.0Xa234.5e0B、028.5e-3-0xfC、.1774e1.50abcD、0x8A10,0003.e5标准答案:A知识点解析:考查整型常量、实型常量。选项B)的"028"错,以0开头表示为八进制整常数,不能出现数字8;选项C)的"4e1.5"错,e后面应为整数,"0abc"错,八进制整常数只能由0~7构成;选项D)的"10,000"错,C语言没有千分号,所以答案选A)。9、有以下程序#includeintfun(intx,inty){if(x==y)return(x);elsereturn((x+y)/2);}main(){inta=4,b=5,c=6;printf("%d\n",fun(2*a,fun(b,c)));}程序运行后的输出结果是A、3B、6C、8D、12标准答案:B知识点解析:fun(b,c)即fun(5,6),5!=6,所以返回(5+6)/2=5;fun(2*a,5)

温馨提示

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

评论

0/150

提交评论