科大讯飞2012合肥笔试题

来源:互联网 发布:知不足而后进下一句 编辑:程序博客网 时间:2024/04/27 15:02

第二部分:填空题(2*6)

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

2.      满二叉树第i层上的叶子节点数有(2的i-1次方)个。

3.      二分查找算法的平均时间复杂度是(logn)。

4.      设x=3,y=2,x<<y=(12)。

5.      非成员函数应声明为类的(友元函数)才能访问这个类的private成员。

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

第三部分:简答题(3*6)

1.      列举你所知道的排序算法和他们的平均时间复杂度。

直接插入排序o(n*n)

希尔排序o(nlogn)

冒泡排序o(n*n)

快速排序o(knlogn)

直接选择排序o(n*n)

堆排序o(nlogn)

归并排序o(nlogn)

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

析构函数无返回类型,前面有标志符~,系统自动调用的。

普通成员函数有返回类型,需要显式调用。

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

const定义常量

inline函数

typedef定义别名

第四部分:编程题

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

int Fibonax(intn)

{

if(n==1 || n==2)

    return 1;

else

    return Fibonax(n-1)+Fibonax(n-2);

}

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

int GetCommon(char*s1, char *s2, int loca)

{

int len1 = strlen(s1);

int len2 = strlen(s2);

for(int i = 0; i < len1; i++)

{

    if(s1[i] == s2[0])

    {

        int as = i, bs = 0, count = 1;

        while(as + 1 < len1 && bs+ 1 < len2 && s1[++as] == s2[++bs])

           count++;

        if(count == len2)

        {

           loca = i;

           return loca;

        }

    }

}

}

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

方法1:(字符数组,借鉴)

#include <stdio.h>

#include <string.h>

#include <dos.h>

int main()

{

charstr[] = "ABCD1234efgh";

intlength = strlen(str);

char* p1 = str;

char* p2 = str + length - 1;

while(p1< p2)

{

char c = *p1;

*p1 = *p2;

*p2 = c;

++p1;

--p2;

}

printf("strnow is %s\n",str);

system("pause");

return0;

}

方法2:递归或栈

void reverse()

{

    stack s;

    int x;

    while (cin>>x)

    {

       s.push(x);

    }

    while (!s.empty())

    {

       x = s.pop();

       cout<<x;

    }

}

原创粉丝点击