不定项选择
1) 计算机硬件能直接识别和执行的语言有 ()
A. 高级语言
B. 符号语言
C. 汇编语言
D. 机器语言
2) 以下那组 IP 地址可以不通过路由直接通讯 ()
A. 当掩码为 255.255.255.248 时, 192.168.117.71 与 192.168.117.73
B. 当掩码为 255.255.255.0 时, 157.60.71.1 与 157.60.72.1
C. 当掩码为 255.255.255.240 时, 172.10.9.129 与 172.10.9.141
D. 当掩码为 255.255.255.0 时, 202.108.33.100 与 202.107.33.100
3) 设栈最大长度为 3, 入栈序列为 1, 2, 3, 4, 5, 6, 则不可能得出栈序列是 ()
A. 1, 2, 3, 4, 5, 6
B. 2, 1, 3, 4, 5, 6
C. 3, 4, 2, 1, 5, 6
D. 4, 3, 2, 1, 5, 6
4) 桌上有 3 枚硬币, 一个正面朝上, 两个反面朝上. 你一次需翻转 2 枚硬币, 请问, 变成"两个正面朝上, 一个反面朝上"需要的翻转次数是 ()
A. 2
B. 3
C. 7
D. 不确定
E. 不可能
F. 以上都不对
5) 运行 Test 函数的结果是 ()
void GetMemory (char **p, int num)
{
*p = (char *) malloc (num);
}
}
void Test (void)
{
char *str = NULL;
GetMemory (&str, 100);
strcpy (str, "hello");
printf (str);
}
A. 程序运行正常, 没有任何问题
B. 能够输出 "hello"
C. 程序崩溃
D. 内存泄露
E. 以上都不对
填空题
1) 用二分查找一个长度为 50 的, 排序好的线性表, 查找不成功时, 最多需要比较的次数是: __
2) 对于 32 位操作系统, 不考虑边界对齐, sizeof (A) = __
struct A
{
char t:4;
char k:4;
unsigned short i:8;
unsigned long m;
};
3) i 最后的值是: __
int i = 1;
int j = i++;
if ((i > j++) && (i++ == j)) i += j;
4) A, B, C, D, E, F 是 1~9 的其中一个数字, 各不相同, ABCDEF, CDEFAB, EFABCD 是六位数, 并且
ABCDEF * 2 = CDEFAB
CDEFAB * 2 = EFABCD
请问: A, B, C, D, E, F 分别是什么数字?
A = __, B = __, C = __, D = __, E = __, F = __.
5) 在下面代码后写出输出结果.
#include <stdio.h>
class A
{
public:
void FuncA () { printf ("FuncA called\n"); }
virtual void FuncB () { printf ("FuncB called\n"); }
};
};
class B: public A
{
public:
void FuncA ()
{
A::FuncA ();
printf ("FuncAB called\n");
}
virtual void FuncB () { printf "FuncBB called\n"; }
};
};
void main (void)
{
B b;
A *pa = &b;
A *pa2 = new A;
b.FuncA ();
b.FuncB ();
pa->FuncA ();
pa->FuncB ();
pa2->FuncA ();
pa2->FuncB ();
delete pa2;
}
编写程序
编写一个支持简单正则表达式的字符串匹配函数.
合法正则表达式的语法如下:
通配符 含义
c 匹配某个小写英文字母 c.
? 匹配任意一个小写英文字母.
* 若一个小写英文字母后紧跟 *, 则匹配 0 个或多个此字符, "*" 号前只允许出现小写英文字母.
任选一种语言, 注意考虑不合法的情况.
C/C++:
int match (const char *regexp, const char *text);
Java
int match (String regexp, String text);
例子:
regexp: "?ab*"
输出为 1 的 text "aa", "da", "eabbb"
输出为 0 的 text "eabd"