01day C++面试题---1

2020-3-17

1.整型、字符型。浮点型的数据结构在混合运算中相互转换,转换时遵循以下规则:
1)容量小的类型自动转换成容量大的数据类型
byte/char/short->int->long->float->double
2)byte/char/short之间不会相互转换,他们在计算是首先会转换成int 类型
3)bbol类型是不可以转换成其他基本数据类型的。
2.请问经过表达式a = 5?0:1的运算,变量a的最终值是**0
解:首先5为真,所以选择0
所以a = 0
3.int i,sum = 0; for(i = 0;i < 10;++i,sum += i)

i的最终结果是10
解:只有i= 10时,才互跳出循环
4.

int i,j,k,a = 3,b = 2;
i = (--a = b++)?--a:++b;
j = a++;
k = b;
printf("i = %d,j = %d,k = %d",i,j,k);

i = 1,j = 1,k = 3
解:
1)括号中:–a:先进性自减然后操作 a = 2
b++:先操作后自增
2)j = a++:先操作后自增
注:(–a = b++)?–a:++b;中若(–a = b++)为真,只执行–a
,家,执行++b
5)BD

template<class T>
T fun(T x,T y)
{retrn x*x+y*y;}

A fun(1,2)
B fun(1.0,2)
C fun (2.0,1.0)
D fun(1,2.0)
解:T要求类型一致
用进行生声明,后面的实参会强制类型转换为float,所以也是类型一致。
6.若执行以下程序段

int x = 3, y = 6,I;
I = x^y<<2;

则I的二进制值是00011011

1)^是按位异或逻辑运算符
2)移位运算符优先级大于按位异或
3)I= 00011^(110<<2)= 00011 ^ (11000) = 11011

2020-3-18

1.设char * s1,*s2分别指向两个字符串,可以判断字符串s1是否大于s2的表达式为 strcmp(s1,s2)>0
解:strcmp(s1,s2)字符比较函数:
1)s1 2)s1>s2返回正数
3)s1 = s2返回0
2.c语言中,若函数说明未给出返回类型,系统默认为是void类型(错误)
解:c语言标准函数定义

return_type function_name(parameter list)
{
	body of function;
}

返回类型:
1)c89中:main(){return 0;}默认为int类型
2)c99或其他编译器:int main(){return 0;}
j禁止了隐含默认,用规范化声明方式
3.与声明char str[10] = {‘a’,‘b’,‘c’,’\0’}相等的声明是 D
A char str[10] = “abc\0”;
B char *str = “abc”;
c char str[] = “abc”;
D char str[10]=“abc”;
解:’\0’是结束符,所以是一个包含abc三个元素,数组尅型大小为10的数组。
A 包含2个结束符,显示的abc\o占4个空间,隐式\0占一个空间
B 指针变量类型为8
C 未声明所占空间
4.下列程序输出结果是 5

void f(int *p)
{
	*P = 5;
}
int main()
{
	int a = 10;
	int *p = 7a;
	f(p);
	printf("%d",(*p)++);
	return 0;
}

解:1)p为a的地址,将a传入f()函数中,对a的地址的数据进行赋值,使得a = 5
2)(*p)++:对p解地址,输出,然后地址+1;
3)a++:先操作后自增
++a:先自增后操作
5.int *pint = 0;pint+=6;cout< pint = 24
解:
1)在初始化中只有地址才能赋值给指针,因此 * int *p = 0是指:指向地址0x00
2)int类型占4个字节,因此+6表示便宜了24个字节,结果的地址用为0x18,即24
6.

class A
{
public:
	void FuncA(){printf("FuncA called\n");}
	virtual void FuncB(){print("FuncB called\n");}
};

class B: public A
{
public:
	void FunA()
	{
		A::FuncA();
		printf("FuncAB called\n");
	}
	virtual void FuncB(){print("FuncBB called\n");
}

int main()
{
	B b;
	A *pa;
	pa = &b;
	A *pa2 = new A;
	pa->FuncA();
	pa->FuncB();
	pa2->FuncA();
	pa2->FuncB();
	delete pa2;
}

输出结果为FuncA called FuncBB called FuncA called FuncB called
解:1)class A:void FuncA(){printf(“FuncA called\n”);}未声明为虚函数,发生静态联编
2)class A:virtual void FuncB(){print(“FuncB called\n”);}声明为虚函数,发生动态联编

2020-3-19

1.有关构造函数的说法不正确的是:D
A 构造函数名字和类名字一样
B 构造函数在定义变量时会自动执行
C 构造函数无任何函数类型
D 构造函数有且只有一个
解:类可以包含多个构造函数,不同的构造函数之间必须在参数数量或者参数类型上有所区别
2.C++中结构体是否可以有构造函数? 可以
解:(1)c与c++结构体的区别
c中的结构体没有函数,但C++中的结构体可以有函数
(2)c++中结构体与类的区别
结构体中的成员访问权限不声明时默认是公开的,二=而类是私有的
3.以下函数都不可以声明为虚函数
(1)构造函数:虚函数是运行时静态绑定
(2)静态成员函数:只有一份数据大家共享
(3)内联函数:编译时就展开
(4)友元函数:友元函数不能被继承。

给生活一个微笑!我爱视觉!

你可能感兴趣的:(c/c++面试习题总结,c++,c语言)