2015恆生電子校招筆試詳解


詳細解答:

一、選擇題

1、BD  C語言要經過編譯成二進制代碼,再經過連接形成.exe可執行文件。

2、D  3種遍歷方式的互推。

3、D    私有成員只能本類訪問

4、CD  索引不是越多越好,尤其是組合索引。

5、B    主要看SQL語句where后是否為ture。

6、B  abcd直接過得A;依次全入棧再出棧得C;a入棧,bcd直接過,a出棧得D。

7、DA  值調用表示方法接收的是調用者提供的值,不改變實參;引用調用表示方法接收的是調用者提供的變量的地址,改變實參。

8、D  因為D最抽象,C是錯的,還有鏈式、樹等。

9、C    1000|0001=1001>>1=0100=4。

10、CD  d表示目錄,w是寫,r是讀,x是執行,沒3個一組,分別是所有着、用戶組或其他用戶,即用戶組為r-x,擁有讀和執行權限。 

二、Java語言部分

1、B

2、C

3、AB A申明了字符串,B字符多了,CD正常,可以用中文和Unicode編碼申明。

4、AC   (-5)%2=-1,B錯;D超過int范圍。

5、C     常考題,http://www.cnblogs.com/dingshilei/p/4107583.html的23題解析。

三、數據庫

1、select distinct S.Sname from S,C,SC where SC.Sno=S.Sno and SC.Cno=C.Cno and C.Cname="數據庫" order by S.Sname DESC; 

2、select distinct SC.Sno,C.Ccredit from SC,C where C.Ccredit >80 and SC.Grade>60;

3、alter table SC add Teacher varchar(20) not null;

4、create view SCSum as select Sno,sum(Grade) from SC group by Sno ;

5、delect from SC where Sno not in(select Sno from S);

四、編程題

注意要判斷是否為閏年,閏年的2月份要多加一天。

#include <stdio.h>



struct date 

{

    int year; 

    int month; 

    int day; 

}; 



int leap_year(int a);

int cal_day(struct date a);



/*判斷閏年*/ 

int leap_year(int a)

{

    if(a%400==0||(a%4==0&&a%100!=0)) 

        return 1;

    else 

        return 0;

}



/*計算一年中的第幾天*/ 

int cal_day(struct date a) 

{

    int sum=0,b[]={31,28,31,30,31,30,31,31,30,31,30,31} ;

    for(int i=0;i<a.month-1;i++) 

        sum+=b[i]; 

    if(a.month>2)

        sum=sum+a.day+leap_year(a.year); 

    else

        sum=sum+a.day;

    return sum; 

} 



void main()

{

    struct date a;

    int n;

    printf("\n請輸入日期(年 月 日)\n"); 

    scanf("%d%d%d",&a.year,&a.month,&a.day); 

    n=cal_day(a);

    printf("該日在本年中是第%d天\n",n);

}

五、算法題

1、基本思路就是判斷合數的因子是否為素數,然后for循環迭代完成。

import java.util.Scanner;

public class Try
{
  static boolean is_odd(int n) //判斷是否為素數
  {
   if(n==2||n==3) return true;
   if(n%2==0) return false;
   int i;
   for(i=3;i<=n/2;i+=2)
    if(n%i==0) return false;
   return true;
  }
 
  public static void main(String[] args)
  {
   Scanner in=new Scanner(System.in);
   System.out.println("輸入數值");
   int n=in.nextInt();
   int i;
   System.out.print(n+"=");
   for(i=2;i<=n;i++)
   {
    if(!is_odd(i)) continue;
    if(n%i==0)
    {
     while(true)
     {
      System.out.print(i);
      n/=i;
      if(n!=1) System.out.print("*");
      if(n%i!=0) break; 
     }
    }
   }
   System.out.println();
  }
}

還可以用遞歸的方法來實現http://blog.csdn.net/YidingHe/article/details/3952651

    import java.util.List;  
    import java.util.ArrayList;  
       
    /** 
     * 分解質因數 
     */  
    public class GetFactor {  
       
        public static void main(String[] args) {  
            List<Long> factors = getFactors(5555566666L, 2);  
            System.out.println(factors);  
        }  
       
        /** 
         * 通過遞歸實現分解質因數 
         * 
         * @param n      要分解的數字 
         * @param factor 起始因子 
         * 
         * @return 分解結果 
         */  
        private static List<Long> getFactors(long n, long factor) {  
            // 不斷增大 factor 直到能整除 n  
            while (n % factor != 0 && factor < n) {  
                // 得到 2,3,5,7,9,11,13,...  
                factor = factor < 2 ? 2 : factor == 2 ? 3 : factor + 2;  
            }  
       
            List<Long> result;  
            if (factor >= n) {  // 因子已經漲到和 n 一樣大,說明 n 本身就是因子。這時遞歸完成。  
                result = new ArrayList<Long>();  
            } else {            // 因子能夠整除 n,於是繼續分解除以因子后的結果  
                result = getFactors(n / factor, factor);    // 向下遞歸  
            }  
              
            result.add(factor);  
            return result;  
        }  
    }  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM