《c練習題(帶答案)》由會員分享,可在線閱讀,更多相關(guān)《c練習題(帶答案)(12頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、一、選擇題
1. C++語言屬于( C )。
A) 自然語言 B) 機器語言 C)面向?qū)ο笳Z言 D) 匯編語言
2. 下面選項中不屬于面向?qū)ο蟪绦蛟O(shè)計特征的是(C) 。
A)繼承性 B)多態(tài)性 C)相似性 D)封裝性
3. 可用作C++語言用戶標識符的一組標識符是( B )。
A) void define +WORD B) a3_b3 _123 YN
C) for -abc Case D) 2a DO sizeof
4. 假定一個二維數(shù)組的定義語句為“int
2、a[3][4]={{3,4},{2,8,6}};”,則元素a[2][1]的值為(A)。
A) 0 B) 4 C) 8 D) 6
5. 下列情況中,哪一種情況不會調(diào)用拷貝構(gòu)造函數(shù) ( B )
A)用派生類的對象去初始化基類對象時
B)將類的一個對象賦值給該類的另一個對象時
C)函數(shù)的形參是類的對象,調(diào)用函數(shù)進行形參和實參結(jié)合時
D)函數(shù)的返回值是類的對象,函數(shù)執(zhí)行返回調(diào)用者時
6. 以下哪一關(guān)鍵字可用于重載函數(shù)的區(qū)分( C )
A)extern B)static C)const D)virtual
7. 下列有關(guān)數(shù)組的敘述
3、中,正確的是( B )
A)C++中數(shù)組的存儲方式為列優(yōu)先存儲
B)數(shù)組名可以作為實參賦值給指針類型的形參
C)數(shù)組下標索引從1開始,至數(shù)組長度n結(jié)束
D)數(shù)組指針的語法形式為:類型名 *數(shù)組名[下標表達式];
8. 下列有關(guān)繼承和派生的敘述中,正確的是( C )
A)派生類不能訪問通過私有繼承的基類的保護成員
B)多繼承的虛基類不能夠?qū)嵗?
C)如果基類沒有默認構(gòu)造函數(shù),派生類就應當聲明帶形參的構(gòu)造函數(shù)
D)基類的析構(gòu)函數(shù)和虛函數(shù)都不能夠被繼承,需要在派生類中重新實現(xiàn)
9. 實現(xiàn)運行時多態(tài)的機制是( A )
A)虛函數(shù) B)重載函數(shù) C)靜態(tài)函
4、數(shù) D)模版函數(shù)
10. 若有下面的函數(shù)調(diào)用:
fun(a+b, 3, max(n-1, b));
其中實參的個數(shù)是( A )
A)3 B)4 C)5 D)6
11. 下列關(guān)于this指針的說法正確的是( B )
A)this指針存在于每個函數(shù)之中
B)在類的非靜態(tài)函數(shù)中this指針指向調(diào)用該函數(shù)的對象
C)this指針是指向虛函數(shù)表的指針
D)this指針是指向類的函數(shù)成員的指針
12. 在下列關(guān)于C++函數(shù)的敘述中,正確的是( C )
A)每個函數(shù)至少要有一個參數(shù) B)每個函數(shù)都必須返回一個值
C)函數(shù)在被調(diào)用之前必須先聲明 D)
5、函數(shù)不能自己調(diào)用自己
13. 下列運算符中,不能重載的是 ( C )
A)&& B)!= C). D)->
14. 下面程序的輸出結(jié)果是( B )
#include
using namespace std;
int i = 0;
int fun(int n)
{
static int a = 2;
a++;
return a+n;//定義一個函數(shù) FUN
}
void main()
{
int k = 5;
{
int i = 2;
k += fun(i);
}
k += fun(i)
6、;
cout << k;
}
A)13 B)14 C)15 D)16
15. 下面的程序段的運行結(jié)果為( D )
char str[] = "job", *p = str;
cout << *(p+2) << endl;
A)98 B)無輸出結(jié)果 C)字符’b’的地址 D)字符’b’
16. 下面程序的輸出結(jié)果是( C )
#include
using namespace std;
class A
{
public:
A (int i) { x = i; }
void dispa
7、() { cout << x << “,”; }
private :
int x ;
};
class B : public A
{
public:
B(int i) : A(i+10) { x = i; }
void dispb() { dispa(); cout << x << endl; }
private :
int x ;
};
void main()
{
B b(2);
b.dispb();
}
A)10,2 B)12,10 C)12,2 D)2,2
17. 下面程序的輸出結(jié)果是( C )
8、
#include
using namespace std;
class Base
{
public:
Base(int i) { cout << i; }
~Base () { }
};
class Base1: virtual public Base
{
public:
Base1(int i, int j=0) : Base(j) { cout << i; }
~Base1() {}
};
class Base2: virtual public Base
{
public:
Base2
9、(int i, int j=0) : Base(j) { cout << i; }
~Base2() {}
};
class Derived : public Base2, public Base1
{
public:
Derived(int a, int b, int c, int d) : mem1(a), mem2(b), Base1(c),
Base2(d), Base(a)
{ cout << b; }
private:
Base2 mem2;
10、
Base1 mem1;
};
void main() { Derived objD (1, 2, 3, 4); }
A)134122 B)123412 C)14302012 D)143212
18. 下面程序的輸出結(jié)果是( C )
#include
using namespace std;
class Base
{
public:
virtual void f() { cout << “f0+”; }
void g() { cout << “g0+”; }
};
class Derived : publi
11、c Base
{
public:
void f() { cout << “f+”; }
void g() { cout << “g+”; }
};
void main() { Derived d; Base *p = &d; p->f(); p->g(); }
A)f+g+ B)f0+g+ C)f+g0+ D)f0+g0+
19. 下面程序的輸出結(jié)果是( C )
#include
using namespace std;
class Sample
{
friend long fun (Sample s)
12、 {
if (s.x < 2) return 1;
return s.x * fun(Sample(s.x-1));
}
public:
Sample (long a) { x = a; }
private:
long x;
};
void main()
{
int sum = 0;
for (int i=0; i<4; i++)
{
sum += fun(Sample(i));
}
cout << sum;
}A)12 B)16 C)10 D)34
20. 以下程序的輸出結(jié)果是:(
13、D )
#include
using namespace std;
int fun(char *s)
{ char *p=s;
while (*p!='\0') p++;
return (p-s);
}
void main(){
cout<
14、執(zhí)行這個程序段輸出字符*的個數(shù)是(C)
A. 10 B. 3 C. 4 D.5
22. 下列關(guān)于虛基類的描述中,錯誤的是(C)
A. 使用虛基類可以消除由多繼承產(chǎn)生的二義性
B. 構(gòu)造派生類對象時,虛基類的構(gòu)造函數(shù)只被調(diào)用一次
C. 聲明 class B:virtual public A 說明類B為虛基類
D. 建立派生類對象時,首先調(diào)用虛基類的構(gòu)造函數(shù)
23. 有下類定義
Class A {
Char *a;
Public:
A():a(0){}
A(char *aa) {//把aa所指字符串拷貝到a所指向的存儲空間
A=______
15、_____________;
Strcpy(a,aa);
~A() {delete [] a;}
};
正確的選擇是(A)
A. new char[strlen(aa)+1] B. char[strlen(aa)+1]
C. char[strlen(aa)] D. new char[sizeof(aa)-1]
24. 假定AA為一個類,a為該類私有的數(shù)據(jù)成員,GetValue( )為該類公有函數(shù)成員,它返回a的值,x為該類的一個對象,則訪問x對象中數(shù)據(jù)成員a的格式為( X )。
A) x.a B) x.a() C) x->Get
16、Value() D) x.GetValue( )
25. 假定AA為一個類,int a()為該類的一個成員函數(shù),若該成員函數(shù)在類定義體外定義,則函數(shù)頭為( A )。
A) int AA::a( ) B) int AA:a()
C) AA::a() D) AA::int a()
26. 有如下程序:
#include
using namespace std;
class Test{
public:
Test(){}
~Test(){cout<<'#';}
};
int main(){
Test tem
17、p[2], *pTemp[2];
return 0;
}
執(zhí)行這個程序輸出星號(#)的個數(shù)為(B )。
A)1 B)2 C)3 D)4
27. 有如下程序:
#include
using namespace std;
class MyClass{
public:
MyClass(int i=0){cout<<1;}
MyClass(const MyClass&x){cout<<2;}
MyClass& operator=(const MyClass&x){cout<<3; return *this;}
~MyClass(){c
18、out<<4;}
};
int main(){
MyClass obj1(1),obj2(2),obj3(obj1);
obj1=obj2;
return 0;
}運行時的輸出結(jié)果是( A)。
A)1123444 B)11114444 C)121444 D)11314444
28. 有如下程序:
#include
using namespace std;
class point
{
public:
static int number;
public:
point() { number++;}
~point()
19、 {number--;}
};
int point::number=0;
void main()
{ point *ptr;
point A,B;
{
point *ptr_point=new point[3];
ptr=ptr_point;
}
point C;
delete[] ptr;
cout<
20、 B. operator++(obj,0)
B. obj.operator++( ) D. obj.operator++(0)
二、程序填空
1.用遞歸法求從1到n的立方和:
f(1)=1 (n=1)
f(n)=f(n-1)+n3 (n>1)
#include
using namespace std;
int f(int);
int main(){
int n,s;
cout<<"input the number n:";
cin>>n;
s= f
21、(n) ;
cout<<"The result is "<
using namespace std;
class Base
{
public:
22、 virtual ~Base () { cout << “Destructor Base”<< endl; }
};
class Derived : public Base
{
public:
~Derived(){ cout << “Destructor Derived” << endl; }
};
void main ()
{
Base *pBase = new Derived;
delete pBase ;
}
三、閱讀程序,寫出運行結(jié)果
1.
#include
#
23、include
using namespace std;?
class CD
{
char name[20];
int number;
public:
void Init(char* aa, int bb)
{
strcpy(name,aa);
number=bb;
}
char* Getname () {return name;}
int Getnumber () {return number;}
void Output() {co
24、ut<< name <<' '<< number <
using namespace std;
int f(int a){
return ++a;
}
int g(int& a){
25、
return ++a;
}
void main(){
int m=0,n=0;
m+=f(g(m));
n+=f(f(n));
cout<<"m="<
using namespace std;
class Demo
{
public:
Demo(){cout<<"default constructor\n";}
Demo(const Demo &
26、x){cout<<"copy constructor\n";}
};
Demo userCode(Demo b){Demo c(b);return c;}
void main()
{
Demo a,d;
cout<<"calling userCode()\n";
d = userCode(a);
}
執(zhí)行上面的程序的過程中,構(gòu)造函數(shù)Demo()和Demo(const Demo &x)被調(diào)用的次數(shù)分別是多少次?
五、編寫程序
1、編寫函數(shù)計算y=1!+2!+3!...n! ,n作為參數(shù)傳遞,在主函數(shù)調(diào)用該函數(shù)并輸出結(jié)果。
2、編寫函數(shù)找出二維數(shù)組(5*4)中元素的最大值與最小值,并返回其最大值與最小值。測試結(jié)果。
3、編寫一個三角形類,有計算面積,顯示面積的功能等,并測試。要求有參數(shù)的構(gòu)造函數(shù)及復制構(gòu)造函數(shù)
12
12