您的位置:首页 > 编程语言

科大讯飞2012合肥笔试题

2011-09-30 17:34 225 查看
第二部分:填空题(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;
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息