二级C语言真题2017年09月_第1页
二级C语言真题2017年09月_第2页
二级C语言真题2017年09月_第3页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、二级C语言真题2017年09月-(3)(总分:100.00,做题时间:90分钟)1. 一、选择题(总题数:40,分数:40.00)设某棵树的度为3,其中度为3,1,0的节点个数分别为3,4,15。则该树中总节点数为。(分数:1.00)A. 22B. 30VC. 35不可能有这样的树解析:解析在树结构中,一个节点所拥有的后件个数称为该节点的度,所有节点中最大的度称为树的度,树中的节点数即为树中所有节点的度数之和再加1。假设本题中度为2的节点数为n,总节点数为m,m=33+1X4+nX2+1,叶子节点数15=m-(3+4+n),得n=8,则m=9+4+82+1=3Q故答案为B选项。2. 线性表的长

2、度为n。在最坏情况下,比较次数为n-1的算法是。(分数:1.00)A. 寻找最大项VB. 同时寻找最大项与最小项C. 顺序查找有序表的插入解析:解析线性表的长度为n,在最坏情况下,寻找最大项的比较次数为n-1。故答案为A选项。3. 下列叙述中正确的是。(分数:1.00)A. 循环队列是队列的链式存储结构B. 能采用顺序存储的必定是线性结构C. 所有的线性结构都可以采用顺序存储结构V具有两个以上指针的链表必定是非线性结构解析:解析循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,它是队列的顺序存储结构形式。对于满二叉树与完全二叉树也可以按层次进行顺序存储。有两个以上指

3、针的链表,是线性还是非线性,取决于指针域的指向。所有的线性结构都可以采用顺序存储结构。故答案为C选项。4. 设表的长度为n。在下列结构所对应的算法中,最坏情况下时间复杂度最低的是。(分数:1.00)A. 希尔排序B. 有序链表查找C. 堆排序循环链表中寻找最大项V解析:解析最坏情况下,希尔排序所需要比较次数为n1.5,循环链表中寻找最大项需要n-1次,有序链表查找需要n次,堆排序次数为nlog2n。因此循环链表中寻找最大项复杂度最低。故答案为D选项。5. 下面不属于结构化程序设计原则的是。(分数:1.00)A. 模块化B. 自顶向下C. 可继承性V逐步求精解析:解析结构化程序设计方法的原则包括

4、:自顶向下、逐步求精、模块化、限制使用goto语句。故答案为C选项。6. 对软件系统总体结构图,下面描述中错误的是。(分数:1.00)A. 深度等于控制的层数B. 扇入是一个模块直接调用的其他模块数VC. 扇出是一个模块直接调用的其他模块数原子模块一定是结构图中位于叶子节点的模块解析:解析软件系统总体结构图中,扇入是指调用一个给定模块的模块个数,扇出是指由一个模块直接调用的其他模块数,深度指控制的层数,原子模块指树中位于叶子节点的模块。故答案为B选项。7. 软件集成测试不采用。(分数:1.00)A. 一次性组装B. 自顶向下增量组装C. 自底向上增量组装迭代式组装V解析:解析集成测试时将模块组

5、装成程序通常采用两种方式:非增量方式组装和增量方式组装。非增量方式也称为一次性组装方式,是将测试好的每一个软件单元一次组装在一起再进行整体测试;增量方式是将已测试好的模块逐步组装成较大系统,在组装过程中边连接边测试,以发现连接过程中产生的问题。增量方式包括自顶向下、自底向上、自顶向下与自底向上相结合的混合增量方法。故答案为D选项。8. 将数据库的结构划分成多个层次,是为了提高数据库的物理独立性和。(分数:1.00)A. 规范程度B. 操作独立性C. 逻辑独立性V降低数据冗余解析:解析数据库系统通常采用三级模式结构并且提供两级映射功能,其中的外模式/模式映射保证了数据库系统具有较高的逻辑独立性,

6、而模式/内模式映射保证了数据库系统具有较高的物理独立性。故答案为C选项。9. 公司的开发人员可以同时参加多个项目的开发,则实体开发人员和实体项目间的联系是o(分数:1.00)A. 一对一B. 一对多C. 多对一多对多V解析:解析开发人员可以参加多个项目,而项目开发人员不止一个,那么开发人员和项目之间是多对多关系。故答案为D选项。10. 定义学生选修课程的关系模式如下:SC(S#,Sn,C#,Cn,G)(其属性分别为学号、姓名、课程号、课程名、成绩)则该关系的主键为。(分数:1.00)A. .S#B. .C#C. S#,C#VS#,C#,G解析:解析本题关系模式SC(S#,Sn,C#,Cn,G)

7、(其属性分别为学号、姓名、课程号、课程名、成绩),单依靠学号不能标识唯一元组,需要学号、课程号共同来标识唯一元组,因此学号、课程号(S#、C#)为该关系的主键。故答案为C选项。11. 以下叙述中正确的是。(分数:1.00)A. C语言源程序即使不编译,也是可以直接运行的B. 一个程序要被称为结构化程序,则只能包含循环结构、选择结构、顺序结构VC. 使用N-S流程图只能描述简单的算法复杂算法是指不能分解成子任务的算法解析:解析C语言源程序必须经过编译、链接,生成二进制可执行文件,才可以运行,选项A错误;由3种基本结构:即循环结构、选择结构、顺序结构构成的程序称为结构化程序,选项B正确;使用N-S

8、流程图可以描述任何算法,选项C错误;可以将复杂算法分解成多个子任务来解决,这种程序的设计方法称为模块化设计,选项D错误。故本题答案为B选项。12. 下面说法正确的是o(分数:1.00)A. 使用只包含3种基本结构的算法可以求解复杂的问题VB. C语言源程序需要把所有过长的函数保存在单独的源文件中才能通过编译C. 有一些特殊的程序语法错误,只有在运行时才能被发现一些完成简单任务的C语言程序,可以不包含main()函数解析:解析由3种基本结构,即循环结构、选择结构、顺序结构构成的算法称为结构化算法,由3种基本结构组成的算法可以解决任何复杂的问题,选项A正确;C语言源程序不需要把过长的函数单独保存也

9、可以编译,选项B错误;C语言程序需要经过编译、链接生成二进制文件才可以运行,其中编译阶段可以检查出语法错误,选项C错误;每个C语言程序无论简单还是复杂,都必须包含main()函数,选项D错误。故本题答案为A选项。13. 以下选项中,算术表达式的值与其他3个不同的是o(分数:1.00)A. 3/5.B. 3./5C. 3/5V3.0/5.0解析:解析C语言中除法运算有两个运算数,两个整数的除法运算会舍去小数部分,结果为整数。由于C语言中浮点数的小数形式必须要有小数点,所以选项A(5.)、B(3.)和D(3.0和5.0)都是浮点数,选项A、B运算时自动将另一个整数转换成浮点数,然后再运算。选项D中

10、两个都是浮点数,浮点数的除法运算结果还是浮点数,所以本题中选项A、B、D运算结果是浮点数,选项C运算结果是整数。故本题答案为C选项。14. 以下完全正确的一组常量是。(分数:1.00)A. -12U12.E0B. 01a.12e3C. 0.3L1.2e-10x0123.V解析:解析实数的指数形式如下:尾数E(e)整型指数,其中字母E或e之前必须要有数字,E或e后面的指数必须是整数;整型常量中U表示无符号类型,L表示长整型,0x开头表示十六进制形式的整数。选项A中,由于U表示无符号类型,只能表示正整数,所以-12U错误;选项B中a不合法;选项C中L只能修饰整数,所以0.3L是错误的;选项D中,0

11、x0表示十六进制形式的整数0,123.表示实数,省略了小数点后面的0,正确。故本题答案为D选项。15. 以下字符常量中,输出后仍是原英文字母的是。(分数:1.00)A. ”/sVB. /tC. /n/r解析:解析在本题中,选项B、GD都是转义字符常量,其中”/t”表示代表Tab键,”/n”表示回车换行,”/r”表示回车符。选项A中的”/s”,其中”是转义字符,不显示;”s”可以原样输出。故本题答案为A选项。16. 有以下程序:#include#includemain()(ints;floatn,t,pai;t=1,pai=0,n=1.0,s=1;while(fabs(t)1.0e-6)(pai

12、+=t;n+=2;s=-s;t=s/n;printf(total=%f/n”,pai);程序所计算的是。(分数:1.00)A. 1-1/2!+1/3!-1/5!+1/7!-B. 1+1/3+1/5+1/7+1/9-C. 1+1/2+1/3+1/4+1/5-1-1/3+1/5-1/7+1/9-V解析:解析main()函数首先定义整型变量s,初值为1,定义float类型的n、t、pai,其中n初值1.0,t初值为1,pai初值为0。while循环判断t的绝对值(fabs()为求float类型值的绝对值)是否大于1.0*10-6,若t的绝对值大于1.0*10-6,那么执行下列语句:pai+=t;n+

13、=2;s=-s;t=s/n;所以每轮循环pai累加s/n(其中s是上一轮s的相反数,n是上一轮n累加2的值)。第一轮循环时,pai被赋值为1,s是正数,所以最终pai的计算结果是:1-1/3+1/5-1/7+1/9-故本题答案为D选项。17. 有如下程序:#includemain()(inta=0,b=1;if(a+&b+)printf(T);elseprintf(F);a=b+;printf(a=%d,b=%d/n,a,b);程序运行后的输出结果是。(分数:1.00)A. Fa=1,b=2VB. Fa=1,b=1C. Ta=0,b=2Ta=0,b=1解析:解析main()函数首先定义整型变量

14、a、b,分别赋初值为0、1;a+&b+清先执行a+,其中a+是后缀自增运算符,整个a+表达式的值为0,由a+&b+勺短路原则,b+不再执行,所以if语句不成立,执行else语句,输出”F”,此时a完成自增运算,值为1;接着执行a=b+,同理后缀自增运算符使得先将b的值赋给a(a的值为1),再执行b+,b的值为2,最终程序输出:“Fa=1,b=2。故本题答案为A选项。18. 以下各选项中的代码段执行后,变量y的值不为1的是。(分数:1.00)A. intx=5,y=0;if(5)y=1;B. intx=5,y=0;if(x)y=1;C. intx=10,y=0;if(x=y)y=1;vintx=

15、5,y=10;if(x=y)y=1;解析:解析选项A的if条件表达式5的值为真,执行y=1,y的值为1;选项B的if条件表达式x的值为5,也是真,执行y=1,y的值为1;选项C的if条件表达式x=y是赋值语句,将y的值0赋给x,表达式的值为0,if语句不执行,y值为0;选项D的if条件表达式x=y是赋值语句,将y的值10赋给x,表达式的值为10,执行y=1,y的值为1。故本题答案为C选项。设有定义:intm=1,n=2;则以下if语句中,编译时会产生错误信息的是。(分数:1.00)A. if(mn)m-elsen-;VB. if(m=n)m+;n+;C. if(mv0&n0);elsem+;解

16、析:解析选项A中,if语句的语句块m-后面少了分号,不合法,编译会出错,其他选项的语句都是正确的。故本题答案为A选项。19. 有以下程序:#includevoidmain()inti,m=0,n=0,k=0;for(i=9;i=11;i+)switch(i/10)case0:m+;n+;break;case10:n+;break;default:k+;n+;printf(%d%d%d/n”,m,n,k);程序运行后的输出结果是。(分数:1.00)A. 451B. 354C. 15420. 132V解析:解析由程序可知:for语句的循环体语句是switch语句;循环体变量i初值为9,取值分别是i

17、=9、10、11。当i=9时,表达式i/10为0,执行case0语句:m+n+;break;此时m的值为1,n的值为1;当i=10时,表达式i/10为1,执行default语句:k+;n+;此时k的值为1,n的值为2;当i=11时,表达式i/10为1,执行default语句:k+;n+;此时k的值为2,n的值为3,循环结束,程序输出结果为:132。故本题答案为Do有下列程序:#includemain()inta=-1,b=2;for(;a+&b-;)printf(%d,%d,a,b);printf(%d,%d,a,b);程序执行后的输出结果是。(分数:1.00)A. 0,1,1,0,1,0B.

18、 0,1,1,0C. 0,1,1,1V0,1,1,1,1,1解析:解析for循环中,表达式a+&b-的值决定循环是否执行。第一轮循环时,a初值为-1,b初值为2,由于a+是后缀自增运算符,b-是后缀自减运算符,a+&b-的值等价于-1&2,结果为1;执行for循环的循环体,此时a的值为0,b的值为1,输出a、b的值为0、1。第二轮循环时,a的初值为0,b的初值为1,表达式a+&b-首先执行a+,结果为0,a自增为1;由于短路原则,b-不再执行,整个表达式的值为0,for循环终止;执行循环体外的printf()语句,输出1、1。故本题答案为C选项。21. 有以下程序:#include#defin

19、eN4intfun(intaN)inti,y=0;for(i=0;ivN;i+)y+=a1i+aN-1i;for(i=0;ivN-1;i+)aii=aii*aii;returny;)main()inty,xNN=11,21,13,4,15,6,17,8),9,1,11,12,3,4,15,6);y=fun(x);printf(%d,%d,%d”,y,xN-3N-3,xN-3N-2);程序执行后的输出结果是。(分数:1.00)A. 74,36,17VB. 74,6,17C. 82,36,1782,6,17解析:解析main()函数首先定义一个二维数组x,它是N行N列的整型二维数组,然后将数组x传

20、给函数fun()。在函数fun()中,第一个for循环将数组a中,行下标为1的所有元素与行下标为N-1(3)的所有元素累加赋给y,所以y的值为15+6+17+8+3+4+15+6=74;第二个for循环将对角线上的三个元素:a00a11、a22分别平方后赋给自身,由于a是数组x的地址,对a数组元素的修改会同步修改实参x的元素值,a00为121,a11为36,a22为121,调用完fun()函数后,程序输出y、x11、x12的值分别是:74、36、17。故本题答案为A选项。22. 以下程序拟调用getmax函数,找出4个变量中最大的一个,但程序不完整。具体程序如下:#includeintgetm

21、ax(intx,inty)returnxyx:y;)voidmain()inta,b,c,d,mx;scanf(%d%d%d%d”,&a,&b,&c,&d);printf(max=%d/n,);)以下选项若填入下划线处,不能实现上述功能的是。(分数:1.00)A. getmax(getmax(getmax(a,b),c),d)B. getmax(getmax(a,b),getmax(c,d)C. getmax(a,getmax(b,getmax(c,d)mx=(getmax(a,b),getmax(c,d)V解析:解析getmax()函数接收两个整型变量x、y,使用条件运算符返回x和y中的较大

22、值;main()函数首先输入a、b、c、d四个整数值,然后通过调用getmax()函数,输出它们的最大值。假设x、y是整数,选项A中,首先执行getmax(a,b),返回a和b中的较大值x,再执行getmax(x,c),返回x、c中的较大值y,最后执行getmax(y,d),返回y、d中的较大值,满足题意,正确;选项B中,首先执行getmax(a,b),返回a、b的较大值x,再执行getmax(c,d),返回c、d中的较大值y,最后执行getmax(x,y),返回x、y中的较大值,正确;选项C中,首先执行getmax(c,d),返回c、d的较大值x,再执行getmax(b,x),返回b、x中的

23、较大值y,最后执行getmax(a,y),返回a、y中的较大值,正确;选项D中,首先执行getmax(a,b),返回a、b的较大值x,再执行getmax(c,d),返回c、d中的较大值y,最后执行逗号表达式(x,y),返回值为y,不满足题意。故本题答案为D选项。23. 以下叙述中错误的是。(分数:1.00)A. 在同一源程序文件中,函数名必须唯一B. 凡是带有返回值的库函数,都不能通过加分号而作为独立的语句出现VC. 不同函数中的形式参数可以同名返回基本数据类型的库函数的调用,均可以出现在赋值号右边的表达式中解析:解析在同一源文件中,函数名必须唯一,选项A叙述正确。函数的调用有两种形式:(1)

24、出现在表达式中,有可以出现在赋值号右边的表达式中;(2)作为独立的语句完成某种操作。因此选项B叙述错误,选项D叙述正确。不同函数的形参可以同名,它们的作用域都限制在各自的函数体内,选项C叙述正确。故本题答案为B选项。24. 关于函数返回值,以下说法错误的是o(分数:1.00)A. 函数返回值可以是整个数组VB. 函数返回值可以是一个数C. 函数返回值可以是一个指针函数返回值可以是一个函数的入口地址解析:解析函数的返回值可以是整数、实数、字符、指针、结构体或一个函数的地址等,但不能是整个数组,C语言中对数组的操作都是通过下标引用或指针,不能整体操作。故本题答案为A选项。25. 有下列程序:#in

25、clude#defineN4intfun(intaN)inti,y=0;for(i=0;ivN;i+)y+=a0i+aN-1i;for(i=1;ivN-1;i+)y+=ai0+aiN-1;returny;)main()inty,xNN=1,2,3,4,2,1,4,3,3,4,1,2,4,3,2,1;y=fun(x);printf(%d,y);程序执行后的输出结果是。(分数:1.00)A. 40B. 35C. 30V32解析:解析main()函数首先定义一个二维数组x,它是N行N列整型数组,然后调用fun函数,传入数组x;fun函数中第一个for循环将二维数组a的行下标为0(第一行)的所有元素与

26、行下标为N-1(最后一行)的所有元素累加赋给y;第二个for循环将二维数组a的列下标为0(第一列)且行下标为1、2的元素与列下标为N-1(最后一列)且行下标为1、2的所有元素累加再次赋给y,最后将y返回。所以main()函数调用完fun()函数后,y的值等价于:1+2+3+4+4+3+2+l+2+3+3+2,结果为30。故本题答案为C选项。26. 设有如下程序段:inta2=0;intb=0;charC2=ABC;chard=ABC;则以下叙述正确的是。(分数:1.00)A. 只有数组a、b的定义是合法的VB. 数组a、b、c、d的定义都是合法的C. 只有数组c、d的定义是合法的只有数组c的定

27、义是合法的解析:解析(a)中定义一个整型数组a,它包含两个整型元素,两个元素都初始化为0,正确;(b)中定义一个整型数组b,数组大小为1,包含一个元素0,正确;(c)中定义字符数组c,它包含2个字符元素,初始化的字符串中包含3个字符,不合法;(d)中定义一个字符d,使用一个字符串初始化,不合法。故本题答案为A选项。27. 有以下程序:#includevoidswap(int*pa,int*pb)intt;t=*pa;*pa=*pb;*pb=t;voidfun(int*ds,intn)inti,midx;midx=0;for(i=1;ivn;i+)if(dsidsmidx)midx=i;swap

28、(ds,ds+midx);voidmain()intdata=37,31,26,17,61,12,i;for(i=0;iv5;i+)fun(data+i,6-i);for(i=0;iv6;i+)printf(%3d”,datai);printf(/n”);程序的运行结果是。(分数:1.00)A. 613731261712B. 373126176112C. 176112373126121726313761V解析:解析main()函数定义一个整型数组data,它包含6个整型元素,第一个for循环调用fun()函数,每次将数组首地址(data+i)和元素个数(6-i)传给函数fun(),函数fun(

29、)通过for循环遍历data+i开始的6-i个元素,找出其中的最小值(下标为midx),然后再调用swap()函数将data+i指向的元素与下标为midx的元素值进行交换;所以main()函数中第一个for循环执行完毕后,数组data中的元素按照从小到大排序;第二个for循环输出排序后的data数组元素,输出结果为:121726313761。故本题答案为D选项。28. 设有定义:intx23;,则以下选项中不能表示数组元素x01的是。(分数:1.00)A. *(*x+1)B. *(*(x+1)VC. (*x)1*(&x00+1)解析:解析选项A中*x等价于x0,*x+1等价于x0+1,*(x0

30、+1)等价于x01,正确;选项B中,*(x+1)等价于x1,*(*(x+1)等价于x10,错误;选项C中*x等价于x0,*x1等价于x01,正确;选项D中,&x00等价于x0,&00+1等价于x0+1,*(x0+1)等价于x01,正确。故本题答案为B选项。29. 有以下程序:#includevoidfun(doublex,double*y,double*z)*y=*y-1.0;*z=*z+x;main()doublea=2.5,b=9.0,*pa,*pb;pa=&a;pb=&b;fun(b-a,pa,pb);printf(%f/n,a);程序运行后的输出结果是。(分数:1.00)A. 8.00

31、0000B. 9.000000C. 1.500000V10.500000解析:解析main()函数定义两个double类型的变量a、b,分别赋初值为:2.5、9.0,另外定义两个double类型的指针变量pa、pb,其中pa指向a,pb指向b;然后将b-a、pa、pb传给函数fun,此时x的值为7.5,y指向a,z指向b;所以*y=*y-1.0,是将变量a的值减去1.0赋给a,a的值为1.5;*z=*z+x,是将变量b的值加上7.5赋给b,b的值为16.5;fun()函数执行完毕后,输出a的值为1.5。故本题答案为C选项。30. 使用数组名作为函数的实参时,传递给形参的是。(分数:1.00)A

32、. 数组第一个元素的值B. 数组的首地址VC. 数组中全部元素的值数组元素的个数解析:解析用数组名作为函数参数时,数组名退化为指针,传递给形参的是数组的首地址。故本题答案为B选项。31. 有下列程序:#includevoidfun(inta,intn,intflag)inti=0,j,t;for(i=0;in-1;i+)for(j=i+1;jaj):(aiaj)t=ai;ai=aj;aj=t;main()intc10=7,9,10,8,3,5,1,6,2,4,i;fun(c,10,1);fun(c,8,0);for(i=0;iv10;i+)printf(%d,ci);程序执行后的输出结果是。(

33、分数:1.00)A. 8,7,6,5,4,3,2,1,9,10,VB. 3,4,5,6,7,8,9,10,2,1,C. 9,10,1,2,3,4,5,6,7,8,10,9,8,7,6,5,4,3,1,2,解析:解析在本题中,fun()函数接收数组a、数组元素个数n以及整型变量flag,然后通过for循环遍历数组a的n个元素,若flag为1,则将数组元素升序排列;若flag为0,则将数组元素逆序排列。main()函数定义整型数组c,它包含10个元素,首先将数组c、元素个数10和1传给fun()函数,将c中10个元素升序排列,结果为:1,2,3,4,5,6,乙8,9,10,;然后再次调用fun()

34、函数,将数组c、元素个数8和0传给fun()函数,将c中前8个元素逆序排列,结果为:8,7,6,5,4,3,2,1,9,10。故本题答案为A选项。32. 有以下程序:#includeinta=5;intfunc(inta)intb=1;staticintc=5;a+;b+;+c;return(a*b*c);main()intk,a=4;for(k=0;kv3;k+)printf(%d,func(a);)程序执行后的输出结果是。(分数:1.00)A. 72,147,256,B. 60,60,60,C. 72,98,128,60,70,80,V解析:解析首先程序中有一个全局变量a,初值为5,在ma

35、in()函数中,局部变量a屏蔽全局变量a,同样,在func()函数中,形参a也屏蔽全局变量a;另外func()函数中,c是静态局部变量,只会初始化一次,后续使用时,c的值是上一次调用函数后c的值。综上所述,main()函数中:当k=0时,实参a=4,func()函数的形参a=4、b=1、c=5,自增后形参a=5、b=2、c=6,返回值为60,输出60;当k=1时,实参a=4,func()函数的形参a=4、b=1、c=6,自增后形参a=5、b=2、c=7,返回值为70,输出70;当k=2时,实参a=4,func()函数的形参a=4、b=1、c=7,自增后形参a=5、b=2、c=8,返回值为80,

36、输出80。故本题答案为D选项。33. 有以下程序:#includemain()charb=abcdefg”,*chp=b;while(*chp)if(ehp-b)%3=0)putchar(*chp);+chp;)程序的运行结果是。(分数:1.00)A. cfB. defgC. adgVaceg解析:解析main()函数定义字符数组b,初始化的值为字符串abcdefg,定义字符指针变量chp,将数组b的地址赋给chp;接着while循环通过chp指针遍历字符数组,在遍历过程中,若当前字符与字符串首字符之间的字符数是3的倍数(chp-b是字符指针的差,即字符个数),那么输出该字符。所以程序输出结果

37、为:adg。故本题答案为C选项。34. 有下列程序:#include#includemain()charv410,*p4,*t;inti,j;for(i=0;iv4;i+)pi=vi;scanf(%s”,pi);)for(i=0;iv3;i+)for(j=i+1;jv4;j+)if(strcmp(pi,pj)0)t=pi;pi=pj;pj=t;for(i=0;iv4;i+)printf(%s”,pi);)程序执行时若输入:WelcomeyoutoBeijing回车,则输出结果是。(分数:1.00)A. BeijingWelcometoyouVB. BeijingtoWelcomeyouC. W

38、elcomeyoutoBeijingtoyouBeijingWelcome解析:解析main()函数定义一个二维字符数组v,另外定义一个数组,包含4个字符指针元素,第一个for循环将数组v对应下标为i的字符串首地址赋给数组p的下标为i的元素,使得p中的4个指针元素分别指向v中的4个字符串,然后使用scanf()函数,输入4个字符串赋给v中的4个元素,由此可知数组p的4个指针元素指向该4个字符串;接着再使用两个嵌套的for循环,对v中的4个字符串按照ASCII码的大小排序,strcmp()函数是将pi、pj两个字符串自左向右逐个字符比较ASCII码,直到出现不同的字符或遇到/0为止,当pipj时

39、,返回正数,所以本题排序后,输出结果为:BeijingWelcometoyouo故本题答案为A选项。35. 以下涉及字符串数组、字符指针的程序片段,没有编译错误的是。(分数:1.00)A. charline;line=:B. char*name10,*str;name=HelloWorld;C. charstr110,str210=prog.c;str1=str2;charname10,*str=HelloWorld;V解析:解析C语言中,字符指针变量可以直接使用字符串赋值,而字符数组不能直接使用字符串或字符数组赋值,选项A、B、C错误,选项D正确。故本题答案为D选项。36. 若要使int型变

40、量a、b、c、d的值都为0,以下写法中错误的是。(分数:1.00)A. autointa,b,c,d;a=b=c=d=0;B. autointa=b=c=d=0;VC. autointa=0,b=a,c=b,d=c;staticinta,b,c,d;解析:解析选项B中,使用autoint定义了整型a,但b、c、d都是未定义的变量,所以不能做右值使用,错误;选项A、C都是正确的定义和初始化;选项D中,static变量定义了a、b、c、d,由于未初始化,在程序运行时首先将这四个变量赋值为0,正确。故本题答案为B选项。37. 有如下程序:#includemain()inta=1,b;b=(a2)%3

41、;printf(%d,%d,a,b);)程序运行后的输出结果是。(分数:1.00)A. 1,1B. 2,0C. 1,0V2,1解析:解析”是右移运算符,功能是将一个数的各个二进制位右移若干位,本题中将变量a(二进制:00000001)右移2位,a2的结果为0,再对3求余,结果为0,赋给b的值为0、a的值不变,输出结果为:1,0。故本题答案为C选项。38. 有下列程序:#includemain()(intx=3,y=5,z1,z2;z1=yAxAy:z2=xAyAx;printf(%d,%d/n”,z1,z2);)程序执行后的输出结果是。(分数:1.00)A. 7,7B. 5,3C. 8,83,

42、5V解析:解析%”异或运算,其功能是参与运算的两个数,按位异或,如果两个相应位相同,结果为0,否则为1;异或运算满足如下规则:(1)满足交换律;(2)一个数与0异或的结果仍是原数;(3)一个数与1异或的结果是原数按位取反。所以本题中,yAxAy等价于yAyAx,等价于0Ax,等价于x,即z1=x;海、等价于xAxAy,等价于0Ay,等价于y,即z2=y;输出结果为:3,5。故本题答案为D选项。39. 有下列程序:#include#includetypedefstructstu(charname9;chargender;intscore;)STU;STUf(STUa)(STUc=(Sun,f,9

43、0);strcpy(,);a.gender=c.gender;a.score=c.score;returna;)main()(STUa=(Zhao,m,85),b=(Qian,f,95);b=f(a);printf(%s,%c,%d,%s,%c,%d,,a.gender,a.score,,b.gender,b.score);)程序执行后的输出结果是。(分数:1.00)A. Zhao,m,85,Sun,f,90VB. Zhao,m,85,Qian,f,95C. Sun,f,90,Sun,f,90Sun,f,90,Qian,f,95解析:解析程序首先

44、使用typedef定义一种新的类型名STU它包含3个数据成员:字符数组name字符变量gender和整数score。main()函数使用STU定义结构体变量a和b并赋初值;再调用函数f,将a传入;函数f()使用STl义结构体变量c并赋初值,然后通过逐个引用成员变量将c的各个成员值赋给a,其中使用strcpy进行字符串拷贝。由于形参a是结构体类型,实参a未因形参的改变而改变;将改变后的形参a的值作为f()函数的返回值赋给b,所以b的值就是形参a改变后的值;而实参a的值没有改变,f()函数执行完后,main()函数中a的值不变,b的值被修改为f()函数中c的值,printf()函数输出的值是a和c

45、。故本题答案为A选项。40. 二、程序填空题(总题数:1,分数:18.00)下列给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指的变量中。ss所指字符串数组中共有M个字符串,且串长小于No请在程序的下划线处填入正确的内容,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include#include#defineM5#defineN20intfun(char(*ss)N,int*n)inti,k=0,len=N;/*found*/for(i=0;iv1;i+)len=s

46、trlen(ssi);if(i=0)*n=len;/*found*/if(len2*n)*n=len;k=i;/*found*/return(3);main()charssMN=shanghai,guangzhou,beijing,tianjing,chongqing;intn,k,i;printf(/nTheoriginalstringsare:/n);for(i=0;ivM;i+)puts(ssi);k=fun(ss,&n);printf(/nThelengthofshorteststringis:%d/n”,n);printf(/nTheshorteststringis:%s/n,ssk);(分数:18.00)解析:Mk考点本题考查:for循环语句的

温馨提示

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

评论

0/150

提交评论