高校のガールフレンドの数が、私は彼女に電卓を書いたスタックで15分を費やしました

ハチソン前

ガールフレンドは言った:「非常に難しいの高い数は、最近私を見ることは非常に難しい、あなたが私に私に贈り物を送った、あなたは私が何をしたいと思い、それについて私を幸せにします..」

私は何も感じていない、最後の家庭用品に電子機器に本から靴まで、長い時間のために考えた、と彼女は言った:「あなたは漢を送りたいと言う、私はそれを買うものを」

私は彼女が主張推測:「いいえ、あなたがする個人的にあなたに贈り物、そしてこのギフトを言わなければなりません。」

その後、私はあなたを助けることができる、「まあ、あなたは本当に私が何かを送信する場合:だから、私は真剣にアップし、携帯電話を拾う、淘宝網は、数分の買い物が、それでも欠点を出てくるものを考えることができなかった、そして最終的に方法はありません電卓それを書きます。」

記事のタイトルはただギミックで、私は記事の内容が乾燥していることを保証しますので、愛情の通信技術の学習者として、私たちは、地球にダウンする必要があります!

設計の原則

スタックフレーム構造によって中置演算式の入力は、後置出力への変換を達成し、その後、後置表現に計算結果を出力します。電卓の最終的なデザイン。

有効範囲:+ - %整数* /負の小数

デザインのアイデア

論理設計

  1. 2つのスタックの設立は、スタックはスタックとスタックノード
  • 文字の配列を格納するスタックスタックは、文字要素は中置式を保存します。
  • ポイントタイプ、中置式と各要素の演算を記憶された要素値の値を浮動倍精度を格納するためのスタックのノードアレイ。
  1. 以下の2つの関数の設計とそれぞれのスタックのポップ操作。
関数名 パラメータ 効果
Mtf_function() char * P1、CHAR *半ば、CHAR *最終 回転のための辞接尾辞
Caculate() スタック* M、CHAR *最終 Postfixの式の値の計算

Mtf_function()関数の設計

(スタックのスタック)

Created with Raphaël 2.2.0 开始 如果遇到操作数,直接将其输出 左括号? 遇到左括号时将其放入栈中 右括号? 遇到右括号时将,弹出栈的操作符直到遇到左括号 从栈中弹出元素直到遇到更低优先级的元素 yes no yes no

(1)オペランドが発生した場合、直接出力します。

(2)あなたは、オペレータが発生した場合は、我々は遭遇した左括弧がスタックに入れてスタックにそれを置くだろう。

あなたはそれがこれまでに左括弧に遭遇するまで、ポップアップオペレータの出力をスタック要素をポップ、その後、右括弧が発生した場合(3)。左括弧が唯一のポップアップ出力されていないことに注意してください。

(4)あなたが任意の他のそのような(「+」、「*」、「(」)などの演算子などを持っている場合は、優先度の低い要素(またはスタックが空になるまで、それは要素に遭遇するまで、スタックからポップされる)が発見次の。これらのポップの要素の後に、それがスタックにプッシュオペレータが発生します。それは顔だけに注意することが重要である「)」私たちはポップな状況は、「(」そう、私たちはポップアップしません。 " (。 "

(5)あなたが入力の終わりを読めば、その後、順番にすべての要素のスタックをポップ。

Caculate()関数の設計

(ノードのスタックスタック)

1)トラバーサル発現、遭遇したデジタル最初のスタックに配置

2)オペレータ次いで読み取る演算子「+」は、頂部要素と次の要素ポップアップは、対応する演算を実行し、計算結果をスタックに押し込まれます。

3)直接スタック上に配置される次の要素を読み出します。

4)「のような次の要素、読むために、」を頂部要素と次の要素をポップし、実行8 5は演算結果に応じた演算......スタックにプレスなど。最後に、値がスタックの一番上に存在する見つけます。

アルゴリズム小数点を処理します

  1. 原理:次いで、対応する重み10点の重みで割った10進数に変換する第一。= 0 0,10 J初期重量和のそれぞれの重みの小数値、文字列要素が0-9小数点か、場合に、小数点をシフトした後、和=和* 10 +対応する要素を決定するように、ループを作成します値、体重10 Jプラスワンの対応する重み、次の要素が0-9に属していないまで。
  2. 次のようなアルゴリズムがあります
    ここに画像を挿入説明

負の符号を処理するための

位置は、負の符号は文字の配列または左ブラケット要素の裏面の最初の要素である現れます。回避マイナスに「 - 」、文字や左括弧の配列の最初の要素の要素によって決定され混乱して「 - 」の検索マイナス記号、および「M」に置き換えます。要素が「M」が出力されている場合場合は中置サフィックスをトランスフェクト「 - 。」、素子後の値は、反対番号後の動作に要素計算値(小数を含む)を「M」の接尾辞である場合。

メインプログラムのフローチャートと、各モジュールの呼び出し関係

ここに画像を挿入説明

物理設計

  1. オープンメモリ連続を達成するために、ストレージアレイベース、C宣言は、転送後置インフィックスのために、文字の配列を含む文字スタックフレーム構造を定義します
    ここに画像を挿入説明

  2. 対応するノードの意味
    ここに画像を挿入説明

  3. そして、スタック操作のうち
    ここに画像を挿入説明

  4. C文は、後置表現を計算するために、整数の配列を含む整数スタックフレーム構造を定義します。
    ここに画像を挿入説明

  5. 対応するノードの意味
    ここに画像を挿入説明

  6. そして、スタック操作のうち
    ここに画像を挿入説明

テスト

  1. テストケース
    ここに画像を挿入説明
    ここに画像を挿入説明
  2. テスト結果
    ここに画像を挿入説明

ソース(コメント付き)

コードはC言語のバージョンで書かれている、時間がJavaのバージョンにフォローアップします
githubのコードのリンク

収穫場合は?私たちは、より多くの人々が、この記事を参照して与え、古い鉄のバッターを倍増したいと考えています

1、私のオリジナルのマイクロチャンネル公衆番号に注意を払う古い鉄「プログラムの猿が進め」、主にITと競争

2は、書き込みがより多くの人々がこの記事を見ることができるようにすることを、私はこの白いについて興奮して、途中のポイントで、簡単に賞賛の聖歌ではありません。

公開された98元の記事 ウォンの賞賛327 ・は 50000 +を見て

おすすめ

転載: blog.csdn.net/JAck_chen0309/article/details/104841005