Chinaunix首页 | 论坛 | 博客
  • 博客访问: 37070
  • 博文数量: 12
  • 博客积分: 560
  • 博客等级: 中士
  • 技术积分: 150
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-14 15:26
文章分类

全部博文(12)

文章存档

2010年(12)

我的朋友

分类: C/C++

2010-08-23 17:32:07

 1.下列程序的输出结果为:(B)
#include
void main()
{
       char* a[ ] = { "hello", "the", "world"};
       char** pa = a;
       pa++;
       cout<<”*pa<}
A) theworld    B) the   C) ello    D) ellotheworld
 
2. 已知二叉树后序遍历序列是bfegcda,中序遍历序列是badefcg,它的前序遍历序列是:(B)
A) abcdefg     B) abdcefg    C) adbcfeg    D) abecdfg
 
3. 栈和队列的共同特点是:(C)
A) 都是先进先出                  B) 都是先进后出
C) 只允许在短点处插入和删除元素 D) 没有共同点
 
4. 下面程序的运行结果为:(A)
#include
void main()
{
       int a, x;
       for(a = 0, x = 0; a<=1 && !x++; a++)
       {
              a++;
       }
       cout<< a << x <}
A) 21             B) 22             C) 32             D) 41
 
5. 下列选项,不正确的是:(B) while后没有分号
 A) for(int a=1; a<=10; a++);
B) int a=1;
   do
   {
              a++;
   }while(a<=10)
C) int a=1;
   while(a<=10)
   {
          a++;
}
D) for(int a= 1; a<=10; a++)a++;
6. 下面关于数组的初始化正确的是:(B)
A) char str[2] = {“a”,”b”};
B) char str[2][3]={“a”,”b”};
C) char str[2][3]={{‘a’,’b’},{‘e’,’d’},{‘e’,’f’}};
D) char str[] = {“a”, “b”};
 
7. 下列说法正确的是:(B)
A) 内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方
B) 内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方
C) 类的内联函数必须在类体内定义
D) 类的内联函数必须在类体外通过关键字inline定义
 
8.下面对静态成员的描述中,正确的是:(D)
A) 静态数据成员可以在类体内初始化
B) 静态数据成员不可以被类的对象调用
C) 静态数据成员不能受private控制符的作用
D) 静态数据成员可以直接用类名调用
 
9. 下列运算符中,在C++语言中不能重载的是:(C)
A) *                B) >=             C) ::              D) delete
 
10 下面关于多态性的描述,错误的是:(C)
A) C++语言的多态性分为编译时的多态性和运行时的多态性
B) 编译时的多态性可通过函数重载实现
C) 运行时的多态性可通过模板和虚函数实现 //模板的是编译时多态性,而虚函数是运行时
D) 实现运行时多态性的机制称为动态绑定
 
11. 如果进栈序列为e1,e2,e3,e4,e5,则可能的出栈序列是:(D)
A) e3,e2,e5,e4,e1
B) e2,e3,e5,e4,e1
C)    e3,e2,e4,e5,e1
D) 以上都有可能
 
12 下面关于类和对象的描述中,错误的是:(A)
A) 类就是C语言中的结构体类型,对象就是C语言中的结构体变量
B) 类和对象之间的关系是抽象和具体的关系
C) 对象是类的实例,一个对象必须属于一个已知的类
D) 类是具有共同行为的若干对象的统一描述体
 
13.下面关于数组的描述错误的是:(D)
A) 在C++语言中数组的名字就是指向该数组第一个元素的指针
B) 长度为n的数组,下标的范围是0-n-1
C) 数组的大小必须在编译是确定
D) 数组只能通过值参数和引用参数两种方式传递给函数
注释:
在把数组作为参数传递给函数时,有值传递(by value)和地址传递(by reference)两种方式。
    在值传递方式中,要在数组参数的尾部加上一对方括号([]),调用函数时只需将数组的地址(即数组名)传递给函数。
    例如:如果数组x被声明为:int x[10];
    那麽函数被说明为:void byval_func(int[]);
    参数int[]告诉编译程序byval_func()函数只有一个参数,即一个由int型值组成的数组。     函数调用时只需将数组名传递给函数:byval_func(x);
#include
 void byval_func(int[]);
 void main(void);
 void main(void)
 {
     int x[10];
     int y;
     for(y=0;y<10;y++)
         x[y]=y;
     byval_func(x);    
 }
 void byal_func(int i[])
 {
     int y;
     for(y=0;y<10;y++)
        printf("%d\n",i[y]);
 }
在值传递方式中,数组x将被复制一份,复制所得的数组将被存放在栈中,然后由byval_func()函数接收并打印出来。由於传递给byval_func()函数的是初始数组的一份拷贝,因此在byval_func()函数内部修改传递过来的数组对初始数组没有任何影响。
    值传递方法的开销是很大的,因为首先它要完整地复制初始数组并将这份拷贝存放到栈中,这将耗费相当可观的运行时间, 因而值传递方法效率较低;其次,初始化数组的拷贝需要占用额外的内存空间(栈中的内存);最后,编译程序需要专门产生一部分用来复制初始数组的代码,这将使程序变大。
    地址传递方法克服了值传递方法的缺点。在地址传递方法中,传递给函数的是指向初始数组的指针,不用复制数组,因此程序变得简练,也节省了栈中的内存空间。在地址传递过程中,只需在函数原形中将函数的参数说明为指向数组元素数据类型的一个指针。
    例如同样定义一个数组x:int x[10];
    那麽函数被说明为:int const_funt(const int*);
    参数const int*告诉编译程序const_funt()函数只有一个参数,即指向一个int类型常量的指针。
    函数调用时只需将数组的地址传递给函数:const_func(x);
#include
 void const_func(const int*);
 void main(void);
 void main(void)
 {
     int x[10];
     int y;
     for(y=0;y<10;y++)
         x[y]=y;
     constl_func(x);    
 }
 void const_func(const int*i)
 {
     int y;
     for(y=0;y<10;y++)
        printf("%d\n",*(i+y));
 }
 在值传递方式中,没有复制初始数组并将其拷贝存放在栈中,const_func()函数只接收到指向一个int类型常量的指针,因此在编写程序时要保证传递给const_func()函数的是指向一个由int类型常量组成的数组的指针。const修饰符的作用是防止意外修改初始数组中的某一个元素。
 
14. 引用标准库时,下面的说法你认为哪个是正确的:(B)
A) 语句#include “stdlib.h”是正确的,但会影响程序的执行速度
B) 语句#include 是正确的,而去程序执行速度比#include “stdlib.h”要快
C) 语句#include 和#include “stdlib.h”都是正确的,程序执行速度没有区别
D) 语句#include “stdlib.h”是错误的
注释:include   ""是先从本地目录开始寻找,然后去寻找系统路径,而Include   <>   相反先从系统目录,后从本地目录,
 
15.设a、b、c、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值为:(C)
A) 0               B) 1               C) 2               D) 7
 
16.不能作为重载函数的调用的依据是:(C)
A) 参数个数                              B) 参数类型
C) 函数类型                              D) 函数名称
 
17.下列程序的输出结果为: (D)
#include< iostream. h>
int func(int n)
{
  if〔n<1)return 1;
else return n+func(n-1);
return 0;
}
void main()
{
cout<}
A) 0        B)10             C)15            D)16
 
18. 建立派生类对象时,3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数)这3种构造函数的调用顺序为: (A)
A)abc                                                                B)acb
C)cab                                                                     D)cba
 
19. 如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是:(D)
A)一元运算符                                                      B)二元运算符
C)选项A)和选项B)都可能                               D)重载错误
解析:C++中用友元函数重载运算符至少有一个参数,重载一目运算符要有一个参数,重载二目运算符要有两个参数。
 
20. 有以下程序段:(C)
#define F(X,Y)   (X)--; (Y)++ (X)*(Y);

int i, a = 3, b = 4;
for( i = 0; i<5; i++)   F(a,b)
printf(“%d, %d”, a, b);
输出结果是:()
A) 3, 4                                       B) 3, 5
C) -2, 5                                     D) -2, 9
 
21. 下列for循环的循环体执行次数为:(A)
for(int i(10), j(1); i=j=0; i++, j--)
A) 0;       B) 1;       C) 无限;        D)以上都不对
 
22. 下面程序的输出结果是(D)
char *p1= “123”, *p2 = “ABC”, str[50]= "xyz";
strcpy(str+2,strcat(p1,p2));
cout << str;
A)xyz123ABC                                                       B)z123ABC
C)xy123ABC                                                        D)出错
 
23.下面函数的执行结果是输出(B)
char str[ ] = “xunlei”;
char *p = str;
int n = 10;
printf(“%d, %d, %d\n”, sizeof(str), sizeof(p), sizeof(n));
A) 4, 4, 4                                                 B) 7, 4, 4
C) 6, 4, 4                                                 D) 6, 6, 4
 
33. 有下列程序段:
char *p, *q;
p = (char*) malloc(sizeof(char) * 20);
q = p;
scanf(“%s %s”, p, q);
printf(“%s %s\n”, p, q);
若从键盘输入:abc def, 则输出结果是(A)
A) def def                     B) abc def
C) abc d                       D) d d
解析:q=p;因此p,q指向的是同一段内存.scanf先是把abc写到p指向的空间,再把def写到q指向的空间,也就是同一段空间,因此abc被def覆盖了.
 
34.现在有以下语句:
struct _THUNDER{
       int iVersion;
       char cTag;
       char cAdv;
       int iUser;
       char cEnd;
}Thunder;
int sz = sizeof(Thunder);
则执行后,变量sz的值将得到(D)
A) 11             B) 12             C) 13             D) 16
 
35. 有如下程序段:
void GetMemeory(char* p)

              p = (char*) malloc (100);

void test()
{
char *str=NULL;
GetMemory(str);
strcpy(str,”Thunder”);
strcat(str+2, “Downloader”);
 printf(str);
}
请问运行Test函数结果是:(D)
A) Thunder Downloader                                 B) under Downloader
C) Thunderownloader                                    D) 程序崩溃
解析:在函数中给指针分配空间,实际上是给指针的临时变量分配空间,函数结束后,这个临时变量也消亡,而str仍然为NULL,没有为其分配空间,此时strcpy()是肯定会出错的。
 
36. 函数调用exec((v1,v2), (v3,v4,v5),v6,v7);中,实参的个数是(A)
A) 4               B) 5               C) 6               D) 7             
 
37. p是指向类X的成员m的指针,s是类X的一个对象。现要给m赋值,(C)是正确的。
A) s.p = 5                                                        B) s->p = 5
C) s.*p = 5                                                      D) *s.p = 5
 
38. 函数fun(char* p) { return p;}的返回值是(B)
A)无确切值                                              B) 行参p中存放的地址值
C) 一个临时存储单元的地址                   D) 行参p自身的地址值
 
39.a,b均为不等于0的整形变量,以下关系式恒成立的是:(C)
A) a*b/a*b == 1                                 B) a/b*b/a == 1
C) a/b*b + a%b == a                          D) a/b*b == a
 
40. 设有如下说明:
       typedef struct ST{ long a; int b; char c[2]; } NEW;
则下面叙述中正确的是:(C)
A)以上的说明形式非法                            B)ST是一个结构体类型
C)NEW是一个结构体类型                D)NEW是一个结构体变量
 
41. 下列表达式正确的是:(C)
A) 9++                  B) (x+y)++              C) c+++c+++c++                D) ++(a-b--)
 
42.在int b[ ][3] = {{1},{3,2},{4,5,6},{0}};中,sizeof(b) = (D)。
A) 4                      B) 12                    C) 28                    D) 48
 
43.以下程序的输出结果是:(D)
#define M(x,y,z) x*y+z
main()
{
       int a=1, b=2, c=3;
       printf(“%d\n”,M(a+b,b+c,c+a));
}
A)19                   B) 17                    C) 15                    D) 12
 
44.若有以下定义和语句:
int u=010, v= 0x10, w=10;
printf(“%d,%d,%d\n”,u,v,w);
则输出结果是:(A)
A)8,16,10     B)10,10,10      C)8,8,10      D)8,10,10
 
45. 下面程序段的输出结果是:(B)
int a=5, b=4, c=3, d=2;
if(a>b>c)
       printf(“%d\n”,d);
else if((c-1>=d)==1)
       printf(“%d\n”, d+1);
else
       printf(“%d\n”, d+1);
A) 2                      B) 3                      C) 4                   D) 编译错误
 
46.有如下程序段,请问k的值是:(D)
enum {a, b=5, c, d=4, e} k; k =c;
A) 3                      B)4                     C) 5                      D) 6
 
47.有如下程序段:
int i, n = 0;
double x = 1, y1 = 2.1/1.9, y2 = 1.9/2.1;
for( i = 1; i<22; i++)
       x = x*y1;
while( x!=1.0)
{
       x =x*y2;
       n++;
}
printf(“%d\n”, n);
请问执行结果是:(A)
A) 21                    B) 22                    C)无限循环                  D) 程序崩溃
 
48. 用树形结构表示实体之间联系的模型是(C)
A) 关系模型                       B) 网状模型                C) 层次模型                D)以上三个都是
 
49.有如下程序段:
char fun(char *);
main()
{
       char *s = “one”, a[5] = {0}, (*f1)(char *) = fun, ch;
}
则对函数fun的调用语句正确的是(C)
A) *f1(&a);                  B) f1(*s);                 C) f1(&ch)                   D) ch = *f1(s);要改成(*f1)(s)才正确
 
50.有如下程序段:
int c = 23;
printf(“%d\n”, c&c);
请问执行结果是:(C)
A) 0               B) 46             C) 23                    D) 以上都不对
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ztj111/archive/2007/10/20/1834284.aspx
 
迅雷笔试题 /*定义循环左移函数(我没有用左移函数)*/
{
int i,j;
char temp=str[0];
for (i=0;istr[i]=temp;
}
void pai(char str[],int m,int n) /*定义全排列函数*/
{ int k;
void chang(char str[],int m);
if (m{
for (k=0;k<=m;k++)
{
pai(str,m+1,n); /*递归调用*/
chang(str,m); /*调用左移函数*/
}
}
else printf("%s\t",str);
}
1.     include "stdio.h"
main()
{char str[]="ABCD"; /*全排列字符,可以任意多个(相应的下面排列函数中参数"4"改成全排列字符的个数)*/ clrscr(); pai(str,0,4); /*这里参数0(下标)表示从第一个元素开始,4表示元素个数(不是下标)*/ getch();
今天在家看碟,突然接到迅雷一个电话让我去笔试。遇到两个很有意思的题目,现有奖征集第一题的答案:B1套餐一份。
1.<征集答案>给你10台机器,每个机器2个cpu,2g内存,现在已知在10亿条记录的数据库里执行一次查询需要5秒,问用什么方法能让90%的查询能在100毫秒以内返回结果。
2.一个长度为10000的字符串,写一个算法,找出最长的重复子串,如abczzacbca,结果是bc。最后就做出这一道题目,时间复杂度为O(n!), 空间复杂度为O(n)。如果有更好的算法,还请指教。
凭印象了:
算法题:
1.连接两个单向链表,返回排序后的结果。
2.一个保存有10000个URL的文本文件,删除其中相同的URL。
3.将9个石子放在9x9的方格中,要求同行、同列、45度上无两个石子。
智力题:
1.一笔画四条直线穿过3x3的9个点。
2.国王给三个囚犯每人戴了一顶帽子,帽子不是黑色就是白色,并且告诉囚犯们谁看到其它两个人都是白帽子或者知道自己戴的是黑帽子,谁就能被释放。囚犯们能看到其它的人帽子颜色,但是看不到自己的帽子颜色。过了一段时间,三个囚犯都没有说话,其中一个聪明的囚犯立刻肯定自己戴的是黑帽子,你知道为什么吗?
3.有16个硬币,A和B轮流拿,每次拿的个数只能是1,2,4之一,谁最后拿谁就输。问可以保证赢吗?
上机题:
nxn的方格,去掉一条对角线的两个对角,余下部分用面积为2的矩形覆盖,即1x2或2x1的矩形,结果是不可能完全覆盖,请编程枚举所有的覆盖情况
一个猴子,身带100个香蕉,他距离家50米.   这个猴子要带香蕉回去.但是他一次最多只能背50个香蕉.
而且,每走一米他就要吃掉一个香蕉(往回走也要吃香蕉).
问:这个猴子最后最多可以带多少个香蕉到家.
能不能推广到其他情况,例如500个香蕉100米?
 
3 人戴 5 个帽子,三蓝两红,自己看不到自己的帽子,只能看到别人的.提问时,前两个人都说不知道自己什么颜色,第三个人居然知道.
我没看到原题, 不过我觉得这道题应该有一个漏掉的说明: 每人只能戴1顶帽子. 否则,这道题目就挺繁琐了. 另外, 题目要问的可能是: 这三个人分别戴了什么颜色的帽子?
我的解(从第1个人到第3个人):
1. 蓝, 蓝, 蓝
2. 红, 红, 蓝
3. 蓝, 红, 蓝
4. 红, 蓝, 蓝
另外, 如果考虑每个人至少戴1顶帽子, 最多3顶帽子的话, 还要加上如下情况:
1. (红, 蓝), (红, 蓝), 蓝
2. (红, 蓝), 红, 蓝
3. (红, 蓝), 蓝, 蓝
4. 红, (红, 蓝), 蓝
5. 蓝, (红, 蓝), 蓝
 
1,实现void strtol(char* num_str,char** endptr,int base)函数,此函数的功能是将一个字符串num_str转换成整数。num_str中保存的是待转换的字符串。字符串有8,10,16进制三种形式,保存在base参数中,若base为0,则需要自己判断具体的进制。要判断是否溢出,若为上溢出,返回INT_MAX,若为下溢出,返回INT_MIN。字符串num_str可能存在非法字符,若存在非法字符,返回非法字符前面的转换结果,并将endptr指向第一个非法字符,若没有非法字符,不需要返回endptr。
#注:不能使用任何库函数。
2,从1亿个数中,找出最大的1000个数。效率要尽可能的高,使用的额外空间要尽可能小。
void max_num(int* source_num,int* max_num)
source_num:数组包括所有的1亿个数。
max_num:保存最大的1000个数。
#注:不能使用任何库函数。

const int MAX_NUM = 5;
const int MAX_SRC = 10;
void swap(int &x, int &y)
{
 int temp = x;
 x = y;
 y = temp;
}
void heap_fix_down(int root, int *max_num, int size)
{
 int min_index = root;
 int left = (root << 1) + 1;
 int right = left + 1;
 if (left < size && max_num[min_index] > max_num[left])
  min_index = left;
 else if (right < size && max_num[min_index] > max_num[right])
  min_index = max_num[right];
 
 if (min_index != root)
 {
  swap(max_num[min_index], max_num[root]);
  heap_fix_down(min_index, max_num, size);
 }
}
void heap_fix_up(int *max_num, int size)
{
 size = size - 1;
 while (size > 0)
 {
  int p = (size - 1) >> 1;
  if (max_num[size] < max_num[p])
  {
   swap(max_num[size], max_num[p]);
   size = p;
  }
  else
   break;
 }
}
void heap_pop(int *max_num, int& size)
{
 max_num[0] = max_num[--size];
 heap_fix_down(0, max_num, size);
}
void heap_push(int val, int *max_num, int& size)
{
 max_num[size++] = val;
 heap_fix_up(max_num, size);
}
void max_1000num(int *source_num, int *max_num)
{
 int i, size = 0;
 for (i = 0; i < MAX_NUM; ++i)
 {
  heap_push(source_num[i], max_num, size);
 }
 
 for (i = MAX_NUM; i < MAX_SRC; ++i)
 {
  if (max_num[0] < source_num[i])
  {  
   heap_pop(max_num, size);
   heap_push(source_num[i], max_num, size);
  }
 }
 
}
int main()
{
 int source_num[MAX_SRC] = {100, 50, 10, 11, 3, 9, 13, 55, 77, 99};
 int max_num[MAX_NUM];
 
 max_1000num(source_num, max_num);
 for (int i=0; i {
  cout< }
 cout< 
 return 0;
}
3,若对于整数N,在集合{1,2……,N}中找出m个数,使其和等于剩下的N-m个数的和。返回所有可能的组合数。N<10000。
#注:不能使用任何库函数。
 
 
 
笔试题收集
 1、输出字符串的全排列,如“ABCD”的全排列。
#include
#include
using namespace std;
void Perm(char str[],int k,int n)
{
    if(k==n)
    {
        for(int i=0;i  {
            cout<  }
        cout<    }
    else
        for(int i=k;i        {
            swap(str[k],str[i]);
            Perm(str,k+1,n);
            swap(str[k],str[i]);
        }
}
void main()
{
 char str[] = "ABCD";
 Perm(str, 0, strlen(str));
}
2、Check回文数
bool CheckPalindromicNumber(int nPalinNum)
{
 int nTemp = nPalinNum, i=0;
 int a[100];
 while (nTemp)
 {
  a[i++] = nTemp%10;
  nTemp /= 10;
 }
 int nBegin = 0, nEnd = i-1;
 while (nBegin < nEnd)
 {
  if (a[nBegin] != a[nEnd])
  {
   break;
  }
  else
  {
   nBegin++;
   nEnd--;
  }
 }
 return nBegin>=nEnd;
}

3、类似于strstr()函数
const char* StrStr(const char* pStr, const char* pStrSub)
{
 for (int i=0; i {
  int nTemp = i, j = 0;
  if (pStr[i] == pStrSub[j])
  {
   while (pStrSub[j++] == pStr[i++])
   {
    if (pStrSub[j] == '\0')
    {
     return &pStr[i-j];
    }
   }
  }
  i = nTemp;
 }
 return NULL;
}

4、strcpy()函数
char* Strcpy(char *strDst, const char *strSrc)
{
 assert(strDst != NULL && strSrc != NULL);
 char *address = strDst;
 while ((*strDst++ = *strSrc++) != '\0')
  NULL;
 return address;
}
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chrysler_300c/archive/2009/10/11/4635348.aspx
阅读(857) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~