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

下载本文档

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

文档简介

国家二级C语言机试(选择题)模拟试卷22(共9套)(共240题)国家二级C语言机试(选择题)模拟试卷第1套一、选择题(本题共25题,每题1.0分,共25分。)1、下面叙述中正确的是A、线性表是线性结构B、栈与队列是非线性绐构C、线性链表是非线性结构D、二叉树是线性结构标准答案:A知识点解析:线性表是最简单的、最常用的一种线性结构。所谓线性链表指的是采用链式存储结构盼线性表。栈和队列其实是一种特殊的线性表。树是一种简单的非线性结构,二叉树是树的一种。2、一棵二叉树共有25个结点,其中5个是叶子结点,则度为1的结点数为A、16B、10C、6D、4标准答案:A知识点解析:根据二叉树的性质,在任意二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个,故此度为1的结点个数=总结点数-叶子节点数-度为2的节点数=25-5-4=16。3、对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为A、9B、10C、45D、90标准答案:C知识点解析:线性表的长度为n,最坏情况下冒泡排序需要比较的次数为n(n-1)/2。4、若有定义语句:inta=3,b=2,c=1;,以下选项中错误的赋值表达式是()。A、a=(b=4)=3;B、a=b=c+1;C、a=(b=4)+c;D、a=1+(b=c=4);标准答案:A知识点解析:这道题目主要考察赋值表达式,对于赋值表达式来说,赋值号“=”的左边一定为变量名,右边为一个C语言合法的表达式。5、下面对软件测试描述错误的是()。A、严格执行测试计划,排除测试的随意性B、随机地选取测试数据C、软件测试的目的是发现错误D、软件测试是保证软件质量的重要手段标准答案:B知识点解析:软件测试的准则如下:①所有测试都应追溯到需求。②严格执行测试计划,排除测试的随意性。③充分注意测试中的群集现象。④程序员应避免检查自己的程序。⑤穷举测试不可能。⑥妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。6、将E-R图转换为关系模型时,实体和联系都可以表示为()。A、属性B、键C、关系D、域标准答案:C知识点解析:从E—R图到关系模型的转换是比较直接的,实体与联系都可以表示成关系,E—R图中属性也可以转换成关系的属性。7、若用数组名作为函数调用时的实参,则实际上传递给形参的是()。A、数组的第一个元素值B、数组元素的个数C、数组中全部元素的值D、数组首地址标准答案:D知识点解析:形参是在函数的定义中,放在括号里声明的变量;实参是调用函数时,传入的参数。数组在进行形参实参结合的,就是传递数组的首地址,并不是把整个数组复制一份放入函数里运行。故D选项正确。8、以下叙述中正确的是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。9、有以下程序#include<stdio.h>main(){intb=10,a=-11;a%=b%=4;printf(’’%d%d\n’’,a,b);)则程序的输出结果是A、12B、-1-2C、-12D、1.2标准答案:C知识点解析:对于表达式a%=b%=4为复合的赋值运算,结合性自右至左,相当于先计算b=b%4,a=a%b;绌果的符号和第一个操作数的符号相同,因此b为2,a的结果为-1.10、下列对软件测试和软件调试叙述中错误的是()。A、严格执行测试计划,排除测试的随意性B、软件调试的目的是改正软件错误C、软件测试不需要考虑测试成本D、正确的执行测试用例标准答案:C知识点解析:软件测试定义:使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。软件测试的目的:发现错误而执行程序的过程,是评测软件质量的重要过程和手段。软件调试的目的是诊断并改正程序中的错误。测试必须对整个软件总体进行评估。软件测试需要考虑测试成本,软件测试成本也要计入软件开发成本中。故C选项不正确。11、有以下程序:#includemain(){inta[4][4]={{l,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,k,t;for(i=0;i<3;i++)for(k=i+1;k<4;k++)if(a[i][i]A、1,1,2,6,B、6,2,1,1,C、6,4,3,2,D、2,3,4,6,标准答案:C知识点解析:首先对二维数组进行赋值操作,a[0][0]、a[0][1]、…、a[3][2]、a[3][3]的值为1、4、…、6、1。通过for嵌套循环语句和if条件语句,对二维数组对角线元素进行由大到小的排序操作,程序最后通过for语句输出二维数组第1行的4个元素,因此C选项正确。12、以下叙述中错误的是A、算法正确的程序最终一定会结束B、算法正确的程序可以有零个输入C、算法正确的程序可以有零个输出D、算法正确的程序对于相同的输入一定有相同的结果标准答案:C知识点解析:算法是指为解决某个特定问题而采取的确定且有限的步骤。一个算法应该具有5个特征:①有穷性。一个算法包含的操作步骤应该是有限的。也就是说,在执行若干个操作步骤之后,算法将结束,而且每一步都在合理的时间内完成。②确定性。算法中的每一条指令必须有确切的含义,不能有二义性,对于相同的输入必能得出相同的执行结果。③可行性。算法中指定的操作,都可以通过已经验证过可以实现的基本运算执行有限次后实现。④有零个或多个输入。在计算机上实现的算法是用来处理数据对象的,在大多数情况下这些对象需要通过输入来得到。13、以下程序的功能是:给r输入数据后计算半径为r的圆面积s。程序在编译时出错main()/*Beginning*/{intr;floats;scanf("%d",r);s=*π*r*r;printf("s=%f\n",s);}出错的原因是A、注释语句书写位置错误B、存放圆半径的变量r不应该定义为整型C、输出语句中格式描述非法D、计算圆面积的赋值语句使用了非法变量标准答案:D知识点解析:本题考查了C语言的基本输入输出函数。选项A错误,代码里面的注释是正确的,“/*”和“*/”配对;选项B错误,r变量定义为整型是可以的;选项C输出语句格式正确;选项D正确,计算s的时候s=*π*r*r使用了未定义变量π。14、计算机能直接执行的程序是A、目标程序B、可执行程序C、汇编程序D、源程序标准答案:B知识点解析:把由高级语言编写的程序称为“源程序”,由二进制代码表示的程序称为“目标程序”(后缀名为.obj),由汇编语言编写的程序称为“汇编程序”。为了把源程序转换成机器能接受的目标程序,软件工作者编制了一系列软件,通过这些软件可以把用户按规定语法写出的语句——翻译成二进制的机器指令。这种具有翻译功能的软件称为“编译程序”,每种高级语言都有与它对应的编译程序。C源程序经过C编译程序编译之后生成一个后缀为.obj的二制进文件(称为目标文件),这个目标程序要和C语言的库函数相链接生成一个后缀为.exe的文件,这个文件可以在操作系统中直接执行,称为可执行程序。15、有以下程序段intk=0,a=1,b=2,c=3;k:a<b?b:a;k=k>c?c:k;执行程序段后,k的值是A、3B、2C、1D、0标准答案:B知识点解析:本题主要考查条件表达式。k=a<b?b:a中a<b为真,因此k的值为b,即k=2。k=k>c?c:k中k>c为假,k的值为2,16、己知天写字母A的ASCII码是65,小写字母a的ASCII码是97。以下不能将变量c中的大写字母转换为对应小写字母的语句是A、c=(’A’+c)%26-’a’B、c=C+32C、c=C-’A’+’a’D、c=(C一’A’)%26+’a’标准答案:A知识点解析:由题意可知,小写字符a和大写字符A的ASCII代码相差为32,所以选项C)能将大写字符c的ASCII代码转换为小写字符c的ASCII代码;选项D)和C)左侧的表达式都是大写字符C与大写字符A的差与’a’的ASCII代码的和就是小写字符c的ASCII代码。而选项A)中应该是加上’a’,而不是减去’a’。17、将E-R图转换为关系模式时,E-R图中的实体和联系都可以表示为A、属性B、键C、关系D、域标准答案:C知识点解析:将E-R图转换为关系模式时,实体和联系都可以表示为关系。18、若已建立以下链表结构,指针p、s分别指向如图所示结点则不能将s所指节点插入到链表末尾的语句组是A、s->next=’\0’:p=p->next;p->next=s;B、p=p->next;s->next=p;P->next=s;C、p=p一>next;s->next=P->next;p->next=s;D、p=(*p).next;(*s).next=(*p).next;(*p).next=s;标准答案:B知识点解析:选项A中首先p后移,s的后继指针指向p,p的后继指向s,在s和最后结点之间形成了圆圈,无法完成题中的操作。19、有以下程序#includemain(){ints[12]={1,2,3,4,4,3,2,1,1,1,2,3),c[5]={0},i;for(i=0;i<12;i++)c[s[i]]++;for(i=1;i<5;i++)printf("%d",c[i]);prinff(”\11”);}A、4332B、2344C、1234D、1123标准答案:A知识点解析:本题考查for语句的循环控制,首先定义了两个数组并赋予了初始值,第一个for循环语句循环12次遍历s数组的各个元素,将s[]中的原素值作为c[]数组中的下标,使相应的值自加。例如当i=0,c[s[0]]++为c[1]++,其值变为1,当执行i=1,2,...11后,c[1]、c[2]、c[3]、c[4]分别为4、3、3、2,故选项A)为正确的运行结果。20、下列叙述中正确的是A、C程序中所有函数之间都可以相互调用B、在C程序中main函数的位置是固定的C、在C程序的函数中不能定义另一个函数D、每个C程序文件中都必须要有一个main函数标准答案:C知识点解析:C程序中主函数不能被其他函数调用,所以A选项错误,main函数可以放在程序开始,也可以放在中间,也可以放在最后,位置不固定,但程序执行时必须从main函数开始,所以B选项错误,在C程序的函数中不能定义另一个函数,可以声明或调用另一个函数,所以C选项正确?每个C程序中必须包含一个main函数,但不一定是每个C程序文件中必须有,用户单独编写的某个函数也可以存储为一个C程序文件,所以D选项错误。21、若有以下函数首部intfun(doublex[10],intn)则下面针对此函数的函数声明语句中正确的是A、intfun(double,int);B、intfun(double*x,intn);C、intfun(double*,int*);D、intfun(doublex,int*n);标准答案:C知识点解析:函数说明的一般形式为:类型名函数名(参数类型1,参数类型2,……)。因为函数intfun(doublex[10],int*n)的第1个形式参数是一个双精度型的一维数组,第2个参数是一个整型指针,并返回一个整型值。一维数组的名字表示的是一维数组的地址。22、已有定义:chara[]="xyz",b[]={’x’,’y’,’z’};,以下叙述中正确的是A、数组a和b长度相同B、a数组长度小于b数组长度C、a数组长度大于b数组长度D、上述说法都不对标准答案:C知识点解析:本题考查字符数组的定义。cllar“a[]="xyz",b[]={’x’,’y’,’z’};”定义了两个字符数组a和b,a数组存放的是一个字符串,字符串以“/0”作为结束标志,数组a的长度必须加上结束符长度1,因此数组a的长度为4。数组b中有三个元素,长度为3。23、有以下程序(注:字符a的ASCII码值为97)main(){char*s={"abc"};do{printf("%d",*s%10);++s;}while(*s);}程序运行后的输出结果是A、abcB、7890C、979899D、789标准答案:D知识点解析:因为小写字符a,b,c的ASCII的值分别为97,98,99,而在dowhile循环语句中,每次对字符的ASCII的值取余数并输出,第一次循环输出7,第二次循环输出8,第三次循环输出9。24、以下叙述中正确的是A、结构体数组名不能作为实参传给函数B、结构体变量的地址不能作为实参传给函数C、结构体中可以含有指向本结构体的指针成员D、即使是同类型的结构体变量,也不能进行整体赋值标准答案:C知识点解析:本题考查结构体变量作为函数参数,结构体变量的地址可以作为参数传给函数,结构体数组名就是一个地址,可以传给函数,如果是同类型的结构体变量,可以整体赋值。25、若以下选项中的变量a,b,y均已正确定义并赋值,则语法正确的switch语句是A、switch(a*a+b*b){default:break;case3:y=a+b;break;case2:y=a-b;break;}B、switch(a+b){case1:case3:y=a+b;break;case0:case4:y=a-b;}C、switch(a+9){casea:y=a-b;caseb:y=a+b;}D、switcha*b{case10:y=a+b;default:y=a-b;}标准答案:A知识点解析:switch语句,其一般形式为:switch(表达式){case常量表达式1:语句1;case常量表达式2:语句2;…case常量表达式n:语句n;default:语句n+1;}B选项中,case1和case2有错误,;C选项中,casea和caseb不正确,case后面应该跟常量表达式;D选项中,switcha*b,有误。因此A选项正确。国家二级C语言机试(选择题)模拟试卷第2套一、选择题(本题共25题,每题1.0分,共25分。)1、算法的时间复杂度是指A、算法的执行时间B、算法所处理的数据量C、算法程序中的语句或指令条数D、算法在执行过程中所需要的基本运算次数标准答案:D知识点解析:算法的时间复杂度,是指执行算法所需要的计算工作量。算法的工作量可以用算法在执行过程中所需基本运算的执行次数来度量。2、下列叙述中正确的是A、循环队列中的元素个数随队头指针与队尾指针的变化而动态变化B、循环队列中的元素个数随队头指针的变化而动态变化C、循环队列中的元素个数随队尾指针的变化而动态变化D、循环队列中的元素个数不会变化标准答案:A知识点解析:所谓循环结构就是将队列存储空间的最后一个位置绕到第一个位置上,形成逻辑上的环状空间,循环使用。在循环队列中,用队尾指针rear指向队列中的队尾元素,用队头指针front指向队头元素的前一个位置,因此,队列中的元素数等于从队头指针front指向的后一个位置与队尾指针rear指向位置之间的元素数量。3、下列叙述中正确的是()。A、一个算法的空间复杂度大,则其时间复杂度也必定大B、一个算法的空间复杂度大,则其时间复杂度必定小C、一个算法的时间复杂度太,则其空间复杂度必定小D、算法的时间复杂度与空间复杂度没有直接关系标准答案:D知识点解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间,算法的时间复杂度是指执行算法所需要的计算工作量,两者之间并没有直接关系,答案为D。4、下面对软件测试描述错误的是()。A、严格执行测试计划,排除测试的随意性B、随机地选取测试数据C、软件测试的目的是发现错误D、软件测试是保证软件质量的重要手段标准答案:B知识点解析:软件测试的准则如下:①所有测试都应追溯到需求。②严格执行测试计划,排除测试的随意性。③充分注意测试中的群集现象。④程序员应避免检查自己的程序。⑤穷举测试不可能。⑥妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。5、下列选项中不属于结构化程序设计方法的是A、自顶向下B、逐步求精C、模块化D、可复用标准答案:D知识点解析:结构化程序设汁方法的主要原则可以概括为:自顶向下,逐步求精,模块化,限制使用GOTO语句。自顶向下是指程序设计时应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。逐步求精是指对复杂问题应设计一些子目标过渡,逐步细化。模块化是把程序要解决的总目标先分解成分目标,再进一步分解成具体的小目标,把每个小目标称为一个模块。可复用性是指软件元素不加修改成稍加修改便可在不同的软件开发过程中重复使用的性质。软件可复用性是软件工程追求的目标之一,是提高软件生产效率的最主要方法,不属十结构化程序设计方法。6、若有表达式(w)?(一x):(++y),则其中与w等价的表达式是A、w==1B、w==0C、w!=1D、w!=0标准答案:D知识点解析:本题考查条件表达式。(w)?(--x):(++y)的含义是如果w非0那么表达式的值为一x,否为++y,因此只有选项D和w等价。7、某图书集团数据库中有关系模式R(书店编号,书籍编号,库存数量,部门编号,部门负责人),其中要求(1)每个书店的每种书籍只在该书店的一个部门销售;(2)每个书店的每个部门只有一个负责人;(3)每个书店的每种书籍只有一个库存数量。则关系模式R最高是()。A、1NFB、2NFC、3NFD、BCNF标准答案:B知识点解析:由题可知关系模式R有三个函数依赖:(书店编号,书籍编号)→部门编号(书店编号,部门编号)→负责人(书店编号,书籍编号)→库存数量由此可知,(书店编号,书籍编号)可以唯一标识关系模式R中的每个元组,因此属于关系模式的主键。在此关系模式中,每个属性都是不可再分的,R属于1NF,且“书店编号”和“书籍编号”单独之一都不能决定其他非主属性,所以R属于2NF;但(书店编号,书籍编号)可以决定“部门编号”,“部门编号”又可决定“部门负责人”,存在传递依赖,所以不属于3NF,更不是BCNF。8、在面向对象方法中,实现信息隐蔽是依靠A、对象的继承B、对象的多态C、对象的封装D、对象的分类标准答案:C知识点解析:对象的封装性是指从外部看只能看到对象的外部特征,即只需知道数据的取值范围和可以对该数据施加的操作,而不需要知道数据的具体结构以及实现操作的算法。对象的内部,即处理能力的实行和内部状态,对外是不可见的。从外面不能直接使用对象的处理能力,也不能直接修改其内部状态,对象的内部状态只能由其自身改变。9、软件是指A、程序B、程序和文档C、算法加数据结构D、程序、数据与相关文档的完整集合标准答案:D知识点解析:计算机软件是计算机系统中与硬件相互依存的另一部分,是包括程序、数据与相关文档的完整集合。软件由两部分组成:一是机器可执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护、使用等有关的文档。10、有以下计算公式若程序前面已经在命令行中包含math.h文件,不能够正确计算上述公式的程序段是A、y=sqrt(x);iffxB、if(x>=0)y=sqrt(x);elsey=sqrt(-x);C、if(x>=0)y=sqrt(x);if(x<0)y:sqrt(-x);D、y=sqrt(x>=0?x:-x);标准答案:A知识点解析:由题意可知计算公式的含义是:当x大于等于0时,y值等于x的算术平方根;当x小于0时,y值等于x的相反数的算术平方根。所以选项B)用一个完整的ifelse语句表达了计算公式的含义;选项C)用两个if语句表达了计算公式的含义;选项D)在求平方根函数的后面用x≥0?x:-x条件表达式来表达了计算公式的含义。选项A)没有用C语言语句正确的表达计算公式的含义。11、设有两行定义语句:intscanf;floatcase;则以下叙述正确的是()。A、第2行语句不合法B、两行定义语句都合法C、第1行语句不合法D、两行定义语句都不合法标准答案:A知识点解析:本题考查用户标识符,用户自己定义的标识符不能与关键字相同,并且尽量避免和预定义标识符相同。本题中scanf为预定义标识符,可以作为用户标识符;case为关键字,不能作为用户标识符,故而答案选A。12、有以下程序:#includemain(){FILE*fp;inta[10]={1,2,3},i,n;fp=fopen(“d1.dat”,”W”);for(i=0;i<3;i++)fprintf(fp,“%d”,a[i]);fprintf(fp,“\n”);felose(fp);fp=fopen(“d1.dat”,“r”);fscanf(fp,“%d”,&n);fclose(fp);printf(“%d\n”,n);}程序的运行结果是()。A、321B、12300C、1D、123标准答案:D知识点解析:程序首先将数组a[10]中的元素1、2、3分别写入了文件d1.dat文件中,然后又将d1.dat文件中的数据123整体写到变量n的空间中,所以打印n时输出的数据为123。13、以下正确的字符串常量是A、abc’B、OlympicGamesC、""D、"\\\"标准答案:C知识点解析:字符串常量是由双引号括起来的一串字符。在C语言中。以一个反斜线开头后跟一个特定的字符,用来代表一个特定的ASCII字符。利用两个’\\’表示一个反斜杠,因此选项D)的表示无法确认表示几个反斜杠。14、关于C语言的符号常量,以下叙述中正确的是A、符号常量的符号名是标识符,但必须大写B、符号常量在整个程序中其值都不能再被重新定义C、符号常量是指在程序中通过宏定义用一个符号名来代表一个常量D、符号常量的符号名必须是常量标准答案:C知识点解析:在C语言程序中,用一个符号名来代表一个常量,称为符号常量。注意:这个符号名必须在程序中进行特别的“指定”,并符合标识符的命名规则。一般在程序中都是利用宏定义来定义符号常量的,在代码中可以利用undef来结束符号常量的定义,然后进行重新定义,符号常量的大小写并没有特别的规定,一般时候为了和变量区分利用大写。15、与十进制数200等值的十六进制数为A、A8B、A4C、C8D、C4标准答案:C知识点解析:本题考察了进制转换,十进制的数转换为十六进制规则:整数部分除以16取余数,将余数倒过来排列。16、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。17、有以下程序段intk=0,a=1,b=2,c=3;k=ac?c:k;执行程序段后,k的值是A、3B、2C、1D、0标准答案:B知识点解析:本题主要考查条件表达式。k=ac?c:k中k>c为假,k的值为2。18、若有以下程序#include<stdio.h>main(){inti,j=0;chara[]="Howareyou!",b[10];for(i=0;a[i];i++)if(a[i]==’’)b[j++]=a[i+1];b[j]=’\0’;printf("%s\n",b);}则程序的输出结果是A、HowareyouB、Hay!C、Howareyou!D、ay标准答案:D知识点解析:主函数中利用for循环访问字符串a的每一个字符,判断当前字符是否为空格,如果是空格则保存该空格后面的一个字符存放到字符数组b中。在字符串"Howareyou!"中,第一个空格后面字符为’a’,第二个空格后厩字符为’y’。19、有以下程序,程序运行后的输出结果是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。20、有以下程序,程序的输出结果是voidfun(double*p1,double*p2,double*s){s=(double*)calloc(1,sizeof(double));*s=*p1+*(p2+1);}main(){doublea[2]={1.1,2.2),b[2]={10.0,20.0),*s=a;fun(a,b,s);printf("%5.2f\n",*s);}A、1.10B、11.10C、12.10D、21.1标准答案:A知识点解析:ANSIC标准规定calloc函数返回值的类型为void*。具体使用格式为:calloc(n,size)。该函数用来给n个同一类型的数据项分配连续的存储空间.每个数据项的长度为size个字节。若分配成功,函数返回存储空问的首地址:否则返回空。通过调用calloc函数所分配的存储单元,系统自动置初值0。主函数中定义数组a,b,以及指针s指向数组a,调用fun函数,实参a和b,以及s的值传递给相对应形参p1,p2,以及s,在fun函数中更改s的指向,以及指向的数据,但是函数调用结束以后,形参空间撤销,这项改变对于实参没有影响,因此实参s指向值不变,仍然为1.1。21、有以下程序#includemain(){structSTU{charname[9];charsex;doublescore[2];};structSTUa={"Zhao",’m’,85.0,90.0},b={"Qian",’f’,95.0,92.0};b=a;printf("%s,%c,%2.0f,%2.0f\n",,b.sex,b.score[0],b.score[1]);}程序的运行结果是()。A、Zhao,m,85,90B、Qian,m,85,90C、Zhao,f,95,92D、Qian,f,95,92标准答案:A知识点解析:同类型的结构体之间可以直接赋值,所以语句"b=a;"的作用是把结构体a中的数据赋值给结构体b,所以答案选A。22、为了建立如图所示的存储结构(即每个结点含两个域,data是数据域,next是指向结点的指针域),则在【】处应填入的选项是Structlink{chardata;【】}node;A、structlink*next;B、linknext;C、link*next;D、structlinknext;标准答案:A知识点解析:单链表为动态分配的存储空间,在分配时,每个结点之间可以是不连续的(结点内是连续的)。结点之间的联系用指针实现,即在结点结构中定义一个成员项用来存放下一结点的首地址,这个用于存放地址的成员,常把它称为指针域,该指针为了保持链表中结点的地址,因此其基类型和结点的类型相同,选项为A。23、下列叙述中正确的是A、一个算法的空间复杂度大,则其时间复杂度也必定大B、一个算法的空间复杂度大,则其时间复杂度必定小C、一个算法的时间复杂度大,则其空间复杂度必定小D、算法的时间复杂度与空间复杂度没有直接关系标准答案:D知识点解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间,算法的时间复杂度,是指执行算法所需要的计算工作量,两者之间并没有直接关系,答案为D。24、以下数组定义中错误的是()。A、intx[2][3]={1,2,3,4,5,6};B、intx[][3]={0};C、intx[][3]={{1,2,3},{4,5,6}};D、intx[2][3]={{1,2},{3,4},{5,6}};标准答案:D知识点解析:D)选项中x[2][3]定义的是一个两行三列的二维数组,而在给数组元素赋值时却赋成了三行,所以错误。25、对长度为n的线性表作快速排序,在最坏情况下,比较次数为A、nB、n-1C、n(n-1)D、n(n-1)/2标准答案:D知识点解析:快速排序最坏情况就是每次选的基准数都和其他数做过比较,共需比较(n-1)+(n-2)+…+1=n(n-1)/2,选D。国家二级C语言机试(选择题)模拟试卷第3套一、选择题(本题共25题,每题1.0分,共25分。)1、下列叙述中正确的是()。A、非线性结构可以为空B、只有一个根结点和一个叶子结点的必定是线性结构C、只有一个根结点的必定是线性结构或二叉树D、没有根结点的一定是非线性结构标准答案:A知识点解析:如果一个非空的数据结构满足下列两个条件:①有且只有一个根结点:②每一个结点最多有一个前件,也最多有一个后件则称该数据结构为线性结构。如果一个数据结构不是线件结构。则称之为非线性结构。线性结构和非线性结构都可以是空的数据结构。树只有一个根结点,但不论有几个叶子结点,树都是非线性结构。2、有以下程序:#include<stdio.h>main(){inti=0,a=0;while(i<20){for(;;){if((i%5)==0)break;elsei--;}i+=13,a+=i;}printf(’’%d\n’’,a);}程序的输出结果是()。A、62B、63C、23D、36标准答案:D知识点解析:本题考查while循环。当i<20时,进入while循环体,循环体内的for循环实现的功能是,当i值是0或5的倍数时,执行“i+=13;a+-i;”这两条语句;若i值不是5的倍数则一直执行for循环。①当i=0时,执行“i+=13;a+=i;i=13,a=13”;②判断“i=13<20”,进入while循环体,i=10时,跳出for循环,执行“i+=13;a+i;i=23,a=36”;③判断“i=23>20”,循环结束。3、有如下程序:#include<stdio.h>wildmain(){intx=Ox13:if(x=Ox18)printf(″T″);printf(″F\n″);}程序运行后的结果是()。A、TFB、TC、FD、TFT标准答案:A知识点解析:x=0x18为赋值表达式,十六进制数0x18非0,if条件成立输出T,之后再输出F与回车符。程序运行后的输出结果是TF。4、软件生命周期中的活动不包括A、市场调研B、需求分析C、软件测试D、软件维护标准答案:A知识点解析:软件的生命周期描述了软件从产生到最终消亡的全过程,生命周期中的活动包括需求分析、软件设计(分为概要设计和详细设计)、软件实现、软件测试和软件维护,不包括市场调研。5、在结构化程序设计中,模块划分的原则是A、各模块应包括尽量多的功能B、各模块的规模应尽量大C、各模块之间的联系应尽量紧密D、模块内具有高内聚度、模块间具有低耦合度标准答案:D知识点解析:内聚性是对一个模块内部各个元素间彼此结合的紧密程度的度量。耦合性是对模块间互相连接的紧密程度的度量。在结构化程序设计中,模块划分应遵循高内聚、低耦合的原则,即减弱模块之间的耦合性和提高模块内聚性,有利于提高软件模块的独立性。6、在E-R图中,用来表示实体的图形是A、矩形B、椭圆形C、菱形D、三角形标准答案:A知识点解析:在E-R图中,用矩形表示实体集,在矩形内写上该实体集的名字;用椭圆形表示属性;用菱形(内部写上联系名)表示联系。7、设intk=0:以下选项的四个表达式中与其他三个表达式的值不相同的是()。A、k++B、k+1C、++kD、k+=1标准答案:A知识点解析:选项B、C、D都是对k的值加1,选项A的语句k++表示先利用k的值进行运算,然后k值才加1。8、在数据库设计中,将E—R图转换成关系数据模型的过程属于A、需求分析阶段B、概念设计阶段C、逻辑设计阶段D、物理设计阶段标准答案:C知识点解析:数据库的设计阶段包括需要分析、概念设计、逻辑设计和物理设计,其中将E—R图转换成关系数据模型的过程属于逻辑设计阶段。9、以下叙述中正确的是A、C语言规定必须用main作为主函数名,程序将从此开始执行B、可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C、C语言程序将从源程序中第一个函数开始执行D、main的各种大小写拼写形式都可以作为主函数名,如:MAIN,Main等标准答案:A知识点解析:C语言中的主函数唯一为main()函数不能任意指定,所以B选项错误。C语言从主函数main()开始,到主函数main()结束,所以C选项错误。主函数必须写成小写的main,不能混淆大小写,所以D选项错误。10、有以下函数:intfun(char*x,char*y){intn=0;while((*x==*y)&&*x!=’\0’){x++;y++;n++:}returnn:}函数的功能是()。A、将y所指字符串赋给x所指存储空间B、查找x和y所指字符串中是否有’\0’C、统计x和y所指字符串中最前面连续相同的字符个数D、统计x和y所指字符串中相同的字符个数标准答案:C知识点解析:本题中由循环条件可知,遇到’\0’或x与y所指的字符的值不等中的一个条件时就结束,所以功能是统计x和y所指字符串中最前面连续相同的字符个数。11、以下程序的输出结果是()。#include#defineSUB(A)(A)-(A)main(){inta=2,b=3,c=5,d;d=SUB(a+b)*c;printf(’’%d\n’’,d);}A、0B、10C、一12D、一20标准答案:D知识点解析:本题主要考查的是宏替换,在程序中执行d=SUB(a+b)*c这条语句时,首先要进行宏替换,依据宏SUB(A)的定义可知,上面这条语句替换为d=(a+b)一(a+b)*c,因为乘法的优先级比减法的优先级高,所以先进行乘法运算,即d=5—5*5=一20,可以看出,出现了运算错误。12、以下程序的输出结果是()。voidf(int*q)main(){inti=0;{inta[5]={1,2,3,4,5},i;for(;i<5;i++)(*q)++;}f(a);for(i=0;i<5;i++)printf(’’%d,’’,a[i]);}A、2,2,3,4,5,B、6,2,3,4,5,C、1,2,3,4,5,D、2,3,4,5,6,标准答案:B知识点解析:题目中voidf(int*q)函数的功能是对(*q)的值连续5次自加1。在main函数中f(a)语句把一维数组a[5]的首地址作为实参,传递给函数f(int*q)的形参q,然后在函数f(int*q)内,a[0]连续5次自加1后,a[0]的值就变成6。所以输出为6,2,3,4,5,选项B正确。13、有以下程序#include#deftneN4voidfun(inta[][N],intb[]){inti;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[]。在主函数中由x[][N]的初始化可知,其主对角线上的元素是1,0,7,0。所以当执行完函数funq[x,y)后,一维数组元素y[]中的元素值为1,0,7,0。14、有以下程序#includemain(){inta=1,b=2,c=3,d=0;if(a==1&&b++==2)if(b!=2||c--!=3)printf("%d,%d,%d\n",a,b,c);elseprintf("%d,%d,%d\n",a,b,c);elseprintf("%d,%d,%d\n",a,b,c);}程序运行后的输出结果是()。A、1,3,3B、1,3,2C、1,2,3D、3,2,1标准答案:A知识点解析:else总是与前面距离它最近的且未曾配对的if语句配对。"a=1,b=2,c=3,d=0",所以语句"if(a==1&&b++==2)"的判定条件为真,之后b自加1,其值为3。而语句"if(b!=2||c--!=3)"的判定条件也为真,根据逻辑运算符的"短路求值"原理,表达式"b!=2"为真后整个逻辑表达式的值就为真,"c--!=3"不再计算,所以答案选A。15、有下列程序:structS{intn;inta[20];};voidf(int*a,intn){inti;for(i=0;iA、3,4,2,7,9,8,6,5,11,10,B、2,3,1,6,8,7,5,4,10,9,C、2,4,3,9,12,12,11,11,18,9,D、1,2,3,6,8,7,5,4,10,9,标准答案:C知识点解析:voidf(int*a,intn)函数的功能是对数组a[]的每一个元素加上其下标的值。所以在main()函数中f(s.a,s.n)语句会调用f(int*a,intn)函数,此时指针a指向数组s.a={2,3,1,6,8,7,5,4,10,9}.n=10;然后执行for(i=0;i16、有以下程序,程序运行后的输出结果是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。17、有以下程序main(){inti=5;do{if(i%3=1)if(i%5==2){printf("**%d",i);break;}i++;}while(i!=0);printf("\n");}程序的运行结果是A、*3*5B、*5C、*7D、*2*6标准答案:C知识点解析:由于循环变量i的初值等于5,所以第一、二次进入do....while循环语句时,条件语句if(i%3==1),if(i%5==2){printf(“*%d”,i);break;}不执行,只执行i++语句。当i=7时,满足条件语句if(i%3==1),if(i%5==2){printf("*%d",i);break;},所以输出*7,结束循环。18、有下列程序:main(){inti,s=0,t[]={1,2,3,4,5,6,7,8,9};for(i=0;i<9;i+=2)s+=*(t+i);printf("%d\n",s);}程序执行后的输出结果是A、20B、45C、36D、25标准答案:D知识点解析:本题在主函数中定义了一维整型数组t[]={1,2,3,4,5,6,7,8,9};然后在for循环语句中自变量i从0开始,每次自加2,执行s+=*(t-i)语句,因为C语言规定数组名代表数组的首地址,也就是第一个元素的地址。因此*(t+i)代表数组的第i+1个元素。所以程序运行的结果是1-3+5+7-9=25,即变量s的值等于25。19、有以下程序,程序运行后的输出结果是#definePT3.5;#defineS(x)PT*x*x;main(){inta=1,b=2;printf("%4.1f\n",S(a+b));}A、31.5B、7.5C、程序有错无输出结果D、14标准答案:C知识点解析:本题考查宏定义。预处理语句后面不能加分号,因此程序有错。如果没加分号的话S(a+b)=PT*a+b*a+b=3.5*1+2*1+2=7.5。20、下面选项中的程序段,没有编译错误的是()。A、char*sp,s[10];sp="Hello";B、char*sp,s[10];s="Hello";C、charstr1[10]="computer",str2[10];str2=str1;D、charmark[];mark="PROGRAM";标准答案:A知识点解析:字符数组名为一个指针常量,在非定义状态下,不能进行任何赋值性操作,所以不能通过赋值操作将一个字符串的地址指给它,也不能一个字符数组的地址指给另一个字符数组名,选项B)、C)、D)错误;但是可以通过赋值的方式把一个字符串地址指给一个字符指针,选项A)正确;答案选A)。21、有以下程序#includestructSTU{charname[9];charsex;intscore[2];};voidf(structSTUa[]){structSTUb={"Zhao",’m’,85,90};a[1]=b;}main(){structSTUc[2]={{"Qian",’f’,95,92},{"Sun",’m’,98,99}};f(c);printf("%s,%c,%d,%d,",c[0].name,c[0].sex,c[0].score[0],c[0].score[1]);printf("%s,%c,%d,%d\n",c[1].name,c[1].sex,c[1].score[0],c[1].score[1]);}程序运行后输出结果是A、Qian,f,95,92,Sun,m,98,99B、Qian,f,95,92,Zhao,m,85,90C、Zhao,m,85,90,Sun,m,98,99D、Zhao,m,85,90,Qian,f,95,92标准答案:B知识点解析:本题考查把数组名作为函数参数,执行f函数后,结构体数组c的第二个元素被改写,c[1].name为Zhao,选项B正确。22、若有以下程序#include<stdio.h>int*f(int*s,int*t){int*k;if(*s<*t){k=s;s=t;t=k;}returns;}main(){inti=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);printf("%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);}则程序的输出结果是A、3,5,5,3,5B、5,3,5,3,5C、5,3,3,5,5D、3,5,3,5,5标准答案:D知识点解析:本题考查了返回值为指针的函数,函数f的主要功能为第一个参数小于第二个参数,那么交换指针的指向,这对于实参指向的数据时没有影响的。最后返回比较大的元素的地址。主函数中p指向i,q指向j,调用r=f(p,q),返回q的地址,因此*p=3,*q=5,*r=5。23、构成计算机软件的是A、源代码B、程序和数据C、程序和文档D、程序、数据及相关文档标准答案:D知识点解析:软件指的是计算机系统中与硬件相互依赖的另一部分,包括程序、数据和有关的文档,选D。24、若有以下程序#includemain(){charc1,c2;c1=’C’+’8’-’3’;c2=’9’-’0’;printf("%c%d\n",c1,c2);}则程序的输出结果是A、H’9’B、H9C、F’9’D、表达式不合法输出无定值标准答案:B知识点解析:本题考察字符变量以及printf()函数相关知识,字符变量c1被赋值为’C’+’8’-’3’,即ASSCII码的运算,67+54-49=72,即H;字符变量c2被赋值为’9’-’0’,但输出时,需要注意的是c1以字符变量输出,而c2是以十进制整型变量输出。因此B选项正确。25、软件设计中模块划分应遵循的准则是()。A、低内聚低耦合B、高内聚低耦合C、低内聚高耦合D、高内聚高耦合标准答案:B知识点解析:软件设计中模块划分应遵循的准则是高内聚低偶合、模块大小规模适当、模块的依赖关系适当等。模块的划分应遵循一定的要求,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。模块之间的耦合应尽可能的低,模块的内聚度应尽可能的高。国家二级C语言机试(选择题)模拟试卷第4套一、选择题(本题共25题,每题1.0分,共25分。)1、下列叙述中正确的是()。A、有一个以上根结点的数据结构不一定是非线性结构B、只有一个根结点的数据结构不一定是线性结构C、循环链表是非线性结构D、双向链表是非线性结构标准答案:B知识点解析:线性结构应满足:有且只有一个根结点与每个结点最多有一个前件,也最多有一个后件,所以B)正确。所以有一个以上根结点的数据结构一定是非线性结构,所以A)错误。循环链表和双向链表都是线性结构的数据结构,所以C)和D)错误。2、下列选项中不符合良好程序设计风格的是A、源程序要文档化B、数据说明的次序要规范化C、避免滥用goto语句D、模块设计要保证高耦合、高内聚标准答案:D知识点解析:一般来讲,程序设计风格是指编写程序时所表现出的特点、习惯和逻辑思路。程序设计风格总体而言应该强调简单和清晰,程序必须是可以理解的。可以认为,著名的“清晰第一、效率第二”的论点己成为当今主导的程序设计风格。良好的程序设计风格主要应注重和考虑下列几个因素:①源程序文档化,包括下列三个方面:a.符号的命名应具有一定的含义:b.正确的注释能够帮助读者理解程序;c.视觉组织,可以在程序中利用空格、空行、缩进等技巧使程序层次清晰。②数据说明的方法,包括下列三个方面:a.数据说明的次序规范化;b.说明语句中变量安排有序化;c.使用注释来说明复杂数据的结构。③语句的结构应该简单直接,不应该为提高效率而把语句复杂化。④输入和输出方式和风格应尽可能方便用户的使用。3、有以下程序#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。4、构成计算机软件的是A、源代码B、程序和数据C、程序和文档D、程序、数据及相关文档标准答案:D知识点解析:软件由两部分组成:一是机器可执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护、使用等有关的文档。5、在结构化程序设计中,模块划分的原则是A、各模块应包括尽量多的功能B、各模块的规模应尽量大C、各模块之间的联系应尽量紧密D、模块内具有高内聚度、模块间具有低耦合度标准答案:D知识点解析:内聚性是对一个模块内部名个元素间彼此结合的紧密程度的度量。耦合性是对模块间瓦相连接的紧密程度的度量。在结构化程序设计中,模块划分应遵循高内聚、低耦合的原则,即减弱模块之间的耦合性和提高模块内聚性,有利于提高软件模块的独立性。6、已知字符A的ASCII码值是65,字符变量c1的值是’A’,c2的值是’D’,则执行语句printf(’’%d,%d’’,c1,c2-2);的输出结果是()。A、65,68B、A,68C、A,BD、65,66标准答案:D知识点解析:打印时以%d整型格式打印输出,所以字符变量c1的值打印出来就是65,从c2-2的值打印出来就是68-2,即66,所以选择D选项。7、有以下程序#includemain(){inti,i,m=1;for(i=l;i<3;i++){for(j=3;j>0;j--){if(i*j>3)break;m*=i*j;}}printf("m=%d\n",m);}程序运行后的输出结果是A、m=2B、m=4C、m=5D、m=6标准答案:D知识点解析:这道题考查了for循环的嵌套应用。对于外层for循环来说,变量i从1增到2,循环执行2次。当变量i的值等于1时,对于内层for循环来说,变量j从3减到1,求得变量m的值等于6。当变量i的值等于2时,第一遍执行内层for循环,变量j的值等于3,那么i*j的值等于6,其值大于3,这时执行break语句,退出内层for循环的执行。所以程序输出变量m的值为6。8、以下对C语言中联合类型数据的正确叙述是()。A、定义了联合变量后,即可引用该变量或该变量中的任意成员B、一个联合变量中可以同时存放其所有成员C、联合中的各个成员使用共同的存储区域D、在向联合中的一个成员进行赋值时,联合中其他成员的值不会改变标准答案:C知识点解析:联合体的几个特点:①联合体所占用的内存空间为最长的成员所占用的空间;②各个成员分量全部是从低地址方向开始使用内存单元;③联合体中的空间在某一时刻只能保存某一个成员的数据;④联合体和结构体可以任意嵌套。9、有以下程序:#includevoidmain(){chara[5][10]={“one”,“two”,“three”,“four”,“five”};inti,j;chart;for(i:0;i<5;i++)for(j=i+1;j<4;j++)if(a[i][0]>a[j][0]){t:a[i][0];a[i][0]=a[j][0];a[j][0]=t;puts(a[1]);}}程序运行后的输出结果是()。A、twoowoB、fixowoC、twofovD、owooff标准答案:A知识点解析:for循环完成的功能是把二维数组a的第一列的字母按从小到大排序,其他列的字母不变。10、以下选项中,值为1的表达式是A、1-’0’B、’1’-0C、1.’\0’D、’\0’-0标准答案:C知识点解析:在C程序中,字符量可参与任何整数运算。字符参与运算时,首先要将字符转换为其对应的ASCII码值再参与整数运算。字符’1’对应的ASClI码值是49,字符’0’对应的ASCII码值是48,字符’\0’是字符串结束标识符NULL,其对应的ASCII码值是0。11、有以下程序,程序的输出结果是main(){charc1=’A’,c2=’Y’;printf("%d,%d\n",c1,c2);}A、输出格式不合法,输出出错信息B、65,90C、65,89D、A,Y标准答案:C知识点解析:C语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。12、以下程序的输出结果是()。#include#defineN5#defineMN+1#definef(x)(x*M)main(){inti1,i2;il=f(2);i2=f(1+1);printf(’’%d%d\n’’,il,i2);}A、1212B、127C、1211D、117标准答案:D知识点解析:本题考查了宏的嵌套定义定义了3个宏定义语句,分别是:#defineN5、#defineMN+1和#definef(x)(x*M),所以根据C语言的宏交替规则,我们可知,f(2)=2*N+1∧2*5+1=11,f(1+1)=1+1*N+1=1+1*5+1=7。13、有以下程序段charname[20];intnum;scanf("name=%snum=%d",name,&num);当执行上述程序段,并从键盘输入:name=Lilinum=1001<回车>后,name的值为()。A、LiliB、name=LiliC、Lilinum=D、name=Lilinum=1001标准答案:A知识点解析:考查scanf的格式输入。如果scanf的""内有普通字符,则程序调试的时候必须原样输入,所以字符数组name接受到的字符为Lili,答案选A。14、以下不能输出字符A的语句是(注:字符A的ASCII码值为65,字符a的ASCII码值为97)A、printf("%c\n",’a’-32);B、printf("%d\n",’A’):C、printf("%c\n",65);D、printf("%c\n",’B’-1):标准答案:B知识点解析:在选项B的输出函数中,大写字符lA-以整型数据的形式输出。15、有以下程序#include#includevoidfun(chars[][10],intn){chart;inti,j;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个字符串。16、以下结构体类型说明和变量定义中正确的是A、typedefstruct{intn;charc;}REC;RECtl,t2;B、structREC;{intn;charc;);RECt1,t2;C、typedefstructREC;{intn=0;charc=’A’;}tl,t2;D、struct{intn;charc;}REC;RECtl,t2;标准答案:A知识点解析:定义结构体类型的一般形式为:struct结构体名{成员列表};struct结构体名后不能加“:”号,所以选项B、C错误,选项D中定义无名称的结构体类型同时定义结构体变量形式应为structt1,t2:选项A为用户自定义类型,其为正确的定义形式。17、以下程序的主函数中调用了其前面定义的fun函数#include<stdio.h>main(){doublea[15],k;k=fun(a);}则以下选项中错误的fun函数首部是A、doublefun(doublea[15])B、doublefun(double*a)C、doublefun(doublea[])D、doublefun(doublea)标准答案:D知识点解析:本题考查函数的定义和调用。根据对fun函数的调用可知,fun函数的返回值为double类型的,输入参数是一个double类型的地址(指针),因此选项D)错误。18、有以下程序#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=1B、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。19、有以下程序voidfunl(char*p){char*q;q=p;while(*q!=’\0’){(*q)++;q++;)}main(){chara[]={"Program"),*p;p=&a[3];fun1(p);printf("%s\n",a);}程序执行后的输出结果是A、PrphsbnB、ProhsbnC、ProgsbnD、Program标准答案:B知识点解析:在函数voidfunl(char*p)中,语句(*q)++的功能是q所指的字符加1,变成其后面的字符;q++就是指针q指向下一个字符的位置。所以在主函数中,语句p=&a[3]的作用是使指针p指向字符数组a[]中的第四个字符的位置,即p指向字符’g’;然后调用函数fun1(p)后,字符’g’变成’h’,字符’r’变成’s’,字符’a’变成’b’,字符’m’变成’n’,因而字符数组a[]中的内容就成“Prohsbn”。20、若有以下程序#includeintf(intm){staticintn=0;inta=2;n++;a++;returnn+m+a;}main(){intk;for(k=0;k<4;k++)printf("%d,",f(k));}则程序的输出结果是()。A、4,6,8,10,B、4,7,10,13,C、4,5,6,7,D、3,5,7,9,标准答案:A知识点解析:静态变量定义时的初始化只运行一次,并且其值在程序运行过程中一直存在,而局部变量则是用时分配,用完释放。main()函数中调用四次f()函数,f(0)=1+0+3=4,n=1,a=3;f(1)=2+1+3=6,n=2,a=3;f(2)=3+2+3=8,n=3,a=3;f(3)=4+3+3=10,n=4,a=3。所以答案选A。21、有如下程序#includevoidget_put(){charch;ch=getchar();if(ch!=’\n’)get_put();putchar(ch);}main(){get_put();printf("\n");}程序运行时,输入1234<回车>,则输出结果是()。A、4321B、1234C、4444D、1111标准答案:A知识点解析:函数get_put()的作用是利用递归调用,优先输出最后一个输入的字符,即逆序输出输入的字符串,答案选A。22、有以下程序:#includeintb=2;intfun(int*k){b=*k+b;return(b);}main(){inta[10]={1,2,3,4,5,6,7,8},i;for(i=2;i<4;i++){b=fun(&a[i])+b;printf("%d",b);}printf("\n");}程序运行后的输出结果是A、810B、1028C、1012D、1016标准答案:B知识点解析:i=2时,fun(&a[2])返回值是b=b+a[1]=2+3=5,b=b+b=5+5=10;i=3时,fun(&a[3])返回值是b=b+a[3]=10+4=14,b=b+b=14+14=28。23、若有以下程序#includemain(){intc;c=10^5;printf("%d\n",c);}则程序的输出结果是()。A、15B、10000C、5D、105标准答案:A知识点解析:异或运算符的运算规则是参与运算的两个数相对应的二进制位相异或运算,当两个对应的二进制位相异时,结果为1。10的二进制数为1010,5的二进制数为0101,1010^0101=1111,对应十进制数值为15,答案选A。24、关于地址和指针,以下叙述正确的是()。A、可以通过强制类型转换让char型指针指向double型变量B、函数指针p指向一个同类型的函数f时,必须写成:p=&f;C、指针p指向一个数组f时,必须写成:p=&f;D、一个指针变量p可以指向自身标准答案:A知识点解析:函数名代表函数的入口地址,函数指针p指向一个同类型的函数f时,可以写成“p=f;”,而不能写成“p=&F;”,所以选项B错误。指针p指向一个数组f时,可以写成“p=f;”,数组名f代表数组的首地址,所以选项C错误。指针变量指向的是变量的地址,所以选项D错误。char型根据转化原则可以转化为double型。故本题答案为A选项。25、若要使int型变量a,b,c,d的值都为0,以下写法中错误的是()。A、autointa,b,c,d;a=b=c=d=0;B、autointa=b=c=d=0;C、autointa=0,b=a,c=b,d=c;D、staticinta,b,c,d;标准答案:B知识点解析:选项B中,使用autoint定义了整型a,但b、c、d都是未定义的变量,所以不能作右值使用,错误;选项A、C都是正确的定义和初始化;选项D中,static变量定义了a、b、c、d,由于未初始化,在程序运行时,首先将这四个变量赋值为0,正确;本题答案为B。国家二级C语言机试(选择题)模拟试卷第5套一、选择题(本题共25题,每题1.0分,共25分。)1、下列叙述中正确的是A、线性表链式存储结构的存储空间一般要少于顺序存储结构B、线性表链式存储结构与顺序存储结构的存储空间都是连续的C、线性表链式存储结构的存储空间可以是连续的,也可以是不连续的D、以上都不正确标准答案:C知识点解析:线性表的存储分为顺序存储和链式存储。在顺序存储中,所有元素所占的存储空间是连续的。而在链式存储的方式中,将存储空间的每一个存储结点分为两部分,一部分用于存储数据元素的值,称为数据域;另一部分用于存储下一个元素的存储序号,称为指针域。所以线性表的链式存储方式比顺序存储方式的存储空间要大一些。2、有以下程序#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。3、软件生命周期中,确定软件系统要做什么的阶段是()。A、需求分析B、软件测试C、软件设计D、系统维护标准答案:A知识点解析:在软件生命周期中,确定软件系统要做什么的阶段是需求分析阶段,答案选A。4、下列关于栈的叙述中,正确的是()。A、栈底元素一定是最后入栈的元素B、栈操作遵循“先进后出”的原则C、栈顶元素一定是最先入栈的元素D、以上三种说法都不对标准答案:B知识点解析:栈是“先进后出”,因此,栈底元素是先入栈的元素,栈顶元素是后入栈的元素。5、数据库设计的根本目标是要解决A、数据共享问题B、数据安全问题C、大量数据存储问题D、简化数据维护标准答案:A知识点解析:数据库应用系统中的一个核心问题就是设计一个能满足用户要求、性能良好的数据库,这就是数据库设计。数据库设计是在一

温馨提示

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

评论

0/150

提交评论