C++面试题100题之前50题

http://blog.csdn.net/hackbuteer1/article/details/7926592

1、以下程序的运行结果是()

    int main(void) 
    { 
        printf("%s , %5.3s\n","computer","computer"); 
        return 0; 
    } 

A、computer , puter                                      B、computer , com
C、computer , computer                                D、computer , compu.ter 
2、以下程序的功能是()

    #include<stdio.h> 
    int main(void) 
    { 
        FILE *fp; 
        long int n; 
        fp = fopen("wj.txt","rb"); 
        fseek(fp , 0 , SEEK_END); 
        n = ftell(fp); 
        fclose(fp); 
        printf("%ld",n); 
    } 

A、计算文件wj.txt内容的字节数
B、计算文件wj.txt的终止地址
C、计算文件wj.txt的起始地址
D、将文件指针定位到文件末尾
3、若输入B,则以下程序运行后的输出结果是()

    int main(void) 
    { 
        char grade; 
        scanf("%c",&grade); 
        switch(grade) 
        { 
        case 'A': 
            printf(">=85"); 
        case 'B': 
        case 'C': 
            printf(">=60"); 
        case 'D': 
            printf("<60"); 
        default: 
            printf("error."); 
        } 
    } 

A、error.
B、>=60
C、>=85
D、>=60<60error.
4、以下程序的输出结果是()

    int power(int x , int y); 
    int main(void) 
    { 
        float a = 2.6 , b = 3.4; 
        int p; 
        p = power((int)a , (int)b); 
        printf("%d\n",p); 
        return 0; 
    } 
    int power(int x , int y) 
    { 
        int i , p = 1; 
        for(i = y ; i > 0 ; i--) 
            p *= x; 
        return p; 
    } 

A、27                       B、9                             C、8                                  D、81
5、以下程序段的输出结果是()

    int p = 1234; 
        printf("%2d\n",p); 

A、12                       B、34                            C、1234                                 D、提示出错、无结果
6、以下程序运行后的输出结果是()

    int main(void) 
    { 
        int a; 
        char c = 10; 
        float f = 100.0; 
        double x; 
        a = f /= c *= (x=6.5); 
        printf("%d %d %3.1f %3.1f\n",a,c,f,x); 
        return 0; 
    } 

A、1     65     1         6.5
B、1     65     1.5      6.5
C、1     65     1.0      6.5
D、2     65     1.5      6.5
7、以下程序的运行结果是()(主要考察运算符的优先级)

    int main(void) 
    { 
        int x , y , z; 
        x = 0 , y = 1 , z = 3; 
        x = ++y <= x || x+y != z; 
     
        printf("%d,%d\n",x , y); 
        return 0; 
    } 

A、1 ,2                       B、1 , 1                                   C、0,2                              D、0,1     答案A
8、以下语句的输出结果是()(主要考察逗号表达式)

    int main(void) 
    { 
        int x = 10 , y = 3 , z; 
     
        printf("%d\n",z = (x%y , x/y)); 
        return 0; 
    } 

A、4              B、0                   C、3                      D、1                   答案 C
逗号表达式的一般形式:
表达式1,表达式2,表达式3......表达式n
它的值为表达式n的值。
括号表达式要求按顺序逐一计算各个子表达式,并以最后一个子表达式的值作为括号表达式的结果,最后将该结果赋给变量。
printf("%d %d %d",(a,b,c),b,c);
则(a,b,c)是一个逗号表达式,它的值等于c的值。括号内的逗号不是参数间的分隔符而是逗号运算符。括号中的内容是一个整体,作为printf函数的第一个参数。
9、设有语句  char a = '\72'; 则变量a()
A、包含2个字符                                          B、说明不合法
C、包含1个字符                                          D、包含3个字符                      答案 C
10、已知数据表A中每个元素距其最终位置不远,为节省时间,应该采用的算法是()
A、直接选择排序
B、堆排序
C、快速排序
D、直接插入排序    答案C
11、以下程序段的运行结果是()

    int main(void) 
    { 
        char aa[][3] = {'a','b','c','d','e','f'}; 
        char (*p)[3] = aa; 
        p++; 
     
        printf("%c\n",**p); 
        return 0; 
    } 

A、b                        B、a                    C、c                    D、d     答案 D
12、在C语言中,下列()是合法的标示符。   答案C
A、4x                   B、1P234
C、COUNT            D、short
13、C语言中的标识符只能有字母、数字和下划线三种字符组成,且第一个字符()B
A、必须为字母
B、必须为字母或下划线
C、必须不是字母或下划线
D、必须为下划线
14、下面程序的输出是()

    int main(void) 
    { 
        enum team { my , your = 9 , his , her = his + 3}; 
     
        printf("%d %d %d %d\n",my , your , his , her); 
        return 0; 
    } 

A、0     9    10   13                 B、0     8    11   12
C、0     8    10   12                 D、0     8    12   9    答案A
15、以下程序

    int main(int argc, char** argv)  
    { 
        int n = 0 , i; 
        for(i = 1 ; i < argc ; i++) 
            n = n * 10 + *argv[i]-'0'; 
        printf("%d\n",n); 
        return 0; 
    } 

经编译链接生成可执行文件tt.exe,若运行时输入以下命令行   tt   12   345   678,则程序运行的输出结果是()
A、136              B、12345              C、12345678               D、12                               答案A
解析:主函数的第一个参数argc为整型参数,记下从命令行输入参数的个数;第二个参数argv是一个字符型的指针数组,它的每一个元素分别指向命令行输入的各字符串。在本例中argc的值为4,argv[0]指向字符串“tt”,argv[1]指向字符串“12”,argv[2]指向字符串“345”, argv[3]指向字符串“678”。程序中,通过一个for循环,遍历了后面的三个参数字符串,每次将n自乘10,然后累加argv[i]-‘0’,即第i个参数字符串的首字符减去‘0’。  一个数字字符减去‘0’字符,即可得到这个数字字符的实际数值,因此三次循环的结果是让n的值变为136,故本题应该选择A。
16、若已定义:int a[9],*p = a; 并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是()
A、++p            B、a+1            C、p+1            D、a++   答案D
17、若执行下面的程序时,从键盘上输入5,则输出是()

    int main(int argc, char** argv)  
    { 
        int x; 
        scanf("%d",&x); 
        if(x++ > 5) 
            printf("%d\n",x); 
        else 
            printf("%d\n",x--); 
        return 0; 
    } 

A、7                 B、4                   C、6                  D、5    答案为C
18、已知有如下的变量定义,那么第二行的表达式的值是多少()(主要考察运算符的优先级)

    int main(void)  
    { 
        int x = 3 , y = 4 , z = 5; 
        !(x + y) + z-1 && y + z/2; 
        return 0; 
    } 

A、6             B、2               C、0                  D、1    答案 D
19、下列运算符函数中,肯定不属于类Value的成员函数是()
A、Value operator/(Value);
B、Value operator-(Value,Value);B
C、Value operator+(Value);
D、Value operator*(int);
20、以下关于函数模板和模板函数的描述中,错误的是()
A、函数模板是定义重载函数的一种工具
B、模板函数在编译时不生成可执行代码 B
C、函数模板是一组函数的样板
D、模板函数是函数模板的一个实例
21、以下关于文件操作的描述中,不正确的是()
A、关闭文件的目的之一是释放内存中的文件对象
B、关闭文件的目的之一是保证将输出的数据写入硬盘文件
C、文件读写过程中,程序将直接与磁盘文件进行数据交换  C
D、打开文件的目的是使文件对象与磁盘文件建立联系
22、在重载一运算符时,若运算符函数的形参表中没有参数,则不可能的情况是()
A、该运算符函数是类的友元函数  A
B、该运算符函数有一个隐含的参数this
C、该运算符函数是类的成员函数
D、该运算符是一个单目运算符
23、下列哪一个是析构函数的特征()
A、析构函数定义只能在类体内
B、一个类中只能定义一个析构函数 B
C、析构函数名与类名不同
D、析构函数可以有一个或多个参数
24、数据流程图(DFD图)是()
A、软件概要设计的工具
B、软件详细设计的工具
C、结构化方法的需求分析工具  C
D、面向对象方法的需求分析工具
25、执行 int a = ( 1 , 3 , 11); int b = a; 后,b的值是多少?
A、11  A
B、1
C、3
D、15
E、{ 1 , 3 , 11}
26、设a=1,b=2,则(a++)+b 和 a+++b 这两个表达式的值分别是()
A、4 , 4
B、3 , 4
C、4 , 3
D、3 , 3  D
27、如果A类型是B类型的子类型,则A类型必然适应于B类型  B
A、错                B、对
28、条件语句不能作为多路分支语句。 B
A、对                B、错
29、下列while循环的次数是()
[cpp] view plaincopy

    void main() 
    { 
        while(int i = 0) 
            i--; 
    } 

A、无限 B
B、0
C、1
D、5
30、关于纯虚函数,下列表述正确的是()
A、派生类必须实现基类的纯虚函数
B、纯虚函数的声明总是以”=0“结束    B
C、纯虚函数是给出实现版本(即无函数体定义)的虚函数
D、含有纯虚函数的类一定是派生类
31、下列静态数据成员的特性中,()是错误的
A、引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符
B、说明静态数据成员时前边要加关键字static来修饰
C、静态数据成员在类体外进行初始化
D、静态数据成员不是所有对象所共有的  D
32、关键词explicit的作用是什么?
A、它使一个默认构造函数的声明变为强制性的
B、它可以使一个变量存在主内存中而不是处理器的缓存中
C、它可以防止单参数的构造函数被用于隐式转换  C
33、下列输出字符‘A’的方法中,()是错误的
A、char A = 'A';   cout<<A;
B、cout<<'A';
C、cout<<put('A');
D、cout.put('A');  C
34、对于int *pa[5]; 的描述,()是正确的。A
A、pa是一个具有5个元素的指针数组,每个元素是一个int类型的指针;
B、pa[5]表示某个数组的第5个元素的值;
C、pa是一个指向数组的指针,所指向的数组是5个int类型的元素;
D、pa是一个指向某个数组中第5个元素的指针,该元素是int类型的变量;
35、C++中关于函数不正确的是()
A、函数调用语句必须写在函数定义的前面  A
B、函数可以没有返回值
C、函数声明就是原型声明
D、不允许嵌套定义
A应该修改为:函数调用语句必须写在函数声明的前面
36、若二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为()
A、n-1
B、n+1  B
C、2n
D、n/2
37、在多文件结构的程序中,通常把含有main()函数的文件称为()
A、主文件 A
B、头文件
C、实现文件
D、程序文件
38、在以下一组运算符中,优先级最高的运算符是()
A、 && A
B、 =
C、 <=
D、 %
39、关于read()函数的下列描述中,()是对的。
A、该函数只能从键盘输入中获取字符串
B、该函数只能按规定读取所指定的字符数
C、该函数只能用于文本文件的操作中
D、该函数所获取的字符多少是不受限制的  D
40、有如下程序:

    #include<iostream> 
    using namespace std; 
     
    class MyClass 
    { 
    public: 
        MyClass(int i = 0) 
        { 
            cout<<i; 
        } 
        MyClass(const MyClass &x) 
        { 
            cout<<2; 
        } 
        MyClass& operator=(const MyClass &x) 
        { 
            cout<<3; 
            return *this; 
        } 
        ~MyClass() 
        { 
            cout<<4; 
        } 
    }; 
     
    int  main()  
    { 
        MyClass obj1(1) , obj2(2) , obj3(obj1); 
        return 0; 
    } 

运行时的输出结果是()  C
A、11214444
B、11114444
C、122444
D、11214445
E、121444
41、以下程序段的输出结果是()

    #include<iostream> 
    using namespace std; 
     
    class A 
    { 
    public: 
        A(int i ) 
        { 
            cout<<"A "; 
        } 
        ~A()  { } 
    }; 
    class B 
    { 
    public: 
        B(int j ) 
        { 
            cout<<"B "; 
        } 
        ~B()  { } 
    }; 
    class C 
    { 
    public: 
        C(int k ) 
        { 
            cout<<"C "; 
        } 
        ~C()  {    cout<<"~C ";   } 
    }; 
     
    class D : public C 
    { 
    public: 
        D(int i , int j , int k ) : a(i) , b(j) , C(k) 
        { 
            cout<<"D "; 
        } 
        ~D()  {    cout<<"~D ";   } 
    private: 
        B b; 
        A a; 
    }; 
     
    int  main()  
    { 
        C *pc = new D(1 , 2 , 3); 
        delete pc; 
        return 0; 
    } 

A、A  B  C  D ~D
B、A  B  C  D ~C
C、C  B  A  D ~D
D、C  B  A  D ~C
42、关于运算符重载,下列说法正确的是()
A、重载时,运算符的结合性可以改变
B、重载时,运算符的优先级可以改变
C、重载时,运算符的功能可以改变
D、重载时,运算符的操作数个数可以改变
43、下面哪一个不是由标准模板库提供的合法的哈希表?
A、hash_multiset
B、hash_table
C、hash_set
D、hash_multimap
E、hash_map
44、int x = 2 , y = 3 , z = 4; 则表达式!x+y>z的值为()
A、1
B、FALSE
C、TRUE
D、0
45、下面的程序段的输出结果是()
[cpp] view plaincopy

    void main() 
    { 
        char *x = "abcd"; 
        x += 2; 
        cout<<x; 
    } 

A、指针变量x的地址
B、字符c的地址
C、c
D、cd
46、下面对于友元函数的描述正确的是()
A、友元函数不能访问类的私有成员
B、友元函数是类的成员
C、友元函数的实现必须在类的内部定义
D、友元函数破坏了类的封装性和隐藏性
47、内存释放的原则是谁申请谁释放()
A、错                        B、对
48、已知int a , *pa=&a; 输出指针pa十进制的地址值的方法是()
A、cout<<*pa;
B、cout<<long(&pa);
C、cout<<pa;
D、cout<<&pa;
49、被非静态成员函数访问的类的数据成员()
A、不可能是类的静态数据成员
B、只能是类的非静态数据成员
C、只能是类的静态数据成员
D、可以是非静态数据成员或静态数据成员
50、有如下程序
[cpp] view plaincopy

    class Name 
    { 
        char name[20]; 
    public: 
        Name() 
        { 
            strcpy(name , ""); 
            cout<<'?'; 
        } 
        Name(char *fname) 
        { 
            strcpy(name , fname); 
            cout<<'?'; 
        } 
    }; 
    void main() 
    { 
        Name names[3] = {Name("张三") , Name("李四") }; 
    } 

运行此程序输出符号?的个数是()
A、1
B、2
C、0
D、3

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《面向对象程序设计》试 一、单选(每空2分,共40分) 1、关于C++与C语言关系的描述中,( )是错误的。 A.C语言是C++语言的一个子集 B.C语言与C++语言是兼容的 C.C++语言对C语言进行了一些改进 D.C++语言和C语言都是面向对象的 2、已知:int m=10; 下列表示引用的方法中,( )是正确的。 A.int& x=m; B.int& y=10; C.int& z; D.float& t=&m; 3、考虑下面的函数原型声明: void DefPar(int a, int b=7, char z = '*'); 下面函数调用中,不合法的是( )。 A.DefPar(5); B.DefPar(5,8); C.DefPar(5,'#'); D.DefPar(0,0,'*'); 4、系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用,在下列选项中,不能作为依据的是( )。 A.函数的返回值类型 B.参数的类型 C.函数名称 D.参数个数 5、下列有关C++类的说法中,不正确的是( )。 A.类是一种用户自定义的数据类型 B.只有类中的成员函数或类的友元函数才能存取类中的私有成员 C.在类中,如果不做特别说明,所有成员的访问权限均为私有的 D.在类中,如果不做特别说明,所有成员的访问权限均为公用的 6、已知X类,则当程序执行到语句X array[3];时,调用了( )次构造函数。 A.0 B.1 C.2 D.3 7、有关析构函数的说法,不正确的是( )。 A.析构函数有且仅有一个 B.析构函数和构造函数一样可以有形参 C.析构函数的功能是在系统释放对象之前作一些内存清理工作 D.析构函数无任何函数类型 8、类定义的内容允许被其对象无限制地存取的是( )。 A.private 部分 B. protected 部分 C.public 部分 D.以上都不对 9、关于常数据成员的说法,不正确的是( )。 A.常数据成员的定义形式与一般常变量的,只不过常数据成员的定义必须出现在类体中 B.常数据成员必须进行初始化,并且不能被更新 C.常数据成员通过构造函数的成员初始化列表进行初始化 D.常数据成员可以在定义时直接初始化 10、运用运算符delete删除一个动态对象时( )。 A.系统首先为该动态对象调用构造函数,再释放其占用的内存 B.系统首先释放该动态对象占用的内存,再为其调用构造函数 C.系统首先为该动态对象调用析构函数,再释放其占用的内存 D.系统首先释放动态对象占用的内存,再为其调用析构函数 11、可在类外用p.a的形式访问派生类对象 p的基类成员a,其中a是( )。 A.私有继承的公用成员 B.公用继承的私有成员 C.公用继承的保护成员 D.公用继承的公用成员 12、在公用继承方式下,有关派生类对象和基类对象的关系,不正确的叙述是(  )。 A.派生类的对象可以赋给基类的对象 B.派生类的对象可以初始化基类的引用 C.派生类的对象可以直接访问基类中的成员 D.派生类的对象的地址可以赋给指向基类的指针 13、设置虚基类的目的是( )。 A.简化程序 B.消除二义性 C.提高运行效率 D.减少目标代码 14、在C++中,用于实现动态多态性的是( )。 A.内联函数 B.重载函数 C.模板函数 D.虚函数 15、不能说明为虚函数的是( )。 A.析构函数 B.构造函数 C.类的成员函数 D.以上都不对 16、如果一个类至少有一个纯虚函数,那么就称该类为( )。 A.抽象类 B.派生类 C.纯基类 D.以上都不对 17、下面关于友元的描述中,错误的是( )。 A.友元函数可以访问该类的私有数据成员 B.一个类的友元类中的成员函数都是这个类的友元函数 C.友元可以提高程序的运行效率 D.类与类之间的友元关系可以继承 18、下列运算符中,( )运算符在C++中不能被重载。 A.&& B.[ ] C.:: D.new 19、模板的使用实际上是将类模板实例化成一个( )。 A.函数 B.对象 C.类 D.抽象类 20、假定MyClass为一个类,则该类的拷贝构造函数的声明语句为( )。 A.MyClass(MyClass x) B.MyClass&(MyClass x) C.MyClass(MyClass &x) D.MyClass(MyClass *x) 二、填空(前16个空,每空1分,后2个空,每空2分,共20分) 1、类和对象的关系可表述为:类是对象的 ,而对象则是类的 。 2、在C++中,三种继承方式的说明符号为 、 和 ,如果不加说明,则默认的继承方式为 。 3、如果只想保留公共基类的一个复制,就必须使用关键字 把这个公共基类声明为虚基类。 4、若要把void fun( )定义为类A的友元函数,则应在类A的定义中加入语句 。 5、类的静态成员分为 和 。 6、运算符重载要求保持其原来的操作数个数、 、 和语法结构。 7、通过关键字 可以声明模板,通过关键字 指定函数模板的类型参数,有几个类型参数就有几个类型关键字。 8、列出C++中两种用户自定义的数据类型: 、 。 9、构造函数的作用是 。 10、后置自增运算符“++”重载为类的成员函数(设类名为A)的形式为 。 三、阅读下面3个程序,写出程序运行时输出的结果:(共13分) 1、#include <iostream> using namespace std; void fun(int &a,int &b) { int p; p=a; a=b; b=p; } void exchange(int &a,int &b,int &c) { if(a<b) fun(a,b); if(a<c) fun(a,c); if(b<c) fun(b,c); } void main() { int a=12,b=89,c=56; exchange(a,b,c); cout<<"a="<<a<<",b="<<b<< ",c="<<c<<endl; } 2、#include <iostream> using namespace std; class Date { public: Date(int,int,int); Date(int,int); Date(int); Date(); void display(); private: int month, day, year; }; Date::Date(int m, int d, int y) : month(m),day(d),year(y) { } Date::Date(int m,int d):month(m),day(d) { year=2009; } Date::Date(int m) : month(m) { day=1; year=2010; } Date::Date() { month=1; day=1; year=2010; } void Date::display() { cout <<month<<"/"<<day<<"/"<<year<<endl; } void main() { Date d1(12,31,2009); Date d2(12,31); Date d3(1); Date d4; d1.display(); d2.display(); d3.display(); d4.display(); } 3、#include <iostream> using namespace std; class A { public: A() { cout<<"constructing A "<<endl; } ~A() { cout<<"destructing A "<<endl; } }; class B: public A { public: B() { cout<<"constructing B "<<endl; } ~B() { cout<<"destructing B "<<endl; } }; class C : public B { public: C() { cout<<"constructing C "<<endl; } ~C() { cout<<"destructing C "<<endl; } }; void main() { C c1; } 四、编程(共27分) 1、(10分)已知复数类Complex的声明如下: class Complex { public: Complex(); Complex(double); Complex(double, double); friend Complex operator + (Complex&, Complex&); friend ostream & operator << (ostream&, Complex&); friend istream& operator >> (istream&, Complex&); private: double real, imag; }; 要求: (1)写出该类的所有构造函数的类外定义代码。 (2)写出对运算符“+”、“<<”、“>>”进行重载的运算符重载函数的定义。 2、(17分)下列Base类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则是一个通用的用以求不同形状的图形面积总和的函数。 class Base { public: virtual double area()=0; }; double total(Base *s[ ], int n) { double sum=0.0; for(int i=0; i<n; i++) sum+=s[i]->area( ); return sum; } 要求: (1)从Base类派生圆类(Circle)、正方形类(Square),圆类新增数据成员半径(radius),正方形类新增数据成员边长(a),圆类和正方形类都有构造函数,修改、显示数据成员值的函数,求面积函数。 (2)写出main( )函数,计算半径为5.5的圆和边长为9.9的正方形的面积和(必须通过调用total函数计算)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值