2017年计算机二级C语言考前必做试题及答案8

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/09 17:08:13 计算机等级考试
2017年计算机二级C语言考前必做试题及答案8
2017年计算机二级C语言考前必做试题及答案8计算机等级考试

  (21)以下程序拟实现计算s=1+2*2+3*3+…+n*n+…,直到s>1000为止。

  2016年计算机二级C语言考前30天通关必做题(7)

  程序运行后,不能得到正确结果,以下修改方案正确的是( )。

  A.把while(s>lOOO);改为while(s<=1000);

  B.把s=1;改为s=0;

  C.把n=1;改为n=0;

  D.把n=n+1;改为n=n$n;

  (22)有以下程序:“

  2016年计算机二级C语言考前30天通关必做题(7)

  J

  则以下函数调用语句错误的是( )。.

  k=f(a,B.;

  B.k=add(a,B.;

  C.k=(*f)(a,B.;

  D.k={f(a,B.;

  (24)若有定义语句:

  2016年计算机二级C语言考前30天通关必做题(7)

  正确的输入语句是( )。

  scanf(”%lf%If'’,X,Y);

  B.scanf(”%f%f¨敝,曲);

  C.scanf(”%f%f¨,X,y);

  D.scanf(”%lf%le”,px,PY);

  (25)以下定义数组的语句中错误的是( )。

  A.int num[][3]={{1,2},3,4,5,6};

  B.int nUITI[2][4]={{1,2},{3,4},{5,6}};

  C.int num[]={1,2,3,4,5,6};

  D.int num[][4]={1,2,3,4,5,6’};

  (26)有以下程序:

  2016年计算机二级C语言考前30天通关必做题(7)

  (27)有以下程序:

  2016年计算机二级C语言考前30天通关必做题(7)

  ,

  程序运行后的输出结果是( )。

  A.10

  B.16

  C.6

  D.12

  (28)有以下程序:

  2016年计算机二级C语言考前30天通关必做题(7)

  程序运行后的输出结果是( )。

  A.1

  B.2

  C.3

  D.O

  (29)函数fun的功能是在a所指的具有n个元素的数组中查找最大值并返回给调用函数,函数不完整。

  2016年计算机二级C语言考前30天通关必做题(7)

  在if语句下划线处应填人的选项是( )。

  A.O>sB.* P>*sC.a[p]>a[s]D.p—a>P—s

  (30)有以下程序:

  2016年计算机二级C语言考前30天通关必做题(7)

  程序运行后的输出结果是( )。

  A.10,One{Drealn!

  B.9,One*Drealll!

  C.9,One*World

  D.10,One*World

  (31)有以下程序:

  2016年计算机二级C语言考前30天通关必做题(7)

  程序运行后的输出结果是( )。

  A.Beijing!

  B.toBeijing]

  C.WelcomeyoutoBeijingI

  D.youtoBeijingI

  (32)有以下程序:

  2016年计算机二级C语言考前30天通关必做题(7)

  程序运行后的输出结果是( )。

  A.3,5,B.3,6,C.3,7,D.0,3,

  (33)有以下程序:

  2016年计算机二级C语言考前30天通关必做题(7)

  程序运行后的输出结果是( )。

  A.2

  B.1C.3 D.O

  (34)有以下程序:

  2016年计算机二级C语言考前30天通关必做题(7)

  程序运行后的输出结果是( )。

  A.4,5,2,4,1,3,

  B.4,4,2,2,1,1,

  C.5,5,3,3,2,2,

  D.4,4,2,2,1,3

  (35)以下与存储类别有关的四组说明符中,全部属于静态类的一组是( )。

  A.extem和static

  B.aut0和static

  C.register和static

  D.register和ex[erll

  (36)为了建立如图所示的存储结构(即每个结点含两个域,data是数据域,next是指向结点的指针域)则在

  ( )处填入的选项是( )。*struetlink{ehardata;( )node;

  A.struetlink*next;

  B.linknext;

  C.link$next;

  D.struetlinknext;

  2016年计算机二级C语言考前30天通关必做题(7)

  程序运行后的输出结果是( )。

  A.Qian,f,350,Sun,f,350

  B.Qiamf,350,Qian,f,350

  C.Qian,f,350,Sun,m,370

  D.Zha0,m,290,Sun,m,370

  (38)有以下程序:

  2016年计算机二级C语言考前30天通关必做题(7)

  程序运行后的输出结果是( )。

  A.5

  B.1

  C.20

  D.18

  (39)以下叙述正确的是( )。

  A.表达式sizeof(FILE*)==sizeof(int*)的值为真

  B.文件指针的值是一个整数,它的值一定小于文件字节数

  C.文件指针的值是所指文件的当前读取位置

  D.使用fscanf函数可以向任意类型的文件中写入任意数量的字符

  40.函数fgetc的功能是从指定文件中读入一个字符,以下与其功能完全相同的函数是( )。

  A.fread

  B.fscanf

  C.fgets

  D.getc

 

|||

  (21)A【解析】题目中程序不能实现预期功能是因为while的循环条件错误,在选项B中,把s=1,改为s=0,最终的结果s=4,与题目原意不同;在选项C中,把n=1;改为n=0;最终的结果s=2,与题目原意不同;在选项D中,把n=n+1;改为n=11 s13;最终的结果s=2,与题目原意不同;选项A,正确的修改了while循环条件,可以得到正确结果。故答案为A选项。

  (22)B【解析】题目使用更相减损术求最大公约数,其思想:l、任意给定两个正整数,判断它们是否都是偶数。若是,则用2约简,若不是则执行第二步。2、以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。因此。故答案为B选项。

  (23)D【解析】s与()的优先级,()的优先级高于*,因为(+f)()定义函数指针f。f指向函数的指针。f=add,将函数8dd()的首地址赋给指针f,所以调用函数add()可以写为f(),其返回值是整型,不是指针类型,不能用t取指针指向的内存单元的数据,故k=*f(a,b)的调用方式错误。答案为D选项。

  (24)D【解析】%1f,%le是针对double类型的数据,如果仅甩%f,输入的数据可能不能被完全接收,数据的精度可能不足。%f主要针对float类型的变量输入,选项8错误。根据瓣Hlf(格式,变量地址),选项A,C错误。故答案为D选项。

  (25)B【解析】选项8中,int Irlllm[2][4]={{1,2},

  {3,4},{5,6}};定义数组是2行4列,但是初始化的结构是3行2列,因此初始化错误。故答案为B选项。

  (26)C【解析】flm()函数作用冒泡法排序,fla9控制升序(0)或者降序(1)。n为参与排序的元素个数。a为数组的起始地址。因此,flm(a,4,1),数组的前四个降序排序,fun(a+4,6,O)对数组的第四项后六个元素进行升序排序。故结果为10,9,8,7,1,2,3,4,5,6。答案为C选项。

  (27)D1解析】第一个for循环作用是对数组8赋初值,从0~9,第二个缸循环是计算数组前4项的a[i]+i的和。0+0,1+1,2+2,3+3,经计算的结果为l2,因此答案为D选项。

  (28)C【解析】new—div()的返回值是int类型,因此,a/b+0.5(其中a,b均为double类型)的小数部分被将被截断。经计算,7.8/3.1+0.5=2.516+0.5=3.016,故打印的结果为3。故答案为C选项。

  (29)B【解析】函数fun的功能是在形参a所指的具有n个元素的数组中查找最大值并返回。通过for循环比较,s始终指向最大值的那个元素。取指针的值,使用+P,因此比较使用·P和}8,需要找到最大值,当}8<+P时,修改指针s的指向,因此答案为B选项。

  (30)A【解析】函数strlen(char·s);计算字符串s的长度,不包括’、0’在内;P指向数组的第二个元素,因此strlen(p)=10,并打印,故答案为A选项。

  (31)A【解析】for循环的作用是每次遇到空格,将空格后面的移动到数组的最前面。因此数组最后的状态是“Bei-jing!、Og!\0ng!、neijing!、O”,但是pfinff(“%s”)打印遇到、0自动结束。因此,打印Beijing!。故答案为A选项。

  (32)A【解析】static静态变量只在声明时初始化一次。因此,第一次调用函数f(k=O),此时n…nlk 0,经过自增操作n=1,m=1,k=1,返回值为3,第二次调用函数f(k=1),此时n=1,k=1,m=0,经过白增操作,n=2,k=2,m=1,返回值为5。故最终结果为3,5。故答案为A选项。

  (33)B【解析】局部变量覆盖全局变量,但是全局变量的声明周期还存在。f()函数调用完成后,由于m为全局变量,被修改为32,即函数的返回值32,此时m=32/12,第二次调用f(a,b),函数的返回值为3,此时m=2,故输出为1。所以答案为B选项。

  (34)A【解析】sizeof()是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。strlen(·char)函数,要在运行时才能计算,参数必须是字符型指针(char·),当数组名作为参数传人时,实际上数组就退化成指针了,它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL,返回的长度大小不包括NULL。sizeof(a)求数组a所占空间的大小,包括字符串最后的’、0’,所以sizeof(a)=5,strlen()遇到’、0’就结束,strlen(a)=4。strlen(b)是指针指向的字符串长度,sizeof(b)是指针的大小。strlen(c)是字符串的长度,sizeof(c)是数组的长度。因此,输出4,5,2,4,l,3。故答案为A选项。

  (35)A【解析】aut0用于声明变量的生存期为自动,即

  将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字通常会被省略,因为所有的变量默认就是aut0的。

  register定义的变量告诉编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。

  static变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。当static用来修饰全局变量时,它就改变了全局变量的作用域。extern限制在了当前文件里,但是没有改变其存放位置,还是在全局静态储存区。extem外部声明,该变量在其他地方有被定义过。因此,答案为A选项。

  (36)A【解析】存储结构用链式存储。链式结构每个节点有个指针域,指针域指向下一个链式结构的节点,因此指针域的结构应该是该结构形式,因此应定义为struct link}next,故答案为A选项。struct是结构体的说明符,不能省略。

  (37)A【解析】c语言函数参数传递大致分为:1、值传递过程中。被调函数的形参作为被调函数的局部变量处理,即在内存的堆栈中开辟空间以存放由主调函数放进来的实参的值,从而成为了实参的一个拷贝。值传递的特点是被调函数对形参的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。

  2、地址传递过程中,被调函数的形参虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。结构体中nanle是数组,做实参传递,会退化为指针,因此调用f(),b.nanle发生修改,其他的成员,传递的是拷贝,不会被修改。因此输出Sun,f,350。故答案为A选项。

  (38)C【解析】“运算符为按位异或运算符,即0^1=1,l“0=1,l‘l=0,0"0=0,因此a^b=101在进行<<操作,变为101002=2010,因此答案为c选项。

  (39)A【解析】slzeof(FILE})=4,因为file·为指针,指针的大小4,sizeof(int·)=4,理由同前面。文件指针的值是地址,是一个l6进制的数,它的值不一定小于文件字节数,因此选项8错误。文件指针是所指文件的当前读取位置,而不是文件指针的值因此选项C错误。mgscanf(FILE-stream,constchar}format,[argument…]fmanf函数可以向任意类型的文件,写入任意数量不能超过系统的缓冲区,写文件先写入缓冲区,最后一起写入文件,因此选项D错误。答案为A选项。

  40)D 【解析】fgets读取一个长度为(n一1)的字符串,frea按照指定的长度读取数据项,对应2进制的打开方式,fs—canf按指定格式读,对应文本打开方式,9etc从指定的文件读* a=0;//初始化a字符统计的个数* c=0;//初始化C字符统计的个数for(i=0;i(M;i+十1,,行

  {

  \for(j=0;j

  if(t[i][j]一·A-)//字符是a,计数

  (*a)++;

  if(t[i][j]一-C-)//字符是C,计数

  (*c)++

  【考点分析】

  主要考察考生对多重循环的理解与使用,以及字符串的比较。

  【解题思路】

  对二维数组的行列分别循环,行优先,查找数组中元素为A或者C,分别对其进行计数。

计算机等级考试