牛客网题库练习记录(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
分析:
  • 通配符是一类键盘字符,有星号(*)和问号(?),当查找文件/文件夹时,可以使用它来代替一个或多个真正字符
  • *代表一个或多个字符,?代表一个字符
posted @ 2021-02-18 19:43  瑞图恩灵  阅读(530)  评论(0)    收藏  举报