可可簡歷網

位置:首頁 > 面試 > 面試筆試

sony往年程式筆試真題

sony往年程式筆試真題
 A、該題用語言描述是指:第i行第一個輸出*,然後輸出i-1個.,重複上i次。  #include
  #define N 8
  int main()
  {
  int i;
  int j;
  int k;
  for(i=0;i<=N;i++)
  {
  for(j=1;j<=i;j++)
  {
  printf("*");
  for(k=1;k
  printf(".");
  }
  printf("n");
  }
  return 0;
  B、降序排列陣列,很常見的,這裡我採用氣泡排序法還有選擇排序法:
  氣泡排序:
  #include
  void sort(int *array,int num );
  int main()
  {
  int num=9,i;
  int array[]={45,56,76,234,1,34,23,2,3};
  sort(array,num);
  for(i=0;i
  printf("%dt",array);
  return 0;
  }
  void sort(int *array,int num)
  {
  int i,j;
  int temp;
  for(i=0;i
  {
  for(j=0;j
  {
  if(array[j]
  {
  temp=array[j];
  array[j]=array[j+1];
  array[j+1]=temp;
  }
  }
  }
  }
  選擇排序:
  #include
  void sort(int *array,int num );
  int main()
  {
  int num=9,i;
  int array[]={45,56,76,234,1,34,23,2,3};
  sort(array,num);
  for(i=0;i
  printf("%dt",array);
  return 0;
  }
  void sort(int *array,int num)
  {
  int i,j,k;
  int temp;
  for(i=0;i
  {
  k=i; //每次一趟結束後就從新的一個值開始,無需從頭來,因為每一次排完後都是最大的了
  for(j=i+1;j
  if(array[k]
  {
  k=j;
  }
  if(k!=i) //如果k不等於i就說明有更大的值,交換二值
  {
  temp=array;
  array=array[k];
  array[k]=temp;
  }
  }
  }
  C、該題考查同學們對遞迴演算法的認識程度,在這裡我們採用迭代演算法,優點是程式執行效率高,而且不用擔心堆疊溢位,在運算值大的情況下比遞迴演算法可以提高上萬倍的速度,比如同樣計算30,遞迴演算法用時
  0.019s,而迭代演算法則只用了0.003s,可見是遞迴演算法的八分之一,值更大時這種越明顯。缺點是程式比較不容易懂。有興趣的可以參見《C和指標》127頁,具體程式如下:
  遞迴法:
  #include
  int Pheponatch(int);
  int main()
  {
  printf("The 10th is %d",Pheponatch(30));
  return 0;
  }
  int Pheponatch(int N)
  {
  if(N<=2)
  return 1;
  return Pheponatch(N-1)+Pheponatch(N-2);
  }
  迭代法:
  #include
  int Pheponatch(int);
  int main()
  {
  printf("The 10th is %d",Pheponatch(30));
  return 0;
  }
  int Pheponatch(int n)
  {
  long result;
  long previous_result;
  long next_older_result;
  result=previous_result=1;
  while(n>2)
  {
  n-=1;
next_older_result=previous_result+result;  previous_result=result;
  result=next_older_result;
  }
  return result;
  }
  D、源程式如下,紅筆寫出的是修改的地方:(其實這個程式有好多漏洞,不知為什麼會那這個程式來考)
  #include
  #include
  typedef struct{
  TNode* left;
  TNode* right;
  int value;
  } TNode;
  TNode* root=NULL;
  void append(int N);
  int main()
  {
  append(63);
  append(45);
  append(32);
  append(77);
  append(96);
  append(21);
  append(17); // Again, 數字任意給出
  }
  void append(int N)
  {
  TNode* NewNode=(TNode *)malloc(sizeof(TNode));
  NewNode->value=N;
  NewNode->right=NULL;
  NewNode->left=NULL;
  if(root==NULL)
  {
  root=NewNode;
  return;
  }
  else
  {
  TNode* temp;
  temp=root;
  while((N>=e && !=NULL) || (N
  right
  !=NULL
  ))
  {
  while(N>=e && !=NULL)
  temp=;
  while(N
  temp=t;
  }
  if(N>=e)
  =NewNode;
  else
  t=NewNode;
  return;
  }
  }
  原因:因為新節點的左右指標沒有賦 NULL 值,至使下面的 while迴圈不能正確結束而導致內
  存越界,最後崩潰(注意結束條件是 temp->left!= NULL 或 temp->right!=NULL)。