C++理论 题库.docx

上传人:b****1 文档编号:1583004 上传时间:2023-05-01 格式:DOCX 页数:34 大小:28.50KB
下载 相关 举报
C++理论 题库.docx_第1页
第1页 / 共34页
C++理论 题库.docx_第2页
第2页 / 共34页
C++理论 题库.docx_第3页
第3页 / 共34页
C++理论 题库.docx_第4页
第4页 / 共34页
C++理论 题库.docx_第5页
第5页 / 共34页
C++理论 题库.docx_第6页
第6页 / 共34页
C++理论 题库.docx_第7页
第7页 / 共34页
C++理论 题库.docx_第8页
第8页 / 共34页
C++理论 题库.docx_第9页
第9页 / 共34页
C++理论 题库.docx_第10页
第10页 / 共34页
C++理论 题库.docx_第11页
第11页 / 共34页
C++理论 题库.docx_第12页
第12页 / 共34页
C++理论 题库.docx_第13页
第13页 / 共34页
C++理论 题库.docx_第14页
第14页 / 共34页
C++理论 题库.docx_第15页
第15页 / 共34页
C++理论 题库.docx_第16页
第16页 / 共34页
C++理论 题库.docx_第17页
第17页 / 共34页
C++理论 题库.docx_第18页
第18页 / 共34页
C++理论 题库.docx_第19页
第19页 / 共34页
C++理论 题库.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++理论 题库.docx

《C++理论 题库.docx》由会员分享,可在线阅读,更多相关《C++理论 题库.docx(34页珍藏版)》请在冰点文库上搜索。

C++理论 题库.docx

C++理论题库

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

((a

c||1)。

2)设inta=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<')<

";是程序的第一个输出语句,则输出结果是3141512>>OK!

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

在C++的流操作中,如果输入字符不足指定字符宽度(可以用setw来设置要输出的字符的宽度),可以用setfill函数指定用来填充的字符。

在本例中,设置填充字符为">",然后设置了字符输出宽度为5,对于数据3141512,其长度大于5,故直接输出,而对于"OK!

",其长度为3,不足5,故要在前面填充上两个">",故本题输出应为"3141512>>OK!

"。

5)有如下程序:

#include

#include

usingnamespacestd;

intmain()

{

cout.fill('*');

cout<

return0;

}

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

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

fill函数用来设置要填空的字符串,left用来表示左对齐,setw(4)用来表示下一个输出占4个字符的长度。

故本题输出应为"123*OK"。

6)下面程序

#include

voidmain()

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

if(a

if(b!

=15)

if(!

ok1)x=1;

elseif(ok2)x=10;

x=-1;

cout<

}

的输出是-1。

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

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

7)有以下程序

#include

voidmain()

{ints=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

voidmain()

{inti,sum;

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

cout<

}

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

本题答案为C。

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

while(t=1)

{......}

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

11)有如下程序

#include

voidmain()

{

inta[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

voidmain()

{inta[][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;

elsepa[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

voidreverse(inta[],intn)

{inti,t;

for(i=0;i

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

}

voidmain()

{intb[10]={1,2,3,4,5,6,7,8,9,10};inti,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)在"inta[][3]={{1},{3,2},{4,5,6},{0}};"中,a[2][2]的值是6

本题考查二维数组的使用。

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

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

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

C++语言规定只能逐个引用数组元素而不能一次引用整个数组。

字符数组的输入、输出可以将整个字符串一次输入或输出。

所以,选项C的说法是不正确的。

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

int*pa=new[10];

17)有以下程序

#include

intf1(intx,inty)

{returnx>y?

x:

y;}

intf2(intx,inty)

{returnx>y?

y:

x;}

voidmain()

{inta=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)下面程序的输出结果是123

#include

usingnamespacestd;

voidadd()

{

staticinta;

a++;

cout<

}

intmain()

{

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

add();

return0;

}

22)以下程序的结果是57

#include

inta,b;

voidfun()

{a=100;b=200;}

voidmain()

{inta=5,b=7;

fun();

cout<

}

本题主要考查的是C++语言中的变量作用域。

全程变量是可以在子函数中对其值作改变,且它也可作为函数间的值传递。

但当函数或子函数中定义了与全程变量名称相同的局部变量,则全程变量将被屏蔽。

所以本题主函数的局部变量a,b把同名的全程变量屏蔽了。

23)执行下列程序语句后,屏幕输出为4。

#include

usingnamespacestd;

intn=5;

intmain()

{

intn=3;

n++;

:

:

n++;

cout<

return0;

}

C++中变量有全局变量和局部变量。

不在任何函数之内声明的变量即为全局变量。

当在一个函数中声明的局部变量与全局变量重名时。

局部变量会将全局变量屏蔽掉。

如果要引用全局变量可以变量名的前面加“:

:

”。

24)有如下程序:

#include

usingnamespacestd;

intmain()

{

int*p;

*p=9;

cout<<"Thevalueatp:

"<<*p;

return0;

}

编译运行程序将出现的情况是运行时有可能出错

25)下面程序

#include

voidmain()

{

inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;

cout<<*(p+2)<

}

的输出是3。

*p=a语句是使指针p指向数组a的第一个数组元素,因此*(p+2)即是数组a的第3个元素的值,即a[2]。

26)下列程序的输出结果是102030

#include

usingnamespacestd;

intn[][3]={10,20,30,40,50,60};

intmain()

{

int(*p)[3];

p=n;

cout<

return0;

}

二维数组每一行都对应一个指针,这个指针指向每行第一个元素。

题中p[0][0]与n[0][0]对应,*(p[0]+1)与n[0][1]对应,(*p)[2]与p[0][2]对应。

27)有以下程序

#include

#include

structNODE

{intnum;NODE*next;};

voidmain()

{NODE*p,*q,*r;

p=(NODE*)newNODE;

q=(NODE*)newNODE;

r=(NODE*)newNODE;

p->num=10;q->num=20;r->num=30;

p->next=q;q->next=r;

cout<num+q->next->num;

}

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

p->num即为10,q->next->num即为r->num,为30,所以p->num+q->next->num=10+30=40。

28)设有以下说明语句

structex

{intx;floaty;charz;}example;

则下面的叙述中不正确的是example是结构体类型名

example是结构体变量名

29)以下程序的功能是:

建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请为下划线处有号码的选择出正确的选项。

#include

stuctnode

{chardata;

node*next;};

node*CreatList(char*s)

{node*h,*p,*q;

h=(node*)newnode;

p=q=h;

while(*s!

='\0')

{p=(node*)newnode;

p->data=*s;

q->next=p;

q=p;

s++;

}

p->next='\0';

returnh;

}

voidmain()

{charstr[]="linklist";

node*head;

head=CreatList(str);

...

}

本题要求建立一个structnode类型的数据链表,从main()函数中可知,head是"头指针"变量,它的值是由CreatList(str)带回的一个结构体类型的指针变量,指向所建立的表的第一个数据,所以第48空应该填structnode*。

30)写出执行完下列程序段以后指定的变量的值:

boolx=true,y=false,z=false;

x=x&&y||z;

y=x||y&&z;

z=!

(x!

=y)||(y==z);

已知x=false,z=true,则y=0/false。

31)下列语句段的输出结果是1024

intk=1,n=10,m=1;

while(k<=n)

{

m*=2;

n--;

}

cout<

while循环是当型循环,本题的条件是k<=n;k的初始值为1,而每次循环都会执行n--,循环执行10次,故最后输出1024。

32)以下程序中,函数SumColumMin的功能是:

求出M行N列二维数组每列元素中的最小值,并计算它们的和值。

和值通过形参传回主函数输出。

请填空。

#defineM2

#defineN4

voidSumColumMin(inta[M][N],int*sum)

{inti,j,k,s=0;

for(i=0;i

{k=0;

for(j=1;j

if(a[k][i]>a[j][i])k=j;

s+=a[k][i];

}

*sum=s;

}

voidmain()

{intx[M][N]={3,2,5,1,4,1,8,3},s;

SumColumMin(x,&s);

cout<

}

33)以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值。

请填空:

#defineN3

#defineM4

voidLineMax(intx[N][M])

{inti,j,p;

for(i=0;i

{p=0;

for(j=1;j

if(x[i][p]

cout<<"Themaxvalueinline"<

}

}

voidmain()

{intx[N][M]={1,.5,7,4,2,6,4,3,8,2,3,1};

LineMax(x);

}

34)以下程序的功能是调用函数fun计算:

m=1-2+3-4+…+9-10,并输出结果。

请填空。

intfun(intn)

{intm=0,f=1,i;

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

{m+=i*f;

f=-f;

}

returnm;

}

voidmain()

{cout<<"m="<

35)以下程序运行后的输出结果是3,2,2,3。

voidfun(intx,inty)

{x=x+y;y=x-y;x=x-y;

cout<

voidmain()

{intx=2,y=3;

fun(x,y);

cout<

}

被调函数fun()实现的功能是交换变量x和y的值并打印,由于该函数无返回值,所以在主函数中打印出的x和y的值仍然为2,3。

36)下面程序的运行结果是:

35。

voidswap(int*a,int*b)

{int*t;

t=a;a=b;b=t;

}

voidmain()

{intx=3,y=5,*p=&x,*q=&y;

swap(p,q);

cout<<*p<<*q;

}

观察本题的程序可以看出,被调函数swap()实现的功能是交换变量的值,但由于函数不返回任何值,所以在main()函数中打印出的变量的值并没有发生交换,即仍为3和5。

1)若x和y都是int型变量,x=100、y=200,且有下面的程序片段

cout<<(x,y);

上面程序片段的输出结果是2

本题的考查点是逗号表达式。

在(x,y)中的","是一个特殊的运算符,叫做逗号运算符,它的一般形式为:

表达式1,表达式2,求解过程为:

先求解表达式1,再求解表达式2,整个表达式的值是表达式2的值,(x,y)的值为200,所以输出结果为200。

2)以下程序的输出结果是101091

#include

voidmain()

{intx=10,y=10,i;

for(i=0;x>8;y=++i)

cout<

}

for语句的一般格式为:

for(表达式1;表达式2;表达式3)语句执行中只要表达式2为真,则执行for语句中指定的内嵌语句。

所以,本题在条件为真的情况下,先执行printf函数。

x--是先使用后运算。

3)请读程序:

#include

#include

voidmain()

{

inta,b;

for(a=1,b=1;a<=100;a++){

if(b>=20)break;

if(b%3==1){b+=3;continue;}

b-=5;

}

cout<

}

上面程序的输出结果是8。

"%"是求余运算符,执行第一次循环时,条件(b%3==1)为真,b=4,继续下一次循环,如此反复,当b=22时,条件(b>=20)为假,跳出循环,此时共循环8次,即a=8。

4)当类中一个字符指针成员指向具有n个字节的存储空间时,它所能存储字符串的最大长度为n-1。

5)以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序。

#include

voidsort(inta[],intn)

{inti,j,t;

for(i=0;i

for(j=i+1;j

if(a[i]

}

voidmain()

{intaa[10]={1,2,3,4,5,6,7,8,9,10},i;

sort(&aa[3],5);

for(i=0;i<10;i++)cout<

cout<

}程序运行后的输出结果是1,2,3,8,7,6,5,4,9,10,。

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

本题并不是对数组的所有元素进行排序,而是对从a[3]开始往后的4个元素进行排序。

6)有以下程序

#include

voidmain()

{inta[][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;

elsepa[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。

7)以下程序的输出结果是520。

#include

voidmain()

{charst[20]="hello\0\t\\";

cout<

}

本题主要考查C++语言的字符串与库函数。

C++语言中字符串是以'\0'字符结束的,且strlen()函数计算的是'\0'字符前的所有字符的个数。

本题中strlen(st)应为5。

数组定义以后系统就为其分配相应大小的内存空间,而不论其中有没有内容。

sizeof()函数是计算变量或数组的所分配到的内存空间的大小。

所以本题的sizeof(st)为20。

8)执行下列程序后,输出的结果是10。

intfact(intn)

{

if(n<=1)

return1;

else

returnn+fact(n-1);

}

intmain()

{

cout<

return0;

}

9)对于函数int&add(int*pa,intb);的重载函数,不正

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2