1. 程式人生 > >浙江大華2011 10 10校園招聘會筆試題

浙江大華2011 10 10校園招聘會筆試題

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                請寫出下面程式的輸出結果:(答案在下面)

1、

int count = 3;int main(void)int i, sum, count = 2for(i=0,sum=0
; i<count; i+=2,count++) {  static int count = 4;  count++;  if(i%2 == 0)  {   extern int count;   count++;   sum += count;  }  sum += count; } printf("%d %d\n",count, sum); return
0;}

2、

void func(char str[50])printf("A %d B %d ",sizeof(str), strlen(str));}int main(void)char stra[] = "HelloWorld"char *strb = stra; printf("C %d D %d ",sizeof(stra), sizeof(strb++)); func(++strb); printf("E %d F %d\n",strlen(stra), strlen(strb++)); return
0;}

printf("C %d D %d ",sizeof(stra),sizeof(strb++)); 中的sizeof(strb++)並不對sizeof函式中strb進行自增運算,只是簡單的求這個指標的大小,此時的strb指標還是指向stra。

3、

#include <vector>int func(std::vector<int>vec)static int k = 2std::vector<int>::reverse_iterator it; for(it = vec.rbegin(); it!=vec.rend(); ++it) {  k += *it%2==0? ++*it: (*it)++; } return k;}int main(void)std::vector<int>vec; for(int i = 0; i<4; i++) {  vec.push_back(i);  printf("%d ",func(vec)); } return 0;}

 4、

class Base{publicint m_a; Base(int a=2):m_a(a) {  printf("A %d ",m_a); } virtual ~Base() {  printf("B %d ",m_a); }};class Derived:public Base{public: Derived(int a=4):Base(a) {  printf("C %d ",m_a); } ~Derived() {  printf("D %d ",m_a); }};int main(void){ Base *aa,bb; aa = new Derived; delete aa; return 0;}

5、

class Base{publicint m_a,m_b; Base(int a = 2,int b = 5):m_a(a),m_b(b)  {  } int func_a() {  return m_a - m_b; } virtual int func_b() {  return m_a + m_b; }};class Derived:public Base{public: Derived(int a = 4, int b = 7):Base(a, b)  {  } virtual int func_a() {  return m_b + m_a; } int func_b() {  return m_b - m_a; }};int main(void){ Base *aa, *bb; aa = new Base(4, 7); bb = new Derived(3, 5); printf("%d %d %d %d\n",aa->func_a(), aa->func_b(), bb->func_a(), bb->func_b()); delete aa; delete bb; return 0;}

6、

struct SC{ int a; int b; int c;};struct SD{ int a; int b; int c; int d;};int main(void)struct SC c1[] = {{3},{4},{5},{6}}; struct SD *c2 = (struct SD*)c1 + 1; printf("%d %d %d %d\n",c2->a,c2->b,c2->c,c2->d); return 0;}

7、

int func(int n)int k = 1if(n > 0) {  k += func(--n);  printf("%d ", n);  k += func(--n); } return k;}int main(void)int a = 3printf("%d\n",func(a)); return 0;}

答案:

1、  4   20

2、 C 11 D 4 A 4 B 9 E 10 F 9

3、 3  5  10  18

4、 A 2 A 4 C 4 D 4 B 4  B 2

5、 -3 11 -2 2

6、 0  0  5  0

7、  0  1  2  0  9


程式設計題:
1、函式checkstr判斷一字串是不是對稱的。其中msg為輸入的字串,對稱返回0,不對稱返回-1,實現該函式。
int checkstr(const char *msg);

int checkstr(const char *msg)int len = strlen(msg); int i, j; for(i = 0,j = len-1; i <= j; i++,j--) {  if(msg[i] != msg[j])   break; } if(i>j)  return 0else  return -1;}
2、給出一個單向連結串列的頭指標,輸出該連結串列中倒數第K個節點的指標,連結串列的倒數第0個節點為連結串列的尾節點(尾節點的next成員為NULL)
typedef struct Node
{
         struct Node *next;
}NODE;

NODE* findnode(NODE *head,unsigned int k);

思路:在遍歷時維持兩個指標,第一個指標從連結串列的頭指標開始遍歷,在第k-1步之前,第二個指標p保持不動;
在第k-1步開始,第二個指標p也開始從連結串列的頭指標開始遍歷。由於兩個指標的距離保持在k-1,當第一個(走在前面的)指標pcur到達連結串列的尾結點時,第二個指標指標p正好是倒數第k個結點。
這種思路只需要遍歷連結串列一次。對於很長的連結串列,只需要把每個結點從硬碟匯入到記憶體一次。因此這一方法的時間效率比較高。

typedef struct Node{ struct Node *next;}NODE;NODE* findnode(NODE *head, unsigned int k)if(head==NULL)  return NULL; NODE *p, *pcur; pcur = head; for(unsigned int i = 0; i < k; i++) {  if(pcur->next != NULL)     //在第k-1步之前,第二個指標p保持不動   pcur = pcur->next;  else   return NULL;      //k比連結串列中節點的數目要大,找不到倒數第k個節點,直接返回空 } p = head; while(pcur->next) {  pcur = pcur->next;  p = p->next; } return p;}

簡答題:
1、簡述動態連結庫DLL和靜態連結庫lib的差別。
2、請簡述MFC中的視窗收到WM_PAINT訊息是如何處理的,什麼情況下會產生WM_PAINT訊息。
3、請簡述Critical Section 、Mutex、Semaphore的功能和差別
4、簡述多執行緒程式對比單執行緒程式的優點和缺點。

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述