华为最全上机笔试题目
2. 数制转换 * 问题描述:
在 32 位处理器上,将任一整数转换为二进制形式。 * 要求实现函数: void DecToBin (unsigned int iDec, char pBin[32]) 输入:iDec 需要转换的十进制整数 输出:pBin 转换为二进制后的字符串,高位在左边,不足 32 位补 0 * 示例 输入:123 输出:{“00000000000000000000000001111011”}
类别:软件 C++ 第一部分:客观题 客观题部分,共 30 分,建议这部分答题用 40 分钟。 一、 单选题 (每题 1 分,共 10 题) 1、 下列那种不是任务间通讯的方式____ A)信号量 B)消息队列 C)共享内存 D)中断 2、 以下叙述中不正确的是____ A)在不同的函数中可以使用相同名字的变量 B)函数中的形式参数是局部变量 C)在一个函数内定义的变量只在本函数范围内有效 D)在一个函数内的复合语句中定义的变量在本函数范围内有效(复合语句指函数中的成对 括 号构成的代码) 3、 若整型变量 a 的值为 50,则 c 语言表达式 a>>2 的值为____ A)50 B) 25 C) 12.5 D) 12 4、 下面方法中,哪一个不能很好解决死锁问题?____ A) 给每一个进程不同的优先级,并按照优先级的大小决定在资源队列中的顺序。 B) 让进程开始运行时获得全部的资源,在不能获得全部资源时重新启动。 C) 给资源编号,并要求进程按照编号的顺序申请资源。 D) 提供超时机制,在进程进入资源等待后一段随机时间内重起进程。 5、 下面的程序是对二叉树的前序遍历,请写出下面空格中的语句____ 其中,Visit 函数表示访问节点数据。 void PreOrder(BinaryTreeNode *t) { // 对* t 进行前序遍历 if (t) { (_1_); (_2_); (_3_); }
/* 请在这里实现下列函数 , c/c++ 语法不限 , 最后需要保证程序编译连接通过 , 并生成
test.exe 文件. */ /* 相关宏定义及函数声明见'func.h'头文件 */ #include "func.h" #include <stdio.h> #include <stdlib.h> /* 请按照要求实现下列三个函数 */ 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;input[i]!='\0';++i) { if((input[i]>='a'&&input[i]<='z')||(input[i]>='A'&&input[i]<='Z')) ++(*letters); else if(input[i]>='0'&&input[i]<='9') ++(*numbers); else if(input[i]==' ') ++(*blanks); else ++(*others); } } void DecToBin(unsigned int iDec, char pBin[32]) { int index=0,i; char ans[50]; for(i=0;i<50;++i) ans[i]='0'; while(iDec) { ans[index++]=iDec%2+'0'; iDec/=2; } int x=0; for(i=31;i>=0;--i) pBin[x+\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;i<year;++i) { if((i%400)==0||(i%4==0&&i%100!=0)) ans+=366; else ans+=365; } for(i=1;i<month;++i) { if((year%400)==0||(year%4==0&&year%100!=0)) ans+=rn[i]; else ans+=pn[i]; } ans+=day; while(ans>5) ans-=5; if(ans<=3) return 1; else return 0; }
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
/* mian 函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用 printf 打印输出*/ /* 当前你可以使用其他方法测试,只要保证最终程序能正确执行即可 */ /* 该函数实现可以任意修改,但是不要改变函数原型。一定要保证编译运行不受影响*/ void TestEntry() {printf("%d\n",isWorking(1990,1,5)); /* TODO: 请测试时改变改用例 */ /* TODO: 调用被测函数 */ /* TODO: 执行完成后可比较是否是你认为正确的值 */
2010 年华为软件设计大赛试卷 类别:软件 C++语言 初级
编程题(共 3 题,第 1 题 20 分,第 2 题 30 分,第 3 题 50 分。请上机编写程序,按题目要 求提交文件。[详见考试说明] 本试题采用自动测试用例进行评分, 测试用例不对考生公开, 凡不满足提交要求导致不能编 译或用例不通过,不予评分) 。
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. 实现子串查找程序 问题描述: 判断一个字符串(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
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