华为最全上机笔试题目_第1页
华为最全上机笔试题目_第2页
华为最全上机笔试题目_第3页
华为最全上机笔试题目_第4页
华为最全上机笔试题目_第5页
免费预览已结束,剩余22页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2009 年华为软件设计大赛两道编程题 编程题(共 2 题,第 1 题 40 分,第 2 题 30 分。请上机编写程序,按题目要求提交文件。本 试题采用自动测试用例进行评分,测试用例不对考生公开?,凡不满足提交要求导致不能编 译或用例不通过,不予评分) 。 1. 报数游戏 问题描述: 设有 N 个人围坐一圈并按顺时针方向从 1 到 N 编号,从第 S 个人开始进行 1 到 M 报数,报 数到第 M 个人时,此人出圈,再从他的下一个人重新开始 1 到 M 的报数,如此进行下去直 到所有的人都出圈为止。现要打印出出圈次序。 要求实现函数: void circle_sort (int n, int s, int m, int *p) 输入:n 游戏总人数 s 报数的起始编号 m 报数的数值 输出:p 指向长度为 n 的数组,出圈次序保存在 p 指向的数组中 示例 n=7 s=2 m=3 出圈次序为:4 7 3 1 6 2 5 n=3 s=1 m=2 出圈次序为:2 1 3 2. 实现子串查找程序 问题描述: 判断一个字符串(dst)是否是另一个字符串(src)的子串; 输出子串在母串中的第一次出现的起始位置; 匹配的时候不区分大小写; 不能使用库函数(使用库函数按 0 分计算); 要求实现函数: unsigned int str_str(char * src, char *dst); 返回:如果 dst 是 src 的子串 则返回起始位置 如果不是 则返回 0 输入:src 指向母串的指针; dst 指向子串的指针 示例 src-akrsd5859 dst-rsd 则返回 3 src-Rstsawerst36ds dst-rst 则返回 8 src-dfsge dst- dfsgesa 则返回 0 2010 年华为软件设计大赛试卷 类别:软件 C+语言 初级 编程题(共 3 题,第 1 题 20 分,第 2 题 30 分,第 3 题 50 分。请上机编写程序,按题目要 求提交文件。详见考试说明 本试题采用自动测试用例进行评分, 测试用例不对考生公开, 凡不满足提交要求导致不能编 译或用例不通过,不予评分) 。 1. 字符统计 * 问题描述: 实现一个函数,要求输入一个字符串,分别统计出其中 “英文字母” 、 “数字” 、 “空格” 、 “其 它字符”的个数。 * 要求实现函数: void count(const char *input, unsigned int * letters, unsigned int * numbers, unsigned int * blanks, unsigned int * others) 输入:input 输入的字符串 输出:letters 输出其中的“英文字母”个数, numbers 输出其中的“数字”个数,blanks 输出其中的“空格”个数,others 输出其中的“其他字符”个数 * 示例 输入:input=“aBc 12%” ;输出:letters=3, numbers=2, blanks=1, others=1 输入:input=“1” ;输出:letters=0, numbers=1, blanks=0, others=0 2. 数制转换 * 问题描述: 在 32 位处理器上,将任一整数转换为二进制形式。 * 要求实现函数: void DecToBin (unsigned int iDec, char pBin32) 输入:iDec 需要转换的十进制整数 输出:pBin 转换为二进制后的字符串,高位在左边,不足 32 位补 0 * 示例 输入:123 输出:“00000000000000000000000001111011” 3. 打鱼还是晒网 * 问题描述: 中国有句俗话叫 “三天打鱼两天晒网” ,某人从 1990 年 1 月 1 日起开始 “三天打鱼两天晒网” , 问这个人在以后的某一天是“打鱼”还是“晒网”? (需要考虑闰年:年数“能被 4 除尽且不能被 100 除尽”或“直接能被 400 除尽”看做闰年, 如 2000 年是闰年,而 1900 年不是) * 要求实现函数: int isWorking(unsigned int year, unsigned int month, unsigned int day); 输入:year,month,day 分别为年,月,日 返回:int 类型,如果是“打鱼” ,就返回 1;如果是“晒网” ,就返回 0 * 示例 输入:year=1990,month=1,day=5;函数返回:0 /* 请在这里实现下列函数, c/c+语法不限, 最后需要保证程序编译连接通过, 并生成 test.exe 文件. */ /* 相关宏定义及函数声明见func.h头文件 */ #include “func.h“ #include #include /* 请按照要求实现下列三个函数 */ void count(const char *input, unsigned int * letters, unsigned int * numbers, unsigned int * blanks, unsigned int * others) *letters=0; *numbers=0; *blanks=0; *others=0; int i; for(i=0;inputi!=0;+i) if(inputi=a else if(inputi= ) +(*blanks); else +(*others); void DecToBin(unsigned int iDec, char pBin32) int index=0,i; char ans50; for(i=0;i=0;-i) pBinx+=ansi; pBin32=0; int isWorking(unsigned int year, unsigned int month, unsigned int day) int ans=0; int rn=1,31,29,31,30,31,30,31,31,30,31,30,31; int pn=1,31,28,31,30,31,30,31,31,30,31,30,31; int i; for(i=1990;iRightChild) B) PreOrder(t-LeftChild) PreOrder(t-RightChild) Visit(t) C) Visit(t) PreOrder(t-RightChild) PreOrder(t-LeftChild) D) Visit(t) PreOrder(t-LeftChild) PreOrder(t-RightChild) 6、 已知 int a=10,9,8,7,6; int *p = a;则(*(p+1)*(p+2)2的值是_ A)72 B)80 C)54 D)有语法错误 7、 下面关于 new 和 delete 操作符的说法,哪个是不正确的_ A)使用 new 操作符,可以动态分配全局堆中的内存资源 B)若 p 的类型已由 A*强制转换为 void *,那么执行语句 delete p;时,类 A 的析构函数不 会 被调用 C)new 和 delete 通常成对地使用 D)执行语句 A * p=new A100;时,类 A 的构造函数只会被调用 1 次 8、 如下代码,正确的是_ class CExample public: static void Func( void* pobj ); private: char m_cTest; ; A) void CExamle:Func( void* pobj ) m_cTest = ( char )0; B) 在 Func 内部不能访问类的私有成员 m_cTest; C) void CExample:Func( void* pobj ) CExample *pThis; pThis = dynamic_cast( pobj ); ASSERT( NULL != pThis ); pThis-m_cTest = ( char )0; D) void CExample:Func( void* pobj ) CExample:m_cTest = ( char )0; 9、 对于下面的类 CA,在 32 位计算机、4 字节对齐的情况下,sizeof(CA) = _ class CA public: CA(); virtual CA(); private: int m_iTime; public: int GetTime(); int SetTime(int iTime); ; A)16 B)12 C)8 D)4 10、 对于下面的代码,描述正确的是_ class A public: virtual void test(); ; class B: public A public: void test(); . ; class C: public B public: void test(); . ; A) B 类的 test 函数是虚函数,而 C 类的也是 B) B 类的 test 函数不是虚函数,C 类的是 C) B 类的 test 函数是虚函数,而 C 类的不是 D) C 类的 test 函数不是虚函数 二、 多选题 (每题 2 分,共 10 题,少选可得 1 分) 11、 关于变量定义,下列说法正确的有_ A)公共变量是增大模块间耦合的原因之一,故应减少没必要的公共变量以降低模块间的耦 合度 B)命名中若使用特殊约定或缩写,则要有注释说明 C)变量名的命名要清晰、明了,有明确含义 D)除非必要,不要用数字或较奇怪的字符来定义标识符 12、 请找出以下程序中的错误,不考虑命名规范和排版的问题_ long strlen(char *p ) ASSERT(p); long i = 0; while (*p) i+; p+; return i; ShowErrMsg(char *msg) int nCount = 1; A if (msg = NULL) return; char *pBuf = (char *)malloc(256); B if (pBuf = NULL) return; if ( strlen(msg) 256 ) strncpy(pBuf, msg, 256); pBuf256 = 0; else strcpy( pBuf, msg); C printf( “No. %d: This message is: %sn“, nCount, pBuf ); nCount+; pBuf = NULL; D 13、 下列代码中对 const 关键字的使用是正确并有意义的_ class SomeClass private: int m_nValue; char* m_pszName; public: SomeClass(int id); int GetValue() const; /- A void SetValue(const int value); /- B const char* GetName(); /- C void SetName(const char* pszName); /- D void DoSomething(char* const p); /- E 14、 多任务系统中,任务所具有的基本状态有_ A)就绪 B)执行 C)阻塞 D)挂起 15、 下列说明哪些是正确的_ A)一个类必须至少提供一个构造函数 B)缺省构造函数是指不用指定任何实参就能被调用的构造函数,这并不意味着它不能接受 实参 C)父类的构造函数肯定在子类的构造函数之前被调用 D)如果一个类不显式地提供缺省构造函数则编译器会自动生成一个以初始化其数据成员 E)子类的析构函数中要调用父类的析构函数以确保父类的成员被释放 F)构造和析构函数中不应该调用虚函数 16、 在一个老版本代码中已经声明了 myfunc 函数:int myfunc(int a,double b),小李在 开发新版本时增加了如下几个函数声明,请问哪些不是对老版本函数的重载声明_ A)int myfunc(int c, double d) B)int myfunc(int a,double b=0.5) C)double myfunc(int , double ) D)int myfunc(double b,int a) 17、 类 B 的析构函数不为 virtual,类 D 是类 B 的子类,并且是 public 继承的,B 和 D 都 定义了 缺省的构造函数,下面正确代码段有_ A)B* pb = new B;delete pb; B)D* pd = new D;delete pd; C)B* pb = new D;delete pb; D)D d;B* pb = 18、 假定类 CA 的声明如下, 下面哪些语句声明了 a 是 CA 的对象_ class CA public: CA (); CA (int iValue); . . ; A)CA a; B)CA a(); C)CA a(100); D)CA a = 100; 19、 下面关于指针和引用的说法正确的是_ A)指针变量存放的是内存地址,并且可以置为 0 B)定义引用变量时,必须同时指明具体被引用的对象或变量 C)使用取地址操作符,可以取得指针变量自身的地址,但取不到引用变量自身的地址 D)类中的数据成员可以是指针变量,但不能是引用变量 20、 下列代码中正确的有_ A)char* p = malloc(100); free(p); B)char* p = malloc(100); delete p; C)char* p = new char100; delete p; D)char* p = new char100; delete p; E)char p100; delete p; F)char p100; delete p100; 三、 编程题(共 2 题,第 1 题 40 分,第 2 题 30 分。请上机编写程序,按题目要求提交文 件。本 试题采用自动测试用例进行评分,测试用例不对考生公开?,凡不满足提交要求导致不能编 译或用例不通过,不予评分) 。 1. 报数游戏 问题描述: 设有 N 个人围坐一圈并按顺时针方向从 1 到 N 编号,从第 S 个人开始进行 1 到 M 报数,报 数到第 M 个人时,此人出圈,再从他的下一个人重新开始 1 到 M 的报数,如此进行下去直到所有的 人都 出圈为止。现要打印出出圈次序。 要求实现函数: void circle_sort (int n, int s, int m, int *p) 输入:n 游戏总人数 s 报数的起始编号 m 报数的数值 输出:p 指向长度为 n 的数组,出圈次序保存在 p 指向的数组中 示例 n=7 s=2 m=3 出圈次序为:4 7 3 1 6 2 5 n=3 s=1 m=2 出圈次序为:2 1 3 2. 实现子串查找程序 问题描述: 判断一个字符串(dst)是否是另一个字符串(src)的子串; 输出子串在母串中的第一次出现的起始位置; 匹配的时候不区分大小写; 不能使用库函数(使用库函数按 0 分计算); 要求实现函数: unsigned int str_str(char * src, char *dst); 返回:如果 dst 是 src 的子串 则返回起始位置 如果不是 则返回 0 输入:src 指向母串的指针; dst 指向子串的指针 示例 src-akrsd5859 dst-rsd 则返回 3 src-Rstsawerst36ds dst-rst 则返回 8 src-dfsge dst- dfsgesa 则返回 0 第一部分:客观题 客观题部分,共 30 分,建议这部分答题用 40 分钟。 一、 单选题 (每题 1 分,共 10 题) 1、以下叙述中不正确的是_。 A) 在不同的函数中可以使用相同名字的变量 B) 函数中的形式参数是局部变量 C) 在一个函数内定义的变量只在本函数范围内有效 D).在一个函数内的复合语句中定义的变量在本函数范围内有效(复合语句指函数中的成对 括号构成的代码) 2、下列全局变量定义中,正确的是:_。 A) char abc ; B) char abc NUM; C) char abc NUM ; D) char abc 0; 3、关于断言,错误的说法是:_。 A) 我们可以使用断言来发现软件问题。 B) 在正式发布的软件版本中也要保留断言,以便于定位问题。 C) 断言不能用于对外部输入数据的判断,只能用于程序内部逻辑的判断。 D) 不能用断言来代替错误处理。 4、关于函数参数,正确的说法是_。 A) 防止将函数的参数作为工作变量。 B) 应该为函数功能的扩展预留尽可能多的参数接口。 C) 通常函数内部会对函数参数进行合法性检查,为了提高效率,函数调用者不需要再次进 行参数合法性检查。 D) 不要输入指针变量。 5、关于函数实现,下面不正确的说法是_。 A) 为简单功能编写函数。 B) 函数的功能应该是可以预测的,也就是只要输入数据相同就应产生同样的输出。 C) 防止把没有关联的语句放到一个函数中。 D) 为了增强函数的可用性,应尽量设计多用途面面俱到的函数。 6、关于函数,不正确的说法是_。 A) 如果多段代码重复做同一件事情,那么在函数的划分上可能存在问题。 B) 功能不明确较小的函数,特别是仅有一个上级函数调用它时,应考虑把它合并到上级函 数中,而不必单独存在。 C) 对所调用函数的错误返回码可以根据需要决定是否处理。 D) 对于提供了返回值的函数,在引用时最好使用其返回值。 7、编程中下面说法错误的是_。 A) 编程时,要防止差 1 错误。如:把“” 。 B) 系统运行之初,要初始化有关变量及运行环境,防止未经初始化的变量被引用,但可以 使用操作系统的默认初始化值。 C) 有可能的话,if 语句尽量加上 else 分支,对没有 else 分支的语句要小心对待;switch 语 句必须有 default 分支。 D) 要时刻注意易混淆的操作符,如 C/C+中的“=”与“=” 、 “|”与“|” 、 “ char acY = a,b,c,d,e,f,g; 下面四个说法中正确的是:_。 A) 数组 acX 和数组 acY 等价 B) 数组 acX 和数组 acY 的长度相同 C) 数组 acX 的长度大于数组 acY 的长度 D) 数组 acX 的长度小于数组 Y 的长度 9、假设执行语句 S 的时间为 O(1) ,则执行下列程序短的时间为_。 for(i=1;i=1+k;j-) aji=count; count+; for(i=0;iN;i+) for(j=0;jN;j+) System.out.print(aij+“ “); System.out.println(); class snakePrint static int length = 7; static int value = 1; static int snake = new intlengthlength; static Direction lastDirection = Direction.Right; static enum Direction Right, Down, Left, Up; public static void initialArray() int row = 0, line = 0; for (int c = 0; c length * length; c+) snakerowline = value; lastDirection = findDirection(row, line); switch (lastDirection) case Right: line+; break; case Down: row+; break; case Left: line-; break; case Up: row-; break; default: System.out.println(“error“); value+; static Direction findDirection(int row, int line) Direction direction = lastDirection; switch (direction) case Right: if (line = length - 1) | (snakerowline + 1 != 0) direction = direction.Down; break; case Down: if (row = length - 1) | (snakerow + 1line != 0) direction = direction.Left; break; case Left: if (line = 0) | (snakerowline - 1 != 0) direction = direction.Up; break; case Up: if (snakerow - 1line != 0) direction = direction.Right; break; return direction; public static void main(String args) initialArray(); / display. for (int i = 0; i length; i+) for (int j = 0; j length; j+) System.out.print(snakeij + “ “); System.out.println(); 第一部分:选择题 QUESTION NO: 1 1、public class Test public static void changeStr(String str) str=“welcome“; public static void main(String args) String str=“1234“; changeStr(str); System.out.println(str); Please write the output result : QUESTION NO:2 1. public class Test 2. static boolean foo(char c) 3. System.out.print(c); 4. return true; 5. 6. public static void main( String argv ) 7. int i =0; 8. for ( foo(A); foo(B) foo(C) 9. i+ ; 10. foo(D); 12. 13. 14. What is the result? A. ABDCBDCB B. ABCDABCD C. Compilation fails. D. An exception is thrown at runtime. QUESTION NO: 3 1. class A 2. protected int method1(int a, int b) return 0; 3. Which two are valid in a class that extends class A? (Choose two) A. public int method1(int a, int b) return 0; B. private int method1(int a, int b) return 0; C. private int method1(int a, long b) return 0; D. public short method1(int a, int b) return 0; E. static protected int method1(int a, int b) return 0; QUESTION NO: 4 1. public class Outer 2. public void someOuterMethod() 3. / Line 3 4. 5. public class Inner 6. public static void main( Stringargv ) 7. Outer o = new Outer(); 8. / Line 8 9. 10. Which instantiates an instance of Inner? A. new Inner(); / At line 3 B. new Inner(); / At line 8 C. new o.Inner(); / At line 8 D. new Outer.Inner(); / At line 8/new Outer().new Inner() QUESTION NO: 5 Which method is used by a servlet to place its session ID in a URL that is written to the servlets response output stream? A. The encodeURL method of the HttpServletRequest interface. B. The encodeURL method of the HttpServletResponse interface. C. The rewriteURL method of the HttpServletRequest interface. D. The rewriteURL method of the HttpServletResponse interface. QUESTION NO: 6 Which two are equivalent? (Choose two) A. B. C. D. E. F. G. QUESTION NO: 7 Which of the following statements regarding the lifecycle of a session bean are correct? 1. java.lang.IllegalStateException is thrown if SessionContext.getEJBObject() is invoked when a stateful session bean instance is passivated. 2. SessionContext.getRollbackOnly() does not throw an exception when a session bean wi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论