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()