• 中兴软件面试题2


    现在的公司招聘,都要笔试面试.如果你不是那种编程功底非常深厚的人,又不好好准备一番,在笔试面试中往往会处于被动局面.虽然有些笔试题是故意为难我们,有点钻牛角尖.但是很多笔试题面试题确实能够很好地看出我们的基础.

       在这里,我就略去那些钻牛角尖的题.csdn论坛我近半年的收集中选出10道有代表性的题目,难度基本上是逐渐加大.对数组,指针,数据结构,算法,字符串,文件操作等问题都有覆盖.主要以c语言的实现为主,也有c++的题.大家可以先做做这10道题,测试一下自己的水平.

    1. 下面这段代码的输出是多少(32位机上).

        char *p; 

        char *q[20];

        char *m[20][20];

        int (*n)[10];

        struct MyStruct

    {

    char dda;

    double dda1;

    int type ;

    }

    MyStruct  k;

     printf("%d %d %d %d",sizeof(p),sizeof(q),sizeof(m),sizeof(n),sizeof(k));

    答案:4801600424

    (1)

    char a[2][2][3]={{{1,6,3},{5,4,15}},{{3,5,33},{23,12,7}} };

    for(int i=0;i<12;i++)

    printf("%d ",__a[0][0][i]_);

    在空格处填上合适的语句,顺序打印出a中的数字

    (2)

    char **p, a[16][8]; 

    问:p=a是否会导致程序在以后出现问题?为什么?

    答:没有问题,只是使用时要小心,p是指向指针的指针。

    3.用递归方式,非递归方式写函数将一个字符串反转.

       函数原型如下:char *reverse(char *str);

    答:非递归方式:

        char *reverse(char *str)

       {

         if(str!=NULL)

         {

          int length = strlen(str);

          for(int i=0;i<length/2;++i)

            {

               char temp=str[i];

               str[i]= str[length-1];

               str[length-1] =temp;

            }

         }

        printf("%s/n",str);

       }

       递归方式:搞不定

       char *reverse(char *str)

       {

        if(str==NULL||strlen(str)==1)

           return str;

        int i;

        if(i==1)

          str[i] = '/0';

          return str[i];

        。。。。

       }

    4.strcpy函数和memcpy函数有什么区别?它们各自使用时应该注意什么问题?

    答:strcpy函数:拷贝字符串

        memcpy函数:拷贝任何数据

    5.写一个函数将一个链表逆序.

     答:简单

    6一个单链表,不知道长度,写一个函数快速找到中间节点的位置.

     答:typedef struct linknode

        {

          int a;

          struct linknode *next;

        }linknode;

       linknode *findmiddle(linknode *head)

       {

         linknode *fast,*low,*p;

         if(head==NULL)

         {

            return NULL;

         }

         fast=low=head;

         while(!(p=fast->next)&&!p->next)

         {

            low=low->next;

            fast=p->next;

         }

         return low;

       }

    7 写一个函数找出一个单向链表的倒数第n个节点的指针.(把能想到的最好算法写出).

      答:两个指针,第一个先于第二个n个位置。

       LinkNode IsLoopList(LinkNode *head,int n)

       {

          LinkNode *p1,*p2,*p3;

       P1 = head;

       While(n-->=0)

       {

         P3= p2->next;

         P2 = p3;

       }

       While(p3->next!=NULL)

       {

    P3 = p3->next;

    P1 = p1->next;

       }

       Return p1;   //p3到达结尾时,后于p3n个位置的就是倒数第n个节点。

     }

     

    8补充一题:

    给你一个单向链表的头指针,可能最后不是NULL终止,而是循环链表。题目问你怎么找出这个链表循环部分的第一个节点。比如下面的链表:
    0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> (3) 
    循环,就应该返回结点3的位置。

    当然尽量用少的空间和时间是题目的要求。

    答:

     

    10.判断链表是否循环;

    答:bool IsLoopList(LinkNode *head)

    {
     LinkNode *p1= head,*p2= head;
     if(head ->next==NULL)//
    只包含头节点,且头节点的nextNULL说明肯定不是循环链表

        return false;
     do{
       p1=p1->next;      //
    步长为1
       p2=p2->next->next; //步长为2
     }while(p2 && p2->next && p1!=p2);
     if(p1==p2)
       return true;
     else
       return false;

     

    11.用递归算法判断数组a[N]是否为一个递增数组。

    答:递归算法:

    #include <stdio.h>
    #include <conio.h>
    #define N 5

    int Judgment(int a[]);

    int main()
    {
        int a[N], i, flag = 1;
        printf("Enter array data: ");
        for (i = 0; i < N; i++)
        {
            scanf("%d", &a[i]);  //
    输入数组元素。

        }
         flag = Judgment(a);  //
    调用递归函数
         if (flag == 1)
        {
            printf("increment array./n");
        }
        else if (flag == 0)
        {
            printf("no increment array./n");
        }
        getch();
        return 0;
    }

    int Judgment(int a[])
    {
        static i = 0; //
    注意这个是静态变量,必须用static

        if(i < N - 1)
        {
            if (a[i] > a[i + 1])
            {
                return 0;         

        }
            i++;
            Judgment(a);
        }    
           return 1;
    }            

    非递归算法:

     #include <stdio.h>
    #include <conio.h>
    #define N 5

    int Judgment(int a[], int num);

    int main()
    {
        int a[N], i, flag = 1;
        printf("Enter array data: ");
        for (i = 0; i < N; i++)
        {
            scanf("%d", &a[i]);
        }
        flag = Judgment(a, N);
        
        if (flag == 1)
        {
            printf("increment array./n");
        }
        else if (flag == 0)
        {
            printf("no increment array./n");
        }
        getch();
        return 0;
    }

     

    int Judgment(int a[], int num)
    {
        static i = 0, flag = 1;
      for(i=0; i<num; i++)
        {
         if (a[i] >= a[i+1])      //
    假如发现哪两个不是递增,立刻跳出
    ;
          {
            flag = 0;
            break;
          }
       }
        return flag;
    }        

  • 相关阅读:
    2019-2020-1 20175335 20175303 20175304 20275327 实验三 并发程序
    2019-2020-1 20175304 20175303 20175327 20175335 实验二 固件程序设计
    2018-2019-1 20175304 20175303 20175327 20175335 实验一 开发环境的熟悉
    2019-2020-1 20175312 20175333 实验四 外设驱动程序设计
    实验三 并发程序
    2019-2020-1 20175312 20175321 20175333 实验三-并发程序
    2019-2020-1 20175312 20175321 20175333 实验二 固件程序设计
    2019-2020-1 20175312 20175321 20175333 实验一 开发环境的熟悉
    # 2019-2020-1 20175333曹雅坤 《信息安全系统设计基础》第四周学习总结
    2019-2020-1 20175333《信息安全系统设计基础》第三周学习总结
  • 原文地址:https://www.cnblogs.com/bb3q/p/4506904.html
Copyright © 2020-2023  润新知