実例問題(C++)
14299 ワード
例1:単純な計算機
例:簡単な計算機機能をプログラミングし、簡単な加算、減算、乗算、除算式の計算を実現する.
分岐が多い場合、C++はswitch文を提供します.switch文はスイッチ文、マルチブランチ文とも呼ばれ、1つの式の値を計算し、結果に応じて異なるブランチ処理文を実行します.アルゴリズム記述:num 1,num 2,opで入力した式の2つのオペランドと1つの演算子をそれぞれ表す.op='+'の場合、result=num 1+num 2でresultが出力されます.op='-'の場合、result=num 1-num 2でresultが出力されます.op='''の場合、result=num 1 num 2でresultが出力されます.op='/'の場合、num 2=0の場合、「除数0」を表示します.そうでない場合、result=num 1/num 2を計算し、resultを出力します.その他、「演算子エラー」が表示されます.ソース:
まとめ: swithの条件は整数式である. fab()は、cmathヘッダファイルに含まれる絶対値を求める関数である. は、各case処理の最後にbreak文を有する.
例2:自己べき乗数の検索
nが1の場合,自己べき乗数を独身と呼び,0,1,2,3,4,5,6,7,8,9はいずれも自己べき乗数である.nが2の場合、べき乗数はありません.nが3の場合、べき乗数から水仙数と呼ばれ、153は水仙数である.n=4で、四葉バラ数と呼ばれています.n=5で、五角星数と呼ばれます.n=6を六合数と呼ぶ.n=7で、北斗七星数と呼ばれています.n=8で、八仙数と呼ばれています.n=9で、九九重陽数と呼ばれています.問題の分析: nビットのべき乗数は、各数字のn次方の和を合わせるとこの数に等しい. の2つのポイントは、1つはどのように「皆さん」を見つけるか、2つはn次方の計算です.n次方程式の計算には数学関数が利用可能であり,pow(x,n)である. 皆さんを見つけて、例えば、153、ビットを探して、153%10=3を使うことができます.10名様をお探しですか.(153/10)%10=5の順に類推します.直接余剰を求めて、最低位の数字で、10を除いて、元の10位は新しい最低位になって、この過程を繰り返して、各位を求めることができて、この数が0になるまで. もう一つの問題は、nビット数を構築することです.0は最小の1桁、10の1次は最小の2桁、10の二乗は最小の3桁であり、10のn-1次は最小のn桁である.アルゴリズム記述:①入力ビット数n②nビット数の開始値と終了値start=10^(n-1)、end=10^n-1、i=start③i>end回転⑨④m=1、sum=0⑤m=0、回転⑦⑥a=m%10、sum=d^n、m=m/10、回転⑤⑦sum=iの場合、i.⑧i=i+1、回転③⑨終了 ソース:
構想の拡張:
この例で身につけるべきテクニックは、1つはどのように各数字を分離するか、2つは、ある変数の値を破壊(または変更)し、この元の値が後の計算で使用される場合、まず別の変数に値を割り当て、新しい変数を使用して「破壊的」計算を行い、いつでも元の変数で元の値を得ることができることです.これは実際にコンピュータ科学でよく使われる「冗長」の思想であり、ある保障を得るには、より多くの時間、空間を意図的に使用する必要がある.
例:簡単な計算機機能をプログラミングし、簡単な加算、減算、乗算、除算式の計算を実現する.
分岐が多い場合、C++はswitch文を提供します.switch文はスイッチ文、マルチブランチ文とも呼ばれ、1つの式の値を計算し、結果に応じて異なるブランチ処理文を実行します.アルゴリズム記述:num 1,num 2,opで入力した式の2つのオペランドと1つの演算子をそれぞれ表す.op='+'の場合、result=num 1+num 2でresultが出力されます.op='-'の場合、result=num 1-num 2でresultが出力されます.op='''の場合、result=num 1 num 2でresultが出力されます.op='/'の場合、num 2=0の場合、「除数0」を表示します.そうでない場合、result=num 1/num 2を計算し、resultを出力します.その他、「演算子エラー」が表示されます.ソース:
#include //
#include
using namespace std; //
int main()
{ double num1,num2;
char op; // ,
double result ; // ,
char caption1[20]="Error,Divided by 0!";
char caotion1[20]="Invalid opereator!";
cout<<"Please input the expression:";
cin>>num1>>num2;
swith(op)
{ case'+': result=num1+num2;
cout<<num1<<op<<num2<<"="<<result<<endl;
break; //
case'-': result=num1-num2;
cout<<num1<<op<<num2<<"="<<result<<result<<endl;
break; //
case '*': //
result=num1*num2; //
cout<<num1<<op<<num2<<"="<<result<<endl;
break;
case '/': //
if(fabs(num2)<1.0e-8) // 0 {
cout<<caption1<<endl; }
else { // 0
result=num1/num2; //
cout<<num1<<op<<num2<<"="<<result<<endl; }
break;
default : //
cout<<caption2<<endl; }
return 0;
}
まとめ:
例2:自己べき乗数の検索
nが1の場合,自己べき乗数を独身と呼び,0,1,2,3,4,5,6,7,8,9はいずれも自己べき乗数である.nが2の場合、べき乗数はありません.nが3の場合、べき乗数から水仙数と呼ばれ、153は水仙数である.n=4で、四葉バラ数と呼ばれています.n=5で、五角星数と呼ばれます.n=6を六合数と呼ぶ.n=7で、北斗七星数と呼ばれています.n=8で、八仙数と呼ばれています.n=9で、九九重陽数と呼ばれています.問題の分析:
#include //
#include //
using namespace std; //
int main() { int n; //
int start,end; // n
int m; // ,
int digit; //
int sum; // n int i; // ,
cout<<" n , :"; //
cin>>n; //
while(n>0){ // 0
start=pow(10,n-1); //n
end=pow(10,n)-1; //n
cout<<n<<" :"; //
for(i=start;i<=end;i++){ //
m=i; // i m // m , i
sum=0; // n ,
while(m!=0){ //m digit=m%10; //
sum=sum+pow(digit,n); //n ,
m=m/10; // ,
}
// sum n
if(sum==i){ // true ,
cout<<i<<" "; //
} }
cout<<endl; //
cout<<“ n , :”;
cin>>n; // n
} //while
cout<<endl; return 0;
}
構想の拡張:
この例で身につけるべきテクニックは、1つはどのように各数字を分離するか、2つは、ある変数の値を破壊(または変更)し、この元の値が後の計算で使用される場合、まず別の変数に値を割り当て、新しい変数を使用して「破壊的」計算を行い、いつでも元の変数で元の値を得ることができることです.これは実際にコンピュータ科学でよく使われる「冗長」の思想であり、ある保障を得るには、より多くの時間、空間を意図的に使用する必要がある.