C / C ++研究ノート:[ゼロベースの紹介]:分岐、ループ、およびシーケンスの3つの構造

1.シーケンス構造 

順次構造のプログラム設計は、対応するステートメントが問題を解決する順序で記述され、その実行順序が上から下であり、順番に実行される限り、最も単純です。

例:a = 3、b = 5、aとbの値を交換します。問題は2杯の水を交換するようなものです。もちろん、3番目のカップが使用されます。3番目のカップがtの場合、正しい手順For:t = a; a = b; b = t;実行結果はa = 5、b = t = 3です。

順序を変更すると、次のように記述します。a= b; c = a; b = c;実行結果はa = b = c = 5になり、期待した目的を達成できません。これは初心者にとって最も簡単な間違いです。注意してください。

シーケンス構造を個別に使用して、単純な完全なプログラムを形成できます。一般的な入力、計算、および出力の3部作プログラムはシーケンス構造です。たとえば、円の面積を計算する場合、プログラムのステートメントシーケンスは半径rです。入力円の面積、および計算s = 3.14159 * r * r、出力円の面積s。

ただし、ほとんどの場合、シーケンス構造はプログラムの一部として使用され、分岐構造の複合ステートメント、ループ構造のループ本体などの他の構造と一緒に複雑なプログラムを形成します。

2.分岐構造 

シーケンス構造のプログラムは計算と出力の問題を解決できますが、判断して選択することはできません。ブランチ構造は、最初に判断してから選択する必要がある問題に使用する必要があります。

ブランチ構造の実行は、ステートメントの物理的な順序に厳密に従うのではなく、実行パスを選択するための特定の条件に基づいています。分岐構造プログラミング手法の鍵は、適切な分岐条件を構築してプログラムフローを分析し、さまざまなプログラムフローに従って適切な分岐ステートメントを選択することです。

分岐構造は、論理や関係比較などの条件付き判断による計算に適しています。このようなプログラムを設計する場合、最初にプログラムフローチャートを作成し、次にプログラムフローに従ってソースプログラムを作成する必要があります。これにより、プログラム設計が分離されます。言語からの分析。問題を単純で理解しやすいものにします。

プログラムフローチャートは、問題解決分析に従って作成されたプログラム実行フローチャートです。

ブランチの構造を学びます。ブランチのネストと混同しないでください。フローチャートを正しく描画し、各ブランチによって実行される機能を理解している限り、ネストの構造は難しくありません。

ネストとは、二重ブランチの理解が明確である限り、ブランチに新しい知識ではなくブランチステートメントが含まれていることだけです。ブランチのネストは難しくありません。以下に、いくつかの基本的なブランチ構造を紹介します。

①if(条件) 
分支体 
}

この種の分岐構造の分岐本体は、ステートメントにすることができます。その場合、「{}」を省略できます。または、複数のステートメント、つまり複合ステートメントにすることもできます。

選択できる分岐パスは2つあります。1つは条件がtrueの場合、分岐が実行される場合、それ以外の場合は分岐がスキップされ、分岐が実行されない場合です。例:xの絶対値を計算するには、絶対値の定義に従って、x> = 0の場合、その絶対値は変化せず、x <0の場合、その絶対値はxの反対であることがわかります。したがって、プログラムセグメントは次のようになります。if(x <0)x = -x;

②if(条件) 
{分支1} 
else 
{分支2}

これは典型的なブランチ構造です。条件が真の場合はブランチ1を実行し、そうでない場合はブランチ2を実行します。ブランチ1とブランチ2はどちらも、1つまたは複数のステートメントで構成できます。例:ax ^ 2 + bx + c = 0のルートを見つける

分析:b ^ 2-4ac> = 0の場合、方程式には2つの実根があり、それ以外の場合(b ^ 2-4ac <0)には2つの共役複素根があります。プログラムセグメントは次のとおりです。

d=b*b-4*a*c; 
if(d>=0) 
{x1=(-b+sqrt(d))/2a; 
x1=(-b-sqrt(d))/2a; 
printf("x1=%8.4f,x2=%8.4f\n",x1,x2); 
} 
else 
{r=-b/(2*a); 
i =sqrt(-d)/(2*a); 
printf("x1=%8.4f+%8.4fi\n"r, i); 
printf("x2=%8.4f-%8.4fi\n"r,i); 
} 123456789101112

③ネストされた分岐ステートメント:そのステートメント形式は次のとおりです。 

if(条件1) {分支1}; 
else if(条件2) {分支2} 
else if(条件3) {分支3} 
…… 
else if(条件n) {分支n} 
else {分支n+1}

ネストされたブランチステートメントは複数のエントリと出口の問題を解決できますが、3レベルを超えるネストの後、文の構造が非常に複雑になり、プログラムの読み取りと理解に非常に不便になります。3レベル以内にネストすることをお勧めします。 、3以上次のステートメントを再度使用できます。

④switchswitchステートメント:このステートメントもマルチブランチ選択ステートメントです。どちらが実行されるかは、スイッチ設定、つまり式の値が定数式と一致する方法によって異なります。

if ... elseステートメントとは異なります。すべてのブランチが並列です。プログラムが実行されると、検索は最初のブランチから開始されます。一致する場合は、後続のブロックが実行され、次に2番目のブランチ、3番目のブランチが実行されます。ブランチ...、breakステートメントが検出されるまで、一致しない場合は、次のブランチが一致するかどうかを確認します。

このステートメントは、スイッチ条件の適切な設定とbreakステートメントの適切な適用に特別な注意を払う必要があります。

3.ループ構造

C言語は、次のタイプのループを提供します。C言語は、gotoループ、whileループ、do-whileループ、およびforループの4つのループを提供します。

ループ構造は、ソースプログラムの繰り返し書き込みの作業負荷を軽減し、特定のアルゴリズムを繰り返し実行する問題を説明するために使用されます。これは、プログラム設計におけるコンピューターの専門分野を最もよく発揮できるプログラム構造です。

4つのループは、同じ問題を処理するために使用できます。通常の状況では、それらは相互に置き換えることができます。ただし、プログラムの順序を強制的に変更すると、予期しないエラーが発生することが多いため、通常、gotoループの使用はお勧めしません。プログラムの操作。私たちは主にwhile、do ... while、forの3つのループを学習しています。

一般的に使用される3つのループ構造の学習の焦点は、それらの類似点と相違点を理解して、さまざまな状況で使用できるようにすることです。これには、3つのループの形式と実行シーケンス、および各ループのフローチャートを明確に理解する必要があります。完全に理解されています。それを交換する方法を理解します。

たとえば、forステートメントを使用して、whileループの例のプログラムを書き直し、それらの役割をよりよく理解できるようにします。ループ本体のステートメントの終わり(つまり、ループ変数値の変更)に特別な注意を払う必要があります。そうしないと、無限ループになる可能性があります。これは、初心者のよくある間違いです。

これらの3つのループを学習した後、それらの類似点と相違点を明確にする必要があります。whileループとdo ... whileループを使用する場合、ループ変数の初期化はループ本体の前に行う必要がありますが、forループは通常ステートメント1で実行されます。

whileループとforループはどちらも、最初に式を判断してからループ本体を実行し、do ... whileループは最初にループ本体を実行してから式を判断します。つまり、doのループ本体です。 ..whileは少なくとも1回実行されますが、whileループとForは1回実行されない場合があります。

また、これら3種類のループはすべて、breakステートメントを使用してループからジャンプし、continueステートメントを使用してこのループを終了できることに注意してください。gotoステートメントとifによって形成されるループは、breakステートメントとcontinueステートメントでは制御できません。 。

配列構造、分岐構造、ループ構造は分離されておらず、ループ内に分岐や配列構造が存在する場合もあれば、分岐内にループや配列構造が存在する場合もあります。実際、どちらの構造であっても、広く考えることができます。 1つのステートメントとして。

ループ制御ステートメント

ループ制御ステートメントは、コードの実行順序を変更します。それを通してあなたはコードジャンプを達成することができます。

無限ループ

条件がfalseにならない場合、ループは無限ループになります。for ループは、従来の意味で無限ループを実装するために使用できます。ループを構成する3つの式はいずれも必要ないため、一部の条件式を空白のままにして、無限ループを形成できます。

#include <stdio.h>

int main ()
{
   for( ; ; )
   {
      printf("该循环会永远执行下去!\n");
   }
   return 0;
}

条件式が存在しない場合は、trueと見なされます。初期値とインクリメント式を設定することもできますが、一般に、Cプログラマーはfor(;;)構造体を使用して無限ループを表すことを好みます。

注:Ctrl + C を押すと、無限ループを終了でき ます。

 

おすすめ

転載: blog.csdn.net/Python6886/article/details/111374065