実例問題(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を出力します.その他、「演算子エラー」が表示されます.ソース:
#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;
} 

まとめ:
  • 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、回転③⑨終了
  • ソース:
    #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つは、ある変数の値を破壊(または変更)し、この元の値が後の計算で使用される場合、まず別の変数に値を割り当て、新しい変数を使用して「破壊的」計算を行い、いつでも元の変数で元の値を得ることができることです.これは実際にコンピュータ科学でよく使われる「冗長」の思想であり、ある保障を得るには、より多くの時間、空間を意図的に使用する必要がある.