用户名:
密码:
类型:
注册
 设为首页   加入收藏   联系我们
 
 
 
环渤海建材网

招聘企业

招聘职位

日期
唐山鑫淼金 电工兼职IT 2013/3/30
唐山创元教 网站推广 2013/2/17
唐山创元教 网站编辑 2013/2/17
唐山瑞津酒 酒店实习生 2012/12/14
哈尔滨哈飞 钳工 2012/8/20
劳联环球国 诚聘装配工 2012/8/4
滦县友朋汽 汽车维修技师 2012/7/15
河北元道通 移动基站维护 2012/6/26
唐山水峰商 店面销售 2012/6/19
      您的位置:唐山技校网>> 其他 >>IT公司笔试题总结(二)——北大青鸟


IT公司笔试题总结(二)——北大青鸟

IT公司笔试题总结(二)——北大青鸟报名 已阅[4084]次[2012/10/17]

内容摘要:
随着IT产业的迅速发展,学习IT专业人员的迅速增多,大量IT相关专业人才的流入职场,使就业压力不断增大,下面北大青鸟为你总结了一些IT公司笔试题,希望对你的面试有帮助。
正文:
      北大青鸟为你总结了一些IT公司笔试题

  1. 找错

  试题1:

  Void test1()
  {
  char string[10];
  char* str1="0123456789";
  strcpy(string, str1);
  }

  试题2:

  Void test2()
  {
  char string[10], str1[10];
  for(I=0; I<10;I++)
  {
  str1[i] ='a';
  }
  strcpy(string, str1);
  }

  试题3:

  Void test3(char* str1)
  {
  char string[10];
  if(strlen(str1) <= 10)
  {
  strcpy(string, str1);
  }
  }

  在swap函数中,p是一个“野”指针,有可能指向系统区,导致程序运行的崩溃。在VC++中DEBUG运行时提示错误“Access Violation”。该程序应该改为:

  解答:
  test1: 字符串str1需要11个字节才能存放下(包括末尾的'\0'),而string只有10个字节的空间,strcpy会导致数组越界

  test2: 如果面试者指出字符数组str1不能在数组内结束可以给3分;如果面试者指出strcpy(string, str1)调用使得从str1内存起复制到string内存起所复制的字节数具有不确定性可以给7分,在此基础上指出库函数strcpy工作方式的给10分

  test3: if(strlen(str1) <= 10)应改为if(strlen(str1) < 10),因为strlen的结果未统计'\0'所占用的1个字节

  剖析:

  考查对基本功的掌握:
  (1)字符串以'\0'结尾;
  (2)对数组越界把握的敏感度;
  (3)库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案:

  2分
  void strcpy( char *strDest, char *strSrc )
  {
  while( (*strDest++ = * strSrc++) != '\0' );
  }

  4分
  void strcpy( char *strDest, const char *strSrc )
  //将源字符串加const,表明其为输入参数,加2分
  {
  while( (*strDest++ = * strSrc++) != '\0' );
  }

  7分
  void strcpy(char *strDest, const char *strSrc)
  {
  //对源地址和目的地址加非0断言,加3分
  assert( (strDest != NULL) && (strSrc != NULL) );
  while( (*strDest++ = * strSrc++) != '\0' );
  }

  10分
  //为了实现链式操作,将目的地址返回,加3分!

  char * strcpy( char *strDest, const char *strSrc )
  {
  assert( (strDest != NULL) && (strSrc != NULL) );
  char *address = strDest;
  while( (*strDest++ = * strSrc++) != '\0' );
  return address;
  }
  (4)对strlen的掌握,它没有包括字符串末尾的'\0'。
  读者看了不同分值的strcpy版本,应该也可以写出一个10分的strlen函数了,完美的版本为

  int strlen( const char *str ) //输入参数const

  {
  assert( strt != NULL ); //断言字符串地址非0

  int len;
  while( (*str++) != '\0' )
  {
  len++;
  }
  return len;
  }

  试题4:

  void GetMemory( char *p )
  {
  p = (char *) malloc( 100 );
  }

  void Test( void )
  {
  char *str = NULL;
  GetMemory( str );
  strcpy( str, "hello world" );
  printf( str );
  }

  试题5:

  char *GetMemory( void )
  {
  char p[] = "hello world";
  return p;
  }

  void Test( void )
  {
  char *str = NULL;
  str = GetMemory();
  printf( str );
  }

  试题6:

  void GetMemory( char **p, int num )
  {
  *p = (char *) malloc( num );
  }

  void Test( void )
  {
  char *str = NULL;
  GetMemory( &str, 100 );
  strcpy( str, "hello" );
  printf( str );
  }

  试题7:

  void Test( void )
  {
  char *str = (char *) malloc( 100 );
  strcpy( str, "hello" );
  free( str );
  //省略的其它语句

  }

  解答:

  试题4传入中GetMemory( char *p )函数的形参为字符串指针,在函数内部修改形参并不能真正的改变传入形参的值,执行完char *str = NULL;  GetMemory( str ); 后的str仍然为NULL;

  试题5中 char p[] = "hello world";  return p; 的p[]数组为函数内的局部自动变量,在函数返回后,内存已经被释放。这是许多程序员常犯的错误,其根源在于不理解变量的生存期。

  试题6的GetMemory避免了试题4的问题,传入GetMemory的参数为字符串指针的指针,但是在GetMemory中执行申请内存及赋值语句
  *p = (char *) malloc( num );后未判断内存是否申请成功,应加上:
  if ( *p == NULL )
  {
  ...//进行申请内存失败处理
  }

  试题7存在与试题6同样的问题,在执行char *str = (char *) malloc(100); 后未进行内存是否申请成功的判断;另外,在free(str)后未置str为空,导致可能变成一个“野”指针,应加上:str = NULL; 试题6的Test函数中也未对malloc的内存进行释放。

  剖析:

  试题4~7考查面试者对内存操作的理解程度,基本功扎实的面试者一般都能正确的回答其中50~60的错误。但是要完全解答正确,却也绝非易事。
  对内存操作的考查主要集中在:
  (1) 指针的理解;
  (2) 变量的生存期及作用范围;
  (3) 良好的动态内存申请和释放习惯。

  再看看下面的一段程序有什么错误:

  swap( int* p1,int* p2 )
  {
  int *p;
  *p = *p1;
  *p1 = *p2;
  *p2 = *p;
  }

  swap( int* p1,int* p2 )
  {
  int p;
  p = *p1;
  *p1 = *p2;
  *p2 = p;
  }

  2. 内功题

  试题1:分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var)

  解答:

  BOOL型变量:if(!var)
  int型变量: if(var==0)
  float型变量:const float EPSINON = 0.00001;   if ((x >= - EPSINON) && (x <= EPSINON)
  指针变量: if(var==NULL)

  剖析:

  考查对0值判断的“内功”,BOOL型变量的0判断完全可以写成if(var==0),而int型变量也可以写成if(!var),指针变量的判断也可以写成if(!var),上述写法虽然程序都能正确运行,但是未能清晰地表达程序的意思。

  一般的,如果想让if判断一个变量的“真”、“假”,应直接使用if(var)、if(!var),表明其为“逻辑”判断;如果用if判断一个数值型变 量(short、int、long等),应该用if(var==0),表明是与0进行“数值”上的比较;而判断指针则适宜用if(var==NULL), 这是一种很好的编程习惯。

  浮点型变量并不精确,所以不可将float变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。如果写成if (x == 0.0),则判为错,得0分。

  试题2:以下为Windows NT下的32位C++程序,请计算sizeof的值

  void Func ( char str[100] )
  {
  sizeof( str ) = ?
  }
  void *p = malloc( 100 );
  sizeof ( p ) = ?

  解答:

  sizeof( str ) = 4
  sizeof ( p ) = 4

  剖析:

  Func ( char str[100] )函数中数组名作为函数形参时,在函数体内,数组名失去了本身的内涵,仅仅只是一个指针;在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。

  数组名的本质如下:

  (1) 数组名指代一种数据结构,这种数据结构就是数组;

  例如:

  char str[10];
  cout << sizeof(str) << endl;

  输出结果为10,str指代数据结构char[10]。

  (2) 数组名可以转换为指向其指代实体的指针,而且是一个指针常量,不能作自增、自减等操作,不能被修改;

  char str[10];
  str++; //编译出错,提示str不是左值

  (3) 数组名作为函数形参时,沦为普通指针。

  Windows NT 32位平台下,指针的长度(占用内存的大小)为4字节,故sizeof( str ) 、sizeof ( p ) 都为4。


  学校地址:唐山市路北区华北煤炭医学院西校区篮球场以南,北大青鸟(唐山弘基)授权培训中心。

  乘车路线:市内乘7、16、61、41、114、35、77路等建设路沿线公交车均可到达,煤医道口站下车

  联系电话:15132527389   13832811994

  联系QQ:736798197


全国统一咨询热线: 400-808-8566



热门标签:
唐山,北大青鸟,IT



 网上报名(请详细填写联系方式,专业老师会尽快与你联系,做详细的解答!)
 学校名称: *  所报专业: *
 姓    名: *  Q     Q: *(注意:只能在此处输入数字!)
 性    别: *  文化程度: *
 联系电话: *(注意:只能在此处输入数字!)
身 份 证:
 家庭住址: *
 验证码: *
 
 相关技校
  ·唐山长宁中专——吉林医药学院2013年成人高等教育招生简章   ·将饮食作为一种生活   ·“食谱”新定位——短期营养配餐培训   ·西式面点学习到唐山劳动高级技工学校(技师学院)   ·唐山在岗人员培训应该去哪里   ·高级烹调师从唐山劳动高级技工学校起步   ·唐山劳动高级技工学校(技师学院)精品课程   ·唐山劳动高级技工学校(技师学院)开设专业  

更多技校…


 相关专业技校

·唐山焊工专修学校  

·唐山实力电脑学校   办公自动化, 平面设计, 室内装潢

·唐山今典装饰设计专修学校(唐山今典电脑)   平面设计, 室内装潢, 建筑设计

·木林树人动漫培训学校   影视动画

·唐山东波威娜美容美发化妆艺术学校2011招生简章  

·唐山秀芳四姐妹美容美发学校   美容美发

·唐山公路技工学校   工程造价, 土木工程, 会计电算化

·唐山工贸中等专业学校   机电一体化, 数控车工, 厨师,

更多技校……


技校 | 关于技校网 | 技校网广告服务| 技校网汇款信息 | 技校网会员服务 | 技校网免责声明 |
CopyRight 2009-2010 All rights reserved 版权所有 唐山创元教育咨询有限公司 未经允许 请勿复制或镜像 技校网备案序号: 冀ICP备11020808号-5 冀公网安备 13024002000223号
电话:400-808-8566 传真:0315-3859044
400-8088-566 0315-3859044 工作日:8:00-21:30
周六日:8:00-21:30