admin 管理员组文章数量: 887019
2024年2月29日发(作者:python零基础到精通)
全国计算机等级考试《二级C语言程序设计》历年真题精选及详解一、选择题(请在【答题】菜单上选择【选择题】命令,启动选择题测试程序,按照题目上的内容进行答题。作答选择题时键盘被封锁,使用键盘无效,考生须使用鼠标答题。选择题部分只能进入一次,退出后不能再次进入。选择题部分不单独计时。)1.下列叙述中正确的是()。A.所有数据结构必须有根结点B.所有数据结构必须有终端结点(即叶子结点)C.只有一个根结点,且只有一个叶子结点的数据结构一定是线性结构D.没有根结点或没有叶子结点的数据结构一定是非线性结构【答案】D【解析】D项正确,线性结构的特点是:①集合中必存在“第一个元素”且惟一;②集合中必存在“最后一个元素”且惟一;③除最后一个元素外,其他数据元素均有惟一的“后继”;④除第一个元素外,其他数据元素均有惟一的“前驱”。所以没有根结点或没有叶子结点的数据结构一定是非线性结构。AB两项错误,不是所有数据结构都必须有根结点和叶子结点;C项错误,数据结构中若有中间结点不满足只有一个前件或者后件的条件,就不是线性结构。答案选择D选项。2.以下叙述中错误的是()。A.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令B.C程序经过编译、链接步骤之后才能形成一个真正可执行的二进制机器指令文件C.用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中D.C语言源程序经编译后生成后缀为.obj的目标程序【答案】A【解析】A项错误,注释语句不会被翻译成二进制的机器指令。C源程序经过C编译程序编译之后生成后缀为.obj的二进制文件(称为目标文件),然后由“链接程序”(Link)的软件把.obj文件与各种库函数连接起来生成一个后缀为.exe的可执行文件。答案选择A选项。3.C语言主要是借助以下()功能来实现程序模块化的。A.定义函数B.定义常量和外部变量C.三种基本结构语句D.丰富的数据类型【答案】A【解析】
C程序的模块化主要通过函数来实现。C语言允许对函数单独进行编译,从而可以实现模块化。答案选择A选项。4.有以下程序段:charch;intk;ch='a';k=12;printf("%c,%d,",ch,ch,k);printf("k=%dn",k);已知字符a的ASCII码十进制值为97,则执行上述程序段后输出的结果是()。A.因变量类型与格式描述符的类型不匹配输出无定值B.输出项与格式描述符个数不符,输出为零值或不定值C.a,97,12k=12D.a,97,k=12【答案】D【解析】字符变量的值是该字符的ASCII码值,可以参与整型变量所允许的任何运算。“ch='a'”,%c表示以字符格式输出ch的值,所以输出为a;%d表示以十进制代码的形式输出ch的值,为97;k没有对应的输出格式,不输出。在第二个语句中,首先输出“k=”,然后以十进制代码输出k的值,为12。答案选择D选项。5.下列叙述中正确的是()。A.栈是“先进先出”的线性表B.队列是“先进后出”的线性表C.循环队列是非线性结构D.有序线性表既可以采用顺序存储结构,也可以采用链式存储结构【答案】D【解析】有序的线性表既可采用顺序存储结构,也可以采用链式存储结构。A项错误,栈是“先进后出”的线性表;B项错误,队列是“先进先出”的线性表;C项错误,循环队列是线性结构的,有序的线性表既可采用顺序存储结构,也可采用链式存储结构。答案选择D选项。6.若要实现total=1+2+3+4+5求和,以下程序段错误的是()。A.inti=1,total=1;while(i<5){total+=i;
i+=1;}B.inti=1,total=0;while(i<=5){total+=i;i+=1;}C.inti=0,total=0;while(i<5){i+=1;total+=i;}D.inti=0,total=0;while(i<=5){total+=i;i+=1;}【答案】A【解析】A项执行过程为:i=1,total=1,判断while循环条件1<5成立,total=1+1,i=2;判断循环条件执行函数体,直到i=4,total=1+1+2+3+4,i=5;i=5循环条件不成立,退出循环,A项不能实现题目要求,错误。B项执行过程:i=1,total=0,1<=5成立,total=0+1=1,i=2;直到i=5,total=1+2+3+4+5,i=6;i=6条件不成立,退出循环,程序正确。C项执行过程:i=0,total=0,0<5成立,i=1,total=1;直到i=5,total=1+2+3+4+5;i=5条件不成立,退出循环,程序正确。D项执行过程:i=0,total=0,0<=5成立,total=0,i=1;直到i=5,total=1+2+3+4+5,i=6;i=6条件不成立,退出循环,程序正确。答案选择A选项。7.下列不属于软件工程3个要素的是()。A.工具B.过程C.方法D.环境
【答案】D【解析】软件工程是指用工程化的原则和方法来构建和维护软件,其要素包括:①方法,用于完成软件工程项目的技术手段;②工具,用于支持软件的开发、管理、文档生成;③过程,用于支持软件开发的各个环节的控制、管理。答案选择D选项。8.下面不属于黑盒测试方法的是()。A.边界值分析法B.基本路径测试C.等价类划分法D.错误推测法【答案】B【解析】常见的黑盒测试方法有:等价类划分法、边界值分析法、错误推测法以及因果图等;常见的白盒测试方法有:逻辑覆盖测试和基本路径测试。答案选择B选项。9.有三个关系R、S和T如下:则下列操作中正确的是(A.T=R∩SB.T=R∪SC.T=R×SD.T=R-S)。【答案】D【解析】图中关系R比关系S多一行T中的元组,故由关系R和S得到关系T的操作是差。答案选择D选项。10.下列选项中,不属于数据管理员(DBA)职责的是()。A.数据库维护B.数据库设计C.改善系统性能,提高系统效率D.数据类型转换【答案】D【解析】
数据库管理员对数据库进行规划、设计、维护、监视等,其主要工作有:①数据库设计,主要是对数据模式进行设计;②数据库维护,对数据库中的数据安全性、完整性、并发控制及系统恢复、数据定期转储等进行实施与维护;③改善系统性能,不断调整内部结构,提高系统效率。答案选择D选项。11.有以下程序#include 13.下列二叉树描述中,正确的是()。A.任何一棵二叉树必须有一个度为2的结点B.二叉树的度可以小于2C.非空二叉树有0个或1个根结点D.至少有2个根结点【答案】B【解析】空树度为0,斜二叉树度为1,故A项错误,B项正确。空二叉树没有结点,非空二叉树的定义中要求有且只有一个结点是该树的根结点,故C和D项错误。答案选择B选项。14.下列叙述中,不符合良好程序设计风格要求的是()。A.程序的效率第一,清晰第二B.程序的可读性好C.程序中要有必要的注释D.输入数据前要有提示信息【答案】A【解析】“清晰第一,效率第二”是当今主导的程序设计风格。对程序的要求不仅是能够运行正常,还要便于调试和维护,所以程序要具有良好的可读性,语句结构应该简单直接,这有利于程序的开发与维护。答案选择A选项。15.有以下程序#include 式“z=x++,y++,++y;”,因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式改成“(z=x++),(y++),(++y)”。然后从左向右先计算表达式z=x++,后缀自增运算先进行其他运算,再执行自增运算,所以z的值为1,x的值为2,再计算逗号表达式第二个表达式y++,此时y的值为1,y++的值为2,最后计算第三个表达式++y,y的值为3。答案选择A选项。16.设二叉树如下:则后序序列为(A.B.C.D.ABDEGCFHDBGEAFHCDGEBHFCAABCDEFGH)。【答案】C【解析】后序遍历,先访问左子树,再访问右子树,最后访问根结点。法一:本题中,树不为空,所以先后序遍历左子树,得DGEB,再后序遍历右子树,得HFC,最后访问根结点。所以该二叉树的后序序列为DGEBHFCA。法二:由后序遍历的过程知,树的根结点一定是最后遍历到,即A结点一定在遍历序列的最后,答案选择C选项。17.以下叙述中正确的是()。A.break语句不能用于提前结束for语句的本层循环B.使用break语句可以使流程跳出switch语句体C.continue语句使得整个循环终止D.在for语句中,continue与break的效果是一样的,可以互换【答案】B【解析】B项正确,break语句可以跳出switch语句和循环。A项错误,break语句在for循环内部的作用是跳出循环;C项错误,continue语句的作用是跳过本次循环体 中余下尚未执行的语句,立刻进行下一次的循环条件判定,即仅结束本次循环,并没有使整个循环终止;D项错误,continue和break的效果完全不同。答案选择B选项。18.有以下程序:#include C.3<=4‖3D.(3<4)==1【答案】B【解析】A项,先执行3+4=7,7>6,结果为真;B项,先执行3!=4为真,即为1,1>2结果为假;C项,先执行3<=4结果为真,即1,再逻辑或运算只要左边值为1,就不在执行右边运算,结果为真;D项,先执行3<4结果为真,即为1,再执行1==1,结果为真。答案选择B选项。21.有如下程序:#include 23.以下关于C语言函数参数传递方式的叙述正确的是()。A.数据只能从实参单向传递给形参B.数据可以在实参和形参之间双向传递C.数据只能从形参单向传递给实参D.C语言的函数,参数既可以从实参单向传递给形参,也可以在实参和形参之间双向传递,可视情况选择使用【答案】A【解析】数据只能由实参单向传递给形参称为“值传递”,而不能由形参传给实参,A项正确,B、C、D错误;数组名、指针等作参数,实参传递给形参的是地址值,这样形参和实参就指向同一段内存单元,在函数体内对形参数据的改变也将影响到实参。答案选择A选项。24.以下叙述中错误的是()。A.当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULLB.函数可以返回地址值C.改变函数形参的值,不会改变对应实参的值D.可以给指针变量赋一个整数作为地址值【答案】D【解析】A项正确,NULL是在头文件stdio.h中定义的符号常量;B项正确,函数的返回值可以是地址,即指针;C项正确,函数调用中形参值的变化不会传递给实参;D项错误,不能将一个整数直接赋给指针变量作为地址,只能用取地址运算符“&”把该整型变量的地址赋值给该指针变量。答案选择D选项。25.有以下程序(说明:字母A的ASCII码值是65):#include A.B.C.D.BYBTYTYE【答案】D【解析】函数只会输出ASCII码值为奇数的字母,执行fun(a)时,依次取出a[]中的字母,当取第一个字母B时,因为B的ASCII码值为66,所以不会输出B,字母Y的ASCII码值为89,字母T的ASCII码值为84,字母E的ASCII码值为69,所以最后输出字母YE。答案选择D选项。26.有以下程序:#include *q=*q+1;}程序运行后的输出结果是(A.1,3B.2,3C.1,4D.1,2)。【答案】A【解析】语句p=p+1;只改变指针p的地址,与p的内容无关,所以m值没有改变,而语句*q=*q+1;是改变该指针所指地址中的内容,所以n变为3,m不变,仍为1,答案选择A选项。28.以下函数按每行8个输出数组中的数据:voidfun(int*w,intn){inti;for(i=0;i 【答案】C【解析】C项正确,一般情况下,double类型的变量长度为8个字节,对指针进行加、减运算时,数字“1”指1个存储单元长度。A项错误,函数的形参可以是数值类型,也可以是指针类型;B项错误,C语言中有指向函数的指针,称为函数指针;D项错误,int类型的指针只能指向int,不能指向double,基类型不同的指针变量不能混用。答案选择C选项。30.设有以下定义:chars1[]="0123";chars2[]={'0','1','2','3'};则以下叙述正确的是()。A.数组s1的长度小于s2的长度B.数组s1和s2的长度相同C.数组s1的长度大于s2的长度D.数组s1和s2完全等价【答案】C【解析】字符数组s1赋值字符串"0123",字符串中字符依次放入数组中,在最后一个字符后要添加一个结束字符'0',数组s1长度为5。数组s2只需要4个单元即可放下所有初始化值,故数组长度为4。所以数组s1的长度大于s2的长度,C项正确,AB错误。两个数组等价是指两个数组长度和类型以及对应每个元素值均相同,所以s1和s2不是完全等价,D项错误。答案选择C选项。31.有以下程序(strcpy为字符串复制函数,strcat为字符串连接函数):#include 及之后的位置上的字符位置,即此时数组a中字符为a2,再执行strcat连接函数,将a中字符与c数组中第2个及之后位置上的字符连接,即为a2yz。注意,数组下标从0开始。答案选择C选项。32.以下叙述中正确的是()。A.简单递归不需要明确的结束递归的条件B.任何情况下都不能用函数名作为实参C.函数的递归调用不需要额外开销,所以效率很高D.函数既可以直接调用自己,也可以间接调用自己【答案】D【解析】D项正确,C语言中的函数可以直接或间接地自己调用自己,前者称简单递归,后者称间接递归。A项错误,递归必定要有一个明确的结束递归的条件;B项错误,递归就是把函数名作为实参的一种特殊情况;C项错误,函数的递归调用过程中,系统要为每一层调用中的变量开辟存储单元,记住每一层调用后的返回点,要增加许多额外的开销,通常会降低程序的运行效率。答案选择D选项。33.有以下函数:#include 34.有以下程序:#include #include 答案选择A选项。38.以下程序:#include 【答案】A【解析】A项正确,C语言中打开一个文件通过系统函数fopen实现,通过这个函数把程序中要读、写的文件与磁盘上实际的数据文件联系起来;B项错误,函数调用中缺少参数“操作方法”,其调用的一般形式为:文件指针名=fopen(文件名,使用文件方式);;C项错误,fopen函数返回一个指向指定文件的文件指针,如果不能实现打开指定文件的操作,则返回一个空指针NULL;D项错误,fopen函数的返回值必须赋给一个文件类型的指针变量。答案选择A选项。二、程序填空题1.请补充fun函数,该函数的功能是:计算N×N维矩阵元素的方差,结果由函数返回。维数在主函数中输入。例如:的计算结果是14.414。求方差的公式为:其中注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。/**********code.c**********/#include doublesd=0.0;for(i=0;i ③sqrt(f)【解析】根据题目中的方差公式,先要计算矩阵元素的平均值,再求矩阵元素与平均值差的平方的平均值,最后调用库函数求方差。填空1:根据函数中各变量的使用情况及实参的类型,这里应该是对二维数组a的定义,因为二维数组做形参,可以省略第一维的长度,但不能省略第二维的长度,所以此处应填inta[][N]。填空2:这里求矩阵元素的平均值,注意元素的个数应该是n*n。填空3:此处应该调用库函数sqrt()求平方根。三、程序改错题1.请根据以下各小题的要求设计C应用程序(包括界面和代码)。下列给定程序中,函数fun()的功能是:将n个无序整数从小到大排序。请改正程序指定部位的错误,使它能得到正确结果。注意:不要改动函数main(),不得增行或删行,也不得更改程序的结构。/**********code.c**********/#include }printf("n");}voidmain(){intaa[20]={9,3,0,4,1,2,5,6,8,10,7},n=11;printf("nnBeforesorting%dnumbers:n",n);putarr(n,aa);fun(n,aa);printf("nAftersorting%dnumbers:n",n);putarr(n,aa);}/**********-code.c**********/【答案】(1)错误:for(i=j+1;i }intmain(){inta,b;longc;printf("Inputab:");scanf("%d%d",&a,&b);fun(a,b,&c);printf("Theresultis:%ldn",c);}/**********-code.c**********/【答案】voidfun(inta,intb,long*c){*c=a%10+(b%10)*10+(a/10)*100+(b/10)*1000;}【解析】本题的主要问题是如何取出a和b的个位数和十位数,取出后如何表示成c中相应的位数。由于a和b都是只有两位的整数,所以分别对它们除10可得到它们的十位数,分别用10对它们求余可得到它们的个位数。得到后对应乘以1000、100、10、1就可得到c的千位数、百位数、十位数和个位数。注意:使用c时要进行指针运算。
版权声明:本文标题:全国计算机等级考试《二级C语言程序设计》历年真题精选及详解_ 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1709187850h539709.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论