中興軟件面試題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;

   }

寫一個函數找出一個單向鏈表的倒數第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;
}         

發佈了21 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章