笔试题目收集(2)

1.下列程序运行的结果:(面试宝典P108)

 

#include<iostream>

#include<string>



using namespace std;



class classType{

private:

	int x,y;

public:

	classType(int a):y(a),x(y)

	{}

	int getx(){return x;}

	int gety(){return y;}

};





int main()

{

    classType obj(98);

	cout<<obj.getx()<<" "<<obj.gety()<<endl;

	getchar();

	return 0;

}


结果:输出结果第一个数为随机数,第二个数为98。

 

分析:类中先声明x,后声明y,所以在初始化成员变量时先初始化x,再初始化y的顺序。将上面改为int y,x,得到预期的输出,即98 98。

2.指出下面程序的错误,把静态成员数据声明为私有,该如何访问?

 

class A{

    const int size=0;

};

 

 

错误:上面的错误应该是没有定义性说明(我认为面试宝典的这道题答案有点问题)。

方法1可以改为如下:

 

class A{

    static const int size;

};

int A::size = 0;

 

 

      类中的成员声明不能赋初值(静态成员除外,且静态成员在定义性说明的时候赋初值,如果不赋初值则取默认值,但是必须要定义性说明),因为类只是一种导出的类型,不分配空间。

方法2可以改为如下:(面试宝典给出答案有误,正解如下

 

class A{

    const int size;

    A():size(0){}//const变量必须在初始化列表中

};

 

 

      静态成员设为私有只能通过静态的成员函数访问。

 

3.数组循环移位

解法1:

 

RightShift(int *arr,int N,int K)

{

	K%=N;
while(k--){

    int t=arr[N-1];

    for(int i=N-1;i>0;i--){

        arr[i]=arr[i-1];

        arr[0]-t;

   }

}

解法2:

 

 

 

Reverse(int *arr,int b,int e)

{

	K%=N;

    for(;b<e;b++,e--){

         int tmp = arr[b];

         arr[b] = arr[e];

         arr[e] = tmp;

   }

}

RightShift(int *arr,int N,int K)

{

     K%=N;

     Reverse(arr,0,N-K-1);

     Reverse(arr,N-K,N-1);

     Reverse(arr,0,N-1);

}

 

4.插入排序、选择排序和冒泡排序代码(上次去阿里笔试,插入排序还写错了,丢人,这次一定要狠心记住)

插入排序:

 

void InsertionSorter(int *arr,int len)

{

	for(int i=1;i<len;i++){

		int t = arr[i];

		int j = i;

		while(j>0&&arr[j-1]>t){

			arr[j] = arr[j-1];

			j--;

		}

		arr[j] = t;

	}

}

选择排序:

void SelectionSorter(int *arr,int len)

{

	for(int i=0;i<len-1;i++){

		int k = i;

		for(int j = i+1;j<len;j++){

			if(arr[j] < arr[k]) k = j;

		}

		if(k!=i)

		{

			int t = arr[k];

			arr[k] = arr[i];

			arr[i] = t;

		}

	}

}

冒泡排序:

 

 

void BubbleSorter(int *arr,int len)

{

	for(int i=0;i<len-1;i++){

		bool flag = false;

		for(int j = 0;j<len-i-1;j++){

			if(arr[j]>arr[j+1]){

				int tmp = arr[j];

				arr[j] = arr[j+1];

				arr[j+1] = tmp;

				flag = true;

			}

		}

        if(!flag)break;  

	}

}





 


 


待续....

 

你可能感兴趣的:(笔试题)