2015年计算机二级《C语言》最新章练习题(2)
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。