zoukankan      html  css  js  c++  java
  • C++笔试题库之编程、问答题 200~300道

    201下面的代码有什么问题?并请给出正确的写法。

    void DoSomeThing(char* p)

    {

    char str[16];

    int n;

    assert(NULL != p);

    sscanf(p, “%s%d”, str, n);

    if (0 == strcmp(str, “something”))

    {

    }

    }

    A:

    sscanf(p, “%s%d”, str, n);   这句该写成: sscanf(p, “%s%d”, str, &n); ————————————————————————–

    202.下面代码有什么错误?

     

    Void test1()

    {

     

    char string[10];

    char *str1=”0123456789″;

    strcpy(string, str1);

     

    }

    数组越界

     

    203.下面代码有什么问题?

     

    Void test2()

     

    {

     

    char string[10], str1[10];

     

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

    {

    str1[i] =’a';

    }

    strcpy(string, str1);

    }

    }

    数组越界

     

    204下面代码有什么问题?LUPA开源社区+j H2B F,c U

     

    Void test3(char* str1)

    {

    char string[10];

    if(strlen(str1)<=10)

    {

    strcpy(string, str1);

    }

    }

    ==数组越界

    ==strcpy拷贝的结束标志是查找字符串中的 因此如果字符串中没有遇到的话 会一直复制,直到遇到,上面的123都因此产生越界的情况

    建议使用 strncpy 和 memcpy

     

    205.写出运行结果:

    {

    char str[] = “world”; cout << sizeof(str) << “: “;

    char *p    = str;     cout << sizeof(p) << “: “;

    char i     = 10;      cout << sizeof(i) << “: “;

    void *pp   = malloc(10); cout << sizeof(p) << endl;

    }

    6:4:1:4

     

    ————————————————————————–

    206.C和C++有什么不同?

    从机制上:c是面向过程的(但c也可以编写面向对象的程序);c++是面向对象的,提供了类。但是,c++编写面向对象的程序比c容易

    从适用的方向:c适合要求代码体积小的,效率高的场合,如嵌入式;c++适合更上层的,复杂的; llinux核心大部分是c写的,因为它是系统软件,效率要求极高。

    从名称上也可以看出,c++比c多了+,说明c++是c的超集;那为什么不叫c+而叫c++呢,是因为c++比

    c来说扩充的东西太多了,所以就在c后面放上两个+;于是就成了c++

    C语言是结构化编程语言,C++是面向对象编程语言。LUPA开源社区 } n*r2C/M8f

    C++侧重于对象而不是过程,侧重于类的设计而不是逻辑的设计。

     

    207在不用第三方参数的情况下,交换两个参数的值

    #include 

    void main()

    {

    int i=60;

    int j=50;

    i=i+j;

    j=i-j;

    )

    i=i-j;

    printf(“i=%d ”,i);

    printf(“j=%d ”,j);

    }

    方法二:

    i^=j;

    j^=i;

    i^=j;

    方法三:

    // 用加减实现,而且不会溢出

    a = a+b-(b=a)

     

    208.下面的函数实现在一个固定的数上加上一个数,有什么错误,改正

     

    int add_n(int n)

    {

    static int i=100;

    i+=n;

    return i;

    }

    答:

    因为static使得i的值会保留上次的值。

    去掉static就可了

     

    209.union a {

    int a_int1;

    double a_double;

    int a_int2;

    };

    typedef struct

    { a a1;

    char y;

    } b;

     

    class c

    {

    double c_double;

    b b1;

    a a2;

    };

    输出cout<<sizeof(c)<<endl;的结果?

    答:

    VC6环境下得出的结果是32

    我(sun)在VC6.0+win2k下做过试验:

    int-4

    float-4

    double-8

    指针-4

     

     

    210. unsigned short array[]={1,2,3,4,5,6,7};

    int i = 3;

    *(array + i) = ?

    答:4

     

    211. class A

    {

    virtual void func1();

    void func2();

    }

    Class B: class A

    {

    void func1(){cout << “fun1 inclass B” << endl;}

    virtual void func2(){cout << “fun2 inclass B” << endl;}

    }

    A, A中的func1和B中的func2都是虚函数.

    B, A中的func1和B中的func2都不是虚函数.

    C, A中的func2是虚函数.,B中的func1不是虚函数.

    D, A中的func2不是虚函数,B中的func1是虚函数.

    答:

    A

     

    212输出下面程序结果。

    #include 

    class A

    {

    public:

    virtual void print(void)

    {

    cout<<”A::print()”<<endl;

    }

    };

     

    class B:public A

    {

    public:

    virtual void print(void)

    {

    cout<<”B::print()”<<endl;

     

    };

    };

    class C:public

    {

    public:

    virtual void print(void)

    {

    cout<<”C::print()”<<endl;

    }

    };

    void print(A a)

    {

    a.print();

    }

     

    void main(void)

    {

    A a, *pa,*pb,*pc;

    pa=&a;

    pb=&b;

    pc=&c;

     

    a.print();

    b.print();

    c.print();

     

    a->print();

    pb->print();

    pc->print();

     

    print(a);

    print(b);

    print(c);

    }

    A::print()

    A::print()

     

    B::print()

    C::print()

     

    A::print()

     

    B::print()

     

    C::print()

     

    A::print()

     

     

    A::print()

     

    A::print()

     

     

    213 C++语言是在___ C ______语言的基础上发展起来的。

    214 C++语言的编译单位是扩展名为____ .cpp______的____程序______文件。

    215. 行尾使用注释的开始标记符为____ //_____。

    216 多行注释的开始标记符和结束标记符分别为_____ /*_____和___ */_______。

    217. 用于输出表达式值的标准输出流对象是____ cout_____。

    218 用于从键盘上为变量输入值的标准输入流对象是__ cin______。

    219. 一个完整程序中必须有一个名为____ main____的函数。

    220一个函数的函数体就是一条____复合_____语句。

    221. 当执行cin语句时,从键盘上输入每个数据后必须接着输入一个___空白_____符,然后才能继续输入下一个数据。

    222在C++程序中包含一个头文件或程序文件的预编译命令为____#include ______。

    223. 程序中的预处理命令是指以___#___字符开头的命令。

    224. 一条表达式语句必须以___分号___作为结束符。

    225. 在#include命令中所包含的头文件,可以是系统定义的头文件,也可以是___用户(或编程者_____定义的头文件。

    226. 使用#include命令可以包含一个头文件,也可以包含一个__程序____文件。

    227.一个函数定义由__函数头______和__函数体_____两部分组成。

    228.若一个函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的__原型(或声明)____语句。

    229.C++头文件和源程序文件的扩展名分别为__.h ___和___.cpp ___。

    230.程序文件的编译错误分为____警告(warning)____和____致命(error) ____两类。

    231.当使用___ void ____保留字作为函数类型时,该函数不返回任何值。

    232.当函数参数表用___ void __保留字表示时,则表示该参数表为空。

    233.从一条函数原型语句“int fun1(void);”可知,该函数的返回类型为______,该函数带有______个参数。

    234. 当执行cout语句输出endl数据项时,将使C++显示输出屏幕上的光标从当前位置移动到___下一行_____的开始位置。

    235. 假定x=5,y=6,则表达式x++*++y的值为___35_______。

    236. 假定x=5,y=6,则表达式x–*–y的值为___25_______。

    237. 假定x=5,y=6,则执行表达式y*=x++计算后,x和y的值分别为___6___和___30 _____。

    238. 假定x=5,y=6,则执行表达式y+=x–计算后,x和y的值分别为____4__和___11___。

    239. C++常数0×145对应的十进制值为___325 ___。

    240. C++常数0345对应的十进制值为____ 229__。

    241. 十进制常数245对应的十六进制的C++表示为____0xF5___。

    242. 十进制常数245对应的八进制的C++表示为___0365 ___。

    243. signed char类型的值域范围是__-128__至___+127 __之间的整数。

    244. int和float类型的数据分别占用___ 4___和____ 4___个字节。

    245. float和double类型的数据分别占用____ 4___和_____8___个字节。

    246. bool和char类型的数据分别占用_____1____和____1___个字节。

    247. unsigned short int和int类型的长度分别为____ 2___和____4___。

    248. 字符串”This’s a book. ”的长度为_____ 15____。

    249. 字符串” This’s a pen ”的长度为_____ 15_____。

    250. 在C++中存储字符串”abcdef”至少需要___7 _____个字节。

    251. 在C++中存储字符串”a+b=c”至少需要_____6 ___个字节。

    252. 假定x和y为整型,其值分别为16和5,则x%y和x/y的值分别为___1_______和____3____。

    253. 假定x和y为整型,其值分别为16和5,则x/y和double(x)/y的值分别为____3____和___3.2____。

    254. 假定x是一个逻辑量,则x && true的值为___ x ____。

    255. 假定x是一个逻辑量,则x || true的值为_____ true(或1)_____。

    256. 假定x是一个逻辑量,则x && false的值为____ false(或0) ___。

    257. 假定x是一个逻辑量,则x || false的值为x。

    258. 假定x是一个逻辑量,则!x || false的值为____!x ____。

    259. 假定x是一个逻辑量,则x && !x的值为____ false(或0)____。

    260. 假定x是一个逻辑量,则x || !x的值为____ true(或1)___。

    261. 设enum Printstatus{ready,busy,error}; 则 cout<<busy的输出结果是_____1___。

    262. 设enum Printstatus{ready=2,busy,error}; 则cout<<busy的输出结果是____3____。

    263. 常数-4.205和6.7E-9分别具有___4_____和____2___位有效数字。

    264. 枚举类型中的每个枚举值都是一个____枚举常量_____,它的值为一个___整数____。

    265. 常数100和3.62的数据类型分别为____ int ___和_____ double ___。

    266. 若x=5, y=10, 则计算y*=++x表达式后,x和y的值分别为___6___和__60 ___。

    267. 假定x和ch分别为int型和char型,则sizeof(x)和sizeof(ch)的值分别为__4__和__1__。

    268. 假定x=10,则表达式x<=10?20:30的值为__ 20 __。

    269. 表达式sqrt(81)和pow(6,3)的值分别为___9 ___和___216___。

    270. 含随机函数的表达式rand()%20的值在___0__至___ 19 __区间内。

    271. 在switch语句中,每个语句标号所含关键字case后面的表达式必须是___常量___。

    272. 在if语句中,每个else关键字与它前面同层次并且最接近的____ if ____关键字相配套。

    273. 作为语句标号使用的C++保留字case和defaule只能用于___ switch ___语句的定义体中。

    274. 执行switch语句时,在进行作为条件的表达式求值后,将从某个匹配的标号位置起向下执行,当碰到下一个标号位置时(停止/不停止)___不停止__执行。

    275. 若while循环的“头”为“while(i++<=10)”,并且i的初值为0,同时在循环体中不会修改i的值,则循环体将被重复执行__11___次后正常结束。

    276. 若do循环的“尾”为“while(++i<10)”,并且i的初值为0,同时在循环体中不会修改i的值,则循环体将被重复执行___10 ___次后正常结束。

    277. 当在程序中执行到break语句时,将结束本层循环类语句或switch语句的执行。

    278. 当在程序中执行到___ continue___语句时,将结束所在循环语句中循环体的一次执行。

    279. 在程序中执行到__ return ___语句时,将结束所在函数的执行过程,返回到调用该函数的位置。

    280.在程序执行完____主(或main)__函数调用后,将结束整个程序的执行过程,返回到C++集成开发窗口。

    281. 元素类型为int的数组a[10]共占用___ 40___字节的存储空间。

    282. 元素类型为double的二维数组a[4][6]共占用____192__字节的存储空间。

    283. 元素类型为char的二维数组a[10][30]共占用___300__字节的存储空间。

    284. 存储字符’a’和字符串”a”分别需要占用_____1___和____2 ___个字节。

     

    285

    #include “stdafx.h”

    #define SQR(X) X*X

    int main(int argc, char* argv[])



    int a = 10;

    int k = 2;

    int m = 1;

    a /= SQR(k+m)/SQR(k+m);

    printf(“%d ”,a);

    return 0;

    }

    这道题目的结果是什么啊?

    define 只是定义而已,在编择时只是简单代换X*X而已,并不经过算术法则的

    a /= (k+m)*(k+m)/(k+m)*(k+m);

    =>a /= (k+m)*1*(k+m);

    =>a = a/9;

    =>a = 1;

     

     

    286. 以面向对象方法构造的系统,其基本单位是_____对象___。

    287. 每个对象都是所属类的一个__实例__。

    288. C++支持两种多态性:___编译____时的多态性和____运行__时的多态性。

    289. 在C++中,编译时的多态性是通过___重载___实现的,而运行时的多态性则是通过___虚函数____实现的。

    290. 对于类中定义的任何成员,其隐含访问权限为___ private(或私有)__。

    291. 对于结构中定义的任何成员,其隐含访问权限为__ public(或公有)_。

    292. 若在类的定义体中给出了一个成员函数的完整定义,则该函数属于__内联__函数。

    293. 为了避免在调用成员函数时修改对象中的任何数据成员,则应在定义该成员函数时,在函数头的后面加上__ const __关键字。

    294. 若只需要通过一个成员函数读取数据成员的值,而不需要修改它,则应在函数头的后面加上__ const __关键字。

    295.判断一个字符串是不是回文

    int IsReverseStr(char *aStr)

    {

    int i,j;

    int found=1;

    if(aStr==NULL)

    return -1;

    j=strlen(aStr);

    for(i=0;i<j/2;i++)

    if(*(aStr+i)!=*(aStr+j-i-1))

    {

    found=0;

    break;

    }

    return found;

    }

    296..写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分)

    int a = 4;

    (A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);

    a = ?

    答:C错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;

    改后答案依次为9,10,10,11

     

     

    298.动态连接库的两种方式?

    答:调用一个DLL中的函数有两种方法:

    1.载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向系统提供了载入DLL时所需的信息及DLL函数定位。

    2.运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary或Loa

    dLibraryEx函数载入DLL。DLL载入后,模块可以通过调用GetProcAddress获取DLL函数的出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了。

     

    299.请写出下列代码的输出内容

    #i nclude

    main()

    {

    int a,b,c,d;

    a=10;

    b=a++;

    c=++a;

    d=10*a++;

    printf(“b,c,d:%d,%d,%d”,b,c,d);

    return 0;

    }

    答 、10,12,120

     

    300.设有以下说明和定义:

    typedef union {long i; int k[5]; char c;} DATE;

    struct data { int cat; DATE cow; double dog;} too;

    DATE max;

    则语句 printf(“%d”,sizeof(struct date)+sizeof(max));的执行结果是?

    答 、结果是:___52____。DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20

    data是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32.

    所以结果是 20 + 32 = 52.

    当然…在某些16位编辑器下, int可能是2字节,那么结果是 int2 + DATE10 + double8 = 20

  • 相关阅读:
    docker6 管理工具
    docker1 初识docker
    libsvm处理多分类的问题
    selenium webdriver 的三种等待方式
    文本深度表示模型Word2Vec
    机器学习中训练集、验证集、测试集的定义和作用
    机器学习中防止过拟合的处理方法
    用Python读取大文件
    进化世界
    EDS(实例)
  • 原文地址:https://www.cnblogs.com/lpxblog/p/5278260.html
Copyright © 2011-2022 走看看