联发博动笔试 收藏
昨天去联发博动笔试了,
人那个多呀,人山人海~~ 第一题,请编写两个函
数,函数的接口如下所示。第一个函数负责把一个ASCII字符串转换成一个带符号整数,第二个寒暑负责把一个带符号的整数转换为一个ASCII字符串。 (1) int
StrToInt(const char *Str); (2) int
IntToStr(int num, char *Str); 已知条件:传递给IntToStr函数的缓冲区的长度足以容纳下int整数范围内的数,传递给StrToInt 的字符串只包含数字和负
号,是一个格式正确的整数值。 int StrToInt(char *Str) { assert(Str
!=
NULL); int num = 0; char *p = Str; int flag = 0; if(*p == '-') { flag = 1; p++; } while(*p !='\0') { num += (int)(*p -
48); num *=10; p++; } num /=10; if(flag) { num = -num; } return num; } int IntToStr(int num, char *Str) { assert(Str
!=
NULL); char *p =Str; if(num<0) { *p = '-'; p++; num =-num; } while(num>0) { *p = (char)(num%10 +
48); p++; num /= 10; } *p = '\0'; char *q = Str; if(*q == '-') { q++; } p--; while(q < p) { char t = *q; *q = *p; *p = t; q++; p--; } return 1; } int BinarySearch(const int* array, int lower, int upper,
int target); 其中lower和upper分别是需要进行搜索的开始和结束的索引值,分别用递归和非递归
两种方式实现该函数。 递
归: int BinarySearch(const int* array, int lower, int
upper, int target) { if(lower > upper){ return -1; } int mid = lower + (upper -
lower)/2; if(target == *(array +
mid)) { return mid; } else if (target <
*(array + mid)) { return
BinarySearch(array, lower, mid - 1, target); } else { return
BinarySearch(array, mid +1, upper, target); } } 非
递归: int BinarySearch(const int* array, int lower, int
upper, int target) { assert(upper > =
lower); while(lower <= upper){ int mid = lower + (upper -
lower)/2; if(target == *(array +
mid)) { return mid; } else if (target <
*(array + mid)) { upper = mid - 1; } else { lower = mid +1; } } return -1; } 问答题。 int main(void){ unsigned char i; return 0; } 无
限循环 2.在32位小端字序系统里, Char array[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; Char *cp=array; int *ip=(int*)array; 问 (1)*(cp+2)=? (2) *(ip+2)=? *(cp+2)应该是2所对应的ASCII码吧,*(ip+2)=185207048(VC6.0的结果,不知道怎么算出来的,偶怎么
也算不出这个数) 3. c是
一个char型
的变量,c的取值
范围是多少。如果c的值是0xf0,那么c>>3
=?,请给出十进制的答案。 0x00~0xff,即0~255(难道是-128~127?) c>>3= -16(vc6.0的结果,不知道为什么) 4.调用
函数时,请列举不使用函数原型潜在的风险。 这
个的详细答案在另外的文章,请参考: http://blog.csdn.net/haiyan0106/archive/2008/10/09/3043998.aspx 5.以下
程序有什么问题。如果有问题,那该程序运行是正确的,为什么。 If(pa== NULL || pb==NULL) Return 0; *pt = *pa; int *pt = new int(1); 没有为pt所指向的对象分配空间,造成运行错误。 6. int i1; Const char *p1 = “AAA”; int main(){ static int i2; int i3; int *i4 = malloc(sizeof(int)); } 上面程序中的变量(i1,ip1,i2,i3,i4)分别存在于哪些内存位置(数据段,堆栈,堆)?i1,i2,i3,*i4的值是什么. i3,i4栈,i1,p1,i2静态数据段。i1=0,i2=0,i3,*i4为随机值。 A) const int a;//只读,必须初始化 B) char *pa
=”AAA”; const char *pb = “BBB”; pb = pa;//正确 C) char *pa = “AAA”: char *const pb =”BBB”; char *const pc = (char *)malloc(4); *pb=’A’;//这个 *(pc+1) = ‘A’; Pb = pa;//pb是一个常指针,不能为左值 D) Char *pa; Const char* const pb=”BBB”; Char * const pc;//和A一样,得初始化 Pa = “AAA”; Pc = pa;//as
same as C) 举例: 一个整型数(An integer) int a; 1)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an
intege)r 2)一个有10个整
型数的数组( An array of 10 integers) 3) 一个有10个 指针的数组,该指针是指向一个整型数的。(An array of
10 pointers to integers) 4) 一个指向有10个整
型数数组的指针( A pointer to an array of 10 integers) 5) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that
takes an integer as an argument and returns an integer) 6) 一个有10个指
针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to
functions that take an integer argument and return an integer ) 1) int **a; 2) int a[10]; 3) int *a[10]; 4) int (*a)[10]; 5) int (*a)(int); 6) int (*a[10])(int); Void put(short num1, short num2,
int& result) { int t = (int)num1; result = (t<<16)+
num2; } 10.下面是一个用来删除单向链表头节点的函数,请找出其中程序的漏
洞并加以改正。 { free(head); head =
head->next; } 改正: void
RemoveHead(node **head) { node *p = *head; *head
= (*head)->next; free(p); } |
|
来自: jason zhai > 《我的图书馆》