您现在的位置: 华盟网 >> 培训 >> 计算机等级考试 >> 计算机等级考试二级 >> 正文

[组图]二级C语言最新章节练习题(2)

2015/11/10 作者:不详 来源: 网络收集
导读 选择题:  1若有以下程序     则程序的输出结果是  A.Zhao,m,290,Zhao,f,350  B.Zhao,m,290,Qian,f,350  C…

  选择题:

  1若有以下程序

  

  则程序的输出结果是

  A.Zhao,m,290,Zhao,f,350

  B.Zhao,m,290,Qian,f,350

  C.Qian,f,350,Qian,f,350

  D.Qian,m,290,Qian,f,350

  参考答案:D

  参考解析:本题中考查结构体中变量的引用,a结构体中Flame被修改为Qian,所以本题答案为D。

  2以下叙述中正确的是

  A.如果函数带有参数,就不能调用自己

  B.所有函数均不能接受函数名作为实参传入

  C.函数体中的语句不能出现对自己的调用

  D.函数名代表该函数的入口地址

  参考答案:B

  参考解析:本题考查函数调用相关知识,B选项中函数可以接受函数名作为实参传人,引用函数名也是指针,C、A选项是错误的,因为递归函数就能调用自己。

  3若有以下程序

  

  则程序的输出结果是

  A.6B.18C.10D.24

  参考答案:D

  参考解析:第一次h循环。n的值为0,所以从default后面的语句开始执行,s+=4,s+=1,s+=2,s+=3,s的值为10。在进入第二次for循环,n的值为1,所以执行s+=1,s+=2,s+=3,s的值为16。在进入第三次for循环,n的值为2,所以执行s+=2,s+=3,s的值为21。在进入第四次for循环,n的值为3,所以执行s+=3,s的值为24。

  4若有以下程序

  

  则程序的输出结果是

  A.1,14,3B.0,14,3C.0,18,3D.0,14,6

  参考答案:B

  参考解析:本循环的条件判断时只要a为0就退出循环体,初始值a的值为6,满足条件执行完循环体,b的值为6,a-=++C即a=a-(++C),所以a的值为5,c的值为1。第二次循环后b的值为11,a的值为3,c的值为2。第三次也是最后循环后,a的值为0,b的值l4,c的值为3。

  5有以下程序

  

  程序运行后的输出结果是

  A.108B.68C.99D.60

  参考答案:D

  参考解析:该题首先给二维数组赋值a[3][4]={{1,3,5,7}{9,11,13,15}{17,19,21,23}};(*P)[4]=a指针P指向二维数组a的首地址,接下来执行for循环,首先i=0,j=0时k=k+*(}(P+O)+0)=1(a[O][0]);然后i_0,j=1时k=k+}(}(P+0)+1)=4(a[0][1]);然后j=2时,跳出j的循环,执行i的循环i=1,j=0时k=k+*(*(P+1)+O)=13(a[1][0]);依次类推一直到i-3时跳出全部循环。循环语句在这里的功能是累加二维数组第1列和第2列的元素,累加结果为60。

  6若有以下程序

  

  则程序的输出结果是

  A.5,6,0B.6,0,0C.6。6,1D.5,6,1

  参考答案:C

  参考解析:本题重点考查C语言中for语句和逻辑表达式,for语句的一般形式为:for(表达式1;表达式2;表达式3)语句其循环中的“表达式1(循环变量赋初值)”、“表达式2(循环条件)”和“表达式3(循环变量增量)”都是选择项,即可以缺省,但“;”不能缺省。该题目中省了“表达式1(循环变量赋初值)”和“表达式3(循环变量增量)”。for(;a&&(b==0);){b+=a s a-=e++;}相当于while(a&&(b==0)){b+=a;a-=c++;}。因此c选项正确。

  7有以下程序

  

  程序运行后输出结果是

  A.0,2B.0,3C.1,3D.1,2

  参考答案:D

  参考解析:本题重点考查while语句,变量a和b分别赋初值为-2和1,while语句的语义是:计算表达式的值,当值为真(非O)时,执行循环体语句。a++即a参与运算后,a的值再自增1。++b即b自增1后再参与其它运算。当表达式的值为0时,退出循环,最后输出a和b的值为1和2。因此D选项正确。

  8以下关于宏的叙述错误的是

  A.宏名必须用大写字母构成

  B.宏替换具有计算功能

  C.宏替换不具有计算功能

  D.宏替换不占用运行时间

  参考答案:A

  参考解析:宏名习惯采用大写字母,以便与一般变量区别,但是并没有规定一定要用大写字母,因此,答案为A选项。

  9以下叙述中正确的是

  A.两个字符串可以用关系运算符进行大小比较

  B.函数调用strlen(s);会返回字符串S实际占用内存的大小(以字节为单位)

  C.C语言本身没有提供对字符串进行整体操作的运算符

  D.当拼接两个字符串时,结果字符串占用的内存空间是两个原串占用空间的和

  参考答案:C

  参考解析:本题考查字符串处理函数strien、strcat、strcmp。B选项中strlen返回的是字符串s实际占用内存大小加上结尾符,A选项中不能用关系运算符进行大小比较,可以使用strcmp。D选项当使用连接函数strcat时,内存空间会减少一个字符位置。

  10有以下程序

  

  程序运行后的输出结果是

  A.#N#B.#F#C.MMMD.MO#

  参考答案:A

  参考解析:for语句中把array数组首地址值赋给ptr,ptr++表示每次执行完循环体后,ptr指向下一数组元素,当指针指向值为0时,输出#,否则´M´再加上指针对应数组值进行输出,当* ptr=1时,´M´+l=´N´,结果输出为#N#,答案为A选项。

  11有以下程序

  

  程序的输出结果是

  A.10B.9C.8D.7

  参考答案:B

  参考解析:首先注意for循环的控制条件,当b>=20或者a>100则跳出for循环,也即b<20且a<=100时执行for循环;第一次进入循环a=1,b=1均满足循环条件,但b%3==1条件满足,故执行b=b+3,得到b=4,注意有continue,所以后面语句不执行,直接跳转到a++这个语句,所以第一次循环完之后a=2,b=4;进入第二轮循环,b%3==1也是满足的,故再次b=b+3,此轮循环执行之后a=3,b=7,进入下一轮。此后和前面循环同理,都是b%3==1满足,因为每次都是加3,而之后又去模3,且都跳过for后面语句直接执行a++,所以,一直循环到b=22跳出for循环。此时a为8。综合起来就是,每次循环b增加3,a增加1,且当b>22时跳出循环。结束程序。所以b从1增加到22,有(22-1)/3=7,所以a=1+7=8.因此B选项。

  12下列关系表达式中,结果为。假”的是

  A.3<=4B.(3<4)==1C.(3+4)>6D.(3 !=4)>2

  参考答案:D

  参考解析:B选项中。关系表达式(3<4)==1即1==1,结果为真;C选项中,(3+4)>6即7>6,结果为真;A选项中,3<=4结果为真。D选项中,(3 !=4)>2即1>2,结果为假。因此D选项正确。

  13有以下程序

  

  

  程序运行后的输出结果是

  A.5 6 1 2B.3 4 5 6C.1 2 5 6D.5 6 3 4

  参考答案:D

  参考解析:funl函数中的a、b为局部变量,fun2函数中的a.b为全局变量。执行funl函数后输出5,6;执行完fun2后a变为3,b变为4,所以结果为3,4。D选项正确。

  14若有以下程序

  

  执行时若输入:

  Fig flower is red.<回车>

  则输出结果是

  A.Fig flower is red.is blue.

  B.Fig flower is red.

  C.Fig floweris red.

  D.Fig floweris

  参考答案:B

  参考解析:本题考查字符数组的赋值以及字符串的处理函数,本题中输入字符串Fig flower is red时,首先是将前10个字符赋值给字符数组a,然后执行gets(B.后,将后续字符存放到b中,当输出时,首先输出字符数组a,然后输出字符串b,所以结果为B选项。

  15有以下程序

  

  

  程序运行后的输出结果是

  A.wowB.fwoC.twoD.fix

  参考答案:B

  参考解析:考查二维数组元素的引用。当i为0时,代码处理结果为第一个字符串的第一个字符与第四个字符串的第一个字符调换,当i为1时,代码处理结果为第而个字符串的第一个字符与第五个字符串的第一个字符调换,所以a[1]为fwo。

  16关于“whlile(条件表达式)循环体”,以下叙述正确的是

  A.循环体的执行次数总是比条件表达式的执行次数多一次

  B.条件表达式的执行次数总是比循环体的执行次数多一次

  C.条件表达式的执行次数与循环体的执行次数一样

  D.条件表达式的执行次数与循环体的执行次数无关

  参考答案:B

  参考解析:while循环是先判断条件,满足条件后执行循环体,执行完后接着判断条件,执行,直到最后一次判断条件后不成立,跳出循环,所以最后一次执行了条件表达式,但是没有执行循环体,所以选择B选项。

  17以下叙述中错误的是

  A.只要类型相同,结构体变量之间可以整体赋值

  B.函数的返回值类型不能是结构体类型,只能是简单类型

  C.可以通过指针变量来访问结构体变量的任何成员

  D.函数可以返回指向结构体变量的指针

  参考答案:B

  18以下叙述中正确的是

  A.对于逻辑表达式:a++|| b++,设a的值为1,则求解表达式的值后,b的值会发生改变

  B.对于逻辑表达式:a++&&b++,设a的值为0,则求解表达式的值后。b的值会发生改变

  C.else不是一条独立的语句,它只是if语句的一部分

  D.关系运算符的结果有三种:0,1,-1

  参考答案:C

  参考解析:B选项和A选项中,&&、||都是先计算左边表达式的值,当左边表达式的值能确定整个表达式的值。而且&&、||的优先级比++高,所以题中只需判断a的值即可知道符合表达式的真假;D选项中,关系运算符的结果有“真”和“假”两种。因此c选项正确。

  19有以下程序

  

  程序的运行结果是

  A.14B.20C.10D.16

  参考答案:A

  参考解析:*(*(P+m)+k)系统默认为指针指向数组中第[m][k]个元素,因此,在for循环中,n+=*(*(P+m)+k);执行的是将数组x[0][1]和x[1][1]累加后赋值给n,最后进行输出,答案为A选项。

  20若有定义语句:int m[][3]={1,2,3,4,5,6,7};,则与该语句等价的是

  A.int m[][3j={{1,2,3},{4,5,6},{i 7}};

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

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

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

  参考答案:A

  参考解析:

  二维数组的初始化有两种方式,一种是分行初始化,方式为:数据类型数组名[行下标表达式][列下标表达式]={{第0行初值},{第1行初值表},…{最后l行初值表}};,如果初值表只对部分元素赋初值,没有被赋初值的元素将被自动赋值为0。另一种是按二维数组在内存中的排列顺序给各元素赋初值,这种方式就是不分行将所有数据依次列在一个花括号里,方式为:数据类型数组名[行下标表达式][列下标表达式]={初值表};,这种方式的赋值就是将初值表的数据依次赋予数组的每个元素,其中赋值是按照数组元素在内存中的位置进行的。题目中的初始化语句是第二种方法,如果用第一种方法应该是int m[][3]={{1,2,3},{4,5,6{,{7{};,这里应该保证除了最后一行,每一行都满列有3个元素,A选项正确。

  21有以下程序

  

  程序运行后的输出结果是

  A.0.000000B.0.250000C.0.500000D.1.000000

  参考答案:C

  参考解析:本题重点考查if语句,变量x和Y均为double类型,由于变量x赋值为2.0,因此执行if((x<5.0)&&(!x)),即条件为0,继续执行if(x<10.0),条件为1,即执行Y=1.0/x;。依据printf()函数输出类型中f是以小数形式输出单、双精度实数。因此c选项正确。

  22以下fun函数返回数组中最大值的下标

  

  在横线处应填入的内容是

  A.++kB.i=kC.k++D.k=i

  参考答案:D

  参考解析:fu-函数的功能是返回数组中最大值的下标。通过for循环语句,每次将最大的数给k,即k=i。因此D选项正确。

  23有以下程序段

  

  下面针对上述程序段的描述正确的是

  A.最多可以输出100个非负整数

  B.当x<0时结束整个循环

  C.当X>=0时没有任何输出

  D.pfinff函数调用语句总是被跳过

  参考答案:A

  参考解析:continue语句只结束本次循环,而不是终止整个循环的执行,因此B选项错误;当x>=0时,程序执行prinff("%4d\n",x)语句,因此排除C、D选项,答案为A选项。

  24设有定义:

  int x[2][3];

  则以下关于二维数组X的叙述错误的是

  A.元素x[0]可看作是由3个整型元素组成的一维数组

  B.数组x可以看作是由X[0]和X[1]两个元素组成的一维数组

  C.可以用x[0]=0;的形式为数组所有元素赋初值0

  D.x[O]和x[1]是数组名,分别代表一个地址常量

  参考答案:C

  参考解析:x[o]可看作是由3个整型元素组成的一维数组,不可以用语句x[0]=0;为数组所有元素赋初值0。因此C选项正确。

  25若有以下程序

  

  则程序的输出结果是

  A.1,10,3,8,5,6,7,4,9,2,

  B.10,9,8,7,6,5,4,3,2,1,

  C.10,1,8,3,6,5,4,7,2,9,

  D.2,9,4,7,6,5,8,3,10,l,

  参考答案:D

  参考解析:该题首先对一维数组进行初始化,e[O]到c[9]依次赋值为10到1;fun(c,10);语句调用fun函数,fun函数的功能是将一维数组奇数位元素的数值由小到大排序;最后将排好序的新的一维数组进行输出。因此D选项正确。

  26若有以下程序

  

  则程序的输出结果是

  A.0,3,2,2,1,0,3,1,

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

  C.5,6,5,6,5,6,5,6,

  D.6,7,6,7,6,7,6,7,

  参考答案:A

  参考解析:本题考查二维字符数组的运用,题目中首先定义了一个一维字符数组,从三层for循环可以看出要找的是w数组中每个字符在二维数组中的位置,比如d字母,在a数组中就是0,3其他字符类似,所以本题答案为A。

  27若有以下程序

  

  则程序的输出结果是

  A.earlsB.ahabjC.ckbdlD.black

  参考答案:D

  参考解析:程序首先初始化字符数组a[5][10]和二维数组p[6][2]。执行for循环语句,循环变量i从0取值到5,得到字符数组W[]的值,并通过字符串输出函数pats进行输出操作。w[0]=a[0][1]、w[1]=a[1][5]、w[2]=a[0][0]、w[3]=a[0][2]、w[4]=a[1][4]、w[5]=a[4][4];因此最后字符数组W的结果为black。因此D选项正确。

  28若有以下程序

  

  则程序的输出结果是

  A.10B.7C.6D.3

  参考答案:B

  参考解析:else总是和与之最近的上面的if配对,执行第一个if,判断条件不成立,执行else r=1;语句。再执行第二个if语句中的判断条件,成立,左移执行r+=2,r的值为3,再执行第三个if的判断条件,不成立执行第7行else后面的空语句“;”。再执行第四个讧的判断条件d==4成立,执行r+=4,r的值为7。然后打印输出。

  29若有以下程序

  

  则程序的输出结果是

  A.1,3B.0,2C.1,2D.2,3

  参考答案:A

  参考解析:本题重点考查do…while语句及do…while的循环语句保证会执行一次(表达式的真值在每次循环结束后检查),++b即变量b自增1后再参与运算.而a++则表示a参与运算后,再自增1。所以第一次循环结束后,b=1,a=-1。第二次循环后,b=2,a=0,这里先对while的判断为真,然后a+自增为零时,还会进行第三次循环。第三次循环后。b=3,a=1。因此A选项正确。

  30若有以下程序

  

  则程序的输出结果是

  A.3B.7C.6D.10

  参考答案:D

  参考解析:第—个if语句a!=1条件为假,所以执行dse后的语句r=1。第二个if语句b==2条件成立,执行r+=2,r的值变为3,第三个if语句c!=3条件为假,所以不做任何操作。执行下面的r+=3操作,r的值变为6。判断第四个讧条件,d==4条件成立,执行r+=4操作,结果为10。

                  微信群名称:华盟黑白之道二群   华盟-黑白之道⑦QQ群: 9430885

  • 上一篇培训:

  • 下一篇培训: 没有了
  • 网友评论
      验证码
     

    关注

    分享

    0

    讨论

    2

    猜你喜欢

    论坛最新贴