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

下载本文档

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

文档简介

1、二级 C语言真题 2017 年 09 月-(1)( 总分: 100.00 ,做题时间: 90 分钟 )一、选择题 ( 总题数: 40,分数: 40.00)1. 设有一个栈与一个队列的初始状态均为空。现有一个序列的元素为A,B,C,D,E,F,G,H,先分别将序列中的前 4个元素依次入栈,后4 个元素依次入队;然后分别将栈中的元素依次退栈,再将队列中的元素依次退队。最后得到的序列为 _。(分数: 1.00 )A.A ,B,C,D,H,G,F,EB.D ,C,B,A,H,G,F,EC.A ,B,C,D,E,F,G,HD.D ,C,B,A,E,F,G,H 解析:解析元素入队列为栈的特点是先进后出,而

2、队列的特点是先进先出。前4 个元素依次进栈为EFGH,出队列也是 EFGH,最后得到的序列为DCBAEFGH。故 D 选项正确。ABCD,出栈后为DCBA,后 4 个2. 设某棵树的度为 3,其中度为 2,1,0 的节点个数分别为 3,4,15,则该树中总节点数为 _。(分数: 1.00 )A.30B.22C.35D. 不可能有这样的树解析: 解析 在树结构中,一个节点所拥有的后件个数称为该节点的度,所有节点中最大的度称为树的度,树中的节点数即为树中所有节点的度数之和再加1。假设度为 3 的节点数为 n,总节点数为 m,m=3×n+2×3+1×4+1,叶子节点数1

3、5=m-(3+4+n) 。得 m=3n+11,2n=11,n 无法得到整数,说明不可能存在这样的树。故答案为D 选项。3. 设二叉树的前序序列为 ABDEGHCFIJ,中序序列为 DBGEHACIFJ。则按层次输出 ( 从上到下,同一层从左到右 ) 的序列为_。(分数: 1.00 )A.ABCDEFGHIJB.DCHEBIJFCAC.JIHGFEDCBAD.GHIJDEFBCA解析: 解析 二叉树遍历可以分为 3 种:前序遍历 ( 访问根节点在访问左子树和访问右子树之前 ) 、中序遍历 ( 访问根节点在访问左子树和访问右子树两者之间 ) 、后序遍历 ( 访问根节点在访问左子树和访问右子树之后

4、) 。二叉树的前序遍历序列为 ABDEGHCFIJ,中序序列为 DBGEHACIFJ,可知该树 A 为根节点,右子树节点为 CFIJ,左子树节点为 BDEGH。从顶向下从左向右依次为 ABCDEFGHIJ,A选项正确。4. 设顺序表的长度为 16,对该表进行简单插入排序。在最坏情况下需要的比较次数为 _。(分数: 1.00 )A.15B.60C.30D.120解析: 解析 简单插入排序在最坏情况下, 即初始排序序列是逆序的情况下, 比较次数为 n(n-1)/2 ,移动次数为 n(n-1)/2。本题中即 16×(16-1) ÷2=8×15=120。故答案为 D选项。

5、5. 软件系统总体结构图的作用是 _。(分数: 1.00 )A. 描述软件系统结构的图形工具 B. 描述软件系统的控制流描述软件系统的数据流 C.D. 描述软件系统的数据结构解析: 解析 软件系统总体结构图是描述软件系统结构的图形工具,它包括软件系统的控制流、软件系统的数据流、软件系统的数据结构等。故答案为A选项。6. 不属于对象构成成份的是 _。(分数: 1.00 )A. 属性B. 规则 C. 方法( 或操作 )D. 标识解析: 解析 一个对象通常可由对象名、属性和操作7. 十进制整数设为整数类,则下面属于类的实例的是3 部分组成,对象名唯一标识一个对象。故答案为_。B 选项。(分数: 1.

6、00 )A.-518C.518E-2D.518解析: 解析 类是具有共同属性、共同方法的对象的集合。-518 是整数, 0.518 是浮点数, 518E-2 是指数。故答案为A 选项。8. 结构化程序设计原则强调的是 _。(分数: 1.00 )A. 自顶向下 B. 可封装性C. 可复用性D. 可恢复性解析: 解析 结构化程序设计的原则强调自顶向下、逐步求精、模块化、限制使用goto 语句。故答案为A选项。9. 违背数据流图 (DFD)构造规则的是 _。(分数: 1.00 )A. “加工”应既有输入又有输出B. “数据存储”间有数据流 C. “数据流”应标识数据流名D. 父图子图是指相邻上下两层

7、的数据流图解析: 解析 数据流图 (DFD)应遵循以下构造规则。对加工处理建立唯一、层次性的编号,且每个加工处理通常要求既有输入又有输出。数据存储之间不应有数据流。“数据流”应标识数据流名,数据流图的一致性,即输入输出、读写的对应。父图、子图关系与平衡规则。相邻两层DFD之间具有父子关系,子图代表父图中某个加工的详细描述,父图代表子图间的接口。子图个数不大于父图中的处理个数。所有子图的输入输出数据流和父图中相应处理的输入输出数据流必须一致。故本题答案为B选项。10. 关系数据库规范化主要为克服数据库逻辑结构中的插入异常、删除异常以及_。(分数: 1.00 )A. 数据丢失的问题B. 结构不合理

8、的问题C. 数据不一致的问题D. 冗余度大的问题 解析: 解析 规范化主要为克服数据库逻辑结构中的插入异常、删除异常、数据冗余以及修改异常。故本选项。 D题答案为_ 。11. 以下叙述中正确的是 1.00 )(分数: A.C 语言既可以用来编写系统软件,又可以用来编写应用软件C源程序进行编译 B. 机器中只要安装有任一种编译程序, 就能对 C 语言提供的库函数, 则可以不运行连接程序 C. 若程序中不使用 D. 调试程序时若发现语法错误,改正后即可直接运行,无需再次编译正确;机器中必须安装语言既可以用来编写系统软件,又可以用来编写应用软件,选项A 解析 C解析:语言源程序中函数的定义和调用不在

9、同一个错误; C 源程序进行编译,选项 BC语言的编译程序,才能对 C 错误;调试程序时若发现语法错误,改正后需要重新再次编译,选源文件,就需要使用链接程序,选项C A 选项。项 D错误。本题答案为 。12. 以下说法正确的是 _ )(分数: 1.00 种基本结构组成的结构化程序只能解决一些简单的问题A.由 33 种基本结构组成的结构化程序可以解决任何复杂的问题B. 由 种基本结构组成的结构化程序只能解决那些可以结构化的问题 C.由 3种基本结构组成的结构化程序只能解决一些数学上有解析解的问题D.由 3种基本结构所构成的算法称为结 33 种基本结构组成的算法可以解决任何复杂的问题,由解析: 解

10、析由 选项。种基本结构所构成的程序称为结构化程序, 故本题答案为 B 构化算法,由 3 。以下说法正确的是 _13.)(分数:1.00语言标识符中字母、数字和下划线字符必须同时出现A.C B.C语言标识符中仅出现下划线字符是不允许的 C.C 语言标识符中可以出现多个字母、数字和下划线字符D.C 语言标识符中字母、数字和下划线字符不能同时出现语言中合法的标识符命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字解析 C解析: C 选项。、D错误。故本题答案为符必须是字母或下划线, 选项 A、B 。_以下属于 C 语言标识符的是 14._6_A#6# B6CD )(分数: 1.00 A.B

11、.C.D.语言中合法的标识符命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字解析合法。故中的“ ”不合法;选项 D 符必须是字母或下划线,选项B 中的“ #”不合法;选项15. 以下不能作为合法常量的是_ )(分数: C 解析: 中的“ $”不C A 选项。本题答案为。后面的 eE 或 eE(e) 解析实数的指数形式为:尾数整型指数,其中字母E或之前必须要有数字,析: 选项。 D 后面的指数是小数,不合法。故本题答案为e 中 D 都正确;选项 C、B、A 指数必须是整数。选项 解16. 设有如下语句:int k=0;k=printf(OK/n);则以下叙述中正确的是 _。(分数:

12、1.00 )A.printf必须作为独立语句出现B. 变量 k 得到的是输出的可见字符个数2C. 变量 k 得到的是输出字符的总个数3 D. 变量 k 仍保持初值0解析: 解析 printf()函数的原型如下:extern int printf(const char *format,.);它是有返回值的,返回值是打印出来的字符个数,题意中的字符串“OK/n”输出3 个字符,所以k 的值为3。故本题答案为 C 选项。17. 以下说法正确的是 _。(分数: 1.00 )A. 赋值语句是一种可执行语句,应当出现在函数的可执行部分B. 赋值语句可以出现在函数中的任意位置C. 赋值语句可以出现在函数外单

13、独执行D. 赋值语句可以出现在源程序中的任意位置解析: 解析 在赋值表达式的尾部加上分号就构成了赋值语句,赋值语句是一种可执行语句,应当出现在函数的可执行部分。故本题答案为A 选项。18. 有以下程序:#include stdio.hmain()char*s=34;while(*(+s)!=/0)switch(*s-case 0:case 1: putchar(*s+1);break;case 2: putchar(*s+1);break;case 3: putchar(*s+1);default: putchar(*s+1);break;程序执行后的输出结果是_。(分数: 1.00 )A.2

14、2345B.2345C.12345D.23445解析: 解析 程序首先定义一个字符指针s,指向一个常量字符串“ 01234”;接着 while 循环的循环条件每次将s 指向下一个字符,然后判断s 指向的字符是否为空字符屜?,若不是,则执行循环体,将当前字符与的ASCII 码差值作为switch 语句的常量表达式,执行对应的case 语句;若是则终止循环,程序结束。所以对于常量字符串“01234”可知:循环过程中s 指向的各个字符分别是:?、?、?、?,当*s是?时,猪尭尰的值为1,执行case 1 语句,输出 *s+1即字符 ?;当*s是?时,猪尭尰的值为2 ,执行case 2 语句,输出 *

15、s+1 即字符 ?;当*s是?时,猪尭尰的值为3,执行case 3 和 default语句,两次输出 *s+1级字符 ?;当*s是?时,猪尭尰的值为4,执行default语句,输出 *s+1 即字符 ?;综 选项。 D。故本题答案为23445 上所述程序输出结果为:19. 有如下程序:#includestdio.hmain()int i;for(i=0;i5;i+)putchar(9-i%2);程序运行后的输出结果是_。(分数: 1.00 )A.98989B.98765C.98765D.98989解析: 解析 main()函数中, for循环遍历i的值为0、1、2、3、4,每次遍历调用putc

16、har()函数输出表达式9-i%2的结果,由运算符优先级可知表达式9-i%2 首先计算i%2 的值,再执行减法操作,所以当i 取值为偶数时,i%2 的值为0,9-0 结果为 ?;当 i取值为奇数时,i%2 的值为1,9-1 结果为 ?,所以程序输出结果为98989。故本题答案为A选项。20. 以下关于 switch 语句的叙述中正确的是 _。(分数: 1.00 )A. 所有 case 的标号都应当是连续的B. 每个 case 语句标号后面可以没有break 语句 C.char型常量不能做case 的标号使用D.default必须放在全部case 的最后解析: 解析 switch 语句中, ca

17、se 标号不需要是连续的,选项 A错误;每个 case 语句标号后面可以没有 break 语句,此时程序会接着执行下一个 case 语句,选项 B 正确; case 标号后必须是常量表达式,可以是整型、 char 型、枚举型或常量表达式,选项 C 错误; default 标号可以出现在 switch 语句体中任何标号位置上,选项 D 错误。故本题答案为 B 选项。21. 有下列程序:#include stdio.hmain()int a=6,i;for(i=1;i=3;i+)if(a5)break;if(a%2)a+=2;continue;a=a+4;printf(%d,%d,i,a);程序执

18、行后的输出结果是_。(分数: 1.00 )A.4 ,9B.3 ,18C.4 ,18 D.4 ,2解析: 解析 main() 函数中,a 的初值为 6,for 循环首先判断 i 的值是否小于 5,若小于 5。执行 break 语句终止循环;若不小于 5,接着判断 a 的奇偶性,若 a 是奇数,将 a 自增 2 后执行 continue 语句,执行循环过程 for 的值只会增不会减。所以中,两个a;可见无论程序如何执行,4 自增 a 是偶数,将if语句都不会执行,每次都是将a 自增 4,又由 ia 下一轮循环;若取值可以是 1,2,3 知变量a 一共自增3 次,最终i的值为4,a 的值为 18。故

19、本题答案为22. 有以下程序:#include stdio.hmain()int a=1,b=2,c=3;char flag;flag=b =2 && c =3;switch(a)case 1:switch(flag)case 0: printf(*);break;case 1: printf(%);break;case 0: switch(c)case 1: printf($);break;case 2: printf(&&);break;default: printf(#);printf(/n);C 选项。程序运行后的输出结果是_。(分数: 1.00 )A.

20、*$B.%#C.%&&D.*#解析: 解析 main()函数中,根据 b=2,c=3 可知表达式 b=2&&c=3 为真, flag值为 1;由 a=1 以及外层 switch 语句的 case 标号没有 break 语句,可知外层switch 语句执行 case 1 、case 0 ;对于外层 case 1 ,嵌套的 switch 语句根据 flag=1 执行 case 1 ,执行 printf(%) ,输出结果是“ %”,接着执行 break 语句;对于外层 case 0 ,嵌套的 switch语句根据 c=3 执行 default语句,执行 printf(

21、#),输出“ #”。故本题答案为 B 选项。23. 有以下程序:#include stdio.hvoid main()char*s=/ta/018bc;for(;*s!=/0;s+)printf(*);printf(/n);程序运行后的输出结果是_。(分数: 1.00 )A.*B.*C.*D.*解析: 解析 main()函数定义一个字符指针s,指向字符串“ /ta/018be ”;for 循环遍历 s 指向的字符串中的字符,然后输出“ * ”,所以题意可以理解为: s 指向的字符串中有多少个字符,就输出多少个“* ”。s 指向的字符串中字符分别是:/t(转义字符 ) 、慜、/01( 转义字符

22、) 、?、扜和捜,总共 6 个,其中由于 8 不属于八进制中的数字,所以屜?不是一个转义字符,而屜 ?就是转义字符。故本题答案为A 选项。24. 以下正确的字符常量是 _。(分数: 1.00 )A.ABB./0ABC.ABD./xAB解析: 解析 ?层是字符串常量,选项 A错误;屜 ?由 3 个字符构成,以 /0 开头的表示八进制字符,但是字符 ?屜层不是八进制数字,选项 B错误; ?层由两个字符构成,不能使用单引号,选项 C 错误;屜砯 ?是两位十六进制数 A、B 代表的一个 ASCII 码字符,选项 D 正确。故本题答案为 D 选项。25. 有如下程序:#include stdio.hvo

23、id fun(int *a, int *b)for(;(*a*b)|(getchar()!=);)(*a)+;(*b)-;main()int i=0,j=5;fun(&i,&j);printf(%d,%d/n,i,j);程序运行时在第一列开始输入:ab回车则运行结果是 _。(分数: 1.00 )A.7,1B.3,2C.0,5D.5,0解析: 解析 fun()函数接收两个整型指针变量 a、b,for 循环判断 a、b 指向的值大小和 getchar()读入的字符是否 ?来决定循环是否执行,循环体内对a、b 指向的值各自自增 1、自减 1。main() 函数定义并初始化实参i 的值

24、为 0,实参j 的值为 5,调用函数 fun() ,传入 i 、j 的地址,所以形参 a 指向 i ,形参 b 指向 j 。所以:*a 的值为 0,*b 的值为 5,*a *b 为真,执行循环体;*a 的值为 1,*b 的值为 4,*a *b 为真,执行循环体;*a 的值为 2,*b 的值为 3,*a *b 为真,执行循环体;*a 的值为 3,*b 的值为 2,*a *b 为假, getchar() 读入字符慜,执行循环体; *a 的值为 4,*b 的值为 1,*a *b 为假, getchar() 读入字符扜,执行循环体;*a 的值为 5,*b 的值为 0,*a *b 为假, getchar

25、()读入字符 ?,fun() 函数执行完毕, main() 函数输出结果为: 5,0。故本题答案为 D选项。26. 有下列程序:#include stdio.hvoid swap(int *a,int *b)int *tp;tp=a;a=b;b=tp;printf(%d,%d,*a,*b);main()int i=3,j=7,*p=&i,*q=&j;swap(p,q);printf(%d,%d,*p,*q);程序执行后的输出结果是_。(分数: 1.00 )A.3 ,7,7,3B.7 ,3,7,3C.3 ,7,3,7D.7 ,3,3,7 解析: 解析 main() 函数定义两个整

26、型变量 i 、j ,初值分别是 3、7;定义两个整型指针变量 p、q,用 i 的地址初始化p,用 j 的地址初始化 q,此时 p 指向 i ,q 指向 j 。接着将 p 和 q 作为参数传给 swap() 函数,所以形参 a 是 p 的拷贝,它们都指向变量 i ;b 是 q 的拷贝,它们都指向变量 j 。然后 swap() 函数交换 a、b 的值,由于 a、b 分别是 p、q 的拷贝,所以 a、b 值的交换不影响实参 p、q。a、b 交换后, a 是变量 j 的地址, b 是变量 i 的地址,所以 swap() 函数中输出 *a 的值为 j ,*b 的值为 i ,输出 7,3;swap() 调

27、用结束后, main() 函数输出 *p 、*q ,由于它们的值没有改变,所以输出 3,7。故本题答案为 D 选项。27. 以下关于函数参数的叙述中,错误的是 _。(分数: 1.00 )A. 实参应与其对应的形参类型一致B. 形参可以是常量、变量或表达式 C. 实参可以是常量、变量或表达式D. 形参可以是任意合法数据类型解析: 解析 形式参数简称形参, 就是在定义函数时给出的参数, 它可以是任意合法的数据类型; 实际参数简称实参,是在调用函数时传递给函数的确定的数据, 它的类型应该与对应的形参类型一致, 可以是常量、变量或表达式,选项 A、C、D叙述正确。选项B中,常量、表达式不能作为右值,所

28、以形参不能是常量、表达式,叙述错误。故本题答案为B 选项。28. 以下有关函数的叙述错误的是 _。(分数: 1.00 )A.C 语言规定,不能在函数的内部定义函数B. 在 C 语言的函数体中可以有多个return语句C. 在 C 语言中函数的实参个数可以有多个,各实参之间用分号隔开D.C 语言程序总是从main() 函数开始执行解析: 解析 C 语言规定,不能在函数的内部定义函数,选项A 叙述正确;在 C 语言的函数体中,可以有多个return语句,最终只有一个会被执行,选项 B 叙述正确;在 C语言中函数的实参个数可以有多个,各实参之间用逗号分开,选项 C 叙述错误; C 语言程序总是从 m

29、ain() 函数开始执行,选项 D 叙述正确。故本题答案为 C选项。29. 以下关于指针的说法错误的是 _。(分数: 1.00 )A. 可以向指针中写入任意数据B. 可以向指针所指内存单元中写入数据C. 指针可以指向与其基类型相同的普通变量D. 可以通过加法运算,使指针指向下一个内存单元解析: 解析 指针变量必须区分基类型,可以向指针所指内存单元写入与基类型相同的数据,而不能写入说法正C说法正确;指针可以指向与其基类型相同的普通变量,选项B 说法错误,选项 A 任意数据,选项确;指针是一个内存地址,它是一个整数,可以通过加法运算,使指针指向下一个内存单元,选项D 说法正确。故本题答案为 A 选

30、项。30. 有以下程序:#include stdio.h #define SWAT(t,a,b)t=a;a=b;b=t;main()int x=6,y=4,z=3,s=0;if(xy)SWAT(s,x,y);if(xz)SWAT(s,x,z);if(yz)SWAT(s,y,z);printf(%d,%d,%d/n,x,y,z);执行后的输出结果是 _。(分数: 1.00 )A.6 ,4,3B.3 ,4,6C.0 ,3,4D.3 ,0,0 解析: 解析 程序定义一个宏, #define SWAT(t,a,b)t=a;a=b;b=t;程序中 3 个 if语句经过宏替换后如下:if(xy)s=x;x

31、=y;y=s;if(xz)s=x;x=z;z=s;if(yz)s=y;y=z;z=s;x 初值为 6,y 初值为 4,z 初值为 3,s 初值为 0,所以:第 1 个 if 语句, xy(6 4) 为假,执行 x=y;y=s;此时 x 的值为 4,y 的值为 0;第 2 个 if 语句, xz(4 3) 为假,执行 x=z;z=s;此时 x 的值为 3,z 的值为 0;第 3 个 if 语句, yz(0 0) 为假,执行 y=z;z=s;此时 y 的值为 0,z 的值为 0;最终 x、y、z 的值为 3、0、0。故本题答案为 D 选项。31. 有以下程序:#include stdio.hint

32、 f(int x,int n)if(n1)return f(x,n-1)+xn-1*10;elsereturn x0;main() int a6=1,2,3,4,y; y=f(a,4); printf(%d,y);程序执行后的输出结果是_。(分数: 1.00 )A.91 B.4321C.1234D.10解析: 解析 函数 f 是递归函数,当参数 n 大于 1 时,函数返回 f(x,n-1)+xn-1*10 ;若参数 n 不大于;2)+x2*10+x3*10 ,f(a等价于; 3)+x3*10 ,f(a 等价于 4) ,f(a函数中 main() 所以。 x0返回时, 1等价于 f(a ,1)+

33、x1*10+x2*10+x3*10;等价于 x0+x1*10+x2*10+x3*10;其中 x0值为 1,x1 值为 2,x2 值为 3,x3 值为 4,所以 y 的值为: 91。故本题答案为A选项。32. 有如下程序:#include stdio.hvoid get_put()char ch;ch=getehar();if(eh!=/n)get_put();putchar(ch);main()get_put();程序运行时,输入AB12回车,则输出结果是_。(分数:1.00 )A.2100B.21BAC.DCBAD.21AB解析: 解析 main() 函数调用 get_put() 函数,ge

34、t_put()是递归函数,每次使用 getchar()读入一个字符存放到 ch 中,若 ch 不是字符屜港,递归调用自身,然后调用 putchar()函数输出该字符。当输入“ AB12/n( 回车 ) ”时,直到读入的字符是屜港,输出回车符,然后回到上一层递归,逆序输出各个字符,输出结果为:回车21BA。故本题答案为 B选项。33. 有以下程序:#includestdio.h#includestring.hvoid fun(char *s)int len;len=strlen(s);if(len2)fun(s+2);putchar(*s);void main()char *p=abcdefg:

35、fun(p);putchar(/n);程序的运行结果是 _。(分数: 1.00 )A.abcdefgB.gfedcbaC.gecaD.aceg解析: 解析 fun()函数是递归函数,功能是将字符指针s 指向的字符串,逆序输出下标为偶数的字符,题意实参p 指向的字符串中,下标为偶数的字符分别是a( 下标为 0) 、c( 下标为 2) 、e( 下标为 4) 、g( 下标为 6) ,所以逆序输出结果为:geca,所以本题答案为 C 选项。34. 有如下程序:#include stdio.hvoid convert(char ch)printf(%c,ch);if(ch_x0005_)convert(

36、ch+1);main()convert(程序运行后的输出结果是_。(分数: 1.00 )A.5B.123456C.012345D.01234解析: 解析 convert()函数首先将形参 ch 输出,然后在 ch 的 ASCII 码小于 ?时,递归调用自身, 传入 ch+1 这个字符;main() 函数调用 convert()函数,传入字符,所以程序输出结果为:012345,故本题答案为 C 选项。35. 有以下程序:#include stdio.hint mm;int func(int a)static int n=3;int i;for(i=1; ia;i+)n=n*a;return n;

37、void main()int a;mm=func(2);a=func(3);printf(%d%d/n,mm,a);程序的运行结果是 _。(分数: 1.00 )A.6 34B.9 729C.3 9D.6 54解析: 解析 程序中 mm是全局变量, n 是 func() 函数中的静态局部变量,所以mm初值默认为 0;n 只有在第一次调用func() 函数时定义并完成初始化,初值为 3,后续每次调用 func() 时 n 的值是上一次调用结循环, for 经过,3 的值为 n 静态局部变量, 2 的值为 a 形参时, mm=func(2)函数中 main() 执行束时的值;在 i 取值为 1 时,

38、n=n*a,所以 n 的值为 6,函数返回值也是 6,所以 mm的值为 6;执行 a=func(3) 时,形参 a 的值为 3,静态局部变量 n 的值为 6,经过 for 循环,在 i 取值为 1 、2 后,n=n*a*a ,所以 n 的值为 54,函数返回值也是 54,所以main() 函数中 a 的值为 54。故本题答案为 D 选项。36. 有以下程序:#include stdio.hint fun(char *p) if(*p=0)return 0;fun(p+1);putchar(*p);return 0;main() char ch=ABCD; fun(ch);程序运行后的输出结果是

39、_。(分数: 1.00 )A.DCBA B.BCDC.ABCDD.D解析: 解析 fun() 函数是递归函数,当形参p 指向的字符不是空字符 /0(ASCII输出 *p 。由于 putchar()函数在递归调用自身语句之后,函数的功能是逆序输出向的字符串为“ ABCD”,所以程序输出结果为: DCBA。故本题答案为 A 选项。码为 0) 时,递归调用 fun(p+1) ,然后p 指向的字符串。 main() 函数中, ch 指37. 有以下程序:#include stdio.hint fun(int x, int y)static int m=0,i=2;i+=m+1;m=i+x+y;retu

40、rn m;void main()int j=1,m=1,k;k=fun(j,m);printf(%d,k);k=fun(j,m);printf(%d/n,k);程序运行后的输出结果是_。(分数: 1.00 )A.5 ,5B.5 ,11 C.11,11D.11,5解析: 解析 fun()函数中定义两个静态局部变量m、i ,其中 m初值为 0,i 初值为 2,由于是静态局部变量,m、i 只在第一次调用 fun() 函数时初始化,后续调用fun() 函数时, m、i 的值沿用上一次调用后的值。main() 函数中 j 、m、k都是局部变量,作用域都只限在main() 函数中,所以 main() 函数

41、中的 m与 fun() 函,1) ,fun(1 ,第一次调用 1) ,fun(1函数连续两次调用main() 属于不同的变量。由源程序可知m数中的fun() 函数中 x 值为 1,y 值为 1,m值为 0,i 值为 2,所以执行 i+=m+1 后 i 的值为 3。执行 m=i+x+y 后, m的值为 5,函数返回值为 5;第二次调用 fun(1 ,1) ,fun() 函数中 x 值为 1,y 值为 1,m值为 5,i 值为 3。所以执行 i+=m+1 后 i 的值为 9。执行 m=i+x+y 后,m的值为 11,函数返回值为 11。故本题答案为 B 选项。38. 有下列程序:#include

42、stdio.h#include string.hmain()char a510=efg,abcd,mnopq,hijkl,stuvwxyz;char *p5;int i,len;for(i=4;i=0;i-)pi=ai;len=strlen(pi);printf(%s,pi+len-2);printf(%c,(pi+len-1);程序执行后的输出结果是_。(分数: 1.00 )A.fggcddpqqkllyzzB.yzzkllpqqcddfggC.yzyklkpqpcdcfgfD.fgfcdepqpklkyzy解析: 解析 main()函数定义一个二维字符数组a,它包含5 个字符串,另外定义字

43、符指针数组p,它包含5 个字符指针元素。通过for循环,从后往前遍历a 中的 5 个字符串,每次遍历将字符串首地址(ai)赋给数组p 中下标为i的元素,然后使用 strlen()库函数求得该下标为i 的字符串长度,再通过printf()函数输出该字符串最后两个字符构成的字符串 (pi+len-2)以及该字符串最后一个字符*(pi+len-1),所以本题输出结果为:yzz-kllpqqcddfgg。故本题答案为 B 选项。39. 有以下程序:#include stdio.htypedef struct bookchar name50;double price;BOOK;void fun(BOOK

44、 *pd,int num,int size);void main()佂?搠瑡噃 ?屻桰瑯獯潨屰水 ?计算机原理 ?数据结构 ,35.6; int n=3,m=10;fun(data,n,m);printf(%s,%s/n,,);void fun(BOOK*pd,int num,int size)int i,j,t;double mx,mn;mx=mn=pd0.price;j=t=0;for(i=1;inum;i+)if(pdi.pricemx) mx=pdi.price;j=i;if(pdi.price mn) mn=pdi.price;t=i;pdsi

45、ze-2=pdj;pdsize-1=pdt;程序的运行结果是 _。(分数: 1.00 )A. 数据结构,计算机原理B. 计算机原理,数据结构C.photoshop ,计算机原理D. 数据结构, photoshop解析: 解析 程序首先使用 typedef 定义一种新的类型名 BOOK,它包含两个数据成员:字符数组 name,double 类型变量 price 。main() 函数使用 BOOK定义结构体数组 data ,它包含 10 个 BOOK类型的结构体元素,并完成初始化,其中前 3 个元素使用确定的值初始化, 后 7 个元素系统默认值初始化。 函数 fun() 通过 for 循环遍历结构

46、体数组 pd 的前 num个元素,从而找出前 num个元素中 price 成员最大的元素下标存放到 j ,找出前 num个元素中 price 成员最小的元素下标存放到 t ,然后将下标为 j 的元素赋给下标为 size-2 的位置,将下标为 t 的元素赋给下标为 size-1 的位置。由于 main() 函数中调用 fun(data ,n,m),n 值为 3、m值为 10,fun() 函数将 data 中下标为 8 的元素赋值为前 3 个元素中 price 值最大的元素,将 data 中下标为 9 的元素赋值为前 3 个元素中 price 值最小的元素,调用结束后,输出下标为 8 和 9 元素的成员 name,根据初值可知 price最大元素的 name成员为“数据

温馨提示

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

最新文档

评论

0/150

提交评论