华为编程大赛试题
第一篇:华为编程大赛试题
客观题部分,共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++中的“=”与“==”、“|”与“||”、“&”与“&&”等。当编完程序后,应从头至尾检查一遍这些操作符,以防止拼写错误。
8、如果有下列定义:
char acX[ ]= “abcdefg”;
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<=n;i++) {
for(j=i;j<=n;j++){
S;
}
}
A)O(n)B)O(n2)C)O(n*i)D)O(n+1)
10、设有 98 个已排序列元素,采用二分法查时,最大比较次数是______。
A)49 B)15 C)20 D)7
二、多选题(每题2分,共10题,少选可以得1分)
11、关于全局变量的注释,哪些描述是正确的?______。
A)全局变量要有较详细的注释 B)注释包括功能、取值范围等
C)如果全局变量的命名是充分自注释的,则可以不加注释 D)注释可以包括使用方法
12、关于变量,正确的说法是:______。
A)在对变量声明的同时,应对其含义、作用及取值范围进行注释说明,同时若有必要还应说明与其它变量的关系;
B)对公共变量赋值时,若有必要应进行合法性检查,以提高代码的可靠性、稳定性; C)构造仅有一个函数可以修改,而其余函数只读的全局变量,可防止函数的不可重入性;
D)不同的编译器对变量的默认初始化是不同的。为了避免不同编译器引起的差别,对变量,尤其是指针变量,强烈推荐在使用前将其初始化。
13、下面关于资源分配的说法正确的是:______。
A)只引用属于自己的存贮空间。B)防止引用已经释放的内存空间。
C)过程/函数中分配的内存,在过程/函数退出之前要释放。
D)过程/函数中申请的(为打开文件而使用的)文件句柄,在过程/函数退出之前要关闭。
14、如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?______。
A)程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思,用户则更加不知它们从何处来、表示什么。
B)如果要修改数字或字符串,则会在很多地方改动,既麻烦又容易出错。C)在程序的很多地方输入同样的数字或字符串,难保不发生书写错误。D)程序无法编译。
15、关于宏define SQUARE(a)((a)*(a))正确的用法是______。
A)b = SQUARE(a++);
B)b = SQUARE(a);a++;C)b = SQUARE(a--);a--;D)b = SQUARE(a);a--;
16、以下对结构(struct)和联合(union)的说法正确的有:______。
A)结构和联合都是由多个不同的数据类型成员组成; B)在任何同一时刻, 联合中只存放了一个被选中的成员; C)在任何同一时刻,都可以访问结构和联合的所有成员;
D)对于结构和联合的不同成员赋值是互不影响的。
17、关于编译预处理程序的功能包括但不限于:______。
A)宏定义; B)条件编译;
C)在源代码中插入预定义的环境变量; D)打开或关闭某个编译选项。
18、下列extern “C” 的用法,哪些是正确的:______。A)在C++中引用C语言中的函数和变量; B)引用其它文件定义的函数和变量;
C)C++实现的DLL,导出动态连接符号给C语言代码使用;(直接使用extern即可) D)引用其它C程序定义的函数和变量。
19、下面哪些是sprintf函数正常使用出现情况:______。
A)输出缓冲区太短,出现溢出; B)参数多于格式符的数目;
C)多线程同时用不同缓冲区调用sprintf; D)%s格式符对应了空指针。
20、关于关于数组和指针描述正确的是:______。
A)数组可以在静态存储去或者栈上创建; B)指针可以随意指向任意类型的内存单元;
C)用sizeof运算符可以计算出数组的容量(字节数),而不能用sizeof()计算出指针p所指向的内存容量;
D)当指针p指向常量字符串时,也可以向字符串数组那样修改其中的某个字符。
三、编程题(共2题,第1题40分,第2题30分。请上机编写程序,按题目要求提交文件。本试题采用自动测试用例进行评分,测试用例不对考生公开,凡不满足提交要求导致不能编译或用例不通过,不予评分;)。1.电路板布线问题 问题描述:
o 对于一个有N个引脚的电路板,我们需要在这些引脚之间连线。现在对于给定的连接引脚的方法,需要程序判断,这组方法是否会产生线段之间的交叉。
输入:
o N 电路板的引脚数量;(1,2),(3,4),......连线的方式。(1,2)表示1、2号引脚存在连线。
o
要求实现函数:
unsigned int Lay_line(int n, unsigned int *p)
不产生交叉返回0 ; 产生交叉返回 1
输入参数:n:电路板引脚个数;
p:指向一个数组(长度固定为64),表示电路板引脚连接方式; 输入:1 4 2 3 0(0表示布线结束)
表示该连接方案有两个连接
1号 4号管脚连接 2号3号管角连接
示例
o N = 4;(a1,a4),(a2,a3)程序输出“0”
N = 4;(a3,a1),(a4,a2)程序输出“1”
N = 4;(a2,a1),(a2,a3)程序输出“0”
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论