


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、二级C语言真题2013年03月-(3)( 总分: 100.00 ,做题时间: 90 分钟 )、 选择题 ( 总题数: 40,分数: 40.00)1. 设数据元素的集合 D=1 , 2 , 3, 4, 5,则满足下列关系 R的数据结构中为线性结构的是 。(分数: 1.00 )A. R=(1,2),(3,4),(5,1)B. R=(1,3),(4,1),(3,2) , (5 , 4) VC. R=(1,2),(2,3),(4,5)D. R=(1,3),(2,4),(3,5)解析: 解析 一个非空的数据结构如果满足以下两个条件:有且只有一个根节点;每一个节点最多有一个 前件,也最多有一个后件,称为线
2、性结构。不同时满足以上两个条件的数据结构就称为非线性结构。A选项中有两个根节点3和5故错误。B选项根节点为5,排列顺序为54132, B选项正确。C选项有两个根节 点1和4,故错误。D选项有两个根节点1和2,故错误。2. 下列叙述中正确的是 。(分数: 1.00 )A. 链表节点中具有两个指针域的数据结构可以是线性结构,也可以是非线性结构VB. 线性表的链式存储结构中,每个节点必须有指向前件和指向后件的两个指针C. 线性表的链式存储结构中,每个节点只能有一个指向后件的指针D. 线性表的链式存储结构中,叶子节点的指针只能是空解析: 解析 双向链表与树形结构的节点均可以包含两个指针域,但前者为线性
3、结构, 后者为非线性结构,故A选项正确。双向链表含有指向前件和指向后件的两个指针,故C选项错误。线性链表就是指线性表的链式存储结构。由于这种链表中,每个节点只有一个指针域,故又称为单链表,故B选项错误。二叉树为非线结构,叶子节点没有后件,但是可以有指向前件的指针,故D选项错误。3. 一个栈的初始状态为空。现将元素A, B, C, D, E依次入栈,然后依次退栈三次,并将退栈的三个元素依次入队 (原队列为空 ),最后将队列中的元素全部退出。则元素退队的顺序为 。(分数: 1.00 )A. ABCB. CBAC. EDC VD. CDE解析: 解析 栈所有的插入与删除都限定在表的同一端进行。入栈运
4、算即在栈顶位置插入一个新元素,退 栈运算即是取出栈顶元素赋予指定变量。队列指允许在一端进行插入,而在另一端进行删除的线性表。习 惯上称往队列的队尾插入一个元素为入队运算,称从队列的队头删除一个元素为退队运算。元素入栈后为ABCDE退栈并入队后,队中元素为 EDC退队时从队头开始,顺序为 EDC故C选项正确。4. 某二叉树的中序序列为 DCBAEFG后序序列为DCBGFE,则该二叉树的深度(根节点在第1层)为(分数: 1.00 )A. 5B. 4 VC. 3D. 2解析: 解析 深度,定义一棵树的根节点所在的层次为 1 ,其他节点所在的层次等于它的父节点所在的层 次加 1,树的最大层次称为树的深
5、度。二叉树遍历可以分为 3种:前序遍历 (访问根节点在访问左子树和访 问右子树之前 )、中序遍历 (访问根节点在访问左子树和访问右子树两者之间)、后序遍历 (访问根节点在访问左子树和访问右子树之后)。二叉树的后序序列为 DCBGFEAA为根节点。中序序列为 DCBAEFC可知DCB 为左子树节点,EFG为右子树节点。同理 B为C父节点,C为D父节点。根据分析,可画出左子树,同理E为F根节点,F为G根节点。根据分析,可画出右子树,观察得,树的深度为4。故二叉树深度为4层,故B 选项正确。5. 软件生命周期是指。(分数:1.00 )A. 软件产品从提岀、实现、使用、维护到停止使用、退役的过程VB.
6、 软件的需求分析、设计与实现C. 软件的开发与管理D. 软件的实现和维护解析:解析通常把软件产品从提岀、实现、使用、维护到停止使用、退役的过程称为软件生命周期,故 A选项正确。6. 某系统结构图如下图所示该系统结构图的深度是。(分数:1.00 )A. 1B. 2C. 3 VD. 4解析:解析深度表示控制的层数。题目中系统共有3层,故C选项正确。7. 下面属于应用软件的是。(分数:1.00 )A. 学生成绩管理系统VB. UNIX操作系统C. 汇编程序D. 编译程序解析:解析计算机软件按功能分为应用软件、系统软件、支撑软件(或工具软件)。系统软件是管理计算机的资源,提高计算机的使用效率,为用户提
7、供各种服务的软件,如操作系统、数据库管理系统、编译程 序、汇编程序和网络软件等,B C、D均为系统软件。应用软件为了应用于特定的领域而开发的软件,故A选项正确。8. 将E-R图转换为关系模式时,E-R图中的属性可以表示为 。(分数:1.00 )A. 属性 VB. .键C. 关系D. .域解析:解析采用E-R方法得到的全局概念模型是对信息世界的描述,并不适用于计算机处理,为了适合 关系数据库系统的处理,必须将E-R图转换成关系模式。下表为 E-R模型和关系模型的对照表。由表中可知A选项正确。E-R模型关系模型E-R模型关系模型实体元组属性属性:实体集关系联系关系9.有两个关系R与S如下,由关系R
8、和S得到关系T,则所使用的操作为 RAA1.BB1a0f3a0 qn2b1f3b1n2a1f4SAA1a0b :1TBB1f3n2(分数:1.00)A. .并B. 自然连接C. .除 7D. .交解析:解析常用的扩充运算有交、除、连接及自然连接等。并:RS是将S中的记录追加到R后面。交:RS结果是既属于R又属于S的记录组成的集合。上述两种操作中,关系R与S要求有相同的结构,故 A、D选项错误。自然连接:去掉重复属性的等值连接。自然连接要求两个关系中进行比较的是相同的属性,并 且进行等值连接,可知B选项错误。除运算可以近似地看作笛卡尔积的逆运算。当SXT=R时,则必有R-S=TT称为R除以S的商
9、。设关系R有属性M1, M2,Mn关系S有属性Mn-s+1,Mn-s+2,Mn,此时有: R-S= n M1, M2,,Mn-S(R)- n M1, M2,,Mn-s( n Ml M2 ,Mn-s(R) X S)。由 S 中有属性 A和 A1, T中属性为B和B1,在R元组中找到对应于s中两个元组的T中元组为f3与n2。R中最后一个元组与 S中 无对应关系,所以在 T中也不会出现。故 C选项正确。10. 优化数据库系统查询性能的索引设计属于数据库设计的 。(分数:1.00 )A. 需求分析B. 概念设计C. 逻辑设计D. 物理设计 7解析:解析数据库设计的4个阶段为:需求分析阶段、概念设计阶段
10、、逻辑设计阶段、物理设计阶段。 为一个给定的逻辑模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计。数据库物理 设计的主要目标是对数据内部物理结构作调整并选择合理的存取路径,以提高数据库访问速度及有效利用 存储空间。一般RDBMSS留给用户参与物理设计的内容大致有索引设计、集簇设计和分区设计。故D选项正确。11. 结构化程序由顺序、选择、循环三种基本结构组成,以下相关叙述错误的是。(分数:1.00 )A. 三种基本结构不可以嵌套使用7B. 顺序结构是按语句在程序中的先后顺序逐条执行,没有分支,没有转移C. 选择结构是根据不同的条件执行不同分支中的语句D. 循环结构是根据条件决定是
11、否重复、重复执行多少次循环体语句解析:解析结构化程序主要由3种基本控制结构组成,顺序结构是最基本的算法结构,当执行由这些语 句构成的程序时,将按这些语句在程序中的先后顺序逐条执行,没有分支,没有转移,没有步骤之间的相互约束,没有对某一步骤的多次使用,完全按照步骤的原有次序依次执行, B 选项叙述正确。选择结构根 据不同的条件去执行不同分支中的语句,C 选项叙述正确。循环结构就是根据各自的条件,使同一组语句重复执行多次,D选项叙述正确。三种结构可以嵌套使用,A选项叙述错误,选择 A选项。12. 以下能正确表述算式 sin(2 n叶30° )的C语言表达式是 。(分数: 1.00 )A.
12、 sin(2*3.14* 叶3.14*30/180.0)VB. sin(2* n *r+30)C. sin(2*3.14*r+30)D. sin(2*3.14*r+30*3.14/360.0)解析:解析sin是库函数,在使用时应包含 math.h,其参数应该为被求角度的弧度制表示。C语言中n不是已定义的常量,需要用户自定义或者直接使用 3.14代替n o B选项没有替换n也没有将30度换算成 弧度,错误。C选项没有将30度换算成弧度,错误。D选项弧度换算错误,n对应于180°,应该除以180.0 而不是360.0 o A选项n被正确替换,弧度换算正确,故 A选项正确。13. 设有定义
13、:int x=11 ,y=12, z=0;,以下表达式值不等于12的是。(分数: 1.00 )A. (z , x, y)B. (z=x , y)C. z=(x , y)D. z=(x=y)V解析: 解析 逗号表达式的计算过程是从左到右逐个求每个表达式的值,取最右边一个表达式的值作为该逗号表达式的值。赋值运算结合性为由右向左结合,赋值运算符左值为变量,右值为变量或常量,且左右两边数据类型相同才能实现赋值。成功实现赋值后以左值为返回值。逻辑表达式成立则返回1,不成立返回0oD选项逻辑表达式x=y不成立,则z=0,表达式值为0。B选项逗号表达式x,y取y值为表达式值, 然后赋值给z=12,表达式值为
14、12o C选项逗号表达式(x,y)取y值为表达式值,然后赋值给z=12,表达式值为12o A选项逗号表达式(z,x,y)取y值为表达式值12。故选择D选项。14. 以下可以将任意一个两位整数 n 的个位数与十位数对换的表达式为 o(分数: 1.00 )A. (n- n/10 X10) x10+n/10 VB. n- n/10 X 10+n/10C. n/10+(n-n/10)D. (n- n/10)X10+(n/10)解析: 解析 A 选项 n/10 得到十位数字, n-n/10 得到个位数字,将个位数乘以 10 加上十位数字,(n- n/10 X10) X 10+n/10实现将任意一个两位整
15、数个位数与十位数对换,A选项正确。B选项n- n/10 X10得到个位数字,n/10为十位数字,n- n/10 X10+n/10实现两位整数个位数与十位数之和,B选项错误。C选项n/10+(n-n/10)=n ,不能实现题目中要求,C选项错误。D选项n/10是十位数字,n-n/10为原两位整数减去十位数字,不是个位数字,D选项错误。15. 设有以下程序段:int y;y=rand()%30+1;则变量 y 的取值范围是 o(分数: 1.00 )A. 0<y<30B. 0 <y<30 VC. 1 < y< 30D. 1 <y<30解析:解析本题考点
16、为“ %求余符号。rand()产生随机整数,任何整数对30求余得到的整数范围为029,则y的取值范围为1<y<30或者说0<y<30,故 B选项正确。16. 以下程序段中,循环次数不超过 1 0的是o(分数: 1.00 )A. int i=10; doi=i+1 ; while(i < 0) ; VB. int i=5;doi+=1;while(i > 0);C. int i=1;doi+=2;while(i!=10);D. int i=6;doi-=2;while(i!=1);解析:解析dowhile 循环语句一般形式为:do循环体while(表达式),执
17、行过程为:首先执行循环 体,之后判断表达式,成立(非0)则再一次执行循环体,不成立(0)则退出循环。A选项,执行函数体i=11 , 判断条件11 v 0不成立,退出循环,循环次数为1,不超过10次,A选项正确。B选项执行函数体i=6,判断条件为i >0,由于执行函数体时j在增加,i >0 直成立,程序陷入无限循环,循环次数大于10,B选项错误。C选项执行函数体i=3,判断条件为i!=10,由于函数体中i每次增加2,所以永远小可能等于10, 故程序会陷入无限循环,循环次数大于 10,C选项错误。D选项执行函数体i=4,判断条件为i!=1,由于 函数体中i每次减少2,所以永远不可能等于
18、1,故程序会陷入无限循环,循环次数大于10,D选项错误。17. 有以下程序:#include v stdio.h >main()int x;scanf("%d",&x);if(x > 10) printf("1");else if(x> 20) printf("2");else if(x> 30) printf("3");若运行时输入:35 v回车>,则输出结果是 。(分数: 1.00 )A. 123B. 2C. 3D. 1V解析:解析程序执行过程为:输入 35v回车>,
19、scanf函数从键盘读入 35赋值给x=35,对if条件进 行判断,35> 10,条件成立,输出1,不再执行下面的else if语句,程序结束,输出结果为1,故D选项18. 若要实现 total=1+2+3+4+5 (分数: 1.00 )A. int i=1,total=1;while(iB. int i=1,total=0;while(iC. int i=0,total=0;while(iD. int i=0,total=0;while(i正确。求和,以下程序段错误的是 v 5) total+=i;i+=1;Vv =5) total+=i;i+=1;v 5) i+=1;total+=i
20、 ; v =5) total+=i;i+=1;解析: 解析 while 循环语句一般形式为: while( 表达式 ) 循环体 ,执行过程为:首先判断表达式,成 立(非0)则执行循环体,不成立(0)则退出循环。A选项执行过程为:i=1,total=1 ,判断while循环条件1v 5成立,total=1+1 , i=2 ;判断循环条件执行函数体,直到 i=4,total=1+1+2+3+4 , i=5 ; i=5循环条 件不成立,退出循环, A选项不能实现题目要求,错误,选择 A选项。B选项执行过程:i=1 , total=0 ,1v=5 成立, total=0+1=1, i=2 ;直到 i=
21、5 , total=1+2+3+4+5 , i=6 ; i=6 条件不成立,退出循环,程序正确。C选项执行过程:i=0 , total=O , 0v 5 成立,i=1 , total=1 ;直到 i=5 , total=1+2+3+4+5 ; i=5 条件 不成立,退出循环,程序正确。D 选项执行过程: i=0 , total=0 , 0v =5 成立, total=0 , i=1 ;直到 i=5 ,total=1+2+3+4+5 , i=6 ;i=6 条件不成立,退出循环,程序正确。19. 有以下程序:#include v stdio.h >main()int i=1,k=0;for(
22、 ; i v 6;) switch(i%3) case 0: k+;case 1: k+; break; case 2: k+; continue;i+=1;printf("%d/n",k);程序的运行情况是 (分数: 1.00 )A. 形成无限循环 VB. 输出 6C. 输出 5D. 输出 4 解析: 解析 switch 语句是一种多分支选择语句,执行过程为:计算 switch 后圆括号内的表达式的值, 然后用该值逐个去与 case 后的常量表达式值进行比较, 当找到相匹配的值时, 就执行该 case 后面的语句。 若均不匹配的,就执行 default 后面的语句。执行完
23、一个 case 后面的语句后,程序就转移到下一个 case 处继续执行, 并不再进行判断。 break 语句作用是结束整个循环过程, 不再判断执行循环的条件是否成立, 且在嵌套循环中,其只跳出最内层的一层循环,在分支结构中,跳出最内层分支结构。continue 语句只能用在循环结构中, 其作用是结束本次循环, 即不再执行循环体中 continue 语句之后的语句, 而是立即转入 对循环条件的判断与执行。本题执行过程为:i=1 , k=0 , i v 6成立,执行for循环:i%3=1,匹配easel ,k=1, break 退出 switch , i=2 ; i v6 成立,执行 for 循环
24、:i%3=2,匹配 ease2, k=2,执行 continue,由 于其只用于循环结构,退出 switch,且不执行此次for循环以后的语句,i=2不变,i v 6成立,执行下一 次for循环,以后的循环情况与刚刚的情况完全一致,i=2不会改变,形成无限循环。故 A选项正确。20. 以下不能输出小写字母 a 的选项是 。(分数: 1.00 )A. printf("%c/n","a");VB. printf("%c/n","A"+32);C. putchar(97);D. putchar("a"
25、);解析:解析字符是按照其ASCII形式存储的,其值在 0255之间,否则不是合法的字符。printf函数格式控制符。以字符形式输出数据。putchar函数将括号中参数以字符形式输出。A选项“a”为字符串,不是单个字符,输出格式不正确,不能输出a,字符a'的ASCII码为97,字符A的ASCII码为65"A"+32即为a',故B选项能输出a。C D选项putchar函数参数均为字符a',均可正确输出a。21. 有以下程序段:char c1,c2,c3;scanf("%c%c%c",&c1,&c2,&c3);
26、若要给 c1、c2、(分数:1.00)A. 字母A、B、B. 字母A、B、C. 字母A、B、D. 字母A、B、则以下对输入形式的描述正确的是C 之间可以用空格分隔C 之间不能有分隔符 VC 之间可以用回车符分隔C之间可以用Tab键分隔c3 分别输入字母 A、 B、 C,解析:解析在使用scanf函数时要注意,在用“ %c格式输入字符时,分隔符(空格符、制表符仃ab键)、 回车符 ) 和转义字符都将作为有效字符进行输入。 题目中要求以字符形式输入三个数据, 空格、回车符、 Tab 键均会被视为有效字符赋给对应变量,所以字母A、B、C之间不能有分隔符,故 B选项正确。22. 有以下程序段:scan
27、f("%d%d%d",&a,&b,&c);if(a < b)a=b;if(a < c)a=c;printf("%d/n",a);该程序段的功能是 。(分数: 1.00 )A. 输出 a、b、c 中值相等的数值B. 输出 a、b、c 中的最大值C. 输出 a、b、c 中的最小值D. 输出a的原始值 V解析:解析程序段执行过程为:从键盘读入3个整型数据分别赋值给a, b, c,如果a<b,判断a与b是否相等,无论结果如何不做任何改变。如果a< c,判断a与c是否相等,无论结果如何均不做任何改变。区分=操作符和=
28、'操作符。最后对于a, b, c的值不做任何改变,输出a的原始值,故D选项正确。23. 以下程序的功能是: 通过调用 calc 函数,把所求得的两数之和值放入变量 add 中,并在主函数中输出。#include < stdio.h >void calc(float x,float y,float *sum) = x+y;main() float x,y,add;scanf("%f%f",&x,&y);calc(x,y,&add);printf("x+y=%f/n",add);calc 函数中下划线处应填入的是
29、。(分数: 1.00 )A. *sum VB. sumC. &sumD. add解析:解析程序的执行过程为:从键盘读入两个float类型数据,分别赋给x, y,调用函数calc将x与y的值与add变量地址传入函数,地址赋给指针sum,函数体中将两数之和放入指针指向的地址,指针正确的引用形式为(*sum),这表示变量,可以被赋值。所以横线处填写*sum,故A选项正确。24. 有以下程序:#include < stdio.h >main() char a 44=""int i,j;for(i=0;i < 4; i+) ai0=ai3="#&q
30、uot;for(j=1; j < 3; j+) a0j=a 3j="#"if(i!=0)&&(i! =3) aij="o"for(i=1;i < 3;i+) for(j=0; j < 4;j+)printf("%2c" ,aij);printf("/n");程序的运行结果是 。(分数: 1.00 )A. #o o#o o#VB. # # # # o o #C. # o o # # # #D. # # # # # # #解析:解析程序的执行过程为:定义4行4列二维数组字符a并且初始化
31、为a00="",其他元素均为 0。执行 for 循环将数组第一列和第四列赋值为 #'。执行for 循环将数组第一行和第四行的第二个到第三个元素赋值为 #',然后将剩余元素全部赋值为 0'。此时矩阵为# , #, #, #, #, o, o, #,# , o, o, # , # , #, #, #。之后输出矩阵第二行与第三行元素为:# o o # v回车# o o #,故A选项正确。25. 设有函数定义:void sub(int k , char ch)则以下对函数 sub的调用语句中,正确的是 。(分数: 1.00 )A. sub(1,97);VB.
32、 sub(2,"97");C. n=sub(3,"a");D. sub(4,"a");解析: 解析 函数的参数有两个,第一个是整型,第二个是字符类型,在调用函数时,实参必须一个是整型,一个是字符型相容的类型 (整型)。A选项中97为字符a'的ASCII码,可以作为字符传入函数,A选项正确。B选项97'不是合法字符,字符单引号里面只能有一个字符,B选项错误。函数sub返回类型为空,即不返回任何值,故C选项中将函数返回值赋给n是不正确的调用方法,C选项错误。D选项“a”为字符串,也不是合法的字符,D选项错误。26. 有以下
33、程序:#include v stdio.h >void fun(int *x,int s,int n) int i;for(i=s; i> =n; i-)*(x+i+3) = * (x+i);main() int m = 0,1,2,3,4,5,6,7,8,9,k;fun(m,10-4,3);for(k=0; k v 10;k+)printf("%d",mk);程序的运行结果是 。(分数: 1.00 )A. 0123456345B. 0123453456 VC. 0123456666D. 0123454569解析:解析程序的执行过程为:定义数组m并为其赋初值,数
34、组长度为10。调用函数fun(m , 6, 3)将数组首地址传入函数, 函数实现将数组下标值从 6 到 3的元素依次向下标值大的方向移动三个位置, for 循环结束之后数组为 m=0, 1, 2, 3, 4, 5, 3, 4, 5, 6。依次输出数组元素,结果为 0123453456,故 B 选项正确。27. 若有定义语句: int m3=1, 2, 3, 4, 5, 6, 7;,则与该语句等价的是 。(分数: 1.00 )A. int m3=1B. int m3=1C. int m3=1D. int m3=1, 2, 3, 4, 5, 6, 7 ; V , 2, 3, 4, 5, 6, 7
35、;, 2, 3, 4, 5, 6, 7 ;, 2 , 3, 4, 5, 6, 7 ;解析: 解析 二维数组的初始化有两种方式,一种是分行初始化,方式为:数据类型数组名 行下标表达式列下标表达式=第0行初值 , 第1行初值表,最后1行初值表;,如果初值表只对部分元 素赋初值,没有被赋初值的元素将被自动赋值为 0。另一种是按二维数组在内存中的排列顺序给各元素赋 初值,这种方式就是不分行将所有数据依次列在一个花括号里, 方式为:数据类型数组名 行下标表达式 列下标表达式 = 初值表 ; ,这种方式的赋值就是将初值表的数据依次赋予数组的每个元素,其中赋值是按 照数组元素在内存中的位置进行的。题目中的初
36、始化语句是第二种方法,如果用第一种方法应该是intm3=1, 2, 3, 4, 5, 6, 7 ;,这里应该保证除了最后一行,每一行都满列有 3个元素,故 A选项证确。28. 设有以下说明和语句:int x34,(*p)4; p=a;,则与表达式*(* p+2)等价的选项是分数: 1.00 )A. a02VB. *(a+2)0C. (*a+2)0D. a20解析:解析(*p)4是指向有4个元素的数组指针,a为二位数组首地址,赋值给数组指针p。题目中表达式*(*p+2)是对数组a第1行第3列元素的引用。a02是数组第1行第3列元素,与题目中等价, A 选项正确。*(a+2)0是对数组第3行第1列
37、元素的引用,B选项错误。(*a+2)0是对数组第1行第3列 元素的引用,C选项错误。a20是数组第3行第1列元素,D选项错误。29.以下不能将键盘输入的字符串:This is a string v回车读入到str中的程序段是 。分数: 1.00 )A. char str80B. char str80C. char str80D. char str80; scanf("%s" , str) ; V; int i=0; while(stri+=getchar()!="/n"); stri=0 ; gets(str) ;, *ps=str ; doscanf(
38、"%c" , ps) ; while(*ps+ !="/n"); *(ps)=0 ;解析: 解析 在使用 scanf 函数时要注意, 在输入数据时, 遇到空格, 或按“回车”键或按“跳格” (Tab) 键时该数据认为结束。A选项中输入This后有一个空格,认为数据输入结束,以后的数据不能再读入到 str 中,故选择A选项。B选项用getchar读入字符,键盘输入的所有字符均被认为是有效字符读入,用while循环控制读入,当读入字符为回车时结束读入,字符串被正确的读入到str中。C选项用gets函数读入字符串,它读入键盘输入的所有字符,遇到回车自动结束读入
39、,所以也能正确读入字符串到str中。D选项用dowhile和指针循环控制字符输入,依次判断输入字符是否为回车符,若不是回车符则放入字符数组 中,直到读入回车符,结束循环,数组 str 中正确存放入指定的字符串。30. 有以下程序:#include v stdio.h >main() char s10="verygood", *ps=s; ps+=4;ps="nice"puts(s);程序的运行结果是 。(分数: 1.00 )A. niceB. veryniceC. nicegoodD. verygoodV解析: 解析 将字符指针变量初始化为一个字符
40、串有两种方式,其中的一种通过赋值运算使一个字符指针 指向一个字符串常量: char*ps ;ps="nice" 。这种形式只是将字符串“ nice ”首地址赋给指针,而不是将 指针原本指向的单元元素改变成“ nice ”。程序执行过程为:定义字符数组并且初始化为“ verygood ”常 量,常量存在于内存的常区,不得通过任何方式来修改内存中的内容(当然可以释放这块内存 ) ,定义指针ps使其指向数组,使ps指向数组第5个元素,使指针指向字符串“ nice ”,这并不影响s数组任何元素值,故输出字符串s为“verygood",故D选项正确。31. 有以下程序:#i
41、nclude < stdio.h >int fun(char *s) char *p=s;while(*p !="/0")p+;return(p-s);main() char *p="01234"printf("%d/n",fun(p);程序的运行结果是 。(分数: 1.00 )A. 3B. 6C. 4D.5 V解析:解析程序执行过程为:定义指针p,初始化为字符串"01234"首地址。调用函数 fun,将指针传入函数,定义指针 s 使其指向字符串第一个字符。 while 循环使指针 p 指向字符串结束符
42、' /0',返回两 个指针差,也即是字符串长度5。最后输出5,故D选项正确。32. 有以下程序:#include <stdio.h >main() int findmax(int,int,int),m;m=findmax(a ,b,e);int findmax(int x,int y,int z)则以下叙述正确的是 。(分数: 1.00 )A. 在main函数中声明了 findmax函数 VB. 在main函数中定义了 findmax函数C. 在main函数中两次调用了 findmax函数D. 在main函数内、外重复定义了findmax函数解析: 解析 程序编译是
43、从上到下进行的,所以如果函数定义放在主函数之后,那么在函数调用时必须提 前声明函数,可以在主函数之前声明函数, 也可以在主函数中函数调用之前声明函数。 题目中函数 findmax 定义放在了函数之后,所以主函数中声明了 findma 函数。 int findmax(int ,int ,int) ;为函数声明, m=findmax(a,b, c);为函数调用,int findmax(intx , inty ,int z)为函数定义。 A选项正确。B 选项 是在main函数外定义的findmax函数,错误。在main函数中,出现了一次findmax函数的声明和一次findmax 函数的调用,不是两
44、次调用,C选项错误。D选项在main函数内不是定义findmax函数而是声明findmax函数。33. 有以下程序:#include < stdio.h >void fun(int n) int i;if(i=n/10)!=0) fun(i);putchar(n%10+"0"); main() fun(256); 程序运行后的输出结果是 。(分数: 1.00 )A. 256VB. 652C. 2560D. 52解析:解析 程序的执行过程为:调用函数 fun(256) ,i=25,i!=0 ,if 条件成立,调用: fun(25) ,i=2, i!=0 ,if 条
45、件成立, 调用 fun(2) ,i=0 ,if 条件不成立, 输出字符' 2', 返回 fun(25) ,输出字符' 5', 返回fun(256),输出字符6',函数调用结束。程序运行后的输出结果是256,故A选项正确。34. 有以下程序:#include< stdio.h >#include< stdlib.h >void fun(int*p1, int *s) int *t;t=(int *)malloc(2 * sizeof(int);*t=*p1 + *p1 +; *(t+1)=*p1+ *p1;s=t;main()int
46、 a2=1,2,b2=0;fun(a,b); printf("%d,%d/n",b0,b1); 程序运行后的输出结果是 。(分数: 1.00 )A. 2, 6B. 0 , 0 VC. 2, 4D. 1 , 2解析: 解析 malloc 函数的原型为: malloc(size) ;,函数的作用是在内存的动态存储区分配一个长度 为size的连续空间。程序执行过程为:定义数组a=1 , 2 , b=0 , 0, b,调用函数fun,将数组地址传入函数,指针p1指向a, s指向b,定义指针t并使其指向开辟的两个整型内存,为第一个内存赋值为数 组a第一个元素的2倍,即2,然后指针p1
47、指向a数组第二个元素,为第二个内存赋值为数组a第二个元素的2倍,即4,最后使指针s指向动态开辟的两个内存的首地址。整个过程中数组b没有发生变化,依次输出b中元素为0, 0,故B选项正确。35. 有以下程序:#include < stdio.h >#define FNA(x) x*x#define FNB(x) x+zmain() int a=2,b=4;printf("%d,%d/n",FNA(FNB(a),FNB(FNA(b);程序运行后的输出结果是 。(分数: 1.00 )A. 8 , 16B. 16,32C. 8 , 32 VD. 16, 16解析: 解析
48、 带参数的宏定义不是进行简单的字符串替换,而是要进行参数替换不计算,只是进行简单的 替换。替换过程是:用宏调用提供的实参字符串,直接置换宏定义命令行中相应形参字符串,非形参字符保持不变。FNA(FNB(a)的替换过程为:FNA(2+2)替换为2+2X2+2,计算结果为 8。FNB(FNA(b)的替换过 程为:FNB(4*4)替换为4X4+4X4=32。程序运行后的输出结果是8, 32,故C选项正确。36. 设有如下语句:typedef struct Dateint year;int month;int day; DATE;则以下叙述中错误的是 。(分数: 1.00 )A. DATE是用户定义的
49、结构体变量VB. struct Date是用户定义的结构体类型C. DATE是用户说明的新结构体类型名D. struct 是结构体类型的关键字解析: 解析 C 语言允许用 typedef 说明一种新类型名,其一般形式如下: typedef 类型名新类型名;, 题目中定义了新类型 Date,这种类型变量包含 3个成员,DATE是这种新类型的名字。 DATE是用户说明的 新结构体类型名,不是结构体变量,C选项叙述正确,A选项叙述错误,选择 A选项。structDate 是用户定义的结构体类型,B选项叙述正确。struct是结构体类型的关键字, D选项叙述正确。37. 设有如下定义:struct i
50、nt n; char c; a2,*p=a;则以下错误引用结构体成员n的是。(分数: 1.00 )A. (* a)-> n VB. a0.nC. p- > nD. (* p).n解析: 解析 若已定义了一个结构体变量和一个同一结构体类型的指针变量,并使该指针指向同类型的变 量,则可用以下 3 种形式来引用结构体变量中的成员,其中结构体变量名也可以是已定义的结构体数组的 数组元素:结构体变量名.成员名;指针变量名- >成员名;(*指针变量名).成员名。题目中a为数组名是地址常量,不是指针变量,A选项引用错误。a0为变量名,B选项引用正确。p为指针,且正确的指向结构体变量,C选项
51、引用正确。D选项符合第三种引用方式,引用正确。38. 有以下程序:#include < stdio.h >#include < string.h >typedef struct char name10;char sex;int age; STU;void fun(STU t) strcpy(,"Tong");t.age+; main() STU s2=t"Hua","m",18,"Qin","f",19;fun(s1);printf("%s,%d,%
52、s , %d/n",,s0.age,,s1.age);程序运行后的输出结果是 。(分数: 1.00 )A.Hua,19,Tong,19B. Hua,18,Tong,20C. Tong,19,Qin ,19D.Hua, 18, Qin, 19 V解析:解析用typedef说明一种新类型名STU其使用情况与结构体基本一致。程序执行过程为:定义STU类型数组,长度为 2,并为其初始化。sO.name="Hua",sO.sex="m" ,s0.age=18 ,("Qin", s1.sex=&
53、quot;f",s1.age=19 。调用函数 fun(s1) 将变量 s1 值传入函数, 则 ="Qin" ,t.sex="f" ,t.age=19 。调用函数 strcpy 使 ="Tong" , t.age=20 ,函数调用结束。其中结构体数组中元素并没有 发生改变,依次输出 ,s0,age , ,s1.age ,结果为 Hua,18,Qin,19,故 D选项 正确。39. 设有定义:int a=64 ,b=8;,则表达式(a&b) II (a&&a
54、mp;b)和(a | b)&&(a II b)的值分别为 。(分数: 1.00 )A.1和 1 VB.1和0C.0和1D.0和0解析:解析常用的位运算符有:“”按位求反,“VV”左移,“>>”右移,“&”按位与,“按位异或,“|”按位或。逻辑或运算符“I,计算左表达式值,如果为真,则不计算右表达式,而整个 表达式为真,若左表达式为假,再计算右表达式然后做或运算。逻辑与运算符“&&”,计算左表达式值,如果为假则不计算右表达式,而整个表达式为假,若左表达式为真,再计算右表达式然后做与运算。a=64=1000000B,b=8=1000B, a&am
55、p;b=0 为假,a&&b为真,(a&b) II (a&&b)为真, 值为 1。a | b=1001000B 为真, a | b为真,则(a | b)&&(a II b)为真,值为 1。故A选项正确。40. 有以下程序段:FILE *fp;if(fp=fopen("test.txt","w")= NULL) printf(" 不能打开文件 !");exit(0);elseprintf(" 成功打开文件 !");若文件 test.txt 已存在,则以下叙述正确的
56、是 。(分数: 1.00 )A. 程序运行后,文件 test.txt 中的原有内容将全部消失 VB. 程序运行时,会因文件存在而出错C. 对文件 test.txt 进行写操作后,可以随机进行读取D. 对文件 test.txt 写入的内容总是被添加到文件尾部 解析: 解析 fopen 函数以一定方式打开指定文件,返回一个指向文件的文件指针,如果不能实现打开指 定文件的操作,则返回一个空指针 NULJ如果指定文件不存在,则创建一个文件名为指定文件名的新文件, 然后打开它。在指定文件有错误或者指定文件不存在却不能创建新文件的情况下,打开文件操作错误,返 回空指针。本题程序中,文件 test.txt 已存在,程序运行后,文件 test.txt 中的原有内容将全部消失, A 选项正确。文件原本就存在,不会导致程序出错,会按照指定的方式打开文件,B选项错误。对文件进行写操作,只能对指针指向的位置内容进行写操作,不能随机读写,C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 规模养殖合作社合同协议
- 茶品蛋糕采购合同协议
- 菜鸟驿站合同协议书范本
- 装修话务外包合同协议
- 药品特许加盟合同协议
- 自然保护区救援协议合同
- 装修短工雇佣合同协议
- 裸根苗木销售合同协议
- 视频后期制作合同协议
- 装修工试用期合同协议
- 全球汽车产业发展现状与趋势
- T-COFA 0021-2022 渔用油电混合多旋翼无人机安全检查和维 护保养要求
- 2025贵州毕节市七星关区招聘城市社区工作者186人笔试备考题库及答案解析
- 2025届河北省“五个一”名校联盟高三下学期4月联考化学试题(含答案)
- 山东省泰安市2025届高三二轮模拟检测考试政治(泰安二模)(含答案)
- DB64-266-2018:建筑工程资料管理规程-201-250
- 20XX上海嘉定高中高三英语一模试卷
- xxx猩红热ppt课件
- T梁台座计算书
- 建筑施工企业售后服务保障方案
- 01-《数值分析》实验指导书
评论
0/150
提交评论