zoukankan      html  css  js  c++  java
  • 面试题1

    请写出下面程序的输出结果:(答案在下面)

    1、

    1. int count = 3;  
    2. int main(void)  
    3. {  
    4.     int i, sum, count = 2;  
    5.     for(i=0,sum=0; i<count; i+=2,count++)  
    6.     {  
    7.         static int count = 4;  
    8.         count++;  
    9.         if(i%2 == 0)  
    10.         {  
    11.             extern int count;  
    12.             count++;  
    13.             sum += count;  
    14.         }  
    15.         sum += count;  
    16.     }  
    17.     printf("%d %d\n",count, sum);  
    18.     return 0;  
    19. }  

    2、

    1. void func(char str[50])  
    2. {  
    3.     printf("A %d B %d ",sizeof(str), strlen(str));  
    4. }  
    5. int main(void)  
    6. {  
    7.     char stra[] = "HelloWorld";  
    8.     char *strb = stra;  
    9.     printf("C %d D %d ",sizeof(stra), sizeof(strb++));  
    10.     func(++strb);  
    11.     printf("E %d F %d\n",strlen(stra), strlen(strb++));  
    12.     return 0;  
    13. }  

    printf("C %d D %d ",sizeof(stra),sizeof(strb++)); 中的sizeof(strb++)并不对sizeof函数中strb进行自增运算,只是简单的求这个指针的大小,此时的strb指针还是指向stra。

    3、

    1. #include <vector>  
    2. int func(std::vector<int>vec)  
    3. {  
    4.     static int k = 2;  
    5.     std::vector<int>::reverse_iterator it;  
    6.     for(it = vec.rbegin(); it!=vec.rend(); ++it)  
    7.     {  
    8.         k += *it%2==0? ++*it: (*it)++;  
    9.     }  
    10.     return k;  
    11. }  
    12. int main(void)  
    13. {  
    14.     std::vector<int>vec;  
    15.     for(int i = 0; i<4; i++)  
    16.     {  
    17.         vec.push_back(i);  
    18.         printf("%d ",func(vec));  
    19.     }  
    20.     return 0;  
    21. }  

     4、

    1. class Base  
    2. {  
    3. public:  
    4.     int m_a;  
    5.     Base(int a=2):m_a(a)  
    6.     {  
    7.         printf("A %d ",m_a);  
    8.     }  
    9.     virtual ~Base()  
    10.     {  
    11.         printf("B %d ",m_a);  
    12.     }  
    13. };  
    14. class Derived:public Base  
    15. {  
    16. public:  
    17.     Derived(int a=4):Base(a)  
    18.     {  
    19.         printf("C %d ",m_a);  
    20.     }  
    21.     ~Derived()  
    22.     {  
    23.         printf("D %d ",m_a);  
    24.     }  
    25. };  
    26. int main(void)  
    27. {  
    28.     Base *aa,bb;  
    29.     aa = new Derived;  
    30.     delete aa;  
    31.     return 0;  
    32. }  

    5、

    1. class Base  
    2. {  
    3. public:  
    4.     int m_a,m_b;  
    5.     Base(int a = 2,int b = 5):m_a(a),m_b(b)  {  }  
    6.     int func_a()  
    7.     {  
    8.         return m_a - m_b;  
    9.     }  
    10.     virtual int func_b()  
    11.     {  
    12.         return m_a + m_b;  
    13.     }  
    14. };  
    15. class Derived:public Base  
    16. {  
    17. public:  
    18.     Derived(int a = 4, int b = 7):Base(a, b)  {  }  
    19.     virtual int func_a()  
    20.     {  
    21.         return m_b + m_a;  
    22.     }  
    23.     int func_b()  
    24.     {  
    25.         return m_b - m_a;  
    26.     }  
    27. };  
    28. int main(void)  
    29. {  
    30.     Base *aa, *bb;  
    31.     aa = new Base(4, 7);  
    32.     bb = new Derived(3, 5);  
    33.     printf("%d %d %d %d\n",aa->func_a(), aa->func_b(), bb->func_a(), bb->func_b());  
    34.     delete aa;  
    35.     delete bb;  
    36.     return 0;  
    37. }  

    6、

    1. struct SC  
    2. {  
    3.     int a;  
    4.     int b;  
    5.     int c;  
    6. };  
    7. struct SD  
    8. {  
    9.     int a;  
    10.     int b;  
    11.     int c;  
    12.     int d;  
    13. };  
    14. int main(void)  
    15. {  
    16.     struct SC c1[] = {{3},{4},{5},{6}};  
    17.     struct SD *c2 = (struct SD*)c1 + 1;  
    18.     printf("%d %d %d %d\n",c2->a,c2->b,c2->c,c2->d);  
    19.     return 0;  
    20. }  

    7、

    1. int func(int n)  
    2. {  
    3.     int k = 1;  
    4.     if(n > 0)  
    5.     {  
    6.         k += func(--n);  
    7.         printf("%d ", n);  
    8.         k += func(--n);  
    9.     }  
    10.     return k;  
    11. }  
    12.   
    13. int main(void)  
    14. {  
    15.     int a = 3;  
    16.     printf("%d\n",func(a));  
    17.     return 0;  
    18. }  

    答案:

    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);

    1. int checkstr(const char *msg)  
    2. {  
    3.     int len = strlen(msg);  
    4.     int i, j;  
    5.     for(i = 0,j = len-1; i <= j; i++,j--)  
    6.     {  
    7.         if(msg[i] != msg[j])  
    8.             break;  
    9.     }  
    10.     if(i>j)  
    11.         return 0;  
    12.     else  
    13.         return -1;  
    14. }  
    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个结点。
    这种思路只需要遍历链表一次。对于很长的链表,只需要把每个结点从硬盘导入到内存一次。因此这一方法的时间效率比较高。

    1. typedef struct Node  
    2. {  
    3.     struct Node *next;  
    4. }NODE;  
    5.   
    6. NODE* findnode(NODE *head, unsigned int k)  
    7. {  
    8.     if(head==NULL)  
    9.         return NULL;  
    10.     NODE *p, *pcur;  
    11.     pcur = head;  
    12.     for(unsigned int i = 0; i < k; i++)  
    13.     {  
    14.         if(pcur->next != NULL)     //在第k-1步之前,第二个指针p保持不动  
    15.             pcur = pcur->next;  
    16.         else  
    17.             return NULL;      //k比链表中节点的数目要大,找不到倒数第k个节点,直接返回空  
    18.     }  
    19.     p = head;  
    20.     while(pcur->next)  
    21.     {  
    22.         pcur = pcur->next;  
    23.         p = p->next;  
    24.     }  
    25.     return p;  
    26. }  

    简答题:
    1、简述动态链接库DLL和静态链接库lib的差别。
    2、请简述MFC中的窗口收到WM_PAINT消息是如何处理的,什么情况下会产生WM_PAINT消息。
    3、请简述Critical Section 、Mutex、Semaphore的功能和差别
    4、简述多线程程序对比单线程程序的优点和缺点。

  • 相关阅读:
    2019gdcpc
    STL容器
    C. Neko does Maths
    19年天梯赛总结
    初识事物处理
    Mybatis和spring整合
    build path导入的jar失效导致找不到类
    整合mybatis和spring时 Error creating bean with name 'sqlSessionFactory' defined in class path resource
    了解并使用springAOP(面向切面编程)
    aop配置问题引发的报错
  • 原文地址:https://www.cnblogs.com/sunshinewave/p/2682628.html
Copyright © 2011-2022 走看看