找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1037|回复: 0

[面筋] Microsoft实习生面试时的笔试

[复制链接]
发表于 2011-5-19 10:33 | 显示全部楼层 |阅读模式
Microsoft实习生面试时的笔试  q) s% h4 f8 U: ^
5 k# ~: J' W# ?& ?) b" e
zz# h1 T& B) ~' O* D# T; Q  f

  x, A$ q% y( Z# k7 p2 z- Z0 z0 r                  (08年微软实习生)             ' H/ p- j/ H/ V$ k1 I
总共2大题
- y+ q7 L9 q& f+ X; t# K第一题 (数据结构题)9 e3 i" f2 \4 Q7 M$ d% T: S; e
读程序 补充程序中缺少的部分 难度不大
7 ^2 }. {" r/ X9 ^# B. F6 A7 q( h5 w+ r$ x! ~3 R/ C5 F( c- ~
本次笔试程序的内容是数据结构中的线性表的链式存储 # d  R' l! a7 f/ O7 C" @. r+ A
程序中出现需要补充的几个主要的函数:线性链表的创建,插入,删除,判断链表是否为循环链表。0 p0 I; k1 J+ P8 t1 O( A
程序用c语言描述 ,指针一定要掌握好。4 _) I% u- j1 p( m$ r+ M0 F1 c# v

' ]- N$ a( A0 f- p, y1 {* r以下程序自己所写% O1 g1 D  c7 q1 d9 d. A# ?0 }- ^
仅供参考:5 q; l% o0 z, ], x
(以下程序在vc6.0中编译通过)9 w  a( d3 y0 t1 I
- U) t4 K8 m1 O* F5 g: \
6 Z7 X& K; ~5 H0 C
//Copyrights  huchen
' K& N  _* `6 h/ ^4 g//
9 ^. Y7 B9 \+ B: Z/ x6 m$ C* i5 d# J- T//描述:程序描述了单链表的创建,插入,删除
% R6 Y* ]' u& u2 p# q7 ~( F//注意:判断是否循环链表由读者自己实现 8 Z' q) O, {6 V# b& L0 T! I" P& w
//
) t! l* X$ e& i3 M1 c8 a//作者:胡琛 <huc87@126.com>$ v/ P# Q0 D* W: ?# Z- N
//日期:2007-7-22, 16:38:254 z4 o+ ?( T7 \3 e: |
#include <stdio.h>  I) U# y& U1 W" ~) g

! {: q- H' ?; _( @" l#define ERROR_OK 0( r  T7 l2 t9 h$ r
#define ERROR_OUT_OF_MEMORY 1
2 _1 x  h+ c4 o) h6 Z- M0 ^$ V% u! e#define ERROR_OVERFLOW 2
! W% c) d, M: b! A$ D- L% r' H( ?. |/ Y
struct LNode ! _2 v  O3 P9 K/ b/ t3 h
{
. T  y1 b$ v* K8 {    int data;
9 X  X5 L+ H8 S) Z    LNode *next;) X1 p2 _% }1 r
};* `, B6 [7 X4 h+ i" Q3 R
//创建一个链表 length为要创建链表的大小, head为头指针( I  }$ w, z' c
int CreateList(LNode *&head, int length), ~, ~% m6 m! e. z
{
0 ]! M! C) _- `5 O  D; Y! G6 M* }! n    head = new LNode();
" i/ K& A- L: x0 E4 H, V# H    if(!head)
8 h6 U8 J) F3 {) N# Y    {
& t8 ~# G  ?% O; C        return ERROR_OUT_OF_MEMORY;
5 {" n& f# w2 Q" c8 g4 F9 f7 Z    }4 q7 U. R" X# V8 V5 I
    head->next = NULL;
9 d. V$ n! J: K% n( w% f9 ]* ]    LNode *p;; m3 F! g# ]0 i& O1 `# R# g
    printf("please enter the element:\n");( O* @+ T( }* }: f* H
    for(int i = 0; i < length; ++i); L9 t. R5 h" _( V) g' Z  _
    {
, i/ X8 u9 P: u; ?        p = new LNode();" @( |; [9 N' i0 X$ c. g9 O
        if(!p)
% S' h' L: M  w/ B% r        {
& |3 @1 r# i. C$ D1 }2 Q            return ERROR_OUT_OF_MEMORY;+ B2 {: p) X* H! V
        }4 N. _4 Y( M9 o3 P- ?) d
        scanf("%d", &(p->data));
6 o9 W5 Y7 J/ L0 {) `) K        p->next = head->next;; |# y9 w, M+ ~# |' K
        head->next = p;
; }# f2 V8 q7 x% R    }$ z3 ?- ~  Q/ a: D; T
    return ERROR_OK;* |( B& i4 m0 o7 N2 \) ?7 o% G
}7 P$ x# P2 f1 I5 L/ z
//插入一个节点 ( t; K1 u- Q4 y
int Insert(LNode *head, int location)
7 q1 P: Q) z) D" r6 n# d{
9 p% g% }. U* d# c. F    int index = 1;
2 I, `, D  {; ?0 o+ N: s6 e    while(index < location && head->next)
5 }& h6 b" y. ?4 j3 c( C) F    {
4 D% K3 a/ ?6 K% B- t        head = head->next;) j/ y5 e3 z1 J
        ++index;
* D3 r1 l8 R# k, K) O2 m/ @  @8 D    }
7 U/ H* l5 T: l7 Y    if(!(head->next))- k) b8 d3 ?! ]9 ?* [
    {5 e. d- @7 U6 S, a# y* h, \( f
        printf("overflow!\n");6 q% D- P5 J1 J# w# |+ }
        return ERROR_OVERFLOW;
( I9 X+ K8 ^) b% j& l% Q    }7 H: }2 _% ?6 t4 ^- [$ ]
    LNode *p = new LNode();0 I4 V" h+ U6 C# k7 M  g
    if(!p)8 e  ~! W/ s0 s' {3 p
    {) p' Q, b# a/ |! @0 e. S" V
        return ERROR_OUT_OF_MEMORY;& O! i1 g) i. }5 J; }  Y, _
    }# s( Y* A: Y: y7 b9 R( @$ ^' ]% d8 H
    printf("input an number you want insert:\n");9 W5 {9 Y; a6 z+ F3 w# `
    scanf("%d", &(p->data));
' Q" K2 h* D4 R4 P8 ~    p->next = head->next;$ S/ z0 E* ?7 d% t; Q6 L# P! ^
    head->next = p;
% f$ d2 [8 j& ~7 S3 O( `7 I' u: O5 J' A
    return ERROR_OK;
( m9 e+ a/ J9 C* F" K" ^}
* M1 ]" T, b* [  R5 p% U, ^//删除一个节点, E+ c! G6 C  o. y3 R
int Delete(LNode *head, int location)* ?  F+ |+ U% {- x$ h
{+ ^5 m: u5 a$ @+ V3 C/ W8 Q- a
    int index = 1;6 i/ B8 _2 }; s4 s0 K. M# p+ F
    while(index < location && head->next) //index 保证指针指向要插入位置的前一个节点,
0 @; z8 g( s: P3 [9 w    {                                      // 第2个条件保证指针越界后指向最后一个节点
* _+ U5 g. R, W) h        head = head->next;7 o& ^) {* |9 m) d
        ++index;
+ w6 P. a. _$ `9 x) x    }! ]. q0 q, d, H; ^. w4 I8 b  o
    if(!(head->next))
/ D. ~1 B0 H0 ]9 J8 d4 r    {
6 D' @( i) s! b5 y- m        printf("overflow!\n");
: ]' z, m- E# Y        return ERROR_OVERFLOW;
1 A2 B$ V5 ^( R$ |# r9 ^# a1 \8 l( U    }  ~* r2 P1 y3 J# J7 N
    LNode *p = head->next;0 W) D/ J6 n/ J
    head->next = p->next;: L# \! h& A  h0 \
    delete p;4 D7 q7 B' f8 G( z4 o: \
    return ERROR_OK;
6 l+ M* ^) F' r* q! B  c}- S$ ~5 j+ \3 S/ d4 n
void ShowLinkList(LNode *head)
  K0 _3 J, O% q{
" ?/ S7 Z. i' O8 o) e: w/ L& s    printf("LinkList:");
! e( [/ a9 B" Y5 ]) ^! p    LNode *p = head->next;' P: |* |. e2 C7 S+ |7 B* O& }  C
    while(p)" M! d( Z# R- L* r# W
    {6 B& r- ^7 p: Q$ s+ \% |& _0 T
        printf("%d ", p->data);0 D# ^) s' R( c" o
        p = p->next;
0 E+ [* x6 U5 C0 y1 T    }! G- d! s" X" M+ O6 I: n9 l9 P
    printf("\n");
3 V" A$ i& L8 ~7 O8 u9 s, _% s" x8 t}
, _2 U; l8 n( a6 `* y
2 G2 }7 w7 i. Uvoid main()
  B7 M$ {2 ?1 g, V- m& o  f{6 c) n$ [# S5 K" J% m
   
" n) v# k4 J: {" Y    LNode *head = NULL;
, }7 s: G/ r6 a- E7 U    int initialLength,location;  ~$ u* l+ q; X( \8 t
      L2 O- L% t% B! J7 V  R5 z& J
    printf("please input an number to initilize the LinkList:\n"); //初始化链表的元素个数
3 ?$ k) o( {. S' q    scanf("%d", &initialLength);
1 _3 Y- o+ h! o" R* h$ W1 n) f0 e) T8 Z1 l1 t3 C
    if(!CreateList(head, initialLength))
1 [1 w, d& m! j) f3 ~% g- S0 }    {$ W' ?8 I. r% `
        printf("Create LinkList Success! \n");* C2 G( b$ i2 A7 F2 T. r* i, k) N
    }& x' b5 e- L* N* T9 z& M3 V
    ShowLinkList(head);
+ E1 P: U! Y2 Z- a" H$ Z, a$ X: \, b" N. ~4 T" D* w2 p
    printf("please input an location you want to insert to:\n");
+ b& y, Z  F8 x8 e    scanf("%d", &location);; }* R5 S# ~9 s4 L
" S% p" m# r8 K* U0 r& C+ L
    if(!Insert(head, location)); f  B" J6 w! \! T1 o$ K
    {3 I6 d$ g& W3 }% [* }& t! U
        printf("Insert success!\n");+ x/ X3 O5 b) N
    }1 B  @5 R% {- o
    ShowLinkList(head);
8 {  H9 Q, [7 z& V4 G$ `+ c9 B% p" [' _  [
    printf("please input an location you want to delete:\n");
3 F: e7 v+ O1 A) _$ I+ h9 L    scanf("%d", &location);
7 i$ |1 L7 r2 F1 U. s, s4 i0 U. [; H# `; \  N
    if(!Delete(head, location))
& f$ r2 w" d, M/ c    {
3 Q3 A" A1 ]$ E3 Y( e2 i        printf("Delete success!\n");
- Q, v7 G# S3 ]. q( P1 L/ c    }
# ^9 m# A% }# w7 I) R    ShowLinkList(head);
! K  [; c+ p' }4 p  M& L" F" _2 p. Z% L}
: [$ ]  W+ v" V- a# l5 d* f7 t% c; |9 L) d. S. A
第一题总结:把数据结构中的基础打牢(不可能一直考链表) 5 X% d/ M+ j& v9 C* b/ a' {) [6 p
8 k, h% |. A& U. n0 U
第二题! r: s  s( C$ G2 u2 w. U. S
英译中
" ]/ V+ b# Y; Y) \  R英语文章:长度 和难度都跟四级中阅读理解的文章差不多
2 ~- G# X# U0 A2 A+ m2 H9 L( F8 x0 U0 _
$ E# u  n7 c# a/ r7 j9 _
……4 ^* E; A. K$ B9 @5 m$ Y
1 n" S' H: |. T" @
http://bbs.aftjob.com/thread-607297-1-1.html
6 }1 ^# B  t) ^% v0 f( I# j' s5 _! a+ h4 ^
——
* ?, N3 _/ m/ J" ]$ y. B! f$ J! E微软(Microsoft)求职俱乐部* ~4 Q$ P) K+ r- d
http://bbs.aftjob.com/group-100-1.html% E0 m4 \7 ~0 I& w
2012阿凡提求职手册——IT行业篇 ; ?) R1 e/ V! p+ a4 O( m
http://bbs.aftjob.com/thread-607158-1-1.html' e' O8 Z. W" r/ W- Y4 e
—— 6 H8 M3 b( d: Y$ Y
微软笔经篇. w' @1 \2 `; p8 a
http://bbs.aftjob.com/thread-469556-1-1.html) V! |, h) F  {3 ~& E. x# S
微软2007年笔试题
3 y; J7 I6 }/ w6 m( p4 C0 Thttp://bbs.aftjob.com/thread-607298-1-1.html
8 p1 M0 H) b8 M; F微软今天的笔试题目(12月28日)
/ M2 T' l0 S' k4 S8 P1 Shttp://bbs.aftjob.com/thread-29793-1-1.html2 M/ N# f( n9 V- B4 x5 ]( G$ s
微软笔试题整理2 p4 k! V' h3 }" ^
http://bbs.aftjob.com/thread-607299-1-1.html
4 b, k. z: s5 x——  X' y: B- I  y* h" e
阿凡提(aftjob.com)求职社区5 `2 _! y$ q& w' S  `; X3 o) l1 P
阿凡提求职俱乐部-国内第一家网络求职俱乐部,提供企业求职俱乐部和高校求职俱乐部交流平台。) D, d) e6 @- V; _, l3 ]
——
- h! V+ C9 E" ~. t) l; F' t5 @0 n2 u* c; z5 m

. @5 s5 _( s) @& x" s% E
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-12-17 19:37

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表