北京锦鸿希电笔试题
在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是:
A,概要设计 B,详细设计 C,可行性分析 D,需求分析
答案
若x
是整型变量,pb
是基类型为整型的指针变量,则正确的赋值表达式是:
A,pb=&x;
B,pb=x;
C, *pb=&x;
D, *pb = *x;
答案
设整型数i=5
,则printf(“%d”,i++);
的输出为:
A,5; B,6; C,4; D,语法错误;
答案
#define MIN(x,y)x<y?x:y
是否正确
答案
不正确,如果x
或者y
代表的是一个表达式,因为运算符的优先级问题就会出现问题。
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include <stdio.h>
#define MIN(x, y)x<y?x:y
int main(void) { int ret = 5 * MIN(2, 3); printf("%d\n", ret); return 0; }
输出:2
|
因为在预处理的过程中宏被展开为以下形式:
1
| int ret = 5 * 2 > 3 ? 2 : 3;
|
可能会想着以下是解决上述问题的方式,但是只能解决宏替换时的问题,以下两个宏定义其中也是存在bug的
1 2
| #define min(x,y) (x) > (y)? (y): (x) #define min(x,y) ((x) > (y)? (y): (x))
|
具体参考下面的文章:
书写一个对整型bit3进行置1和置0的函数
答案
1 2 3 4 5 6 7 8 9 10
| #define BIT3 (0x1<<3)
void set_bit3(void) { a |= BIT3; } void clear_bit3(void) { a &= ~ BIT3; }
|
解释 static的用处(至少说明两点)
答案
用于变量:static
修饰的变量只在本文件中可见,外部文件不可见,只能在本文件内部使用,也就是说static
申明的变量只能被本文件内的函数使用,而不能被本文件外的函数使用,在本文件内的其他函数中也不能使用static
申明的变量。
用于函数:static
修饰的函数可以被本文件内的函数调用,而不能被本文件外的函数调用,static
申明的函数只能在本文件内使用,其他文件不能使用该函数。
char machineNum1[4] = {0x30, 0x10, 0x00, 0x11};
char machineNum2[4] = {0x30, 0x10, 0x00, 0x22};
分别用strncmp
和memcmp
函数对两者比较,返回值是多少
答案
strncmp
:返回值是非零值
memcmp
:返回值是负值
strncmp和memcmp函数的差别
- strncmp是比较指定长度的字符串,而memcmp是比较两个字符串的前n个字节;
- strncmp函数不会检查结束符(’\0’),而memcmp函数会检查结束符,如果字符串有不同的结束符,则它们被视为不同的字符串;
- strncmp函数是比较字符型数据,而memcmp函数是比较二进制数据。
- memcmp的返回值可以大于零,小于零,或者等于零,而strncmp只能返回0或者非0值,因此memcmp比strncmp更精确。
十进制的23 对应的十六进制;
十进制的23对应的BCD码(十六进制表示出来):
答案
编写函数,对连续出现两个 0x10 的进行去重处理
char cirmsg[]={0x10,0x02,0x00,0x13,0x03,0x00,0x010x00,0x01,0xE5,0x20,0x20,0x01,0x03,0x10,0x10,0x090x00,0x00,0xF5,0x00,0x1E,0x0B,0x31,0x10,0x03);
十进制的23对应的BCD码(十六进制表示出来):
答案
1 2 3 4 5 6 7 8 9 10 11
| void removeDuplicates(char cirmsg[]) { int i = 0, j = 0; for (i = 0; i < sizeof(cirmsg) / sizeof(cirmsg[0]); i++) { if (cirmsg[i] != 0x10 && cirmsg[i] != 0x10) cirmsg[j++] = cirmsg[i]; else if (cirmsg[i] == 0x10 && cirmsg[i-1] != 0x10) cirmsg[j++] = cirmsg[i]; } }
|