首页 > 代码库 > 2015恒生电子校招笔试详解

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

 

2015恒生电子校招笔试详解