- 能够在字符串“aabaaabaaaab”中匹配“aab”,而不能匹配“aaab”和“aaaab"的正则表达式包括()
A. “a*?b”
B. “a{,2}b”
C. “aa??b”
D. “aaa??b”
正确答案: C 我的答案: B C
错误原因:{,}在使用的时候必须要明确上下界,题中没有固定上下界。
逐项分析:
A. *表示前面的表达式出现0次或者任意次,?表示出现0次或者1次,有可能匹配到"aaab"或者"aaaab"
B. 详见错误原因
C. ?表示出现0次或者1次,因此不可能会出现"aaab"或者"aaaab",同时能够匹配"aab"。
D. ?表示出现0次或者1次,因此可能会匹配到"aaab"。
- 下列程序的运行结果是1,请将横线处缺失程序补充完整()
class B;
class A
{ friend class B;
public:
void Display()
{cout<<x<<endl;}
private:
int x;
};
class B
{ public:
void Set(int i){ =i;}
void Display(){a.Display();}
private:
A a;
};
int main()
{
B b;
b.Set(1);
b.Display();
return 0;
}
A. A::x
B. A.x
C. a.x
D. x
正确答案: C 我的答案: A
错误原因: 忽略了友元函数的特性,友元函数只能通过具体的对象访问所有的数据成员。
分析:首先通过friend class B 确定为友元,随后根据特性确定空白处应该选择成员属性x,再根据友元函数只能通过具体的对象访问所有的数据成员的特性确定答案为C。
- 2个同名成员函数,可以重载的是()?
A. int A::f() 和double A::f()
B. void A::f(int) 和void A::f(short)
C. void A::f() 和void A::f() const
D. void A::f(int) 和void A::f(const int)
E. const int A::f() 和int A::f()
正确答案: B C 我的答案: B C D
错误原因:其实const int 与 int 都是int类型, 不能用于区分参数类型。
逐项分析:
A. 函数的返回值不能够用于区分两个重载函数。
B. 参数类型不同。可以区分。
C. C++规定重载函数的指针形参,因此只有当修饰的const为底层const 而非顶层const时才可以区分,也就是说const必须修饰指针指向的对象而非指针本身时才能用于区分重载函数
D. 见错误原因
E. 函数前面加const也起不来重载的作用,其作用在于声明返回的值为cosnt不可修改,而不能用于区分重载。
- 运行以下C语言代码,输出的结果是( )
#include <stdio.h>
int main()
{
char *str[3] ={"stra", "strb", "strc"};
char *p =str[0];
int i = 0;
while(i < 3)
{
printf("%s",p++);
i++;
}
return 0;
}
A. stra strb strc
B. s t r
C. stra tra ra
D. s s s
正确答案: C 我的答案: A
错误原因:指针里面存放的是指向目标的地址,指针本身++是地址前进一位,而不是数组前进一位,数组前进一位是A,地址前进一位就是C了。
分析:程序比较简单,注意指针移动的特点。
- 下列选项中,能正确定义数组的语句是()
A. int num[0…2008];
B. int num[]={2008};
C. int N = 2008;
int num[N];
D. #define N 2008;
int num[N];
正确答案: B 我的答案: D
错误原因:别问,问就是眼睛瞎没看到分号。
逐项分析:
A. 没这种写法。。。
B. 正确,第一个元素是2008,其他为0
C. 数组长度要是常量,变量显然不行。
D. 别问,问就是没看到分号。(宏定义中带分号会导致替换之后多一个分号,导致错误)