文档介绍:该【计算机C语言二级真题及答案 】是由【青山代下】上传分享,文档一共【14】页,该文档可以免费在线阅读,需要了解更多关于【计算机C语言二级真题及答案 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:..C计算机语言二级真题及答案一、选择题(请在【答题】菜单上选择【选择题】命令,启动选择题测试程序,一、选择题(请在【答题】菜单上选择【选择题】命令,启动选择题测试程序,按照题目上的内容进行答题。作答选择题时键盘被封锁,使用键盘无效,考生须使用鼠标答题。选择题部分只能进入一次,退出后不能再次进入。选择题部分不单独计时。)1、设有定义:doublex=;,以下不能完整输出变量x值的语句是( )。A..B..C..D..『正确答案』A『答案解析』printf函数控制字符%f输出float类型,%lf输出double类型。格式控制%,表示数据输出总的宽度为m位,其中小数部分占n位。当数据的小数位多于指定宽度n时,截去右边多余的小数,并对截去的第一位小数做四舍五入处理;而当数据的小数位少于指定宽度n时,在小数的右边补零;当m小于有效位数时,整数部分输出所有有效数字并且自动对齐,小数部分按照n指定位数输出。A项按照float格式输出数据,宽度为5位,保留小数0位,输出为2,不能完整输出x。B项按照float格式输出数据,。C项按照double格式输出数据,。D项按照float格式输出数据,保留小数位数为5,。答案选择A选项。2、若有定义语句:doublea,*p=&a;以下叙述中错误的是( )。***p=&a把变量a的地址作为初值赋给指针变量p『正确答案』C『答案解析』C项错误,只有取指针变量的值时,星号*才是间址运算符,引用指针指向的存储单元。A项正确,p是double类型的指针,只能存放double类型的地址;B项正确,定义指针变量时,星号*是一个说明符,用来说明该变量是指针变量;D项正确,“&”是求地址运算符,*p=&a用来求出double变量a的地址赋给指针变量p,而使p指向a。答案选择C选项。3、以下叙述中正确的是( )。,可以定义局部嵌套函数『正确答案』C『答案解析』一个C程序可以有一个或多个程序文件,所以也可以有一个或多个函数,选项C正确;除了main函数不能被其他函数调用之外,用户自定义函数可以调用其他任意函数,包括库函数和用户自定义函数,选项B错误;函数是一个独立的模块,不同函数之间的定义相互没有影响,所以标识符可以相同,选项A错误;函数体内部只可以调用但是不可以定义其他函数,选项D错误;答案选择C选项。4、有以下程序:..#include<>main(){ inta,b; for(a=0;a<3;a++) { switch(b) { } }}执行时输入:123<回车>,则输出结果是( )。,3,3,4,5,6,,3,4,,2,3,4,4,4,,3,4,3,4,4,『正确答案』A『答案解析』考查C语言中的switch-case语句。执行switch-case语句时,一定会先进行匹配,匹配成功则执行当前case语句,再根据是否有break,判断是否继续输出,或是跳出判断。程序中输入1时,与case1匹配成功,执行后面的输出语句,输出2,且此时b=2,因为后面没有break语句,继续执行下一条输出语句,输出3。继续输入2时,与case2匹配成功,执行后面的输出语句,输出3。输入3时,没有可匹配的case语句,执行default语句,输出4,b变为4;后面没有break语句,继续执行case1后的输出语句,输出5,b变为5;同理继续执行case2后面的输出语句,输出6。答案选择A选项。5、有以下程序#include<>main(){ intx=1,y=0; if(!x)y++; elseif(x==0) if(x)y+=2; elsey+=3; }程序运行后的输出结果是( )。『正确答案』A『答案解析』在该题中,选择结构的表达式都不成立,所以整个选择语句都没有执行,y值没有发生改变,答案选择A选项。6、若有定义:chars[30]={0};运行时输入:Thisisastring.<回车>则以下不能正确读入整个字符串:( )。A..:..(s);(i=0;(c=getchar())!='';i++)s[i]=c;=0;while((c=getchar())!='')s[i++]=c;『正确答案』A『答案解析』scanf函数用格式控制符%s读取字符串时,不能接受空格、制表符Tab、回车。即在读入Thisisastring时,读到第一个空格时结束。最后s中的内容是This。答案选择A选项。7、若有定义语句:inta=3,b=2,c=1;以下选项中错误的赋值表达式是( )。=(b=4)+c;=b=c+1;=(b=4)=3;=1+(b=c=4);『正确答案』C『答案解析』对于赋值表达式来说,赋值号“=”的左边一定为变量名,右边为一个C语言合法的表达式。A项,等价于语句“b=4;a=b+c=5;”;B项,等价于语句“c=1;b=c+1=2;a=b=2;”;D项,等价于语句“c=4;b=c=4;a=1+b=5;”。答案选择C选项。8、以下叙述中正确的是( )。::,,其中是必须的。,并且最后一个元素必须是字符『正确答案』C『答案解析』通过赋初值的方式把一个字符串赋给字符数组必须要在字符串的末尾加上结束标识符,没有的不能判定该字符数组存放的是字符串,选项C正确;用字符数组存放字符串的时候,字符数组的元素个数至少要比存放的字符串长度要多1,因为结束标识符也会被写入到字符数组中,选项B错误;C语言中没有字符串类型,选项A错误;字符数组的最后一个元素不一定为为字符,只有存放字符串的时候才会在末尾加上字符,只有存放字符串的时候才会在末尾加上字符,选项D错误,答案选择C选项。9、若有定义:chars[30]={0};运行时输入:Thisisastring.<回车>则以下不能正确读入整个字符串:( )。A..(s);(i=0;(c=getchar())!='';i++)s[i]=c;=0;while((c=getchar())!='')s[i++]=c;『正确答案』A『答案解析』scanf函数用格式控制符%s读取字符串时,不能接受空格、制表符Tab、回车。即在读入Thisisastring时,读到第一个空格时结束。最后s中的内容是This。答案选择A选项。10、以下叙述中正确的是( )。:..、while、do-,,如果不进行缩进形式书写代码,『正确答案』A『答案解析』C语言中,循环嵌套可以多层,选项B错;循环嵌套时建议采用缩进形式书写,这是为了增加代码的可读性,但是不会产生编译错误,选项C错误;for语句的圆括号内的三个表达式在语法上都可以省略,但是两个分号“;”不能省略,选项D错;选项A的表述正确,答案选择A选项。11、以下叙述中正确的是( )。,预处理命令行都以“#”.#include<>『正确答案』A『答案解析』“编译预处理”就是在C编译程序对C源程序进行编译前,由编译预处理程序对这些编译预处理命令行进行处理的过程。A项正确,在C语言中,凡是以“#”号开头的行,都称为“编译预处理”命令行。B项错误,预处理命令行可以出现在程序的任何一行的开始部位,其作用一直持续到源文件的末尾;C项错误,#include<>可以出现在程序的任意一行的开始部位;D项错误,预处理可以实现宏定义、条件编译和文件包含。答案选择A选项。12、若要使用C数学库中的sin函数,需要在源程序的头部加上#include<>关于引用数学库,以下叙述正确的是( )。,,,说明sin函数的参数个数和类型,,『正确答案』C『答案解析』考查文件包含处理。文件包含命令的功能是把指定的文件添加到预处理部分,从而把指定的文件和当前的源程序文件连接起来,该文件则包含了程序要调用的函数的声明。由此,选项A、B、D表述错误。答案选择C选项。13、下面结构体的定义语句中,错误的是( )。{intx;inty;intz;}structorda;{intx;inty;intz;};structorda;{intx;inty;intz;}a;{intx;inty;intz;}a;『正确答案』A『答案解析』C语言中结构体变量的定义有三种方法:①定义结构体类型的同时定义结构体变量,如C项;②使用无名结构体类型定义结构体变量,如D项;③先定义结构体类型,后定义结构体变量,如B项,A项错在分别定义结构体类型与结构体变量时需要用“;”隔开。故答案选择A选项。14、有以下程序#include<>intk=5;voidf(int*s){ s=&k;:..}main(){ intm=3,*p=&m; f(p); }程序的运行结果是( )。,,,,3『正确答案』A『答案解析』考查函数传参。C语言中,数据只能从实参单向传递给形参,指针作为函数参数时,形参仍然作为实参的副本被赋值,形参指针变量的指向改变不能影响实参指针变量的指向。结果不变,答案选择A选项。15、一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈f顺序是( )。『正确答案』B『答案解析』栈是按照“先进后出”的原则组织数据的,入栈的顺序为12345ABCDE,则依次出栈的顺序应为其逆序,即EDCBA54321。答案选择B选项。16、以下数组定义中错误的是( )。[2][3]={1,2,3,4,5,6};[][3]={0};[][3]={{1,2,3},{4,5,6}};[2][3]={{1,2},{3,4},{5,6}};『正确答案』D『答案解析』A项正确,在给二维数组赋初值时可以不用行花括号对;B项正确,对于二维数组,第一维的大小可以省略,计算规则是元素的个数除以第二维的大小向上取整,定义1行3列的数组,里面的元素全部是零;C项正确,第一维的大小由所赋初值的行数来决定,定义2行3列的数组;D项错误,应该是x[3][2]。答案选择D选项。17、若要使用C数学库中的sin函数,需要在源程序的头部加上#include<>关于引用数学库,以下叙述正确的是( )。,,,说明sin函数的参数个数和类型,,『正确答案』C『答案解析』考查文件包含处理。文件包含命令的功能是把指定的文件添加到预处理部分,从而把指定的文件和当前的源程序文件连接起来,该文件则包含了程序要调用的函数的声明。由此,选项A、B、D表述错误。答案选择C选项。18、若要使用C数学库中的sin函数,需要在源程序的头部加上:..18、若要使用C数学库中的sin函数,需要在源程序的头部加上#include<>关于引用数学库,以下叙述正确的是( )。,,,说明sin函数的参数个数和类型,,『正确答案』C『答案解析』考查文件包含处理。文件包含命令的功能是把指定的文件添加到预处理部分,从而把指定的文件和当前的源程序文件连接起来,该文件则包含了程序要调用的函数的声明。由此,选项A、B、D表述错误。答案选择C选项。19、设有定义:inta,b;floatx,y;则以下选项中对语句所作的注释叙述错误的是( )。A.. /*多余的输入项不能获得输入数据*/B.. /*多余的格式符%f完全不起作用*/C.. /*输入项与格式符类型不匹配,变量b和x得不到正确的输入数据*/D.. /*格式串中允许加入格式符以外的字符串*/『正确答案』B『答案解析』A项由于scanf只接收两个数据,所以变量x得不到赋值,注释正确。B项中%f是起作用的,程序从键盘正确的读入前两个数据并且保存在指定的地址,读入第三个数据后,将其放入缓冲区,然后寻找应该存放的地址,因为没有找到,程序会发生错误而中断,注释错误。C项scanf会按照float类型读取输入的第二个数据并且保存为int类型,由于两种类型的存储形式与所占内存单元均不同,b得不到正确的赋值,注释正确。D项在使用scanf函数时,如果除了格式说明字符和附加格式字符外,还有其他字符,则在输入数据时要求按一一对应的位置原样输入这些字符,注释正确。答案选择B选项。20、软件生命周期是指( )。、实现、、设计、『正确答案』A『答案解析』软件生命周期是指软件产品从提出、实现、使用、维护到停止使用、退役的过程。答案选择A选项。21、若有C语言表达式2+3*4+7/3,以下选项中叙述正确的执行顺序是( )。*4得12,再执行2+12得14,再执行7/3得2,最后执行14+*4得12,再执行7/,最后执行2+12+,再执行3*4得12,再执行12+2得14,最后执行2++3得5,再执行5*4得20,再执行20+7得27,最后执行27/3得9『正确答案』A『答案解析』C语言表达式的的执行顺序是从左向右,在表达式求值时,按照运算符的优先级别从高到低执行,答案选择A选项。22、有以下程序(字母A的ASCII代码为65)#include<>main(){ charc1='A',c2='Y'; :..}程序运行后的输出结果是( )。,,,,89『正确答案』D『答案解析』考查字符型数据。字符常量与其ASCII码值一一对应,在计算的时候,一般是字符数据对应的ASCII码参与运算,输出时会根据格式控制符输出对应的字符或者ASCII码。程序中%d表示以十进制整数形式输出c1,c2,对应的ASCII码为65和89。答案选择D选项。23、关于“do{循环体}while(条件表达式)”,以下叙述正确的是( )。『正确答案』D『答案解析』考查do-while循环语句。其执行过程为:先执行do循环体语句,然后判定圆括号内的表达式,如果为真则继续执行do循环体语句,如果为假则结束循环。考虑情况一:即由于条件表达式为假而退出循环,此时二者执行次数一样;情况二:即在循环体中执行了break语句而退出循环,此时条件表达式的执行次数比循环体的执行次数少一次。因此,答案选择D选项。24、以下叙述中正确的是( )。,预处理命令行都以“#”.#include<>『正确答案』A『答案解析』“编译预处理”就是在C编译程序对C源程序进行编译前,由编译预处理程序对这些编译预处理命令行进行处理的过程。A项正确,在C语言中,凡是以“#”号开头的行,都称为“编译预处理”命令行。B项错误,预处理命令行可以出现在程序的任何一行的开始部位,其作用一直持续到源文件的末尾;C项错误,#include<>可以出现在程序的任意一行的开始部位;D项错误,预处理可以实现宏定义、条件编译和文件包含。答案选择A选项。25、设p是指针变量,语句p=NULL;等价于( )。='0';='';C..=0;『正确答案』D『答案解析』考查指针变量。p=NULL表示给指针p赋以空指针,NULL为一个符号常量,代表整数0,答案选择D选项。26、以下叙述中正确的是( )。=NULL;执行后,(&)=NULL;*p1;int**p2;int*p3;都是合法的定义指针变量的语句:..『正确答案』D『答案解析』考查指针变量。指针变量的定义形式为:类型名*指针变量名,表示指向某一个变量的指针,如果定义形式为:类型名**指针变量名,则表示指向某一个指针变量的指针,所以D正确。p=NULL;是将空指针赋给指针变量,表示该指针变量当前未指向任何变量,选项A错误。指针变量本身存储的是其指向的变量的地址值,不需要使用求地址运算符(&)来获得地址,选项B错。语句本身不正确,两者不等,语句p=NULL和p=0是一样的,故选项C错。答案选择D选项。27、程序测试的目的是( )。『正确答案』C『答案解析』程序测试是使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别,即为发现错误而执行程序的过程,而不是改正错误,调试是在测试的基础上去改正错误。答案选择C选项。28、C语言主要是借助以下哪种手段来实现程序模块化?( )『正确答案』B『答案解析』C程序的模块化主要通过函数来实现。C语言允许对函数单独进行编译,从而可以实现模块化。答案选择B选项。29、有以下程序段intm=33,n=66;m=m^n;n=n^m;m=m^n;执行上述语句后,m和n的值分别是( )。=66,n==33,n==66,n==33,n=33『正确答案』A『答案解析』^为按位异或运算,是双目运算符,参与运算的两个二进制位相同,则结果的该位为0;参与运算的两个二进制位不同,则结果的该位为1。首先将m和n表示成对应的二进制,33=00100001B,66=01000010B,执行m=m^n,得m=00100001^01000010=01100011B;执行n=n^m,得n=01000010^01100011=00100001B=33;执行m=m^n,得m=01100011^00100001=01000010B=66;因此语句实现了m和n的交换。答案选择A选项。30、若有定义语句:intx=10;则表达式x-=x+x的值为( )。.-.-10:..『正确答案』D『答案解析』单目加运算符优先级高于赋值运算符,所以先做x+x结果为20,再做x-20,结果为-10,然后赋值给x。所以答案选择D选项。31、以下叙述中正确的是( )。,,『正确答案』B『答案解析』调用函数的时候只有保证调用语句的函数名和被调函数的函数名、参数列表一致才能保证调用的正确性,B正确。C语言对大小写敏感,选项A错。用户自定义的函数名需要遵循用户标识符的命名规则,由字母、数字、下划线组成并且第一个字符不能为数字,选项C错。一个函数每次只能使用一个return语句,但是该函数体中可以有多个返回点,也就是有多条return语句,每次只从其中一点返回,选项D错。答案选择B选项。32、在数据库中,数据模型包括数据结构、数据操作和( )。『正确答案』A『答案解析』在数据库系统中的数据模型有三个要素:数据结构、数据操作和数据的约束条件。答案选择A选项。33、若有定义:inta=0,b=0,c=0,d=0;有C语言表达式(a++&&b++)?c++:d++,以下关于其执行顺序的叙述正确是( )。++,表达式a++的值为0,由此即可确定(a++&&b++)值为0,因此执行d++++,表达式a++的值为0;再执行b++,表达式b++的值为0,由此可确定(a++&&b++)值为0,因此执行d++++,表达式a++的值为1;再执行b++,表达式b++的值为1,由此可确定(a++&&b++)值为1,因此执行c++++,表达式b++的值为1;再执行a++,表达式a++的值为1,由此可确定(a++&&b++)值为1,因此执行c++『正确答案』A『答案解析』把握前置运算和后置运算的基本运算规则。表达式1?表达式2:表达式3,若表达式1为真,则执行表达式2,否则执行表达式3。逻辑与运算符遵循“短路求值”策略,即在进行求值时,只要最终的结果已经可以确定是假,求值过程便告终止,表达式(a++&&b++)中,左操作数a++的值为0,已经可以确定整个逻辑表达式的结果为0,因此右操作数b++不再求解,直接执行表达式3,即d++,答案选择A选项。34、一名工作人员可以使用多台计算机,而一台计算机可被多名工作人员使用,则实体工作人员与实体计算机之间的联系是( )。『正确答案』C:..一名工作人员可以操作多台计算机,而一台计算机又可以被多名工作人员使用,所以两个实体之间是多对多的关系,答案选择选项。35、有以下程序#include<>main(){ inta,b; for(a=0;a<3;a++) { switch(b) { } }}执行时输入:123<回车>,则输出结果是( )。,3,3,4,5,6,,3,4,,2,3,4,4,4,,3,4,3,4,4,『正确答案』A『答案解析』考查C语言中的switch-case语句。执行switch-case语句时,一定会先进行匹配,匹配成功则执行当前case语句,再根据是否有break,判断是否继续输出,或是跳出判断。程序中输入1时,与case1匹配成功,执行后面的输出语句,输出2,且此时b=2,因为后面没有break语句,继续执行下一条输出语句,输出3。继续输入2时,与case2匹配成功,执行后面的输出语句,输出3。输入3时,没有可匹配的case语句,执行default语句,输出4,b变为4;后面没有break语句,继续执行case1后的输出语句,输出5,b变为5;同理继续执行case2后面的输出语句,输出6。答案选择A选项。36、设有如下语句typedefstructDate{ intyear; intmonth; intday;}DATE;则以下叙述中错误的是( )。『正确答案』C『答案解析』C语言允许用typedef说明一种新类型名,其一般形式如下:typedef类型名新类型名;,题目中定义了新类型Date,这种类型变量包含3个成员,DATE是这种新类型的名字,不是结构体变量,A项正确,C项错误。structDate是用户定义的结构体类型,B项正确。struct是结构体类型的关键字,D项正确。答案选择C选项。37、以下叙述中正确的是( )。、选择结构、-S流程图只能描述简单的顺序结构的程序:..计算机可以直接处理C语言程序,不必进行任何转换『正确答案』B『答案解析』程序的算法可以用流程图、程序语句、伪代码和流程图以及文字进行描述,选项A错误;N-S能完整描述程序的所有结构,不仅仅包括简单的顺序结构,选项C错误;C语言的源文件需要经过编译、链接生成可执行文件后才可以被计算机执行,选项D错误;循环结构、选择结构、顺序结构是结构化程序的三种基本结构,答案选择B选项。38、以下程序中给数组所有元素输入数据,请从选项中选择正确的答案填入下划线处。( )#include<>main(){ inta[10],i=0; …}A.&a[i+1]+(i++)+iD.&a(i++)『正确答案』B『答案解析』A项错误,进入死循环,i一直为0,一直对a[i+1]读入数据;B项正确,a为数组首地址,i++先取i值再加1,scanf读入的数据依次存放在数组a中;C项错误,控制变量i没有依次加1,无法结束循环,也无法对整个数组赋值;D项错误,数组元素引用为[],不是()。答案选择B选项。39、有以下程序#include<>intk=5;voidf(int*s){ s=&k; *s=7;}main(){ intm=3; f(&m); }程序运行后的输出结果是( )。,,,,5『正确答案』A『答案解析』函数f的功能是定义一个整型的指针变量s,指向全局变量k,然后修改s指向地址中的值为7,因此f函数只是修改全局变量k的值为7,与main函数中临时变量m无关,因此最后输出为3,7。答案选择A选项。40、若有定义语句:、若有定义语句:则strlen(s)的值是( )。:..『正确答案』C『答案解析』C语言规定以字符作为字符串结束的标识符。strlen函数返回的是字符串的长度,不包含字符,所以值是7。答案选择C选项。二、程序填空题1、人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:。 不得增行或删行,也不得更改程序的结构!/********************/#include<>#include<>#defineN8typedefstruct{ charnum[10]; intyear,month,day;}STU;/**********f