筆記試験問題収集(2)
2919 ワード
1.以下のプログラムの実行結果:(宝典P 108面接)
結果:出力結果の最初の数は乱数で、2番目の数は98です.
解析:クラスではxを先に宣言し、yを宣言するので、メンバー変数を初期化するときにxを初期化し、yの順序を初期化します.上をint y,xに変更し、所望の出力、すなわち98を得る.
2.次のプログラムのエラーを指摘し、静的メンバーデータをプライベートと宣言します.どのようにアクセスしますか?
エラー:上のエラーは定義的な説明がないはずです(面接宝典のこの問題の答えは少し問題があると思います).
方法1は次のように変更できます.
クラスのメンバー宣言では、初期値は付与できません(静的メンバーを除き、静的メンバーは定義の説明時に初期値を付与し、初期値を付与しない場合はデフォルト値を取得しますが、定義の説明が必要です).クラスはエクスポートのタイプであり、スペースは割り当てられません.
方法2は以下のように変更することができます:(面接の宝典は答えが間違っていて、正解は以下の通りです)
静的メンバーがプライベートに設定されている場合、静的メンバー関数のみでアクセスできます.
3.配列循環シフト
解法1:
解法2:
4.ソート、選択ソート、バブルソートコードの挿入(前回アリに行って筆記試験を受けたが、挿入ソートが間違っていて、恥ずかしいので、今回はしっかり覚えておきたい)
ソートの挿入:
ソートを選択:
泡のソート:
続行...
#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;
}
結果:出力結果の最初の数は乱数で、2番目の数は98です.
解析:クラスではxを先に宣言し、yを宣言するので、メンバー変数を初期化するときにxを初期化し、yの順序を初期化します.上をint y,xに変更し、所望の出力、すなわち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;
}
}
続行...