cpplu.docx

上传人:b****4 文档编号:24904172 上传时间:2023-06-02 格式:DOCX 页数:16 大小:22.28KB
下载 相关 举报
cpplu.docx_第1页
第1页 / 共16页
cpplu.docx_第2页
第2页 / 共16页
cpplu.docx_第3页
第3页 / 共16页
cpplu.docx_第4页
第4页 / 共16页
cpplu.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

cpplu.docx

《cpplu.docx》由会员分享,可在线阅读,更多相关《cpplu.docx(16页珍藏版)》请在冰豆网上搜索。

cpplu.docx

cpplu

一.选择题,每题选择一个正确的答案。

(40)

1假设所有变量均为整型,则表达式(a=2,b=5,b+=2,b/a*a)的值是c。

A)7B)8C)6D)5

2sizeof(float)是b。

A)一个双精度型B)一个整型表达式C)一种函数调用D)一个不合法的表达式

3下列程序段的运行结果是D。

#include

main()

{inty=10;

do{y--;}while(--y);

cout<

}

A)-1B)1C)8D)0

4判断char型变量c1是否为小写字母的正确表达式d。

A)’a’<=c1<=’z’B)(c1>=a)&&(c1<=z)

C)(‘a’>=c1)||(‘z’<=c1)D)(c1>=’a’)&&(c1<=’z’)

5若有说明int(*ptr)()的含义是c。

A)ptr是指向一维数组的指针变量。

B)ptr是指向int型数据的指针变量。

C)ptr是指向函数的指针,该函数返一个int型数据。

D)ptr是一个函数名,该函数的返回值是指向int型数据的指针。

6设有:

inta=2,b=1,c=3,d=4,m=2,n=2;

执行(m=a>b)||(n=c>d)后n的值为b。

A)1B)2C)3D)4

7下面程序的执行结果是a

#include

intt()

{

staticinti=1;

i+=2;returni;

}

intt1()

{

intj=1;

j+=2;returnj;

}

voidmain(void)

{

intj=2;

t();cout<<"I="<

t1();cout<<"J="<

}

A)I=5J=3B)I=5J=5C)I=3J=5D)I=3J=-3

8若有语句:

chars1[]=”string1”,s2[8],*s3,*s4=”string2”;则对库函数strcpy的错误调用是c。

A)strcpy(s1,”string2”);B)strcpy(s4,”string1”);C)strcpy(s3,”string1”);D)strcpy(s2,s1);

9执行下面的程序后,最终的b是b。

#include

intb=3;intfun(int*k);

main()

{

intaa[]={11,12,13,14,15,16};

b=fun(&aa[1])*b;

cout<<"\nbis"<

}

intfun(int*k)

{

intb=2;

returnb=*(k++)*b;

}

A)48B)72C)78D)117

10以下程序的结果是b。

main()

{inta=5,b=0,c=0;

if(a=b+c)cout>>“***\n”;

elsecout<<“$$$\n”;

}

A)有语法错不能通过编译B)输出$$$

C)输出***D)可以通过编译但不能通过连接

11关于for,while以及do…while这三个循环语句,下述描述正确的是c。

A)这三个语句的循环体都至少要执行一次。

B)这三个语句的循环体可能一次也不执行。

C)for和while语句的循环体可能一次也不执行,但do…while语句的循环体至少执行一次。

D)for和while语句的循环体至少执行一次,但do…while语句的循环体可能一次也不执行。

12若有说明:

char*language[]={“1234”,“5678”,”9012”,”3456”,”7890”};则表达式*language[1]>*language[3]比较的是c。

A)”1234”和”9012”B)5和3

C)‘5’和‘3’D)“5678“和”3456“.

13设有以下语句:

structst

{intn;structst*next};

staticstructsta[3]={5,&a[1],7,&a[2],9,‘\0’},*p;

p=&a[0];

则以下表达式的值为6的是d。

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

14以下能正确计算1*2*3*…*10的程序段是c。

A)do{I=1;s=1;s=s*I;I++;}while(I<=10);

B)do{I=1;s=0;s=s*I;I++;}while(I<=10);

C)I=1;s=1;do{s=s*I;I++;}while(I<=10);

D)I=1;s=0;do{s=s*I;I++;}while(I<=10);

15下面程序的运行结果是a。

#defineAA10

#defineDOUBLE(r)r*r;

#include

main()

{

intx=1,y=2,t;

t=DOUBLE(x+y)*AA;

cout<

}

A)t的表达式有错B)50C)30D)第二个宏定义有错

16charstr1[]="AbDeG",str2[]="AbdEg";

str1+=2;str2+=2;cout<

上述程序的执行结果是:

A)正数B)负数C)0D)编译出错

17阅读以下程序段

classA{intx,y;

public:

A(void){x=y=0;}

A(inta,intb){x=a,y=b;}

voidprint(){cout<<”xis“<<”yis“<

};

且有下列用法

1)Aa1={10,20};2)Aa1;cout<

3)Aa1();4)Aa1(10,20),b1;b1=a1;

在上述用法中,正确的是b

A)1)和2)B)3)和4)C)4)D)1),3)和4)

18classTest{

intx,y;

public:

Test(inta,intb)

{x=a;y=b;cout<<"调用了构造函数!

\n";}

voidShow()

{cout<<"x="<

};

voidmain(void)

{

Testt1(10,10);//A

Testt2=t1;//B

Testt3(t1);//C

}

上述程序中,哪几行语句是调用了完成拷贝功能的构造函数b

A)A,B,C三行都是B)B行和C行C)C行D)A行和C行

19有以下叙述:

1)构造函数和析构函数都可以定义为虚函数。

2)包含有纯虚函数的类不可以说明对象。

3)重载的运算符都可以被继承。

4)静态成员函数不包含对象地址的this指针。

叙述正确的是a

A)2)、4)B)1)、4)C)1)、2)、4)D)2)、3)

20已知

inta[3][4]={{5,6,7,8},{9,10,11,12},{13,14,15,16}};

int(*p)[4],*pi=&a[0][0];

下面哪一对指针表示的是同一个元素的地址d

A)pi+5和(p+1)+2B)pi+5和*(p+1)+2

C)pi+5和(p+1)+1D)pi+5和*(p+1)+1

二填空(30)

1.已知inta=1,b=2,那么(a&b)=0(2分)

2.假设m是一个三位数,从左到右用a,b,c表示各位的数字,例如123,则a、b、c分别为1、2、3,那么请用m表示从左到右各个数字是bca的三位数的表达式是=

m/10%10*100+m/100*10+m%10(2分)

3数学公式

的c++表达式为:

sqrt(2*sin(x+y)/(a+b))(2分)

4#include

main()

{

char*s="wbckaaakckb";inta=0,b=0,c=0,x=0;

for(;*s;s++)

switch(*s)

{

case'c':

c++;

case'b':

b++;

case'a':

x++;

default:

a++;

}

cout<

}

执行上述程序后,a、b、c、x的结果分别是什么?

(4分)

a=11b=4c=2x=7

5以下程序的运行结果是I=1i=2i=3i=4i=5i=6i=7i=8。

(4分)

#include

main()

{

char*s="a\065+065\'b";

for(inti=1;*s++;i++)

cout<<"i="<

}

6阅读以下程序后回答后面的问题。

#include

classBase1{

intx;

public:

Base1()

{x=1;cout<<"调用基类1的构造函数!

\n";}

~Base1()

{cout<<"调用基类1的析构函数!

\n";}

intGetx(){returnx;}

};

classBase2{

protectedinty;

public:

Base2(inta)

{y=a;cout<<"调用基类2的构造函数!

\n";}

~Base2()

{cout<<"调用基类2的析构函数!

\n";}

intGety(){returny;}

};

classDerived:

publicBase1,publicBase2{

intz;

public:

Derived(inta,intb):

Base2(a)

{z=b;cout<<"调用派生类的构造函数!

\n";}

voidshow(){cout<

};

main()

{Derivedd(100,200);

}

上述程序的输出是,在show()函数中,cout<

7以下程序的运行结果是(4分)fib(4)is4

#include

longfib(intg)

{

switch(g)

{

case0:

return0;

case1:

case2:

return1;

}

return(fib(g-1)+fib(g-2));

}

main()

{

cout<<”fib(4)is“<

}

8阅读以下程序,并填空(6分)

classMoney{

floatDollars;//元

floatCents;//分

public:

Money(){Dollars=Cents=0;}

Money(float,float);

Money(float);

Moneyoperator++();

Moneyoperator++(int);

operatorfloat();//A

~Money(){}

voidShow(){cout<

};

Money:

:

operatorfloat()

{

floatamount;

amount=Dollars*100.0+Cents;

amount/=100;

returnamount;

}

Money:

:

Money(floatn)//初始化值中整数部分为元,小数部分为分

{

floatFrac,num;

Frac=modff(n,&num);//A

Cents=Frac*100;

Dollars=num;

}

Money:

:

Money(floatd,floatc)//d为元,c为分

{

floatsum,dd,cc;

sum=d+c/100;

cc=modff(sum,&dd);

Dollars=dd;

Cents=cc*100;

}

MoneyMoney:

:

operator++()//前置++

{

Cents++;

if(Cents>=100){

Dollars++;

Cents-=100;

}

(1)

}

MoneyMoney:

:

operator++(int)//后置++

{

Moneyt=*this;//C

Cents++;

if(Cents>=100){

Dollars++;

Cents-=100;

}

(2)

}

voidmain(void)

{

Moneym1(25,50),m2(105.7),m3(1002.25,200.35);

Moneyc,d;

floate1,f1,e2,f2;

m1.Show();

c=++m1;

d=m2++;

c.Show();d.Show();

f1=m3;

cout<<”f1=”<

}

分别在

(1)

(2)的位置上填上相应的语句,return*this;returnt;

//A所在的行定义的函数称为转换函数,

是否可以将该函数定义为floatoperatorfloat();否;

给出该程序的输出结果。

三完善程序(16,每空2分)

1下面程序的功能是将两个字符串s1和s2连接起来。

请填空

#include

#include

char*conj(char*p1,char*p2);

main()

{

chars1[80],s2[80],s3[160];

cin.getline(s1,80);cin.getline(s2,80);

strcpy(s3,s1);

conj(s3,s2);

cout<<”s3is“<

}

char*conj(char*p1,char*p2)

{

char*p=p1;

while(*p1)

(1);

while(*p2){*p1=

(2);p1++;p2++;}

*p1=’\0’;

(3);

}

(1)p1++

(2)*p2(3)returnp;

2完善有关的运算符重载。

#include

#include

classString{

protected:

intLength;//字符串的长度

char*Sp;//指向字符串的指针

public:

String(){Sp=0;Length=0;}//缺省的构造函数

String(constString&);//以对象作为参数

String(constchar*s)//以一个字符串常量作为参数

{

Length=strlen(s);

Sp=newchar[Length+1];

strcpy(Sp,s);

}

~String()

{if(Sp)delete[]Sp;}

Stringoperator+=(constString&)

{

Stringt(*this);

Length=Length+s.Length;

(4);

Sp=newchar[Length+1];

(5);

strcat(Sp,s.Sp);

return*this;

}

};

(4)if(Sp)delete[]Sp;(5)strcpy(Sp,t.Sp);

3已知链表的数据结构为:

structnode{

intdata;

node*next;

};

建立无序链表的函数如下:

node*Create()

{

node*p1,*p2,*head;

inta;

head=0;

cout<<"产生一条无序链表,请输入数据,以-1结束:

";

cin>>a;

while(a!

=-1){

(6);

p1->data=a;

if(head==0){

head=p1;p2=p1;

}

else{

(7);p2=p1;

}

cin>>a;

}

p2->next=0;

(8);

}

(6)p1=newnode(7)p2->next=p1(8)return(head)

四编程(14)

1下面的函数的功能是对数组a进行排序,按照从小到大的顺序排序,参数n表示数组元素的个数。

完善函数体。

(4分)

voidsort(floata[],intn)

{……

}

2描述一个复数类Complex,私有数据为实部Real和虚部Imag

要求Complex类能提供如下操作(方法):

1)构造函数,缺省时实部Real和虚部Imag置为0

2)使用友元函数重载运算符+,完成两个复数的加法

3)用成员函数重载运算符*,完成两个复数的乘法

4)用成员函数重载运算符=,完成两个复数的赋值。

(10分)

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

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1