CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  新手乐园

VC面试题目??

楼主hsyouxishe(金笛玉洁)2006-03-15 12:41:17 在 C/C++ / 新手乐园 提问

VC题目    
  一、问答    
  1、实模式与保护模式。为什么要设计这两种模式?好处在什么地方?分别写出各自寻址的    
  过程。    
   
  2、请阅读以下一段程序,并给出答案。    
  class   A    
  {    
  public:    
  A(){   doSth()   }    
  virtual   void   doSth(){   printf("I   am   A");}    
  }    
   
  class   B:public   A    
  {    
  public:    
   
  virtual   void   doSth(){   printf("I   am   B");}    
  }    
   
  B   b;    
  执行结果是什么?为什么?    
   
  3、在STL的应用中   map这种key-value的应用很多,如果key的类型是GUID,该如    
  何处理?    
   
  4、一个内存变量a=5,有5个线程需要对其进行操作,其中3个对a进行加1操作,2个对a进    
  行减1操作,为了保证能够得到正常结果6,需要使用什么方法?(列出越多越好)    
   
  5、描述并比较以下对象:事件,信标,临界区,互斥对象。    
   
  6、cdecl、stdcall、fastcall是什么?哪种可以实现个数不定的入口参数,为什么?    
   
   
  二、程序设计(以下题目请写出实现代码)    
  1、有一段文本,统计其中的单词数。例如:    
  As   a   technology   ,   "HailStorm"   is   so   new   that   it   is   still   only   known   by   its    
  code   name.    
  注意:单词间的间隔不一定是一个空格    
   
  2、国际象棋有8×8格,每个格子可放一个棋子。皇后的规则是可以横、竖、斜移动。在一    
  个棋盘放置8个皇后,并使它们互相无法威胁到彼此。    
   
  3、输入二个64位的十进制数,计算相乘之后的乘积。    
  问题点数:100、回复次数:22Top

1 楼dnliophsam()回复于 2006-03-15 13:23:03 得分 1

markTop

2 楼echomo123(无语)回复于 2006-03-15 13:32:43 得分 1

强,关注~Top

3 楼fiftymetre(50米深蓝)回复于 2006-03-15 13:35:23 得分 10

1、实模式与保护模式。为什么要设计这两种模式?好处在什么地方?分别写出各自寻址的    
  过程。    
   
  机器状态字MSW(也就是       CR0       寄存器的低       16       位)的       Bit0       决定了       CPU       的工作状态,  
  为       0       时,CPU       处理实模式状态,为       1       时,CPU       处于保护模式。两种模式在物理地址  
  的形成方式上是不同的,实模式是段地址左移4位加上段内位移,保护模式时,段地址  
  成了段选择器(段号),它的高       13       位作为段表的下标查段表(段描述符表),从段表  
  中取出首地址再与段内位移相加,这才得到物理地址。加电复位时,CPU       处于实模式。  
   
  实模式主要是16位的DOS的工作模式,在这里用户处于最高的权限级别,用户程序可以访问系统的任何部分。而进入windows后,发展到了32位,且系统分为4级保护:0,1,2,3。  
  一般的用户程序工作在最低级:3级。而操作系统工作在保护环的最高级:0级。用户程序不能随意访问系统核心,提高了系统的稳定性。    
   
   
  详细点的请看:http://topic.csdn.net/t/20011016/15/325507.htmlTop

4 楼jinjiajie(leorio)回复于 2006-03-15 13:43:55 得分 6

二  
  1.判断当前和前一位是不是英文,然后做个判断就行  
  2.8皇后问题,数据结构,递归,n多  
  3.大数相乘,数组...Top

5 楼fiftymetre(50米深蓝)回复于 2006-03-15 13:50:27 得分 0

2、请阅读以下一段程序,并给出答案。    
  class   A    
  {    
  public:    
  A(){   doSth()   }    
  virtual   void   doSth(){   printf("I   am   A");}    
  }    
   
  class   B:public   A    
  {    
  public:    
   
  virtual   void   doSth(){   printf("I   am   B");}    
  }    
   
  B   b;    
  执行结果是什么?为什么?  
   
   
  请去看看C++必知必会上的第24条,成员函数的查找。和25条实参相依的查找吧。Top

6 楼fiftymetre(50米深蓝)回复于 2006-03-15 13:52:53 得分 6

第三题 不敢说  
   
  4、一个内存变量a=5,有5个线程需要对其进行操作,其中3个对a进行加1操作,2个对a进    
  行减1操作,为了保证能够得到正常结果6,需要使用什么方法?(列出越多越好)    
   
  OS原理 互斥Top

7 楼Snow_Ice11111(雪上加冰)回复于 2006-03-15 14:17:53 得分 15

二、1  
   
  #include   <iostream.h>  
  #include   <afx.h>  
   
  int   GetCount(const   char*   strSentence)  
  {  
  int   nCount=0;  
  BOOL   flag=FALSE;  
  while   (*strSentence!=0)  
  {  
  if   ((*strSentence>64   &&   *strSentence<91)   ||   (*strSentence>96   &&   *strSentence<123))  
  flag=TRUE;  
  else  
  {  
  if   (flag)    
  {  
  nCount++;  
  flag=FALSE;  
  }  
  }  
  strSentence++;  
  }  
  return   nCount;  
  }  
   
  int   main()  
  {  
  cout<<GetCount("As   a   technology   ,   'HailStorm'   is   so   new   that   it   is   still   only   known   by   its   code   name.")<<endl;  
  return   0;  
  }  
  Top

8 楼cocopww(春天我把老婆种下去,秋天我就有好多好多老婆啦)回复于 2006-03-15 14:34:25 得分 6

2、B   b;    
  执行结果是什么?为什么?    
   
  "I   am   A"       在基类函数中调用的虚拟实例总是在基类中活动的虚拟实例Top

9 楼citywanderer2005(流浪狗)回复于 2006-03-15 14:45:02 得分 1

这个要顶Top

10 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-15 14:47:45 得分 10

6、cdecl、stdcall、fastcall是什么?哪种可以实现个数不定的入口参数,为什么?    
  ----------------------------------  
  函数调用约定有多种,这里简单说一下:  
   
  1、__stdcall调用约定相当于16位动态库中经常使用的PASCAL调用约定。在32位的VC++5.0中PASCAL调用约定不再被支持(实际上它已被定义为__stdcall。除了__pascal外,__fortran和__syscall也不被支持),取而代之的是__stdcall调用约定。两者实质上是一致的,即函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,但不同的是函数名的修饰部分(关于函数名的修饰部分在后面将详细说明)。  
  _stdcall是Pascal程序的缺省调用方式,通常用于Win32   Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。  
   
  2、C调用约定(即用__cdecl关键字说明)按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数的函数只能使用该调用约定)。另外,在函数名修饰约定方面也有所不同。  
  _cdecl是C和C++程序的缺省调用方式。每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。函数采用从右到左的压栈方式。VC将函数编译后会在函数名前面加上下划线前缀。是MFC缺省调用约定。  
   
  3、__fastcall调用约定是"人"如其名,它的主要特点就是快,因为它是通过寄存器来传送参数的(实际上,它用ECX和EDX传送前两个双字(DWORD)或更小的参数,剩下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈),在函数名修饰约定方面,它和前两者均不同。  
  _fastcall方式的函数采用寄存器传递参数,VC将函数编译后会在函数名前面加上"@"前缀,在函数名后加上"@"和参数的字节数。    
   
  4、thiscall仅仅应用于"C++"成员函数。this指针存放于CX寄存器,参数从右到左压。thiscall不是关键词,因此不能被程序员指定。  
   
  5、naked   call采用1-4的调用约定时,如果必要的话,进入函数时编译器会产生代码来保存ESI,EDI,EBX,EBP寄存器,退出函数时则产生代码恢复这些寄存器的内容。  
  naked   call不产生这样的代码。naked   call不是类型修饰符,故必须和_declspec共同使用。  
  关键字   __stdcall、__cdecl和__fastcall可以直接加在要输出的函数前,也可以在编译环境的Setting...\C/C++   \Code   Generation项选择。当加在输出函数前的关键字与编译环境中的选择不同时,直接加在输出函数前的关键字有效。它们对应的命令行参数分别为/Gz、/Gd和/Gr。缺省状态为/Gd,即__cdecl。  
   
  要完全模仿PASCAL调用约定首先必须使用__stdcall调用约定,至于函数名修饰约定,可以通过其它方法模仿。还有一个值得一提的是WINAPI宏,Windows.h支持该宏,它可以将出函数翻译成适当的调用约定,在WIN32中,它被定义为__stdcall。使用WINAPI宏可以创建自己的APIs  
  Top

11 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-15 14:48:51 得分 5

保护模式   ..实模式   ...  
  --------  
  实模式:寻址采用和8086相同的16位段和偏移量,最大寻址空间1MB,最大分段64KB。可以使用32位指令。32位的x86   CPU用做高速的8086。  
   
   
  保护模式:寻址采用32位段和偏移量,最大寻址空间4GB,最大分段4GB   (Pentium   Pre及以后为64GB)。在保护模式下CPU可以进入虚拟8086方式,这是在保护模式下的实模式程序运行环境。Top

12 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-15 14:53:39 得分 5

3、输入二个64位的十进制数,计算相乘之后的乘积。  
  ------------------------  
  大数(巨型数)类处理   ...  
  可以参看实例程序Top

13 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-15 14:55:04 得分 10

2、国际象棋有8×8格,每个格子可放一个棋子。皇后的规则是可以横、竖、斜移动。在一    
  个棋盘放置8个皇后,并使它们互相无法威胁到彼此。    
  ----------------------  
  8皇后问题,算法中都有讲的,  
  给个参考   :  
   
  #include<math.h>  
  int   check(int   c[])      
   
    /*判断棋盘上八位数列是否符合斜率不为+1、-1、或0,且每位数字从1到8各出现一次,若符合返回1,否则为0*/  
      {int   n,m;  
        for   (n=0;n<7;n++)  
            for   (m=n+1;m<8;m++)              
                if   (c[m]<1||c[m]>8||c[n]==c[m]||abs(c[n]-c[m])==abs(n-m))  
                      return(0);  
        return(1);  
      }  
  main()  
      {int   qp[8]={8,7,6,5,4,3,2,1},*p;     /*qp[8]代表棋盘上八行,八个皇后在棋盘上一定是每行一个*/  
         
   
        /*八个皇后在棋盘上的横坐标一定各不相同,即1--->8各出现一次*/  
   
        /*由于数12345678可被九整除,于是用穷举法找出所有能被九整除的八位数,*/  
   
        /*其中必包含1--->8在八位中所有的排列组合*/  
   
        /*检测这些数列就能找出八皇后的所有可能*/  
   
        for   (p=qp;qp[7]<9;qp[0]+=9)  
            {for   (p=qp;p<&qp[7];)         /*对12345678每次加9,直加到87654321*/  
                  {if   (*p>9)  
                        {*(p+1)+=1;  
                          *p-=10;  
                          p++;  
                        }  
                    else  
                    p+=8;  
                  }  
              if   (check(qp))             /*检测八位数列,返回值为真则在屏幕上输出*/  
                  {for   (p=qp;p<=&qp[7];p++)   printf   ("%d",*p);  
                    printf   ("     ");  
      }     }     }Top

14 楼SEUU(三枝花)回复于 2006-03-15 22:20:40 得分 5

jf好爽,VC还考些这东东,还是搞C++好.  
   
  还有,你的分多给我一点吧,我是来得分的,我只要星星!Top

15 楼hamimelon(夜过留香)回复于 2006-03-16 17:33:55 得分 5

事件,信标,临界区,互斥对象,   最好是参考《Win32多线程编程》  
  jixingzhong   ,你很牛Top

16 楼l_xiaofeng(行到水窮處,坐看雲起時!)回复于 2006-03-17 00:48:25 得分 1

这不单单是C++的知识感觉  
  jixingzhong(瞌睡虫:选择了远方,只顾风雨兼程!)太牛了!Top

17 楼lei001(太极)回复于 2006-03-17 00:57:06 得分 1

markTop

18 楼cunsh(村少)回复于 2006-03-17 06:10:44 得分 1

upTop

19 楼bohlee(我心澎湃)回复于 2006-03-17 12:34:00 得分 1

怎么把我们公司的面试题贴出来了  
  Top

20 楼hsyouxishe(金笛玉洁)回复于 2006-03-17 13:29:50 得分 0

大家讨论啊Top

21 楼sjjf(水晶剑锋)回复于 2006-03-18 17:26:10 得分 10

第二道问题:  
  显示   I   am   A   ,  
  一个简单的理由:   doSth这个virtual是由   A()构造函数调用的,  
  而调用自己的虚函数,当然用的是自己的虚函数表了,就这么简单。  
  至于为什么调用了A(),是因为b有虚函数,或者继承树有构造函数。  
  编译器会自动创建一个构造函数,这个构造函数沿着继承树调用构造函数。Top

22 楼Jimmy_Hu()回复于 2006-07-07 16:16:58 得分 0

开了眼界了Top

相关问题

  • 面试题目 VC(c++)
  • 面试题目……
  • 面试题目
  • 面试题目
  • 面试题目
  • 一面试题目
  • 面试的题目
  • >>>>>>>>>>刚才面试的题目<<<<<<<<<<
  • 微软面试题目(一)
  • 微软面试题目(二)

关键词

  • 模式
  • 用户
  • 系统
  • virtual
  • cpu
  • strsentence
  • qp
  • 棋盘
  • 皇后
  • 题目

得分解答快速导航

  • 帖主:hsyouxishe
  • dnliophsam
  • echomo123
  • fiftymetre
  • jinjiajie
  • fiftymetre
  • Snow_Ice11111
  • cocopww
  • citywanderer2005
  • jixingzhong
  • jixingzhong
  • jixingzhong
  • jixingzhong
  • SEUU
  • hamimelon
  • l_xiaofeng
  • lei001
  • cunsh
  • bohlee
  • sjjf

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo