当前位置:文档之家› 亚信C面试题

亚信C面试题

一、选择题(单选题3分,多选题4分,共32分)在每小题列出的四个备选项中只有1个或2个是符合题目要求的,多选题已用*标识出来,请将其答案填写在题后的括号内,错选或未选均无分。

1、下面这段关于指针和常量的关系的程序哪些是错误的( D )void f(char * p){char s[ ] = “HW5,V,0,”;const char * pc =s; //Apc[3] = ’g’; //Bpc = p; //Cchar * const cp = s;cp[3] = ‘a’; //D}A.const char * pc =s;B.pc[3] = ’g’;C.pc = p;D.cp[3] = ‘a’*2、下列关于函数指针的初始化哪些是错误的?()A.void reset(int *);void (*pf) (void *) = reset;B.int calc(int ,int );int (*pf1)(int ,int ) =calc;C.extern “c” int compute(int * ,int);int (*pf3)(int *,int) = compute;D.void (*pf4)(const matrix &)=0;3、在计费预处理程序中,取话单函数GetNextCdr的原形类似于int GetNextCdr(StdCdr *pd, int &ri),变量x和y的定义是 StdCdr x; int y,把x 和y分别作为第一参数和第二参数来调用函数GetNextCdr,正确的调用语句是( B )A.GetNextCdr (x,&y);B.GetNextCdr (&x,y);C.GetNextCdr (&x,&y);D.GetNextCdr (x,y);4、下列关于结构体的使用哪些是正确的?(C )A.struct StdCdr{char switch[3];int number;StdCdr * next;}B.struct StdCdr{char switch[3];int number;StdCdr next;}C.struct StdCdr{char switch[3];int number;StdCdr * next;};D.StdCdr pStd = new StdCdr;pStd. number = 10;5、对于如下程序#include <iostream>class A{ public:A() {std::cout<<"A"<<std::endl;}};int main(){ A a[4], b,*p; }会输出多少个A?( C )A.2B.3C.5D.66、派生类的对象对它的基类成员中哪些是可以访问的?(D E )A.公有继承的成员B.公有继承的私有成员C.公有继承的保护成员D.公有继承的公有成员E.私有继承的公有成员7、下面派生类的虚函数的重新声明哪些是良好的?( ) A.Base * Base::copy(Base *);Base * Derived::copy(Derived * );B.Base * Base::copy(Base *);Base * Derived::copy(Base * );C.ostream & Base::print(int,ostream&= cout);ostream & Derived::print(int,ostream&);D.void Base::eval()const;void Derived::eval();* 8、已知下列类层次结构,他们都定义了缺省的构造函数( C D )class X{ };class A{ };class B: public A{ };class C: private B{ };class D:public X,public C{ };D * pd = new D;对于下列哪些转换是不允许的?A. X * px = pd;B. B * pb = pd;C. A * pa = pd;D. C * pc = pd;9、在对语音话单文件进行取话单字段信息操作时,需要用刀lseek函数,在lseek函数的(int , off_t offset, int whence)参数中,若whence参数为SEEK_CUR,则offset参数代表下列的哪个含义(B )A.将该文件的位移量设置为距文件开始处offset个字节。

B.将该文件的位移量设置为其当前值加offset, offset可为正或负。

C.将该文件的位移量设置为文件长度加offset, offset可为正或负。

D.将该文件的位移量设置文件起始位置。

10、在打开一个ASCII文本格式的语音清单文件时,需要用到open函数,在open函数的oflag参数中,下面的哪个选项代表“若此文件不存在则创建它”的含义( B )A. O_APPENDB. O_CREATC. O_EXCLD. O_TRUNC二、问答题(共38分)1、(5分)头文件中的ifndef/define/endif 有什么作用?避免重定义2、(6分)const 有什么用途?(请至少说明两种)防止传递的函数参数不被修改提高程序健壮性创建数组常量、指针常量、指向常量的指针3、(8分)如下的字符串函数,用于生存一个字符串”连接号码异常” ,并返回它的指针char* strfun(){char str[20];strcpy(str, “连接号码异常”);printf(“%s \n”, str);//printf语句1return str;}main(){char *pstr = strfun() ;printf(“%s \n”, pstr);//printf语句2}问题1 : printf语句1和printf语句2哪个能在屏幕上正在打印出来?问题2 : 如果不能正常在屏幕上打印出字符串,请说明原因。

问题3 : 如果不修改strfun的声明,请问该如何修改上述程序的错误。

4、(7分)下面是交换两个double型数据的函数,swap( double* p1, double* p2 ){double *p;*p = *p1;*p1 = *p2;*p2 = *p;}main(){double a = 0.1;double b = 0.2;swap( &a, &b );}请找出上述代码的错误,指出错误的原因,并改正。

5、(7分)如果Win32程序的消息处理函数的定义由LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)修改为LRESULT CALLBACK WndProc(MSG msg)//MSG结构体中的成员变量包含有hWnd、message、wParam 和lParam等这种修改可行吗?为什么?6、(5分)MFC中,CWnd类作为所有窗体封装类的根类,它定义的一些成员函数名称与Win32 API函数名称完全相同,且功能也完全相同,如ShowWindow、UpdateWindow等。

但函数参数却不同,如:CWnd类—— BOOL ShowWindow( int nCmdShow );Win32 API —— BOOL ShowWindow(HWND hWnd, int nCmdShow);问题:为什么CWnd:: ShowWindow函数少了一个参数也能实现相同的功能三、程序题(共30分)1、(14分)在计费系统的预处理程序中,对话单进行格式转换时,需要使用strcpy函数已知strcpy,此函数的原型是char *strcpy(char *strDest, const char *strSrc);其中strDest是目的字符串,strSrc是源字符串。

编写strcpy函数(1)不调用C++/C的字符串库函数,请编写函数 strcpy(2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?2、(16分)在电信业务的后台处理程序中,经常会涉及到处理字符串,除了用char *处理字符串之外,C++还为我们提供了封装了的字符串类string,其本质也是用一个动态数组来保存字符串,类String的原型为:class String{public:String(const char *str = NULL); // 普通构造函数String(const String &other); // 拷贝构造函数~ String(void); // 析构函数String & operate =(const String &other); // 赋值函数 private:char *m_data; // 用于保存字符串};请编写String的上述4个函数普通构造函数、拷贝构造函数、析构函数和赋值函数。

相关主题