09年校园招聘联发搏动手机软件笔试试题
【编程题】 1. 字符串与整数的相互转换: 在提供的代码中,有两道编程题目涉及字符串和整数之间的转换。第一题要求编写一个`StrToInt`函数,将ASCII字符串转换为整数,另一个是`IntToStr`函数,将整数转换回ASCII字符串。 `StrToInt`函数的实现: 函数通过遍历输入的ASCII字符串,逐字符转换为整数。首先检查字符串的第一个字符是否为负号,然后逐个将字符减去'0'(ASCII码0对应'0'字符),将其转换为数值并累加。最后根据是否有负号前缀决定结果的正负。 `IntToStr`函数的实现: 这个函数需要将一个整数转换成字符串。由于题目没有给出具体实现,一般而言,此函数会先确定整数的正负,然后通过循环将每个位上的数字转换为对应的ASCII字符,添加到字符串末尾。 2. 二分查找算法: 二分查找是一种在有序数组中快速查找目标值的方法。题目要求实现递归和非递归两种方式。递归版本通常会将数组分为左右两半,然后根据目标值与中间元素的关系,递归地在左半部分或右半部分继续查找。非递归版本则使用循环来不断缩小查找范围,直到找到目标值或搜索范围为空。 【问答题】 1. 程序错误: 该程序尝试为一个`unsigned char`类型的数组赋值到256,而`unsigned char`的最大值为255,所以当`i`等于256时,程序将访问数组的非法位置,导致未定义行为。 2. 字节序和指针问题: `(1)*(cp+2)`的结果取决于字节序,但通常在小端系统中,它为3。 `(2)*(ip+2)`的结果也是依赖于字节序,但通常在小端系统中,它为24(因为`int`通常是4字节,所以`(ip+2)`指向的值是`array[8]`,即8)。 3. 变量范围和位运算: `char`的取值范围在-128到127之间。如果`c`的值是0xF0(16进制),那么`c>>3`(右移3位)等于0x1E,对应的10进制值为30。 4. 不使用函数原型的风险: 不使用函数原型可能导致类型不匹配,编译器无法检查参数类型,可能导致隐式类型转换,增加程序错误的可能性,以及降低代码可读性。 5. `ExchangeValue`函数问题: 此函数存在隐患,因为它没有初始化指针`pt`,直接使用可能导致未定义行为。然而,如果实际运行时`pa`和`pb`不为`NULL`,函数似乎能正常工作,但这并不代表代码没有问题。 6. 内存存储位置: - `i1`存在于栈上,因为它是局部变量。 - `p1`在数据段,因为它是常量字符串的地址。 - `i2`是静态变量,存储在数据段。 - `i3`在栈上。 - `i4`在堆上,因为使用`malloc`分配了内存。 7. 语句错误分析: - A. 无错误。 - B. 第三行`pb = pa;`是错误的,因为`pb`是`const char*`,不能指向`pa`。 - C. 第四行`*pb = 'A';`错误,因为`pb`是`const char*`;第六行`pb = pa;`也是错误,同理。 - D. 第四行`pc = pa;`错误,因为`pc`是`char* const`,不能改变其指向。 8. 指针的指针定义: 要定义一个指向指针的指针,可以这样写:`int **a;`这表示`a`是一个指针,它指向的也是一个指针,该指针最终指向整型变量。
- pdgphm2012-06-07挺有用的,正在参加面试当中
- 粉丝: 0
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助