二级C语言真题2017年09月-_第1页
二级C语言真题2017年09月-_第2页
二级C语言真题2017年09月-_第3页
二级C语言真题2017年09月-_第4页
二级C语言真题2017年09月-_第5页
免费预览已结束,剩余11页可下载查看

下载本文档

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

文档简介

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

2、BCD出栈后为DCBAEFGH故D选项正确.DCBA后4个元素入队列为 EFGH出队列也是EFGH最后得到的序列为2 .设某棵树的度为3,其中度为2, 1, 0的节点个数分别为3, 4, 15,那么该树中总节点数为 分数:1.00A.30B.22C.35D.不可能有这样的树V解析:解析在树结构中,一个节点所拥有的后件个数称为该节点的度,所有节点中最大的度称为树的度,树中的节点数即为树中所有节点的度数之和再加1.假设度为3的节点数为n,总节点数为m,m=3<n+2x3+1X4+1,叶子节点数15=m-3+4+n.得m=3n+11, 2n=11 , n无法得到整数,说明不可能存在这样的树.故

3、答案为 D选项.3 .设二叉树的前序序列为 ABDEGHCFIJ中序序歹U为DBGEHACIFJ那么按层次输出从上到下,同一层从左到 右的序列为.分数:1.00A.ABCDEFGHIJ VB.DCHEBIJFCAC.JIHGFEDCBAD.GHIJDEFBCA解析:解析二叉树遍历可以分为3种:前序遍历访问根节点在访问左子叔口访问右子树之前、中序遍历访问根节点在访问左子树和访问右子树两者之间、后序遍历访问根节点在访问左子树和访问右子树之后.二叉树的前序遍历序列为 ABDEGHCFIJ中序序列为DBGEHACIFJ可知该树A为根节点,右子树节点 为CFIJ,左子树节点为 BDEGH从顶向下从左向右

4、依次为 ABCDEFGHJA选项正确.4 .设顺序表的长度为16,对该表进行简单插入排序.在最坏情况下需要的比较次数为 . 分数:1.00A.15B.60C.30D.120 V解析:解析简单插入排序在最坏情况下,即初始排序序列是逆序的情况下,比较次数为nn-1/2 ,移动次数为nn-1/2 .此题中即16X16-1+2=8X 15=120=故答案为 D选项.5 .软件系统总体结木图的作用是 .分数:1.00A.描述软件系统结构的图形工具VB.描述软件系统的限制流C.描述软件系统的数据流D.描述软件系统的数据结构解析:解析软件系统总体结构图是描述软件系统结构的图形工具,它包括软件系统的限制流、软

5、件系统的数据流、软件系统的数据结构等.故答案为A选项.6.不属于对象构成成份的是.分数:1.00A.属性B.规那么 VC.方法或操作D.标识解析:解析一个对象通常可由对象名、属性和操作3局部组成,对象名唯一标识一个对象.故答案为B选项.7 .十进制整数设为整数类I ,那么下面属于类I的实例的是 .分数:1.00A.-518 VB.0.518C.518E-2D.518解析:解析类是具有共同属性、共同方法的对象的集合.-518是整数,0.518是浮点数,518E-2是指数.故答案为A选项.8 .结构化程序设计原那么强调的是 o分数:1.00A.自顶向下 VB.可封装性C.可复用性D.可恢复性解析:

6、解析结构化程序设计的原那么强调自顶向下、逐步求精、模块化、限制使用goto语句.故答案为A选项.9 .违背数据流图DFD构造规那么的是 o分数:1.00A. “加工应既有输入又有输出B. “数据存储间有数据流VC. “数据流应标识数据流名D.父图子图是指相邻上下两层的数据流图解析:解析数据流图DFD应遵循以下构造规那么.对加工处理建立唯一、层次性的编号,且每个加工处理通常要求既有输入又有输出.数据存储之间不应有数据流.“数据流应标识数据流名,数据流图的一致性,即输入输出、读写的对应.父图、子图关系与平衡规那么.相邻两层DFD之间具有父子关系,子图代表父图中某个加工的详细描述,父图代表子图间的接

7、口.子图个数不大于父图中的处理个数.所有子图的输入输出数据流和父图中相应处 理的输入输出数据流必须一致.故此题答案为B选项.10 .关系数据库标准化主要为克服数据库逻辑结构中的插入异常、删除异常以及 .分数:1.00A.数据丧失的问题B.结构不合理的问题C.数据不一致的问题D.冗余度大的问题V解析:解析标准化主要为克服数据库逻辑结构中的插入异常、删除异常、数据冗余以及修改异常.故本 题答案为D选项.11 .以下表达中正确的选项是 .分数:1.00A.C语言既可以用来编写系统软件,又可以用来编写应用软件VB.机器中只要安装有任一种编译程序,就能对C源程序进行编译C.假设程序中不使用C语言提供的库

8、函数,那么可以不运行连接程序D.调试程序时假设发现语法错误,改正后即可直接运行,无需再次编译解析:解析C语言既可以用来编写系统软件,又可以用来编写应用软件,选项 A正确;机器中必须安装 C语言的编译程序,才能对C源程序进行编译,选项B错误;C语言源程序中函数的定义和调用不在同一个 源文件,就需要使用链接程序,选项C错误;调试程序时假设发现语法错误,改正后需要重新再次编译,选项D错误.此题答案为 A选项.12 .以下说法正确的选项是.分数:1.00A.由3种根本结构组成的结构化程序只能解决一些简单的问题B.由3种根本结构组成的结构化程序可以解决任何复杂的问题VC.由3种根本结构组成的结构化程序只

9、能解决那些可以结构化的问题D.由3种根本结构组成的结构化程序只能解决一些数学上有解析解的问题解析:解析由3种根本结构组成的算法可以解决任何复杂的问题,由3种根本结构所构成的算法称为结构化算法,由3种根本结构所构成的程序称为结构化程序,故此题答案为B选项.13.以下说法正确的选项是.分数:1.00A.C语言标识符中字母、数字和下划线字符必须同时出现B.C语言标识符中仅出现下划线字符是不允许的C.C语言标识符中可以出现多个字母、数字和下划线字符VD.C语言标识符中字母、数字和下划线字符不能同时出现解析:解析C语言中合法的标识符命名规那么是:标识符可以由字母、数字和下划线组成,并且第一个字 符必须是

10、字母或下划线,选项 A、B、D错误.故此题答案为 C选项.14 .以下属于C语言标识符的是 oA. _6_B. #6#C. 6分数:1.00A. VB.C.D.解析:解析C语言中合法的标识符命名规那么是:标识符可以由字母、数字和下划线组成,并且第一个字符必须是字母或下划线,选项 B中的“#不合法;选项 C中的“ 不合法;选项 D中的“$不合法.故 此题答案为A选项.15 .以下不能作为合法常量的是 .分数:1.00A.1.234e0B.1.234e04C.1.234e+4D.1.234e0.4 V解析:解析实数的指数形式为:尾数 Ee整型指数,其中字母 E或e之前必须要有数字,E或e后面的 指

11、数必须是整数.选项 A、B、C都正确;选项D中e后面的指数是小数,不合法.故此题答案为D选项.16 .设有如下语句:int k=0;k=printf("OK/n");那么以下表达中正确的选项是 .(分数:1.00)A.printf必须作为独立语句出现B.变量k得到的是输出的可见字符个数2C.变量k得到的是输出字符的总个数3 VD.变量k仍保持初值0解析:解析printf()函数的原型如下:extern int printf(const char *format,.);它是有返回值的,返回值是打印出来的字符个数,题意中的字符串“OK/n输出3个字符,所以k的值为3.故此题答案

12、为C选项.17 .以下说法正确的选项是.(分数:1.00)A.赋值语句是一种可执行语句,应当出现在函数的可执行局部VB.赋值语句可以出现在函数中的任意位置C.赋值语句可以出现在函数外单独执行D.赋值语句可以出现在源程序中的任意位置解析:解析在赋值表达式的尾部加上分号就构成了赋值语句,赋值语句是一种可执行语句,应当出现在 函数的可执行局部.故此题答案为 A选项.18 .有以下程序:#include vstdio.h >main()char*s="01234;while(*(+s)!="/0")switch(*s-"0")case 0:cas

13、e 1: putchar(*s+1);break;case 2: putchar(*s+1);break;case 3: putchar(*s+1);default: putchar(*s+1);break; 程序执行后的输出结果是 .(分数:1.00)A.22345B.2345C.12345D.23445 V解析:解析程序首先定义一个字符指针s,指向一个常量字符串“ 01234 ;接着 while循环的循环条件每次将s指向下一个字符,然后判断 s指向的字符是否为空字符"/0",假设不是,那么执行循环体,将当前 字符与"0"的ASCII码差值作为swit

14、ch语句的常量表达式,执行对应的case语句;假设是那么终止循环,程序 结束.所以对于常量字符串“ 01234可知:循环过程中s指向的各个字符分别是:"1"、"2"、"3"、"4",当*s是"1"时,*s-"0"的值为1,执行case 1语句,输出*s+1即字符"2"当*s是"2"时,*s-"0"的值为2, 执行case 2语句,输出*s+1即字符"3"当*s是"3"时,*s-

15、"0"的值为3,执行case 3和default 语句, 两次输出*s+1级字符"4"当*s是"4"时,*s-"0"的值为4,执行default语句,输出*s+1即字符"5"综 上所述程序输出结果为:23445o故此题答案为 D选项.19 .有如下程序:#include cstdio.h >main()(int i;for(i=0;i <5;i+)putchar("9"-i%2);程序运行后的输出结果是(分数:1.00)A.98989 VB.98765C.&quo

16、t;9""8""7""6""5"D.98989"解析:解析main()函数中,for循环遍历i的值为0、1、2、3、4,每次遍历调用 putchar()函数输出 表达式"9"-i%2的结果,由运算符优先级可知表达式"9"-i%2首先计算i%2的值,再执行减法操作,所以当 i取值为偶数时,i%2的值为0, "9"-0结果为"9"当i取值为奇数时,i%2的值为1 , "9"-1结果为"8&q

17、uot;, 所以程序输出结果为98989o故此题答案为A选项.20 .以下关于switch语句的表达中正确的选项是.(分数:1.00)A.所有case的标号都应当是连续的B.每个case语句标号后面可以没有 break语句 VC.char型常量不能做case的标号使用D.default 必须放在全部case的最后解析:解析switch语句中,case标号不需要是连续的,选项 A错误;每个case语句标号后面可以没有 break语句,此时程序会接着执行下一个 case语句,选项B正确;case标号后必须是常量表达式,可以是 整型、char型、枚举型或常量表达式,选项 C错误;default标号可

18、以出现在 switch语句体中任何标号位 置上,选项D错误.故此题答案为 B选项.21 .有以下程序:#include vstdio.h >main()int a=6,i;for(i=1;i < =3;i+)if(a < 5)break;if(a%2)a+=2;continue;a=a+4;printf("%d,%d",i,a);程序执行后的输出结果是 .(分数:1.00)A.4 , 9B.3 , 18C.4 , 18 VD.4 , 2解析:解析main()函数中,a的初值为6, for循环首先判断i的值是否小于5,假设小于5.执行break 语句终止循环

19、;假设不小于 5,接着判断a的奇偶性,假设a是奇数,将a自增2后执行continue语句,执行 下一轮循环;假设a是偶数,将a自增4;可见无论程序如何执行,a的值只会增不会减.所以for循环过程 中,两个if语句都不会执行,每次都是将 a自增4,又由i取值可以是1, 2, 3知变量a 一共自增3次, 最终i的值为4, a的值为18.故此题答案为C选项.22 .有以下程序:#include vstdio.h > main()int a=1,b=2,c=3;char flag;flag=b > =2 && c < =3; switch(a)case 1:switc

20、h(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");程序运行后的输出结果是(分数:1.00)A.*$B.%# VC.%&&D.*#解析:解析main()函数中,根据b=2,

21、c=3可知表达式b>=2&&c< =3为真,flag值为1;由a=1以及外 层switch 语句的case标号没有 break语句,可知外层switch 语句执行 case 1 > case 0;对于外层case 1, 嵌套的switch语句*g据flag=1执行case 1 ,执行printf("%"),输出结果是" ,接着执行 break语 句;对于外层case 0,嵌套的switch语句卞据c=3执彳f default 语句,执行printf("#") ,输出"#". 故此题答案为B选

22、项.23 .有以下程序:#include vstdio.h > void main() char*s="/ta/018bc"for(;*s!="/0"s+) printf("*");printf("/n");程序运行后的输出结果是 (分数:1.00)A.*,B.*解析:解析main()函数定义一个字符指针s,指向字符串“/ta/018be " ; for循环遍历s指向的字符串中的字符,然后输出“*,所以题意可以理解为:s指向的字符串中有多少个字符,就输出多少个“ *.s指向的字符串中字符分别是: &

23、quot;/t"( 转义字符)、"a"、"/01"(转义字符)、"8"、"b"和"c",总共6个,其 中由于8不属于八进制中的数字, 所以"/018"不是一个转义字符, 而"/01"是转义字符.故此题答案为A选 项.24 .以下正确的字符常量是.(分数:1.00)A."AB"B."/0AB"C."AB"D."/xAB" V解析:解析"AB"是字符串

24、常量,选项 A错误;"/0AB"由3个字符构成,以/0开头的表示八进制字符, 但是字符"A""B"不是八进制数字,选项B错误;"AB"由两个字符构成,不能使用单引号,选项C错误;"/xAB" 是两位十六进制数 A、B代表的一个ASCII码字符,选项D正确.故此题答案为 D选项.25 .有如下程序:#include vstdio.h > void fun(int *a, int *b)for(;(*a<*b)|(getchar()!="");)(*a)+;(*b)-

25、;main()int i=0,j=5;fun(&i,&j);printf("%d,%d/n",i,j);程序运行时在第一列开始输入:ab回车>那么运行结果是.(分数:A.7 ,B.3 ,C.0D.51.00 )1250 V解析:解析fun()函数接收两个整型指针变量a、b, for循环判断a、b指向的值大小和getchar()读入的字符是否""来决定循环是否执行,循环体内对a、b指向的值各自自增1、自减1.main()函数定义并初始化实参i的值为0,实参j的值为5,调用函数fun(),传入i 、 j的地址,所以形参a指向i ,形参b

26、指*a的值为0, *b的值为5,*a的值为1, *b的值为4,*a< *b为真,执行循环体;*a< *b为真,执行循环体;*a的值为2, *b的值为3,*a< *b为真,执行循环体;*a的值为3, *b的值为2, *a<*b为假,getchar()读入字符"a",执行循环体;*a的值为4, *b的值为1,*a的值为5, *b的值为0,*a<*b 为假,getchar()*a<*b 为假,getchar()读入字符"b",执行循环体;读入字符"", fun()函数执行完毕,main()函数输出结果为:

27、5, 0.故此题答案为D选项26 .有以下程序: #include vstdio.h > void 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 7解析:解析main()函

28、数定义两个整型变量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()调用结束 后,main()函数输出*p、*q,由于它们的值没有改变,所以输出 3, 7.故此

29、题答案为D选项.27 .以下关于函数参数的表达中,错误的选项是 .(分数:1.00)A.实参应与其对应的形参类型一致B.形参可以是常量、变量或表达式VC.实参可以是常量、变量或表达式D.形参可以是任意合法数据类型解析:解析形式参数简称形参,就是在定义函数时给出的参数,它可以是任意合法的数据类型;实际参 数简称实参,是在调用函数时传递给函数确实定的数据,它的类型应该与对应的形参类型一致,可以是常 量、变量或表达式,选项 A、G D表达正确.选项 B中,常量、表达式不能作为右值,所以形参不能是常 量、表达式,表达错误.故此题答案为B选项.28 .以下有关函数的表达错误的选项是 .(分数:1.00)

30、A.C语言规定,不能在函数的内部定义函数B.在C语言的函数体中可以有多个return语句C.在C语言中函数的实参个数可以有多个,各实参之间用分号隔开VD.C语言程序总是从main()函数开始执行解析:解析C语言规定,不能在函数的内部定义函数,选项A表达正确;在C语言的函数体中,可以有多个return语句,最终只有一个会被执行,选项B表达正确;在C语言中函数的实参个数可以有多个,各实参之间用逗号分开,选项 C表达错误;C语言程序总是从 main()函数开始执行,选项 D表达正确.故本 题答案为C选项.29 .以下关于指针的说法错误的选项是 .(分数:1.00)A.可以向指针中写入任意数据VB.可

31、以向指针所指内存单元中写入数据C.指针可以指向与其基类型相同的普通变量D.可以通过加法运算,使指针指向下一个内存单元解析:解析指针变量必须区分基类型,可以向指针所指内存单元写入与基类型相同的数据,而不能写入任意数据,选项 A说法错误,选项B说法正确;指针可以指向与其基类型相同的普通变量,选项C说法正D说法确;指针是一个内存地址,它是一个整数,可以通过加法运算,使指针指向下一个内存单元,选项 正确.故此题答案为 A选项.30 .有以下程序:#include vstdio.h >#define SWAT(t,a,b)t=a;a=b;b=t; main()int x=6,y=4,z=3,s=0

32、; if(x <y)SWAT(s,x,y); if(x <z)SWAT(s,x,z); if(y <z)SWAT(s,y,z); printf("%d,%d,%d/n,x,y,z); 执行后的输出结果是 .(分数:1.00)A.6 , 4, 3 B.3 , 4, 6 C.0 3 4 D.3 , 0, 0 V解析:解析程序定义一个宏,#define SWAT(t,a,b)t=a;a=b;b=t ;程序中3个if语句经过宏替换后如 下:if(x < y)s=x;x=y;y=s;if(x < z)s=x;x=z;z=s; if(y <z)s=y;y=z;

33、z=s;x初值为6, y初值为4, z初值为3, s初值为0,所以:第1个if语句,x<y(6 <4)为假,执行x=y; y=s ;此时x的值为4, y的值为0;第2个if语句,x<z(4<3)为假,执行x=z; z=s ;此时x的值为3, z的值为0;第3个if语句,y<z(0<0)为假,执行y=z; z=s;此时y的值为0, z的值为0;最终x、y、z的值为3、 0、0.故此题答案为D选项.31 .有以下程序:#include vstdio.h > int f(int x,int n) if(n >1)return f(x,n-1)+xn-1

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

35、x2*10+x3*10;其中 x0值为 1 ,x1值为2, x2值为3, x3值为4,所以y的值为:91.故此题答案为A选项.32.有如下程序:#include vstdio.h >void get_put()char ch;ch=getehar();if(eh!="/n")get_put();putchar(ch);main()get_put();程序运行时,输入 AB12V回车>,那么输出结果是 .(分数:1.00)A.2100B.21BA VC.DCBAD.21AB解析:解析main()函数调用get_put()函数,get_put()是递归函数,每次使用

36、 getchar()读入一个字符 存放到ch中,假设ch不是字符"/n",递归调用自身,然后调用putchar()函数输出该字符.当输入"AB12/n(< 回车)时,直到读入的字符是"/n,输出回车符,然后回到上一层递归,逆序输出各个字符,输出结果 为: < 回车>21BA故此题答案为B选项.33 .有以下程序:#include vstdio.h >#include cstring.h >void fun(char *s)int len;len=strlen(s);if(len > 2)fun(s+2);putchar

37、(*s);void main()char *p="abcdefg":fun(p);putchar("/n");程序的运行结果是.(分数:1.00)A.abcdefgB.gfedcbaC.geca VD.aceg解析:解析fun()函数是递归函数,功能是将字符指针s指向的字符串,逆序输出下标为偶数的字符,题意实参p指向的字符串中,下标为偶数的字符分别是 a(下标为0)、c(下标为2)、e(下标为4)、g(下标 为6),所以逆序输出结果为:geca,所以此题答案为 C选项.34 .有如下程序:#include vstdio.h >void conver

38、t(char ch)printf("%c",ch);if(ch < "5")convert(ch+1);main()convert("0");程序运行后的输出结果是 .(分数:1.00)A.5B.123456C.012345 VD.01234解析:解析convert()函数首先将形参ch输出,然后在ch的ASCII码小于"5"时,递归调用自身,传入 ch+1这个字符;main()函数调用convert()函数,传入字符"0",所以程序输出结果为:012345,故此题答 案为C选项.35 .

39、有以下程序:#include vstdio.h >int mm;int func(int a)static int n=3;int i;for(i=1; i <a;i+)n=n*a;return n;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 V解析:解析程序中mml全局变量,n是func()函数中的静态局部变量,所以mm值默认为0; n只有在第一次调用func()函数时定义并完成初始化,初值为 3,后

40、续每次调用func()时n的值是上一次调用结 束时的值;执行main()函数中mm=func(2)时,形参a的值为2,静态局部变量n的值为3,经过for循环, 在i取值为1时,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 vstdio.h > int fun(char *p) if(*p=0)return 0;

41、fun(p+1);putchar(*p);return 0; main() char ch="ABCD"fun(ch); 程序运行后的输出结果是 .(分数:1.00) A.DCBA VB.BCDC.ABCD D.D解析:解析fun()函数是递归函数,当形参 p指向的字符不是空字符"/0"(ASCII码为0)时,递归调用 fun(p+1),然后输出*p.由于putchar()函数在递归调用自身语句之后,函数的功能是逆序输出p指向的字符串.main()函数中,ch指向的字符串为“ ABCD ,所以程序输出结果为:DCBA故此题答案为A选项. 37.有以下程序

42、:#include vstdio.h > int fun(int x, int y)static int m=0,i=2;i+=m+1;m=i+x+y; return 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 VC.11 , 11D.11 , 5解析:解析fun()函数中定义两个静态局部变量m i ,其中m初值为0, i初值为2,由于是静态局部变

43、量,nr i只在第一次调用fun()函数时初始化,后续调用fun()函数时,m i的值沿用上一次调用后的值. main()函数中j、m k都是局部变量,作用域都只限在main()函数中,所以 main()函数中的m与fun()函数中的m属于不同的变量.由源程序可知 main()函数连续两次调用fun(1 , 1),第一次调用fun(1 , 1),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+

44、=m+1后i的值为9.执行m=i+x+y后,m的值为11,函数返回值为11.故此题答案为 B选项. 38.有以下程序:#include vstdio.h >#include vstring.h > main()char a510="efg","abcd","mnopq","hijkl","rstuvwxyz"char *p5;int i,len;for(i=4;i >=0;i-)pi=ai;len=strlen(pi);printf("%s",pi+len-

45、2);printf("%c",(pi+len-1);程序执行后的输出结果是 .(分数:1.00)A.fggcddpqqkllyzzB.yzzkllpqqcddfgg VC.yzyklkpqpcdcfgfD.fgfcdepqpklkyzy解析:解析main()函数定义一个二维字符数组a,它包含5个字符串,另外定义字符指针数组p,它包含5个字符指针元素.通过for循环,从后往前遍历a中的5个字符串,每次遍历将字符串首地址(ai)赋给数组p中下标为i的元素,然后使用strlen()库函数求得该下标为i的字符串长度,再通过printf() 函数输出该字符串最后两个字符构成的字符串(

46、pi+len-2)以及该字符串最后一个字符*(pi+len-1),所以此题输出结果为:yzz-kllpqqcddfgg .故此题答案为 B选项.39.有以下程序:#include vstdio.h >typedef struct bookchar name50;double price;BOOK;void fun(BOOK *pd,int num,int size);void main() BOOK data10="photoshop",26.8," 计算机原理,15.00,"数据结构,35.6;int n=3,m=10;fun(data,n,m)

47、;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;i <num;i+) (if(pdi.price > mx) mx=pdi.price;j=i; if(pdi.price < mn) mn=pdi.price;t=i; pdsize-2=pdj; pdsize-1=pdt;程序的运行结果是.(分数:1.00)A.数据结构,计算机原理VB.计算机原理,数据结构C.ph

48、otoshop ,计算机原理D.数据结构,photoshop解析:解析程序首先使用typedef定义一种新的类型名BOOK它包含两个数据成员:字符数组name,double类型变量price . main()函数使用BOOK!义结构体数组 data ,它包含10个BOO喽型的结构体元 素,并完成初始化,其中前3个元素使用确定的值初始化,后7个元素系统默认值初始化.函数 fun()通过for循环遍历结构体数组 pd的前num个元素,从而找出前num个元素中price成员最大的元素下标存放 到j ,找出前num个元素中price成员最小的元素下标存放到t ,然后将下标为j的元素赋给下标为size-

49、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成员为"数据结构",price最小的元素的name成员为"计算机原 理,所以程序输出结果为:数据结构,计算机原理.故此题答案为A选项.40.有以下程序: #include vstd

50、io.h > #include vstring.h > typedef struct stu char name9;char gender;int score;STU;void f(STU *a)STU c="Sun","f,90,*d=&c; a=d;strcpy(a- >name,); a- > gender=c.gender;a- > score=c.score:printf("%s,%c,%d,",a->name,a- > gender,a- >score);main(

51、)STU a="Zhao","m",85;f(&a);printf("%s,%c,%d",,a.gender,a.score);程序执行后的输出结果是 .(分数:1.00)A.Zhao , m, 85, Sun, f , 90B.Sun , f, 90, Sun, f, 90C.Sun, f, 90, Zhao, m, 85 VD.Zhao , m, 85, Zhao, m 85解析:解析程序首先使用typedef定义一种新的类型名 STU它包含3个数据成员:字符数组 name字 符变量gender和整数score

52、.main()函数使用STU定义结构体变量a并赋初值;再调用函数 f(&a),将a 的地址传入.函数f()的参数是STU类型的指针,所以形参 a是实参&a的一个拷贝,此时形参 a指向实参 a.f()函数使用STU定义结构体变量c并赋初值,同时定义了STU类型的指针变量d,初值为c的地址,然后将d的值赋给形参a,此时形参a指向c,而实参a的地址&a没有改变;接着f()函数通过逐个引用成 员变量将c的各个成员值赋给a指向的结构体变量(由于形参a指向c,赋值操作也就是c赋给自身而已), 其中使用strcpy进行字符串拷贝;实参a的地址&a没有改变,所以实参a的值也就没

53、有改变; 输出形参a 指向的结构体数据,其实也就是输出c的值.f()函数执行完后,main()函数中a的值不变,输出的值也就是实参a的值.故此题答案为 C选项.二、程序填空题(总题数:1,分数:18.00)41.以下给定程序中已建立一个带头节点的单向链表,链表中的各节点按节点数据域中的数据递增有序链接.函数fun的功能是:把形参x的值放入一个新节点并插入链表中,使插入后各节点数据域中的数据仍保持 递增有序.请在程序的下划线处填入正确的内容,使程序得出正确的结果.注意:局部源程序给出如下.不得增行或删行,也不得更改程序的结构!试题程序:#include vstdio.h > #includ

54、e vstdlib.h >#define N 8 typedef struet list int data;struet list *next;SLIST;void fun(SLIST *h,int x) SLIST *p,*q,%s;s=(SLIST *)malloe(sizeof(SLIST);/*found*/5- > data= 1;q=h;p=h- >next;while(p!=NULL&&x >p- >data) /*found*/ q= 2;p=p- next;s- next=p;/*found*/ q- next= 3;SLIST

55、*creatlist(int *a) SLIST *h,*p,*q;int i;h=p=(SLIST *)malloc(sizeof(SLIST);for(i=0;i <N;i+)q=(SLIST *)malloc(sizeof(SLIST); q- > data=ai;p- > next=q;p=q;)p- > next=0:return h;)void outlist(SLIST *h) SLIST *p;p=h- next;if(p=NULL)printf("/nThe list is NULL!/n");else printf("/nHead");do printf("->%d",p- >data);p=

温馨提示

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

评论

0/150

提交评论