C++理论 题库

  • 格式:doc
  • 大小:147.50 KB
  • 文档页数:20

- 1 - 1)设a、b和c都是int型变量,且a=3、b=4、c=5,则下面的表达式中,值为0的表达式是!((a

2)设int a=12,则执行完语句a+=a-=a*a后,a的值是-264

本题的考查点是赋值表达式的求解。

第一步:a*a=144 ;(此时a=12)

第二步:a-=144相当于a=a-144,a=a-144=-132; (此时a=-132)

第三步:a+=a相当于a=a+a,a=a+a=-264;

所以该表达式最后的值应当为-264。

故本题答案为D。

3)下列语句分别是不同程序中的第一个输入输出语句。若去掉其中的"<

4)若语句:cout<')<>OK!

本题主要考查了C++中格式控制数据的输入输出。

在C++的流操作中,如果输入字符不足指定字符宽度(可以用setw来设置要输出的字符的宽度),可以用setfill函数指定用来填充的字符。在本例中,设置填充字符为">",然后设置了字符输出宽度为5,对于数据3141512,其长度大于5,故直接输出,而对于"OK!",其长度为3,不足5,故要在前面填充上两个">",故本题输出应为"3141512>>OK!"。

5)有如下程序:

#include

#include

using namespace std;

int main()

{

cout.fill('*');

cout<

return 0;

}

执行这个程序的输出结果是123*OK

本题主要考查了字符串与字符数组。

fill函数用来设置要填空的字符串,left用来表示左对齐,setw(4)用来表示下一个输出占4个字符的长度。故本题输出应为"123*OK"。

6)下面程序

#include

void main()

{ int x=100, a=10, b=20, ok1=5, ok2=0;

if(a

if(b!=15)

if(!ok1) x=1;

else if(ok2) x=10;

x=-1;

cout<

} - 2 - 的输出是-1。

本题的考查点是判断语句的循环嵌套。

第一个判断值为真,过渡到下一个判断,第二个判断为真,过渡到第三个判断......如此循环,在打印输出语句的前一行,程序给变量x赋了值,为-1,所以,无论前期如何变化,最后的x值依然为-1。

7) 有以下程序

#include

void main()

{ int s=0,a=1,n;

cin>>n;

do

{s+=1; a=a-2;}

while(a!=n);

cout<

}

若要使程序的输出值为2,则应该从键盘给n输入的值是-3

本题的考查点是do-while语句

此语句的一般形式为:

do 语句

while (表达式)

其特点为:先执行语句,后判断表达式。

它是这样执行的:先执行一次指定的内嵌的语句,然后判别表达式,当表达式的值为非零("真")时,返回重新执行该语句,如此反复,直到表达式的值等于0为止,此时循环结束。

当n=-1时,s+=1,s=1; a=a-2=-1;a!=n不成立,结束循环,此时s值为1,不符合题意;

当n=-3时,s+=1,s=1; a=a-2=-1;a!=n成立,继续循环,s=s+1=2,a=a-2=-3;a!=n不成立,此时s值为2,符合题意;

8) 关于break语句的描述不正确的是break语句可用在if语句中,它可使执行的流程跳出当前的if语句。

9) 以下程序执行后sum的值是以下程序执行后sum的值是不确定

#include

void main()

{ int i, sum;

for(i=1;i<6;i++)sum+=i;

cout<

}

变量sum在使用时未赋初值,所以无法确定sum最终的值。

本题答案为C。

10) t为int类型,进入下面的循环之前,t的值为0,

while(t=1)

{ ......}

则以下叙述中正确的是循环控制表达式的值为1

11) 有如下程序

#include - 3 - void main()

{

int a[3][3] = {{1,2},{3,4},{5,6}}, i,j,s = 0;

for(i = 1; i < 3; i++)

for(j = 0; j <= i; j++)

s += a[i][j]];

cout<

}

该程序的输出结果是18。

题中的外循环只执行了2次:

第1次: a[1][0] = 3,a[1][1] = 4,所以s = 7;

第2次: a[2][0] = 5,a[2][1] = 6,a[2][2] = 0,所以s = 7 + 5 + 6 + 0 = 18。

12) 有以下程序

#include

void main()

{int a[][3]={{1,2,3},{4,5,0}},(*pa)[3],i;

pa=a;

for(i=0;i<3;i++)

if(i<2) pa[1][i]=pa[1][i]-1;

else pa[1][i]=1;

cout<

}

执行后输出结果是7

本题的考查点是二维数组和指针数组的应用。

在所给的程序中,pa指向二维数组首地址a,接着执行下面的for循环,当i=0或i=1时,数组元素 pa[1][i]的值减1,当 i=2时,数组元素pa[1][i]的值为1,此时得到新的二维数组a[][3]={{1,2,3},{3,4,1}},最终打印结果就是2+4+1=7。

13) 以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。

#include

void reverse(int a[],int n)

{int i,t;

for(i=0;i

{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}

}

void main()

{int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;

reverse(b,8);

for(i=6;i<10;i++) s+=b[i];

cout<

}程序运行后的输出结果是22。

本题的考查点是对数组的操作。

本题并不是将整个数组中的内容逆置,而是逆置前8个元素。逆置后的数组为:8,7,6,5,4,3,2,1,9,10通过for循环计算b[6]+b[7]+b[8]+b[9]即2+1+9+10=22。

14) 在"int a[ ][3]={{1},{3,2},{4,5,6},{0}};"中,a[2][2]的值是6 - 4 - 本题考查二维数组的使用。

数组可以在定义的时候给出其初始化的值,如果所给的比数组的大小少,则后面缺省的是0。

15)下列描述中不正确的是可以对整型数组进行整体输入、输出

本题的考查点是对数组的理解。

C++语言规定只能逐个引用数组元素而不能一次引用整个数组。字符数组的输入、输出可以将整个字符串一次输入或输出。所以,选项C的说法是不正确的。

16) 对于下列语句动态分配的内存,其释放语句正确的是delete []pa

int *pa=new [10];

17) 有以下程序

#include

int f1(int x,int y)

{ return x>y?x:y; }

int f2(int x,int y)

{ return x>y?y:x; }

void main()

{int a=4,b=3,c=5,d,e,f;

d=f1(a,b); d=f1(d,c);

e=f2(a,b); e=f2(e,c);

f=a+b+c-d-e;

cout<

}

执行后输出的结果是5,4,3

本题的考查点是条件运算符。

条件运算符要求有三个操作对象,称三目(元)运算符,它是C语言中唯一的一个三目运算符。条件表达式的一般形式为

表达式1?表达式2:表达式3

条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。

弄清以上几点,本题也就不难了。

18) 在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用内联函数

19) 下列有关内联函数的叙述中,正确的是内联函数是通过编译器来实现的

在C++中使用inline关键字来定义内联函数。inline关键字放在函数定义中函数类型之前。不过编译器会将在类的说明部分定义的任何函数都认定为内联函数,即使它们没有inline说明。一个内联函数可以有,也可以没有return语句。内联函数在程序执行时并不产生实际函数调用,而是在函数调用处将函数代码展开执行。内联函数是通过编译器来实现的。

20) 为了取代C中带参数的宏,在C++中使用内联函数

21) 下面程序的输出结果是1 2 3

#include

using namespace std;

void add()