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

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

2015/11/10 作者:不详 来源: 网络收集
导读 选择题:  1设有定义:     A.1234,3.142  B.123,3.142  C.1234,3.141  D.123,3.141  参考答案:A  参…

  选择题:

  1设有定义:

  

  A.1234,3.142

  B.123,3.142

  C.1234,3.141

  D.123,3.141

  参考答案:A

  参考解析:函数Printf()中,%md指输出带符号的十进制整数,给定最小宽度为m位,不足m位左端补空格,超过m位按实际位数输出,%.nf表示以小数形式输出实数,小数占n位,对应题目,答案为A选项。

  2若有定义

  

  则a的定义与下面哪个语句等价

  A.int(*A.[10];B.int}g[10];C.int*a;D.int a[10];

  参考答案:B

  参考解析:本题考查typedef的使用方法,typedef对已存在的类型使用一个新的名字,其中本题中int*用T来代替,所以定义T a[10];就相当于是int*a[10];选项B正确。

  3以下叙述中正确的是

  A.语句int a[8]={0};是合法的

  B.语句inta[]={0};是不合法的,遗漏了数组的大小

  C.语句char a[2]={ "A","BII};是合法的,定义了一个包含两个字符的数组

  D.语句char a[3];a="AB";是合法的,因为数组有三个字符空间的容量,可以保存两个字符

  参考答案:A

  参考解析:B选项中,如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数;C选项中,char a[2]={ "","B"};不合法,应为char a[2]={´A´,´B´};;D选项中,字符数组只能在定义的时候可以用字符串常量来初始化,但不能够先定义字符数组,然后再用字符串常量进行赋值。因此A选项正确。

  4有以下程序

  

  程序运行后的输出结果是

  A.随机值B.0C.15D.16

  参考答案:A

  参考解析:本题重点考查for语句,变量没有初始化的情况下,默认值与编译器有关系,不同的编译器有不同的值。因此A选项正确。

  5有以下程序

  

  程序的输出结果是

  A.21.10B.11.10C.12.10D.1.10

  参考答案:D

  参考解析:本题考查把数组名作为函数参数,执行fun函数后,s的值并没有发生变化,仍然是指向a,所以输出结果为1.10,选项D正确。

  6若有以下程序

  

  则程序的输出结果是

  A.2,2,2,4

  B.2,1,2,-1

  C.5,1,2,-1

  D.1,2,3,4

  参考答案:C

  参考解析:第一个if语句的判断条件中是逻辑与表达式,只有运算对象均非零结果才为真,执行第一个if判断条件,均为赋值表达式,第一个运算对象a=2非零,判断第二个表达式b=1也非零,所以条件成立执行c=2的赋值操作。执行第二个if判断条件中的逻辑或表达式,只要有一个对象非零结果就是真,本条件中c==3运算对象为假,所以需要判断第二个运算对象d=-1,结果为-1非零,所以条件成立,执行a=5,的操作,所以a值为5,b值为1,c值为2,d值为-1。

  7若有以下程序

  

  则程序的输出结果是

  A.17,289B.49,2401C.17,37D.49,289

  参考答案:C

  考解析:本题考查宏定义,宏定义只是做个简单的替换,执行S(k+j)=k+j*k+j=17,T(k+j)=S(k+j)*S(k+j)=k+j*k+j*k+j$k+j=37,选项C正确。

  8设有定义:

  double a,b,C;

  若要求通过输入分别给a,b、c输入1、2、3,输入形式如 下(注:此处口代表一个空格)口口1.0口口2.0口口3.0<回车>则能进行正确输入的语句是

  A.scanf("%If%If%If",a,b,C.;

  B.scanf("%If%If%If",&a,&b,&C.;

  C.scanf(”%f%f%f",&a,&b,&C.;

  D.scanf("%5.1If%5.1If%5.1If",&a,&b,&C.;

  参考答案:B

  参考解析:

  本题考查scanf函数的格式化输入,scanf函数的一般形式为scanf(格式控制,变量1地址,变量2地址,…),其中,格式字符串要与数据类型保持一致,由于变量double型,所以格式字符串中应为%/if,后面应该为变量地址,所以需要加上符号“&”。所以选择B。

  9以下结构体说明和变量定义中,正确的是

  

  参考答案:A

  参考解析:本题考查typedef的使用方法,typedef对已存在的类型使用一个新的名字,选项A中ABC为新的类型别名,定义正确。

  10若有以下程序段

  

  则以下选项中值为6的表达式是

  A.P->nB.(*p).nC.p->n++D.++(P->n)

  参考答案:D

  参考解析:本题考查结构体变量的引用,其中a为定义的结构体数组,D选项中P->n为5,++(P->11)为6,所以D选项正确。

  11设有定义:int a=0,b=1;,以下表达式中,会产生“短路”现象,致使变量b的值不变的是

  A.a++&&b++B.a++||++bC.++a&&b++D.+a ||++b

  参考答案:A

  参考解析:运算符“++”放在变量前面时,表示将变量+1,再参与其他操作,a++&&b++时,由于a值是0直接判定与运算结果为0,忽视b++的值。因此b值不发生改变,答案为A选项。

  12若有以下程序

  

  

  则程序的输出结果是

  A.3,3.3,7.7,7

  B.3,7,7,7,7,7

  C.7.7,7,3,3,3

  D.7,7,7,3,7,7

  参考答案:D

  参考解析:在主函数中分别给整型变量i.指针型变量P和指向指针的指针变量r赋初值;调用f函数,并将实参变量r的值传递给形参变量s,在f函数中,通过prind("%d,%d,%d,",k,*t,**s);语句输出7,7,7;返回主函数,通过pfinff("%d,%d,%d\n",i,*P,**r);输出3,7,7。因此D选项正确。

  13以下程序调用fun函数求数组中最大值所在元素的下标。

  

  在横线处应填入的内容是

  A.*k=iB.k=iC.*k=i-sD.k=i-s

  参考答案:A

  参考解析:fun函数的功能是求数组中最大值所在元素的下标。通过for循环语句,每次将最大的数给* k,即*k=i。因此A选项正确。

  14以下叙述中错误的是

  A.在函数外部定义的变量在所有函数中都有效

  B.在函数内部定义的变量只能在本函数范围内使用

  C.函数中的形参属于局部变量

  D.在不同的函数中可以使用相同名字的变量

  参考答案:A

  参考解析:全局变量有效范围是从定义的位置开始到所在源文件的结束,在这区域内的函数才可以调用,如果在定义函数之后,定义的变量,该变量不能被之前的函数访问所以A选项说法错误,答案为A选项。

  15设有某函数的说明为

  int*func(int a[10],int n);

  则下列叙述中,正确的是

  A.形参a对应的实参只能是数组名

  B.说明中的a[10]写成a[]或*a效果完全一样

  C.func的函数体中不能对a进行移动指针(如a++)的操作

  D.只有指向10个整数内存单元的指针,才能作为实参传给a

  参考答案:B

  参考解析:本题重点考查返回指针值的函数相关知识,返回指针值的函数,一般定义形式为:类型名*函数名(参数列表)。func函数被定义为指针型函数,它的形参int a[10]和int n.分别指一维数组a[0]和整型变量n。

  16有以下程序

  

  程序的运行结果是

  A.DB.CC.BD.A

  参考答案:A

  参考解析:首先判断x>1由于x=1不大于1,不进入该if语句,程序跳入else语句判定zx。条件不成立,因此输出字母D,答案为A选项。

  17以下关于C语言函数参数传递方式的叙述正确的是

  A.数据只能从实参单向传递给形参

  B.数据可以在实参和形参之间双向传递

  C.数据只能从形参单向传递给实参

  D.C语言的函数参数既可以从实参单向传递给形参,也可以在实参和形参之间双向传递,可视情况选择使用

  参考答案:A

  参考解析:数据只能由实参单向传递给形参称为“值传递”,而不能由形参传回来给实参,A选项正确;数组名、指针等作参数,实参传递给形参的是地址值,这样形参和实参就指向同一段内存单元,在函数体内对形参数据的改变也将影响到实参。实参和形参之间不可双向传递。B、D选项错误。数据不能从形参传递给实参,C选项错误。

  18以下fun函数的功能是将形参s所指字符串内容颠倒过来

  

  在横线处应填同入的内容是

  A.+1B.-1C.+0D.k=0

  参考答案:B

  参考解析:本题考查字符串处理函数strlen,strlen计算一个字符串的长度,包含结尾符,所以本题中j的初始化应该是从最后一个字符开始,所以应该将得到的字符串长度减1,选项B正确。

  19若有以下程序

  

  则程序的输出结果是

  A.China!B.to China!C.me you to China!D.you to China!

  参考答案:D

  参考解析:该程序首先定义*a和b[],并进行初始化。主函数中通过外层for循环语句,遍历字符数组b[],并且将符合if条件语句的字符赋给数组p;for内层循环语句,遍历字符数组a[]。再将符合if条件语句的结果输出。因此D选项正确。

  20若有以下程序

  

  

  则程序的输出结果是

  A.Hay!B.HowareyouC.Howareyou!D.How are you!

  参考答案:C

  参考解析:主函数中首先定义字符数组a[]="How areyou! ";执行for循环语句,语句if(a[i]!= ")a[j++]=a[i];其功能是将字符数组中的空格去掉。因此C选项正确。

  21若有以下程序

  

  则程序的输出结果是

  A.4,5,6,7,

  B.4,7,10,13,

  C.4,6,8,10,

  D.3,5,7,9,

  参考答案:C

  参考解析:主函数中变量k作为for语句的循环变量,取值0、1、2、3,同时也作为实参通过调用函数f传递给形参变量m。南于变量a是全局变量,变量n是static静态变量,因此k=0时,f函数中,语句return n+m+a;即l+0+3=4;k=1时,f函数中,语句retum n+m+8;即2+1+3=6;k;2时,f函数中,语句returnn+m+a;即3+2+3=8;k=3时,f函数中,语句return n+m+a;即4+3+3=10。因此C选项正确。

  22若有以下程序

  

  执行时若输入:(其中表示回车符)

  Fig flower is red.

  则输出结果是

  A.wet is red.Fig Co is blue.

  B.wet is red.Fig flo

  C.wet is red.The sky is blue.

  D.Fig flower is red.The sky is blue.

  参考答案:A

  参考解析:程序首先初始化字符数组b[],执行for循环语句。循环变量i的取值范围从0到6。在for循环语句中通过scanf函数将从键盘上输入的数据输入到b[]中,即b的值为Fig Co is blue.。退出for循环语句,执行语句gets(A.;,gets()函数的调用形式为:gets(str_adr),其中str_adr是存放输入字符串的起始地址,可以是字符数组名。字符数组元素的地址或字符指针变量。gets函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止,即a的值为wflr is red.。因此A选项正确。

  23以下叙述中正确的是

  A.数组下标的下限是1

  B.数组下标的下限由数组中第一个非零元素的位置决定

  C.数组下标的下限由数组中第一个被赋值元素的位置决定

  D.char el,c2,*c3,c4[40];是合法的变量定义语句

  参考答案:D

  参考解析:

  数组下标的下限是0。因此D选项正确。

  24对于while(!E)s;,若要执行循环体s,则E的取值应为:

  A.E等于1B.E不等于0C.E不等于1D.E等于0

  参考答案:D

  参考解析:while语句的一般形式为:while(表达式)语句;其中表达式是循环条件,语句为循环体。while语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句。该题中如要执行语句s,则!E应为真,因此E应等于0,D选项正确。

  25以下叙述中正确的是

  A.局部变量不能被说明为static

  B.只有全局变量才有自己的作用域,函数中的局部变量没有作用域

  C.只有在函数内部定义的变量才是局部变量

  D.只要是用户定义的标识符,都有一个有效的作用域

  参考答案:D

  参考解析:本题考查局部变量和全局变量作用域,B选项中局部变量也有作用域,C选项中,函数内部定义的也可能是全局变量,A选项错误,因为可以定义个静态局部变量。

  26有以下程序

  

  程序的输出结果是

  A.693825B.69825C.63825D.6385

  参考答案:D

  参考解析:本题的意图在于将C中两个字符串的偶数位置的数字组成一个新数,找到的四个数字分别为6、3、8、5,组成的数为6385,所以答案为D选项。

  27有如下程序段

  

  则循环结束后i的值为

  A.6B.5C.9D.10

  参考答案:A

  我的答案:D

  参考解析:if(i>5)break;表示判断i值,如果i大于5,执行break语句,结束循环程序,这里当i=6,循环结束。因此答案为A选项。第27题 笔记记录我的笔记(0) | 精选笔记(1)选择笔记标签:试题内容(1)答案解析(0)

  28以下叙述中正确的是

  A.只能在循环体内和switch语句体内使用break语句

  B.当break出现在循环体中的switch语句体内时,其作用是跳出该switch语句体,并中止循环体的执行

  C.continue语句的作用是:在执行完本次循环体中剩余语句后,中止循环

  D.在while语句和do-while语句中无法使用continue语句

  参考答案:A

  参考解析:break语句通常用在循环语句和开关语句中。

  当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;当break语句用于do…while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,即满足条件时便跳出循环。continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。B选项中break只跳出该switch语句,并不能终止循环,因此B错。C选项continue语句结束本次循环,至于大循环的终止与否与其无关,因此C错。D项中while和do…while语句都可以使用,continue语句跳出本次循环,因此D错误。因此A进项正确。

  29有以下程序

  

  程序运行后的输出结果是

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

  参考答案:B

  参考解析:本题主要考查指针与数组。观察题目,可以发现,*P=&aa[0][0]语句实际是将数组”的首地址赋给了指针变量P。将i的值带入for循环中,i=0时,aa[0][1]=3,*P=2;*P输出的是指针所指向的数组值,此时P所指向的是aa[O][0],输出2,而i=1时执行了++P操作使指针向后移动指向了aa[0][1],所以在输出*P时应为3。因此B选项正确。

  30以下叙述中正确的是

  A.if语句只能嵌套一层

  B.if子句和else子句中可以是任意的合法的c语句

  C.不能在else子句中再嵌套if语句

  D.改变if-else语句的缩进格式,会改变程序的执行流程

  参考答案:B

  参考解析:A选项中,if语句的嵌套没有规定层数;C选项中,可以在else予句中再嵌套if语句;D选项中,改变if—else语句的缩进格式,不会改变程序的执行流程,需要注意if和else的配对问题。因此B选项正确。

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

  • 上一篇培训:

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

    关注

    分享

    0

    讨论

    2

    猜你喜欢

    论坛最新贴