cpplu.docx
《cpplu.docx》由会员分享,可在线阅读,更多相关《cpplu.docx(16页珍藏版)》请在冰豆网上搜索。
![cpplu.docx](https://file1.bdocx.com/fileroot1/2023-6/2/ba5f2213-005a-4dbc-b06a-2795a99ed6ee/ba5f2213-005a-4dbc-b06a-2795a99ed6ee1.gif)
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分)