科大讯飞2012年笔试题目

科大讯飞2012年题目:

答案我弄的参考答案:

有问题的可以提出以商讨:

 

一、单选题

1、64多形的外角和是多少(A)//多边形的外角和为360,内角和为(n - 2)x 180 其中n为边数

       A、1*360             B、1*180

       C、64*360           D、64*180

 

2、有一盆衣服(已经洗过了,需要漂洗),请问在漂洗次数固定的情况下如何分配水才能把衣服洗得最干净(C)

       A、从少到多        B、从多到少

       C、平均分配        D、随便洗

 

3、用力拉一根橡皮筋,橡皮筋上有没有点还处在原来的位置没有被拉走(B)

       A、有                          B、没有

       C、有是有、有时没有 D、一般人拉没有,刘谦拉就有

 

4、假设一个应用程序需要使用多个提供不同功能但在接口上有差异的类,适合使用的设计模式是(D)//这道题目有待商量,我估计题目不是这样的

       A、装饰模式        B、迭代器模式

       C、工厂模式        D、适配器模式

 

5、结构化程序设计主要强调的是(C)

       A、程序的规模            B、程序的效率

       C、程序的易读性        D、程序设计语言的先进性

 

6、SQL Server中,删除一个表的命令是(C)

       A、DELETE  B、CLEAR           C、DROP            D、REMOVVE

 

7、以下关于互斥量说法错误的是:(B)

       A、单线程程序不需要使用互斥量

       B、互斥量可以被两个以上的线程锁定

       C、互斥量的激活是原子操作

       D、互斥量的创建和销毁可以在不同的线程进行

 

8、在Windows任务管理器中发现某个进程CPU占用率长时间处于100%,以下可能导致该现象的原因是(D)

       A、程序处于大量I/O过程中             B、多线程导致进程死锁

       C、等带另一个程序响应                   D、程序进入死循环

 

9、假设进程中一个生产者线程,10个消费者线程,为保证进程间不出现死锁,信号量的初值可以设置为(C)

       A、-1            B、0

       C、1             D、10

 

10、使用两个栈共享一片空间时,当(D)时,才产生溢出

       A、其中一个栈的栈底到达这片内存空间的中心点

       B、其中一个栈的栈顶到达这片内存空间的中心点

       C、两个栈均不空,且一个栈的栈顶到达另一个栈的栈底

       D、两个栈的栈顶在这片内存空间的某一位置相遇

 

11、在一个单链表HL中,若要在指针first所指节点的后面插入一个有指针second所指向的节点,则执行(A)

       A、second->next=first->next ; first->next=second;

       B、first->next=second->next;second=first;

       C、second->next=first->next ; second->next=first;

       D、first->next=second->next;second->next=first;

 

12、以下C语言编译过程的正确步骤是(A)

       A、预处理 编译 汇编 链接              B、预处理 编译 优化 汇编 连接    

       C、编译 优化 汇编 运行          D、编辑 预处理 编译 汇编 优化 运行

 

13、在C语言程序编译时出现如下错误:

       “error LNK2019:unresoved external symbol"int__cdecl test(int)"(?test@@YAHH@Z)     referenced”可能的原因是(D)

       A、函数未定义     B、变量未声明     C、变量未定义     D、函数未声明

 

14、下列关于C语言中的函数叙述错误的是(B)

       A、一个函数中可以有多条return语句

       B、调用函数必须要在一条独立的语句中完成

       C、函数可以通过return语句传递函数值

       D、主函数main可以带有参数

 

15、在C语言中,打开可读写的二进制文件myfile并向该文件追加写入内容,如果myfile不存在则创建新文件,正确的调用方式为(D)

       A、fopen("myfile","w")         B、fopen("myfile","wb")

       C、fopen("myfile","r+b")             D、fopen("myfile","a+b")

 

16、在C语言中,一个short int型数据在内存中占2字节,则short int型数据的取值范围(B)

       A、-256~255                     B、-32768~32767

       C、-65536~65535             D、-2147483647-2147683648

 

17、下面是对数组s的初始化,其中不正确的是(D)

       A、char s[6]={"abcd"};       B、char s[6]={'a','b','c','d'}

       C、char s[6]=""    ;      D、char s[6]="abcdef"

 

18、有以下一段程序代码:

       void GetMemory(char **p,int num)

       {

              *p=(char *)malloc(num);

       }

       void Test(void)

       {

              char *str=NULL;

              GetMemory(&str,100);

              strcpy(str,"hello");

              printf(str); // 如果是这样printf("%s\n", str);,就选A

       }

       请问运行Test函数会有什么样的结果(C)

       A、hello        B、无效指针,输出不确定

       C、NUll         D、程序崩溃

 

19、在32位系统中,有一类:

       class A

       {

              public:

                     virtual int test();

                     virtual double test2();

                     int test3();

              protected:

                     double test4();

              private:

                     int a,b,c;

       };

       请问sizeof(A)=(B)

       A、12    B、16   C、28    D、32

 

20、有以下一段程序代码:

       class A

       {

              public:

                     virtual void func1(){printf("A'sfuncl");}

                     void func2(){("A'sfunc2")};

       }

       class B:public A

       {

              public:

                     virtual void func1(){printf("B'sfuncl");}

                     void func2(){("B'sfunc2")};

       }

       void main()

       {

              B inst_b;

              A *ptr_a->func1();

              ptr_a->func1();

              ptr_a->func2();

       }

我估计原题如下:

#include

 

class A

{

       public:

              virtual void func1(){printf("A'sfuncl");}

              void func2(){printf("A'sfunc2");};

};

 

class B: public A

{

       public:

              virtual void func1(){printf("B'sfuncl");}

              void func2(){printf("B'sfunc2");};

};

 

void main()

{

       B inst_b;

       A *ptr_a = &inst_b;

       ptr_a->func1();

       ptr_a->func2();

}

则答案选B

 

       程序的输出结果为:(C)

       A、A'sfuncl B'sfunc2  B、B'sfuncl A'sfunc2

       C、B'sfuncl B'sfunc2  D、A'sfuncl A'sfunc2

 

二、填空题

 

1、操作系统中的存储管理常用__虚拟存储器__的方式来摆脱主存容量的限制。

2、满二叉树第i层上的叶子节点数有_2^(i-1)___个。

3、二分查找算法平均时间复杂程度是___o(log(n))_____。

4、设x=3,y=2,x<

5、非成员函数声明为类的__友元函数_____才能访问这个类的private成员。

6、带有____纯虚函数____的类称为抽象类,它只能作为基类来使用。

 

三、简答题(每题6分,共18分)

 

1、列举你所知道的排序算法和它们的平均复杂程度。

       答:1、冒泡排序(bubble sort) — O(n^2)

              2、插入排序(insertion sort)— O(n^2)

              3、选择排序(selection sort)— O(n^2)

              4  堆排序(heapsort)— O(nlog n)

              5、快速排序(quicksort)— O(nlog n)

              6. 归并排序 — O(nlog n)

 

2、列举析构函数与普通类成员函数的不同点。

       答:1、析构函数名也应与类名相同,只是在函数名前面加一个波浪符~,例如~stud( )

              2、它不能带任何参数,也没有返回值(包括void类型)。

3、只能有一个析构函数,不能重载

4、析构函数在对象生存期即将结束的时刻被自动调用

 

3、在C++语言中使用宏定义经常会引起一些错误(如少打括号引起表达式值与预期不符等),列举一些可以代替宏定义的方法。

答:1.const   const int a = 1;

              2.enum    enum { NumTurns = 5};

              3.inline    inline int max(int a, int b);

 

 

 

四、编程题(共三题20分)

1、 斐波那契数列的形式如下:1,1,2,3,5,8,13……,n,编写一个函数计算数列中第n个元素的值。(5分)

C++语言实现

long long Fibonacci(unsigned n)

{

       int result[2] = {0, 1};

       if(n < 2)

       {

              return result[n];

       }

 

       long long fibNMinusOne = 1;

       long long fibNMinusTwo = 2;

       long long fibN = 0;

       for(unsigned int i = 2; i <= n; ++i)

       {

              fibN = fibNMinusOne + fibNMinusTwo;

 

              fibNMinusTwo = fibNMinusOne;

              fibNMinusOne = fibN;

       }

 

       return fibN;

}

 

 

2、不调用任何系统函数,实现一个字符串查找子串的函数,如果包含字串,则返回该字符串的位置值,如果不包含,则返回-1。(7分)

 

int Strncmp (const char * first, const char * last, int count) 

    if (!count) 

        return 0; 

     

    while (--count  &&  *first  &&  *first == *last) 

    { 

        first++; 

        last++; 

    } 

     

    return( *(unsigned char *)first - *(unsigned char *)last ); 

 

int FindSubString(const char *src, const char *sub, int sublen)

{

       const char *str = src;

       while(*src != '\0')

       {

              if((*src == *sub) && (Strncmp(src, sub, sublen) == 0))

              {

                     return (src - str + 1);

              }

              src++;

       }

 

       return -1;

}

 

2、 用算法实现将一个输入的数字颠倒(输入12345->54321),要求不调用任何系统函数,也不能将输入的数字转换为字符串作为中间过渡。(8分)

int ReverseNumber(int number)

{

       int num=0;

 

       while( number != 0 )

       {

              num = (num * 10) + (number % 10);

              number /= 10;

       }

 

       if (number < 0)

       {

              return num * (-1);

       }

       else

       {

              return num;

       }

}

你可能感兴趣的:(科大讯飞2012年笔试题目)