




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级(C语言)机试模拟试卷2(共9套)(共381题)国家二级(C语言)机试模拟试卷第1套一、选择题(本题共39题,每题1.0分,共39分。)1、下列叙述中正确的是()。A、数据的存储结构会影响算法的效率B、算法设计只需考虑结果的可靠性C、算法复杂度是指算法控制结构的复杂程度D、算法复杂度是用算法中指令的条数来度量的标准答案:A知识点解析:算法的基本特征包括可行性、确定性、有穷性、足够的初始信息,算法的设计必须考虑到算法的复杂度,故B选项错误。算法的复杂度是指该算法所需要的计算机资源的多少,即时间和空间的资源,分为时间复杂度和空间复杂度。算法控制结构在具体实现中影响程序执行时间,与算法复杂度无关,故C选项错误。算法的时间复杂度是用算法所执行的基本运算次数来度量的,而不是算法中指令的条数,故D选项错误。数据的存储结构与算法的复杂度有关,会影响算法的效率。故A选项正确。2、设数据集合为D={1,2,3,4,5}。下列数据结构B=(D,R)中为非线性结构的是()。A、R={(1,2),(2,3),(3,4),(4,5)}B、R={(1,2),(2,3),(4,3),(3,5)}C、R={(5,4),(4,3),(3,2),(2,1)}D、R={(2,5),(5,4),(3,2),(4,3)}标准答案:B知识点解析:一个非空的数据结构如果满足以下两个条件:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件,称为线性结构。不同时满足以上两个条件的数据结构就称为非线性结构。B选项中,由(2,3)、(4,3)可知,结点3有两个前件2和4,为非线性结构,故选择B选项。3、某二叉树共有150个结点,其中有50个度为1的结点,则()。A、不存在这样的二叉树B、该二叉树有49个叶子结点C、该二叉树有50个叶子结点D、该二叉树有51个叶子结点标准答案:A知识点解析:在树结构中,一个结点所拥有的后件个数称为该结点的度。对任何一棵二叉树,度为0的结点(即叶子结点)总是比度为2的结点多一个。二叉树中有150个结点,设叶子结点个数为n0,度为1的结点个数为50,设度为2的结点个数为n2。150=n0+50+n2且n0=n2+1,则n0=50.5,n2=49.5。由于结点个数必须是整数,所以不存在这样的二叉树,故选择A选项。4、循环队列的存储空间为Q(1:50),初始状态为front=rear=50。经过一系列正常的人队与退队操作后,front=rear=25,此后又正常地插入了一个元素,则循环队列中的元素个数为()。A、51B、50C、49D、1标准答案:D知识点解析:循环队列是队列的一种顺序存储结构,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。入队运算时,队尾指针进1(即rear+1),然后在rear指针指向的位置插入新元素。当front=rear=25时可知队列空或者队列满,此后又正常地插入了一个元素说明之前队列为空,所以插入操作之后队列里只有一个元素。故D选项正确。5、下列排序方法中,最坏情况下时间复杂度(即比较次数)低于O(n2)的是()。A、快速排序B、简单插入排序C、冒泡排序D、堆排序标准答案:D知识点解析:对长度为n的线性表排序,常用排序方法最坏情况的时间复杂度如下表所示时间复杂度低于O(n2)的排序算法是堆排序,故D选项正确。6、下面描述正确的是()。A、软件测试是指动态测试B、软件测试可以随机地选取测试数据C、软件测试是保证软件质量的重要手段D、软件测试的目的是发现和改正错误标准答案:C知识点解析:软件测试有多种方法,根据软件是否需要被执行,可以分为静态测试和动态测试,故A选项叙述错误。软件测试应在测试之前制定测试计划,并严格执行,排除测试随意性,并且需要设计正确的测试用例,故B选项叙述错误。软件测试就是在软件投入运行之前,尽可能多地发现软件中的错误,改正错误是调试的过程,故D选项叙述错误。软件测试是保证软件质量的重要手段,故C选项正确。7、下面图中属于软件设计建模工具的是()。A、DFD图(数据流程图)B、程序流程图(PFD图)C、用例图(L/SE—CASE图)D、网络工程图标准答案:B知识点解析:结构化分析方法的常用工具:数据流程图(DFD)、数据字典(DD)、判定表、判定树。常用的过程设计建模工具:图形工具(PFD图、N—S图、PAD图、HIPO)、表格工具(判定表)、语言工具(PDL)。用例图(USE—CASE图)用于对系统、子系统或类的功能行为进行建模。网络工程图用于网络设备布线。属于软件设计建模工具的是程序流程图(PFD图),故B选项正确。8、数据库(DB)、数据库系统(DBS)和数据库管理系统(DBMS)之间的关系是()。A、DB包括DBS和DBMSB、DBMS包括DB和DBSC、DBS包括DB和DBMSD、DBS、DB和DBMS相互独立标准答案:C知识点解析:数据库(DB)是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库管理系统(DBMS)是数据库的机构,它是一个系统软件,负责数据库中的数据组织、数据操纵、数据维护、数据制及保护和数据服务等。数据库系统(SBS)由如下几部分组成:数据库、数据库管理系统、数据库管理员、硬件平台、软件平台,这些构成了一个以数据库管理系统为核心的完整的运行实体。数据库系统包括数据库与数据库管理系统,故C选项正确。9、医院里有不同的科室,每名医生分属不同科室,则实体科室与实体医生间的联系是()。A、一对一B、一对多C、多对一D、多对多标准答案:B知识点解析:实体集之间通过联系来建立联接关系分为3类:一对一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。每个科室有多名医生,但每个医生只能在一个科室里,故实体科室和实体医生之间的联系是一对多,因此B选项正确。10、以下叙述错误的是()。A、任何能通过编译和运行的算法都一定能得到所期望的结果B、一个算法所包含的操作步骤应该是有限的C、算法中每一条指令必须有确切的含义D、算法可以用各种描述方法来进行描述标准答案:A知识点解析:算法的特性包括有穷性、确定性、有效性等。有穷性是指一个算法应该包含有限的操作步骤而不能是无限的,故选项B正确;确定性是指算法中每一个步骤应当是确定的,而不能是含糊的、模棱两可的,故选项C正确;算法可以使用自然语言、流程图、伪代码等多种描述方法来进行描述,故选项D正确;算法的有效性是指算法中每一个步骤应当能有效地执行,并得到确定的结果,至于结果是否符合期望,另当别论,故A选项错误,因此答案选A。11、若有定义语句:intx=10:则表达式x一=x+x的值为()。A、10B、一20C、0D、一10标准答案:D知识点解析:表达式x一=x+x等价于x=x一(x+x),x取值为10,所以结果为:10—20=一10,答案选D。12、若有定义:doublea=22;inti=0,k=18;则不符合C语言规定的赋值语句是()。A、a=a++,i++;B、i=(a+k)<:(i+k);C、i=a%11;D、i=!a;标准答案:C知识点解析:自增、自减操作符适用于char、short、int、long、float、double等类型,故选项A正确;赋值操作符“=”的优先级小于比较操作符“<=”,所以选项B等价于:i=((a+k)<=(i+k));,即将后面比较操作符的结果赋值给i,故选项B也正确;“!”是逻辑非运算符,i=!a表示将a表达式的值取反,赋值给i,故选项D也正确;求模运算符“%”的操作数只能是整数,故选项C错误,因此答案选C。13、以下选项中,合法的C语言实数是()。A、.4e0B、4.3e0.2C、E4.8D、0.29E标准答案:A知识点解析:c语言中,实数有两种形式:十进制小数形式和指数形式。由4个选项可知,本题考查的是实数的指数形式,指数形式一般为:aEn,其中a为十进制数,n为十进制整数,表示的值为:a×10n;B、C选项错在阶码必须是整数,D选项错在无阶码,故答案为A,A的值为:0.4×100=0.4。14、以下选项中,与k=n++完全等价的表达式是()。A、k=n,n=n+1B、n=n+1,k=nC、k=++nD、k+=n+1标准答案:A知识点解析:本题考查后缀自增++运算符,n++表示n的当前值参与运算后,再自增1,所以表达式k=n++等价于k=n,n=n+1,故答案选A。15、以下叙述错误的是()。A、若用户标识符的命名与预定义标识符相同,命名无效B、若用户标识符的命名与关键字相同,将产生编译错误C、若用户标识符的命名与预定义标识符相同,预定义标识符失去原有含义D、若用户标识符的命名与预定义标识符相同,可能引发运行错误标准答案:A知识点解析:标识符分为关键字、预定义标识符、用户标识符,关键字不可以作为用户标识符,故选项B正确;预定义标识符可以作为用户标识符,原来的预定义标识符将会被用户标识符覆盖,预定义标识符的原意失效,故选项A错误,选项c正确;用户标识符与预定义标识符同名时,可能会导致运行错误,故选项D正确,因此答案为A。16、设有定义:doublex;,以下选项中不能将输入数据3.14读入赋给变量x的是()。A、scanf(“%4.2f.”,&x);B、scanf(“%if”,&x);C、scanf(“%le”,&x);D、scanf(“%4if”,&x);标准答案:A知识点解析:scanf()函数格式字符串的一般形式为:%[*][输入数据宽度][长度]类型。输入数据宽度必须是十进制的整数,它没有精度控制,%4.2f是错误的,不能企图用此语句输入小数点为2位的实数,故选项A错误;scanf()函数的长度格式符为1和h,%lf表示用小数形式输入双精度浮点数,满足条件,故选项B正确;%le表示用指数形式输入双精度浮点数,满足条件,故选项C正确;%4lf表示用小数形式输入宽度为4的双精度浮点数,故选项D正确,因此答案为A。17、若有定义:floatx=1.5:inta=1,b=3,c=2;则正确的switch语句是()。A、switch(a+b){case1:prinff(“*\n”);case2+1:prinff(“**\n”);}B、switch((int)x);{case1:prinff(“*\n”);case2:prinff(“**\n”);}C、switch(x){case1.0:prinff(“*\n”);case2.0:prinff(“**\n”);}D、switch(a+b){case1:prinff(“*\n”);casec:prinff(“**\n”);}标准答案:A知识点解析:暂无解析18、有以下程序段:#includeinta,b,c;a=10;b=50;c=30;if(a>b)a=b,b=c;c=a;prinff(“a=%db=%dc=%d\n”,a,b,c);程序的输出结果是()。A、a=10b=50c=10B、a=10b=50c=30C、a=10b=30c=10D、a=50b=30e=50标准答案:A知识点解析:形式为“if(表达式)语句”的if作用到语句的第一个分号结束,所以本题中if语句的作用范围为a=b,b=c;。由于if条件为false,所以这两条语句不执行,执行c:a语句,所以程序最终输出结果:10,50,10,答案为A。19、以下关于循环语句的叙述中正确的是()。A、do…while语句的循环体至少执行一次B、while语句的循环体至少执行一次C、for语句的循环体至少执行一次D、上述A、B、C说法均正确标准答案:A知识点解析:while(表达式)当表达式为false时,循环体一次都不执行,故选项B、D错误;for(表达式1;表达式2;表达式3)语句,当表达式2为false时,循环体一次都不执行,故选项c错误;do—while语句循环体至少执行一次,故答案选A。20、有以下程序:#includemain(){intx,y=0,z=0,t;do{seanf(“%d”,&x);t=x>0:switch(t){ease0:break;ease1:y+=x;continue;}z+=x:}while(x);prinff(“%d,%d\n”,y,z);}程序运行时输入:一11—220<回车>,则输出结果是()。A、1,1B、1,0C、3,一3D、3,0标准答案:C知识点解析:分析程序结构,在do…while循环中,嵌套一个switch语句,switch语句中两个case语句分别执行break和continue,其中break语句是跳出switch语句,接着执行d0…while循环体剩下的部分;而continue语句是直接进入do…while的下一个循环,由此可知每次循环,当t=0时,执行break语句,接着将z值累加x;当t=1时,执行continue语句,将y值累加x,所以当x输入一1、一2、0时,t=0,z值累加为一3;当x输入1、2时,t=1,y值累加为3,输出y、z的值分别为3、一3,故答案选C。21、有以下程序:#includemain(){intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;for(i=0;i<3;i++)f10r(j=i;j<=i;j++)t+=b[i][b[j][i]];prinff(“%d\n”,t);}程序运行后的输出结果是()。A、3B、4C、1D、9标准答案:B知识点解析:分析程序可以发现,内层for循环每次只执行一次:即当j=i时。所以可以使用i替换j,去掉for循环,对应外层for循环的i,执行t+=b[i][b[i][i]],所以当i取值0、1、2时,1的值累加b[0][b[0][0]]、b[1儿b[1][1]]、b[2][b[2][2]],即b[0][0]、b[1][1]、b[2][2],对应的值为:0、1、2,t取值为4(t初始值为1)。故答案选B。22、以下选项中能正确定义二维数组的选项是()。A、doublea[][3]={2*3};B、doublea[][3];C、doublea[][3]={};D、doublea[2][3]={{1.0},{2.0},{3.0,4.0}};标准答案:A知识点解析:如果第一维的长度没有指定,则定义的同时需要完成初始化,否则不知道分配多大的内存空间给它,所以选项B、C错误;二维数组a[2][3]中只有两个元素,都是一维数组,一维下标最大只能是a[1],所以选项D错误;若完成初始化的二维数组,第一维的长度没有指定,则第一维的大小按如下规则确定:若初值个数能被第二维大小整除,所得的商就是第一维的大小;若不能整除,则所得的商加1作为第一维的大小,所以选项A相当于:doublea[1][3]={6};其中a[0][0]=6,其他元素赋值0,故选项A正确,答案为A。23、若有函数定义如下:intfun(intx,inty){retumx—y;}则以下涉及上述函数的说明语句错误的()。A、intfun(intx,y);B、intfun(int,jnt);C、intfun(inta,intb);D、inti,fun(intx,inty);标准答案:A知识点解析:C语言中函数的说明形式为:类型说明符函数名9类型形参名1,类型形参名2,……);其中形参名可以直接省略,故选项B、选项C正确,选项D中,变量i和函数同时声明,正确;A选项中的说明语句中省略类型,故错误。24、有以下程序:#include#defineN4main(){inta[N][N]={0},i,j,k;for(i=0;iA、1221B、l111C、2112D、2222标准答案:A知识点解析:本题程序需要输出二维数组a中第二行的各个元素值,即a[1]这个一维数组的元素值。分析程序可知只有在两种情况下才会对a[1]中的元素赋值:①外层for循环中i:0时,内层第二个for循环的k取值为1,此时a[k][i]=a[1][0]=1,a[k][N—i—1]=a[1][3]=1;②外层for循环中i=1时,内层第一个for循环的j取值为1、2,a[i][j]=a[1][j]=2,即a[1][1]=2,a[1][2]=2。除了这两种情况,其他情况不会修改a[1]中的值,所以最终a[1]各个元素的值为:1、2、2、1,故答案选A。25、有以下程序:#includeintf(intn);main(){inta=3,s;s=f(a);s=s+f(a);prinff(“%d\n”,s);}intf(intn){staticinta=1;n+=a++:retumn:}程序运行后的输出结果是()。A、7B、8C、9D、10标准答案:C知识点解析:首先main函数中的局部变量a和f()函数中的静态局部变量a的作用域都只限在其所在的函数中,相互之间不影响,看作两个不同的变量即可。另外,f()函数中的静态局部变量a只在第一次调用f()函数时初始化一次,其他调用都会保留上一次调用结束时的值。分析main函数可知,第一次调用时将f(a)的返回值赋给s,所以语句可以改写为:s=f(a)+f(a),即main函数中调用两次f(a),传入的参数8取值都为3,第一次调用时,静态局部变量初始化为1,所以n=4并返回,a自增为2;第二次调用时静态局部变量a取上一次调用结束时的值2,所以n=5并返回,a自增为3。所以在main()函数中,s=4+5=9,所以函数执行完输出结果为9,答案为C。26、有以下程序:#includemain(){chars[][6]={-.abed“,”abe”,“ab”};inti;for(i-0;i<3;i++)puts(s[i]);}}执行后的输出结果是()。A、abedabeabB、aaaC、abedbedcD、dabc标准答案:A知识点解析:程序初始化一个二维数组,其中每个元素都是一个字符数组,for循环中使用字符串输出函数puts()打印二维数组中的每个元素,puts()接受字符数组名当做参数,将该字符数组存储的字符串打印出来,程序中s[0]存储的字符串是“abcd”,s[1]存储的字符串是“abc”,s[2]存储的字符串是“ab”,所以程序输出为:abcd、abc、ab,答案选A。27、若有以下函数:intfun(char*a,char*b){intbk=0;while((*a!=‘\0’)&&(*b!=’、0’)&&strlen(a)==strlen(b)){if(*b!=*a){bk=0;break;}a++;b++;bk=1;returnbk;此函数的功能是()。A、判断a和b两个字符串是否相等B、将字符串a改名为字符串bC、将字符串变量a的值赋给字符串变量bD、检查字符串a和b中是否有‘\0’标准答案:A知识点解析:分析程序可知:函数fun在字符指针a和b未遇到字符‘\0’且a指向的字符串A长度与b指向的字符串B长度相同时,遍历A、B,逐个比较a指向的字符与b指向的字符是否相同,所以程序分3种情况:①A的长度与B的长度不同,返回值为0;②A的长度与B的长度相等,但A中某个位置i上的字符与B中位置i上的字符不同,返回值为0;③A的长度与B的长度相等,且A中相同位置上的字符与B中相同位置上的字符全部相同,返回值1。由此可知函数的功能是判断a和b指向的两个字符串是否相等。答案为A。28、设有如下定义和语句:[1]char*s;s:“string”;[2]chars[7];s=“string”;[3]chars[]=“string”;[4]chars[]={’s’,’t’,’r’,…,’n’,’g’};其中定义项可以作为字符串使用的是()。A、[1]和[4]B、[1]和[2]C、[1]和[3]D、[3]和[4]标准答案:C知识点解析:字符数组只能在初始化的时候完成赋值,否则只能对数组元素逐个赋值,[2]是错误的;C语言字符串必须包含‘\0’字符,用来表示字符串结束标志,[4]错误;可以将字符串直接赋给字符指针,使得指针指向字符串首地址,[1]正确;在字符数组初始化时,可以直接使用字符串,[3]正确;故答案为C。29、有以下程序:#include#includeintfun(intn){int*p;P=(int*)malloc(sizeof(int));*p=n;retum*p;}main(){inta;a=fun(10);printf(“%d\n”,a+fun(10));}程序的运行结果是()。A、10B、20C、0D、出错标准答案:B知识点解析:由main函数可知:程序需要打印出变量a与fun(10)返回值相加的结果,而变量a的值等于fun(10)的返回值,所以最终结果取决于fun(10)的返回值。在函数fur()中,传入整型参数n,定义整型变量指针p,并使用malloc()函数为指针p分配了内存空间,接着将参数n的值赋给p指针所指的整型对象,并返回p指针所指对象,由此可知,函数返回值等于传入的参数n,所以fun(10)的返回值为10,且a=10,最终结果为20。因此答案B正确。对于选项D,虽然在fun()函数中,p指向的动态分配的内存空问未被释放,使得程序存在内存泄露问题,但只要内存还有剩余,就不会影响程序的运行,不会造成程序运行崩溃。30、有以下程序:#includestruetS{inta,b;}data[2]={10,100,20,200};main(){structSp=data[1];printf(“%d\n”,++(P.a));}程序运行后的输出结果是()。A、10B、11C、20D、21标准答案:D知识点解析:数组data包含两个元素,元素类型为结构体S,分别为data[0],data[1],初始化时,使用4个整数10,100,20,200,分别给data[0].a,data[0].b,data[1].a,data[1].b赋值,又p.a=data[1].a,等于20,在输出之前执行自身加l操作,所以结果为21,答案选D。31、以下叙述中正确的是()。A、当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失B、打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖C、在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据D、C语言中的文件是流式文件,因此只能顺序存取数据标准答案:A知识点解析:文件一旦使用完毕,应该使用关闭文件函数把文件关闭,以避免出现文件数据丢失等错误,所以选项A正确;若使用fopen打开文件函数打开文件时,指定打开方式为‘a’,则可以向文件追加信息,而不是覆盖原文件内容,故B选项错误;在文件被打开后,使用文件定位函数rewind或fseek函数,可以将文件指针移到文件的任何位置,所以在写操作完成后,可以直接将文件指针定位到文件首,接着读数据,而不需要先关闭文件,再打开读取,故C选项错误;使用文件定位函数可以随机读写文件,故D选项错误。所以本题答案为A。32、有以下程序:#includemain()FTIL*fp;inti,a[6]={1,2,3,4,5,6},k;fp=fopen(”datA)dat”,“w+b”);fwrite(&a[0],sizeof(int),1,fp);for(i=1;i<6;i++){fseek(fp,OL,0);fwrite(&a[i],sizeof(int),1,fp);}fseek(fp,0L,0);fread(&k,sizeof(int),1,fp);fclose(fp);printf(“%d\n”,k);程序运行后的输出结果是()。A、123456B、21C、6D、654321标准答案:C知识点解析:首先使用fopen函数以只写方式打开文件datAdat,返回文件指针fp,然后通过调用fwrite函数,将起始地址为&a[0]、单位长度为sizeof(int)的一个元素写入文件,即写入a[0];接着for循环从数组a的第二个元素起,每次首先使用fseek()函数将指针fp定位到文件datAdat的开始位置,写入起始地址&a[i]、单位长度为sizeof(int)的一个元素,即写入a[i];此时数组元素按照逆序写入文件:65432l。循环结束后,使用fseek()函数再将指针fp定位到文件开始位置,调用fread()函数,从fp所指位置读取单位长度为sizeof(int)的一个元素到变量k中,即k:6,最后调用fclose()函数关闭文件,输出k的值6,故答案为C。33、有以下程序:#include#defineS(x)(x/x)*xmain(){intk=6,j:3;printf(“%d,%d\n”,S(k+j),S(j+k));}程序运行后的输出结果是()。A、57,39B、57,57C、9,9D、39,39标准答案:A知识点解析:本题考查宏定义。宏定义是在程序预处理阶段直接进行文本替换,所以本题中S(k+j)、S(j+k)可以替换为:S(k+j)=(k+j/k+j)×k+j=(6+3/6+3)×6+3=57;S(j+k)=(j+k/j+k)×j+k=(3+6/3+6)×3+6=39,故答案为A。(注:宏定义中的形参一定要使用小括号括起来,以避免出错)34、若要通过位运算使整型变量a中的各位数字全部清零,以下选项正确的是()。A、a=a&0;B、a=a10;C、a=a’0;D、a=!a;标准答案:A知识点解析:本题考查位运算符和位运算。“1’运算符,110=1,010=0,所以选项B中a变量的各位数字保持不变,故B错误;“”’运算符,1^0=1,0^0=0,所以选项c中a变量的各位数字中,1保持不变,0变成1,故C错误;“!”运算符,!1=0,10=1,所以选项D中a变量的个位数字中,1变成0,0变成1,故D错误;“&”运算符,1&0=0,0&0=0,所以选项A中各位数字全部清零,故答案为A。35、程序中若有以下的说明定义和语句:#include#includestruetSTR{charnHm[10];intS;};main(){struetSTRt,*p;P=&t:}}则不能给变量t的s成员赋整数99,给num成员赋空串的语句组是()。A、(*P).s=99;(*p).RumRm.“”;B、P一>s=99;P一>num[0]=0;C、(*p).s=99;P一>num[0]:‘\0’;D、P一>s=99;strcpy((*p).num,“”);标准答案:A知识点解析:结构体变量使用“.”运算符引用结构体成员变量,结构体指针使用“一>”运算符引川结构体成员变量,main函数中声明结构体STR变量t,和结构体STR指针*p,并将t的地址赋给p,所以使用p访问成员变量时,使用“一>”运算符;使用*p访问成员变量时,使用“.”运算符。另外,由于成员变量num是字符数组,所以不能直接进行赋值,若要对num赋空字符串值,可以把num中第一个元素赋值为0或‘\0’,或者使用strcpy复制函数将空字符串“”复制到num中,故选项B、c、D正确,选项A错误,因此答案为A。36、有以下程序:#includeintfun(inta){intb=2;staticintc=2:b++:c一一;return(a+b+e);}main(){intk,a=2;for(k=0;k<3;k++)printf(“%d”,fun(a));printf(“\n”);}执行后的输出结果是()。A、678B、666C、654D、456标准答案:C知识点解析:由于main函数for循环中k的取值为0,1,2,所以for循环三次调用fun()函数,每次调用函数fun,形参a的值为2(实参a传入),局部变量b初始化为2(fun函数中初始化),静态局部变量c保留上一次函数调用结束后的值,所以第一次调用fun(),形参a=2,b=2,c=2,然后执行b自增1,c自减1,返回值为:2+3+1=6;第二次调用fun(),形参a=2,b=2,c=1,然后执行b自增1,c自减1,返回值为:2+3+0=5;第三次调用fun(),形参a=2,b=2,c=0,然后执行b自增1,c自减1,返回值为:2+3一1=4,所以结果为:654,答案为C。37、有定义语句:inti;chars1[10],s2[10]=“Program”;则能正确给sl数组赋字符串的语句是()。A、for(i=0;i<=7;i++)s1[i]=s2[i];B、s1=s2;C、while(s2)s1++=s2++;D、for(i=0;s2[i];i++)s1[i]=s2[i];标准答案:A知识点解析:首先字符数组只有在初始化的时候整体赋值,否则只能对字符数组逐个赋值,所以选项B错误;字符数组名s1、s2是常量,不能改变,故选项C错误;字符串“Program”包含结尾的‘\0’,选项D中在处理到s2[i]=’\0’时,跳出循环,未将’\0’赋给s1,所以选项D也是错误的;由于“Program”包含结尾的’\0’总共有8个字符,所以选项A是正确的,答案为A。38、以下程序拟读取一个姓氏,查找其对应的年龄并输出:#include#include#includestructperson{charname[10];intage;};structpersongroup[6]={“zhang”,18,“wang”,20,“li..,19,“zhao”,18,"liu¨.19},*p;main(){inti,flag=0;P=(structperson*)malloe(sizeof(structperson));gets(&p一>name);for(i=0;i<6;i++)if((strcmp(P一>name,group[i].name)==0)){prinff(“%d\n”,group[i].age);flag=1:}if(flag==0)prinff(“Nofind!\n”);}程序有语法错误,出错的是()。A、gets(&p一>name);B、P=(structperson*)malloe(sizeof(structperson))C、if((strcmp(P一>name,group[i].name)===0))D、prinff(“%d\n”,group[i].age)标准答案:A知识点解析:语句gets(&p一>name)中,gets的参数应该是成员变量name数组的首地址,而&p一>name是首先获取数组name的首地址,然后再对首地址取地址符,所以这是错误的,正确参数应该是:gets(p一>name);,故答案选A。39、有以下程序:#include#includemain(){FILE=l=fo;charch,str[5]:if((fp=fopen(“file.txt”,“wb+”))=NULL){prinff(“error!\n”);exit(0);}eh=getchar();while(ch!=‘!’){fputc(ch,f0);ch=getchar();}rewind(fp);do{.fgets(str,4,f0);puts(str);}while(!feof(fo));fclose(fp);}程序运行时输入:c:\\test!<回车>,则程序的输出结果是()。A、C:\B、e:\test\testC、e:tesD、e:\ttest标准答案:A知识点解析:分析程序可知,程序是首先以可写方式打开文件file.txt,然后使用getchar()逐个读入输入的字符,写到文件file.txt中,直到输入的字符是‘!’,停止写入文件;然后使用rewind()将文件指针定位到文件开头位置,再调用龟ets()函数,将文件中的内容读入str字符数组中,再用puts()输出,直到遇到文件结尾符,关闭文件。其中写入文件时是逐个写入的,而读出时调用fgets(str,4,fp),由此可知fgets至多读取3个字符到str,然后在结尾自动加上“\0”字符,作为字符串的结尾标志,使用puts输出时,输出3个字符并完成换行,当输入c:\\test!<回车>时,输出为:c:\\test故答案为A选项。二、程序填空题(本题共1题,每题1.0分,共1分。)40、下列给定程序中,函数fun的功能是:将形参n中个位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新数,作为函数值返回。例如,输入一个整数27638496,函数返回值为64862。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序在文件BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includeunsignedlongfun(unsignedlongn){unsignedlongx=0;intt;while(n){t=n%10;/**********found**********/if(t%2=[1])/**********found**********/x=[2]+t;/**********found**********/n=—[3];}returnx:}main(){unsignedlongn=一1;while(n>99999999||n<0)|printf(“Pleaseinput(0标准答案:(1)0(2)10,*x(3)n/10知识点解析:暂无解析三、程序修改题(本题共1题,每题1.0分,共1分。)41、下列给定程序中函数fun的功能是:将tt所指字符串中的小写字母全部改为对应的大写字母,其他字符不变。例如,若输入“Ab,eD”,则输出“AB,CD”。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODll.C中,不得增行或删行,也不得更改程序的结构!#include#includechar*fun(chartt[]){inti;for(i=0;tt[i];i++)/**********found**********/if((‘a’<=tt[i])II(tt[i]<=‘z’))/**********found**********/tt[i]+=32;retum(tt);}main(){chartt[81];prinff(“\nPleaseenterastring:”);gets(tt);printf(“\nTheresultstringis:\n%s”,fun(tt));}标准答案:(1)if((tt[i]>=‘a’)&&(tt[i]<=‘z’))(2)tt[i]一=32;知识点解析:暂无解析四、程序设计题(本题共1题,每题1.0分,共1分。)42、N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,其功能是:求出平均分,并由函数值返回。例如,若学生的成绩是:8576698591726487,则平均分应当是:78.625。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#include#de6neN8structslist{doubles;structslist*next;};typedefstructslistSTREC;doublefun(STREC*h){}STREC*creat(double*s){STREC*h,*P,*q;inti=0;h=P=(STREC*)malloc(sizeof(STREC));p一>s=0;while(is=s[i];i++;P一>next=q;P=q;}P一>next=0:returnh;}oudist(STREC*h){STREC*p;P=h一>next;prinff(“head”);do{prinff(“一>%4.If”,P一>s);P=P一>next;}while(P!=0);prinff(“\n\n”);}main(){doubles[N]={85,76,69,85,9l,72,64,87},ave;voidNONO();STREC*h;h=creat(s);outlist(h);ave=fun(h);prinff(“ave=%6.3f\n”,ave);NONO();{}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti,j;doubles[N],ave;STREC*h:in=fopen(“in.dat”,“r”);out=fopen(“out.dat”,“w”);for(i=0;i<10;i++){for(j=0;j标准答案:doublefun(STREC*h){doubleave=0.0:STREC*p=h->next;while(p!=NULL){ave=ave+p—>s;p=p->next;}retumave/N;}知识点解析:暂无解析国家二级(C语言)机试模拟试卷第2套一、选择题(本题共38题,每题1.0分,共38分。)1、下列叙述中正确的是A、循环队列是顺序存储结构B、循环队列是链式存储结构C、循环队列是非线性结构D、循环队列的插入运算不会发生溢出现象标准答案:A知识点解析:循环队列是队列的一种顺序存储结构.线性结构是n个数据元素构成的有限序列,除第一个元素外的每一个元素,有且只有一个前件,除最后一个元素外,有且只有一个后件。循环队列是线性结构。当需要插入的数据大于循环队列的存储长度,入队运算会覆盖前面的数据,发生溢出现象。故A选项正确。2、下列叙述中正确的是A、所有数据结构必须有根结点B、所有数据结构必须有终端结点(即叶子结点)C、只有一个根结点,且只有一个叶子结点的数据结构一定是线性结构D、没有根结点或没有叶子结点的数据结构一定是非线性结构标准答案:D知识点解析:一个非空的数据结构如果满足以下两个条件:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件,称为线性结构,在数据结构中习惯称为线性表,D选项正确。图是可能不包含根结点或叶子结点的数据结构,AB选项错误。数据结构中若有中间结点不满足只有一个前件或者后件条件,则不属于线性结构,C选项错误。3、下列关于算法的描述中错误的是A、算法强调动态的执行过程,不同于静态的计算公式B、算法必须能在有限个步骤之后终止C、算法设计必须考虑算法的复杂度D、算法的优劣取决于运行算法程序的环境标准答案:D知识点解析:算法是指对解题方案的准确而完整的描述,简单地说,就是解决问题的操作步骤。算法不同于数学上的计算方法,强调实现,A选项叙述正确。算法的有穷性是指,算法中的操作步骤为有限个,且每个步骤都能在有限时间内完成,B选项叙述正确。算法复杂度包括算法的时间复杂度和算法的空间复杂度。算法设计必须考虑执行算法所需要的资源,即时间与空间复杂度,故C选项叙述正确。算法的优劣取决于算法复杂度,与程序的环境无关,当算法被编程实现之后,程序的运行受到计算机系统运行环境的限制,故正确答案为D选项。4、在线性表的顺序存储结构中,其存储空间连续,各个元素所占的字节数A、相同,元素的存储顺序与逻辑顺序一致B、相同,但其元素的存储顺序可以与逻辑顺序不一致C、不同,但元素的存储顺序与逻辑顺序一致D、不同,且其元素的存储顺序可以与逻辑顺序不一致标准答案:A知识点解析:顺序表具有以下两个基本特征:线性表中所有元素所占的存储空间是连续的;线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。在顺序表中,每个元素占有相同的存储单元。A选项正确。5、设二叉树如下:则中序序列为A、ABDEGCFHB、DBGEAFHCC、DGEBHFCAD、ABCDEFGH标准答案:B知识点解析:二叉树遍历可以分为3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。本题中前序遍历为ABDEGCFH,中序遍历为DBGEAFHC,后序遍历为DGEBHFCA,故B选项正确。6、下面不属于软件需求分析阶段工作的是A、需求获取B、需求计划C、需求分析D、需求评审标准答案:B知识点解析:需求分析阶段的工作可以分为4个方面:需求获取、需求分析、编写需求规格说明书和需求评审,而需求计划不属于需求分析阶段的工作,故正确答案为B选项。7、下面不属于黑盒测试方法的是A、边界值分析法B、基本路径测试C、等价类划分法D、错误推测法标准答案:B知识点解析:常用的黑盒测试方法和技术有:等价类划分法、边界值分析法、错误推测法和因果图等。基本路径测试属于白盒测试,故正确答案为B选项。8、在数据库系统中,数据模型包括概念模型、逻辑模型和A、物理模型B、空间模型C、时间模型D、数据模型标准答案:A知识点解析:数据模型按照不同的应用层次分为3种类型:概念数据模型、逻辑数据模型、物理数据模型,故A选项正确。9、若实体A和B是一对一的联系,实体B和C是多对一的联系,则实体A和C的联系是A、多对一B、一对多C、一对一D、多对多标准答案:A知识点解析:一般来说,实体集之间必须通过联系来建立联接关系,分为三类:一对一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。A与B是1:1联系,B与C是m:1联系,则A与C是m:1联系,即多对一,故A选项正确。10、某二叉树中共有935个结点,其中叶子结点有435个,则该二叉树中度为2的结点个数为A、64B、66C、436D、434标准答案:D知识点解析:在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。对任何一棵二叉树,度为0的结点(即叶子结点)总是比度为2的结点多一个。叶子结点有435个,则度为2的结点为434,D选项正确。11、设a,b,c是整型变量,且已正确赋初值,以下选项中错误的赋值语句是A、a=1%(b=c=2);B、a=(b=3)*c;C、a=b=c/10;D、a=2=(b=9)=1;标准答案:D知识点解析:D选项中,()具有最高优先级,b先赋值9,再根据赋值运算符号自右向左进行赋值,再给b赋值为1,再计算2=b,赋值运算左边必须是一个变量,2是常量,语法错误,答案为D选项。12、以下选项中,合法的实数是A、1.5E2B、E1.1C、2.10ED、1.9E1.4标准答案:A知识点解析:E表示"10的幂次",后面必须接整数,排除B,C,D选项,答案为A选项。13、关于程序设计基本概念,以下叙述错误的是A、计算机可以直接执行由任意高级语言编写的程序B、高级语言都有与之对应的编译程序或解释程序C、用于任何一种计算机高级语言都可以把算法转换为程序D、结构化算法可以解决任何复杂的问题标准答案:A知识点解析:计算机只能识别机器语言,不能直接识别由高级语言编写的程序,答案为A选项。14、以下不能用于实型数据的运算符是A、%B、/C、*D、+标准答案:A知识点解析:%符号两边必须是整数,因此答案选A。15、C语言中,最基本的数据类型包括A、整型、实型、逻辑型B、整型、字符型、数组C、整型、实型、字符型D、整型、实型、结构体标准答案:C知识点解析:C语言中,最基本的数据类型包括整型、实型、字符型,答案为C选项。16、若有定义:inta=0,b=0,c=0,d=0;,有C语言表达式(a++&&b++):c++:d++,以下关于其执行顺序的叙述正确是A、先执行a++,表达式a++的值为0,由此即可确定(a++&&b++)的值为0,因此执行d++B、先执行a++,表达式a++的值为0;再执行b++,表达式b++的值为0,由此可确定(a++&&b++)值为0,因此执行d++C、先执行a++,表确定(a++&&b++)值为1,因此执行c++达式a++的值为1;再执行b++,表达式b++的值为1,由此可D、先执行b++,表达式b++的值为1;再执行a++,表达式a++的值为1,由此可确定(a++&&b++)值为1,因此执行c++标准答案:A知识点解析:表达式1:表达式2:表达式3,若表达式1为真,则执行表达式2,否则执行表达式3。逻辑与运算符遵循"短路求值"策略,即只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解右操作数,表达式(a++&&b++)中,左操作数a++的值为0,已经可以确定整个逻辑表达式的结果为0,因此右操作数b++不再求解,直接执行表达式3,即d++,答案为A选项17、有以下程序#include<stdio.h>main(){charch=’B’;while(ch<’E’){printf("%d",ch-’A’);ch++;}printf("\n");}程序运行后的输出结果是A、123B、ABCC、abcD、12标准答案:A知识点解析:当ch满足<’E’,输出ch-’A’,即字符在ASCII码相减进行输出,%d表示输出十进制整数。循环开始ch=’B’,print("%d",ch-’A’)=1,以此类推答案为A选项。18、对于函数声明voidfun(floatarray[],int*ptr);下叙述正确的是A、调用函数时,array数组的元素和ptr都是按值传送B、函数声明有语法错误,参数array缺少数组大小定义C、调用函数时,array数组中将存储从实参中复制来的元素值D、函数参数array,ptr都是指针变量标准答案:D知识点解析:(floatarray[],int*ptr)均表示定义了2个指针变量*array和ptr,其中函数形参中intarray[]其实相当于int*array,答案为D选项。19、有以下程序#include<stdio.h>main(){inti,k;intarray[4][2]={{1,0},{0},{2,9},{3}};for(i=0;i<2;i++)for(k=0;k<3;k++){printf("%d,",array[k][i]);}printf("\n");}程序运行后的输出结果是A、1,0,2,0,0,9,B、1,2,4,9,6,0,C、2,9,0,0,1,4,D、1,2,0,1,4,1,标准答案:A知识点解析:本题定义一个4行2列数组,其中赋值6个数,其余自动为0,根据for循环,第一次输出第一列前三行数,分别是1,0,2;第二次输出第二列前三行数,分别是0,0,9,因此答案为A选项。20、要求定义一个具有6个元素的int型一维数组,以下选项中错误的是A、intN=6,a[N];B、inta[2*3]={0}C、#defineN3inta[N+N];D、inta[]={1,2,3,4,5,6};标准答案:A知识点解析:数组名后面括号的值必须是整形常量,不可以是变量,A选项定义错误,答案为A选项。21、有以下程序#include<stdio.h>main(){charb[3][10],c;inti;for(i=0;i<2;i++)scanf("%s",b[i]);i=0;while((c=getchar())!=’\n’)b[2][i++]=c;b[2][i]=’\0’;printf("%s%s%s\n",b[0],b[1],b[2]);}执行时若输入以下字符串:Peachflowerispink.<回车>则输出结果是A、Peachflowerispink.B、Peachflowerispink.C、Peachflowerispink.D、Peachflowerispink.标准答案:D知识点解析:由于用"%s"格式输出字符串时,是以空格作为间隔符,因此,输入给b[0]="Peach",b[1]="flower",而while语句给c赋值时,getchar()能识别空格符,b[2]="ispink",答案为D选项。22、有以下程序#include<stdio.h>main(){charw[20],a[5][10]={"abcdef","ghijkl","mnopq","rstuv","wxyz"};inti,j;for(i=0;i<5;i++){j=0;while(a[i][j]!=’\0’)j++;w[i]=a[i][j-2];}w[5]=’\0’;puts(w);}程序运行后的输出结果是A、agmrwB、ekpuyC、djotxD、flqvz标准答案:B知识点解析:在for循环中,执行完while语句后,j值为每行字符串的长度,因此w[i]=a[i][j-2],比如i=0;j=6,则w[0]=a[0][4]=’e’,循环依次赋值,最后输出w,答案为B选项。23、有以下程序#include<stdio.h>#include<string.h>main(){charname[9]="c##line";char*str=name;printf("%d,%d,%d,%d\n",sizeof(name),strlen(name),sizeof(str),strlen(str));}程序运行后的输出结果是A、9,7,4,7B、8,6,9,6C、8,6,3,6D、10,8,5,8标准答案:A知识点解析:由于name是一个长度为9的一维数组,故在内存中占用9个字节长度,而其中字符串"c##line"只有7个字符,strlen()函数返回的是该字符串的长度,不包含结束符,str是一个指针变量,占用4个字节长度,但是由于name首地址赋给了str指针变量,在调用strlen()函数时,返回的是指针对应地址单元的字符串的长度7,因此答案为A选项。24、有以下程序#include<stdio.h>main(){intpassword;char*p,old_str[10]="wind";scanf("%d",&password);p=old_str;while(*p){printf("#%c",*p+password);p++;}printf("\n");}程序运行时,从键盘输入2<回车>,输出结果是A、#y#k#p#fB、#wi#nd#C、#wi#nd#D、#2222#标准答案:A知识点解析:首先定义了一个指针p指向数组的首地址,在while语句中,执行功能是如果当前指针指向地址单元内字符不等于空字符’\0’,则输出’#’和指针对应地址元素的值在ASCII码加2后变换的字符常量,因此,答案为A选项。25、若有定义:char*ps[]={"aa","bb","cc","dd"};,则以下叙述正确的是A、ps[0]是字符串"aa"B、*ps[0]是字符串"aa"的首地址C、ps[0]是字符串"aa"的首地址D、*ps[0]是字符串"aa"标准答案:C知识点解析:定义一个串数组指针ps后,ps是指针变量,ps[0]指向的是数组首个元素的地址,即字符串"aa"的首地址,答案为C选项。26、若有定义:char*ps[]={"aa","bb","cc","dd"};,则以下叙述正确的是A、*ps[0]是字符’a’B、*ps[0]是字符串"aa"C、ps[0]是字符’a’D、ps是字符串"aa"标准答案:A知识点解析:指针数组ps[]定义后,ps[0]代表数组首个元素的地址,即"aa"的地址,同时也是"aa"第一个字符a的地址,所以*ps[0]代表字符a,答案为A选项。27、以下合法的转义字符是A、’\0X41’B、’\0x41’C、’\X41’D、’\x41’标准答案:D知识点解析:’\xhh’表示1到2位十六进制所代表的字符,故答案为D选项。28、在源程序的开始处加上#include<stdio.h>进行文件引用的原因,以下叙述正确的是A、stdio.h文件中包含标准输入输出函数的函数说明,通过引用此文件以便能正确使用printf、scanf等函数B、将stdio.h中标准输入输出函数链接到编译生成的可执行文件中,以便能正确运行C、将stdio.h中标准输入输出函数的源程序插入到引用处,以便进行编译链接D、将stdio.h中标准输入输出函数的源程序插入到引用处,以便进行编译链接标准答案:A知识点解析:stdio.h文件中包含标准输入输出函数的函数说明,预处理指令#include<stdio.h>是使程序可以去该文件中找到printf,scanf等函数以便使用,因此答案为A选项。29、设有定义:inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a,i;,若0≤i≤9,则对a数组元素的引用错误的是A、a[10]B、*(&a[i])C、p[i]D、a[p-a]标准答案:A知识点解析:长度为n的数组其各个元素的下标应该是从0到n-1,因此,长度为10的数组a,第10个元素为a[9],而不是a[10],答案为A选项。30、有以下程序#include<stdio.h>main(){intc,d;c=(13>>1)|1;d=(13>1)||1;printf("%d,%d\n",c,d);}程序运行后的输出结果是A、6,1B、1,1C、7,1D、7,2标准答案:C知识点解析:表达式c=(13>>1)|1中,>>是右移符号,13换算成二进制后右移1位,再和1进行按位或运算,结果为7;表达式d=(13>1)||1中,首先判断13是否大于1,此时条件成立返回1后,再和1进行或运算,结果为1,因此答案为C选项。31、有以下程序#include<stdio.h>#include<string.h>structS{charname[10];};main(){structSs1,s2;strcpy(,"XXX");strcpy(,"=");s1=s2;printf("%s\n",);}程序运行后的输出结果是A、=B、XXXC、#NAME?D、X=标准答案:A知识点解析:主函数首先为结构体定义两个变量s1,s2,分别使用字符串拷贝函数strcpy()为s1和s2的成员name赋值,再将s2中的成员信息赋值给s1,因此输出为"=",答案为A选项。32、有以下程序#include<stdio.h>main(){inti,array[6]={1,5,0,4};for(i=0;i<5;i++)printf("%d,",array[i]&4);printf("\n");}程序运行后的输出结果是A、1,2,1,2,0B、1,5,0,4,0,C、1,5,5,4,0,D、0,4,0,4,0标准答案:D知识点解析:主函数首先定义一个数组array[6],初始化前4个元素的值,其余默认值为0。在for循环中,为数组array中每一个元素换算成二进制数后和二进制整数"100"进行按位与运算,再将结果进行输出,因此答案为D选项。33、有以下程序#include<stdio.h>#include<stdlib.h>voidfun(int**s,intx[2][3]){**s=*(x[1]+1);}main(){inta[2][3]={1,2,3,4,5,6},*p;p=(int*)malloc(sizeof(int));fun(&p,a);printf("%d\n",*p);}程序的运行结果是A、5B、2C、6D、3标准答案:A知识点解析:malloc(size)函数作用是在内存的动态存储区分配一个长度为size的连续空间,函数的返回值是新分配的存储区的首地址,将该地址赋值给p指针,然后取p指针的地址,调用fun函数。fun函数中对指向指针的指针s指向的内存单元赋值,其中x[1]表示二维数组x的第二行的行地址,x[1]+1表示二维数组x的第二行第二列的地址,所以fun函数的功能是将二维数组x的第二行第二列的值,即x[1][1]赋值给**s,*s为p,所以**s代表*p,x[1][1]与a[1][1]等价,因此答案为A选项。34、有如下定义:struct{intnum;charname[10];struct{inty;intm;intd;}birth;}s,*ps=&s;以下对内嵌结构体成员的引用形式错误的是A、ps->birth.yB、s.birth.yC、ps.birth.yD、(*ps).birth.y标准答案:C知识点解析:使用结构体指针对结构体成员进行访问时,形式为结构指针名->结构成员名,或者(*结构指针名).结构成员名,题目中ps为结构体指针,因此判断C选项引用形式错误,答案为C选项。35、有以下程序#include<stdio.h>main(){FILE*fp;inti,a[6]={1,2,3,4,5,6},k;fp=fopen("data.dat","w+");fprintf(fp,"%d\n",a[0]);for(i=1;i<6;i++){rewind(fp);fprintf(fp,"%d\n",a[i]);}rewind(fp);fscanf(fp,"%d",&k);fclose(fp);printf("%d\n",k);}程序运行后的输出结果是A、6B、21C、123456D、654321标准答案:A知识点解析:本题首先定义文件指针变量fp和一个数组a[],再打开一个文件"data.dat",随后先给文件写入数据a[0],由于rewind函数是将文件指针从当前位置重新指向文件开始位置,所以for循环依次将数组a中的数据写入文件开始位置,退出循环后,文件中的数据顺序为:654321,重新使指针指向文件开始位置,将此时fp指向的数据(即文件中第一个数据6)写入变量k中,关闭文件,输出k值,答案为A选项。36、以下程序段中,与其他三个功能不同的程序段是A、s=0;i=1;for(;;){s+=i;i++;if(i<=10)break;}B、s=0,i=1;for(;i<=10;){s+=i,i++;}C、s=0;for(i=1;i<=10;i++){s+=i;}D、for(s=0,i=1;i<=10;s+=i,i++);标准答案:A知识点解析:B,C,D选项都表示对1到10进行累加后赋给s,而选项A中含break语句,循环体只执行一次,结束整个循环过程,因此答案为A选项。37、设有定义:inta=0,b=1;,以下表达式中,会产生"短路"现象,致使变量b的值不变的是A、+a||++bB、a++||++bC、a++&&b++D、a++&&b++标准答案:D知识点解析:++放在变量前面时,表示将变量+1,再参与其他操作,a++&&b++时,由于a值是0直接判定与运算结果为0,忽视b++的值,因此b值不发生改变,答案为D选项。38、关于地址和指针,以下说法正确的是A、通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量B、可以取一个常数的地址赋值给同类型的指针变量C、可以取一个表达式的地址赋值给同类型的指针变量D、可以取一个指针变量的地址赋值给基类型相同的指针变量标准答案:A知识点解析:常数的地址存储在内存的常量区,常量区存储的都是常量,值都是不可修改的,所以直接取常量的地址赋给指针变量没有任何意义,C语言也不允许这样做,编译会出错,B选项错误;表达式的值存储在临时变量中,内存中存在专门用来存储临时变量的区域,对这块地址进行操作也是没有意义的,C语言不允许这样做,编译会出错,C选项错误;可以取一个指针变量的地址,但是指针变量的地址属于指针,只能赋值给指针类型的指针变量,D选项错误。故答案为A选项。二、程序填空题(本题共1题,每题1.0分,共1分。)39、给定程序中,函数fun的功能是将带头结点的单向链表逆置,即若原链表中从头至尾结点数据域依次为2、4、6、8、10,逆置后,从头至尾结点数据域依次为10、8、6,4、2。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<stdib.h>#defineN5typedefstructnode{intdata;structnode*next;}NODE;voidfun(NODE*h){NODE*P,*q,*r;/**********found***********/P=h一>【1】;/**********found***********/if(p==【2】)return,q=P一>next:P一>next=NULL;while(q){r=q一>next;tq一>next=p;/**********found***********/P=q;q=【3】;}h一>next=P;}NODE*czeatlist:(inta[]){NODE*h,*P,*q;inti;h=(NODE*)malloc(sizeof(NODE));h一>next=NULL:for(i=0;i<N;i++){q=(NODE*)malloc(sizeof.(NODE));q一>data=a[i],q->next=NULL:if(h一>next==NULL)h一>next=P=q,else{P一>next=q;P=q;)}returnh:}voidoutlist(NODE*h){NODE*P;P=h一>next:if(P==NULL)printf(“ThelistisNULL!\n”);else{printf(“\nttead”);do{printf(“一>%d”,P一>data);P=P一>next;)while(P!=NULL),pzintf(“一>Encl\n”);}}main(){NODE*head;inta[N]={2,4,6,8,10};head=creatliSt(a),pzintf(“\nTheoriginallist:\n”);outlist(head);fun(head);printf{“\nThelistafterinverting:\n”);outlist(head);}标准答案:(1)next(2)NULL(3)r知识点解析:填空1:本空考查了为p赋初值,根据题目的要求是将带头结点的单向链表逆置可知,p的初值应该为h一>next。填空2:if判断语句表明当p等于什么时就要返回,因此只能当p等于NULL时返回,不用做后面的链表的逆置了。填空3:把q的指针向后移动,才能实现将带头结点的单向链表逆置。因此本空填写r。三、程序修改题(本题共1题,每题1.0分,共1分。)40、下列给定程序中,函数fun的功能是:将s所指字符串中的字母转换为按宁母序列的后续字母
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025江苏扬州人才集团下属企业招聘6人笔试备考试题及答案详解一套
- 2025江苏扬州宝应县“乡村振兴青年人才”招聘67人笔试备考题库及一套答案详解
- 2025邯郸武安市选聘农村党务(村务)工作者180名笔试备考试题及完整答案详解一套
- 2025年人教部编版语文四年级下册第三次月考测试题(配有答案)
- 2025年河南省南阳市桐柏县三模化学试题含答案
- 山西省吕梁市孝义市2024-2025学年高一上学期期中考试物理试题
- 江西省智慧上进2024-2025学年高一上学期1月期末联考物理试题(解析版)
- 陕西省安康市2023-2024学年高二下学期期末质量联考数学试卷(解析版)
- 慢性病管理与护理策略
- 妆前护肤 打造完美妆效的第一步
- 机电工程设备调试试题及答案
- 2025年《安全生产月》活动实施方案 (2份)-61
- 江门2025年江门市法院系统招聘42名劳动合同制审判辅助人员笔试历年参考题库附带答案详解析
- 第一单元(复习课件)2024-2025学年六年级道德与法治下学期期末核心考点集训(统编版)
- 14《促织》课件+2024-2025学年统编版高一语文必修下册
- 国开电大(理工英语1)形考任务作业综合测试参考答案
- 2025年北京市第一次普通高中学业水平合格性考试历史试题(含答案)
- 甘肃开放大学2024年《信息技术与信息管理》形考作业1-4答案
- 浙江省杭州市2024年中考英语真题(含答案)
- 2022年《数据结构(本)》形考任务实践活动3
- 生猪屠宰兽医卫生检验人员理论考试题库及答案
评论
0/150
提交评论