牛客网题库练习记录(C++)
题目:
若i=3,则cout<<-i++;输出的值为 -4.说法是否正确?
答案:错误。
分析:
- 先执行i++,i变成4,返回临时变量3,然后输出-3
- 如果后面再加上一行cout<<i;则会输出4
题目:
在c++中,下列描述错误的是( )
A.在创建对象前,静态成员不存在
B.静态成员是类的成员
C.静态成员不能是虚函数
D.静态成员函数不能直接访问非静态成员
答案:A
分析:
- 程序运行时,静态成员已经加载在内存里面了,而且包含静态成员的对象共享静态成员
题目:
以下叙述中正确的是()
A.字符串常量"Hello"会被隐含处理成一个无名字符型数组,它有5个元素
B.不能用字符串常量对字符数组名进行整体赋值操作
C.char str[7] = "string!"; 在语法上是合法的,运行也是安全的
D.char *str; str = "Hello";与char str[]; str = "Hello";效果是一样的
正确答案:B
分析:
- A项,字符串常量"Hello"会被隐含处理成一个无名字符型数组,有6个元素
- B项, 数组名是常量,不能赋值
- C项,在语法上非法,数组长度为7,字符串"string!"长度为8,数组界限溢出
- D项,char str[]; str = "Hello";是非法的,还是因为数组名是常量,无法赋值
题目:
/................../中可以嵌套//注释,也能嵌套/........../注释。
正确答案:错误
分析:
- 在多行注释中可以嵌套单行注释,但不能嵌套多行注释
题目:
对于条件表达式(k)?(i++):(i--)来说,其中的表达式k等价于()。
A.k==0
B.k==1
C.k!=0
D.k!=1
答案:C
分析:
- 条件运算符 ?:,Exp1 ? Exp2 : Exp3;如果 Exp1 为真,则Exp2 的计算结果则为整个?:表达式的值。如果 Exp1 为假,则Exp3 的计算结果则为整个表达式的值
- 可以用来代替if-else 语句,在题目中则为 若k为真,则值为i++,若为假,则值为i--
题目:
void main (void) {
int i ;
i = 0x10+ 010+10;
printf (“x = %x”, i);
}
程序的输出是什么?
答案:x=22
分析:
- 八进制:0XXXX;十六进制:0xXXXX;二进制:0dXXXX
- %x是16进制输出
题目:
void main(void) {
int a=b=c=10;
a=b=c=50;
printf(“\n %d %d %d”,a,b,c);
}
程序的输出是什么?
A.50 50 50
B.编译错误
C.10 10 10
D.都不是
正确答案:B
分析:
- 代码中b和c都没定义
题目:
下面的类:
class Base
{
public:
void f(){cout<<”Base::f()”<<endl;}
protected:
Base(){cout<<”Base::Base”<<endl;}
private:
void g() {cout<<”Base::g()<<endl;}
}
class First: public Base
{
public:
First(){cout<<”First::First”<<endl;}
}
下面哪些是正确的语句?
A.main()<br>{<br>Base a;<br>}
B.main()<br>{<br>First a;<br>}
C.main()<br>{<br>First a;<br>a.f();<br>}
D.main()<br>{<br>First a;<br>a.g();<br>}
正确答案:BC
分析:
- 尖括号br为换行符
- A项,base类的构造函数权限为protected,在类外除了继承的方式,无法实例化对象
- 子类不能调用父类的私有成员函数
题目:
以下程序运行后的输出结果是( )
int main()
{
int a=1,b=2,m=0,n=0,k;
k=(n=b<a)&&(m=a) ;
printf("%d,%d\n",k,m);
return 0;
}
A.0,0
B.0,1
C.1,0
D.1,1
答案:A
分析:
- n=b<a,前面的值为0,&&后面不执行,所以k=0,m的值也没变
题目:
struct student
{ int num,age; };
struct student stu[3]={{6001,20},{6003,21},{6005,19}};
struct student *p=stu;
则下面的C语言表达式中,值为6003的是()
A.++(p->num)
B.(p++)->num
C.(*p++).num
D.(*++p).num
答案:D
分析:
- B项,后缀自增运算符(++)与成员选择运算符(->)处于同一优先级,从左到右结合,但是++的操作直到表达式结束才进行
- 成员选择运算符'.'的优先级高于取值运算符*
- 访问值的方法:p->num或(*p).num
- 前缀自增运算符(++)优先级和取值运算符(*)一样
题目:
在哪种派生方式中,派生类可以访问基类中的protected成员( )
A.public和private
B.public和protected
C.protected和private
D.public、protected、private均可
答案:D
分析:
题目:
给出以下定义,下列哪些操作是合法的?
char a[] = "hello";
char b[] = "world";
const char *p1 = a;
char* const p2 = b;
A.p1++
B.p1[2]='w';
C.p2[2]='l';
D.p2++
答案:AC
分析:
- const位于*号的左侧,则指针指向的为常量
- const位于*号的右侧,则指针本身是常量
题目:
下列各带有通配符的文件名中,能代表文件XYZ.TXT的是( )。
A.*Z.?
B.X*.*
C.?Z,TXT
D.?.?
答案:B
分析:
- 通配符是一类键盘字符,有星号(*)和问号(?),当查找文件/文件夹时,可以使用它来代替一个或多个真正字符
- *代表一个或多个字符,?代表一个字符