Cの制御文,パート1

私たちのシリーズの次の割賦へようこそ,Cの基礎.

制御文は、プログラム制御の流れを指定することができます;すなわち、プログ それらは、決定を下したり、タスクを繰り返し実行したり、コードのあるセクションから別のセクションにジャンプしたりすることを可能にします。

Cには四つのタイプの制御文があります:

  1. 意思決定文
  2. 選択文
  3. 反復文
  4. ジャンプ文

意思決定文:if-else文

if-else文は、論理テストを実行し、論理テストに応じて二つの可能なアクションのいずれかテストの結果(つまり、結果が真か偽か)。

:

if (condition){ statements} else{ statements}

if文で指定された条件がtrueと評価された場合、ifブロック内の文が実行され、ifブロックの直後の文に制御が転送されます。 条件がfalseで、else-blockが存在しない場合でも、制御はif-blockの直後の文に転送されます。

else部分は、条件がfalseと評価された場合に、特定の一連の命令を実行する必要がある場合にのみ必要です。 条件は常に括弧で指定されており、単一の文であろうと複合文であろうと、ifブロックまたはelseブロック内の文を中括弧で囲むことをお勧めします。

以下のプログラムは、入力された数値が正または負であるかどうかをチェックします。

#include<stdio.h>int main( ) { int a; printf("n Enter a number:"); scanf("%d", &a); if(a>0) { printf( "n The number %d is positive.",a); } else { printf("n The number %d is negative.",a); } return 0; }

次のプログラムは、二つの文字列を比較して、それらが等しいかどうかをチェックします。

#include <stdio.h>#include <string.h>int main( ) { char a , b; printf("n Enter the first string:"); scanf("%s",a); printf("n Enter the second string:"); scanf("%s",b); if((strcmp(a,b)==0)) { printf("nStrings are the same"); } else { printf("nStrings are different"); } return 0; }

上記のプログラムは、二つの文字列を比較して、それらが同じかどうかをチェックします。 この目的のためにstrcmp関数が使用されます。 これはstring.h ファイル内で次のように宣言されています:

int strcmp(const char *s1, const char *s2);

これは、s1が指す文字列とs2が指す文字列を比較します。 strcmp関数は、s1が指す文字列がs2が指す文字列よりも大きい、等しい、または小さいため、ゼロより大きい、等しい、または小さい整数を返します。strcmp関数は、s1が指す文字列がs2が指す文字列よりも大きい、等しい、または小さい整数を返します。strcmp関数は、s1が指す文字列が

したがって、上記のプログラムでは、2つの文字列a bが等しい場合、strcmp関数は0を返す必要があります。 それが0を返す場合、文字列は同じです。

ネストされたif文とif-else文

if-else文を一方の中に埋め込むか、入れ子にすることもできます。 ネストは、いくつかの異なるアクションコースのいずれかを選択する必要がある状況で便利です。

ネストされたif-else文の一般的な形式は次のとおりです:

if(condition1){// statement(s);}else if(condition2){//statement(s);}....else if (conditionN){//statement(s);}else{//statement(s);}

上記はif-elseはしごとも呼ばれます。 ネストされたif-else文の実行中に、trueと評価される条件が検出されるとすぐに、その特定のifブロックに関連付けられた文が実行され、ネストされたif-else文の残りの部分はバイパスされます。 どちらの条件も真でない場合、最後のelseブロックが実行されるか、elseブロックが存在しない場合、制御はelse-ifラダーの直後にある次の命令に転送されま

次のプログラムは、ネストされたif-elseステートメントを使用して、三つの数字の中で最大の数字を見つけます。

#include<stdio.h>int main( ) { int a, b,c; a=6,b= 5, c=10; if(a>b) { if(b>c) { printf("nGreatest is: " , a); } else if(c>a) { printf("nGreatest is: ", c); } } else if(b>c) //outermost if-else block { printf("nGreatest is: " , b); } else { printf( "nGreatest is: " , c); } return 0; }

上記のプログラムは、3つの整数量を比較し、最大値を出力します。 最初のif文は、a bの値を比較します。 a>bがtrueの場合、プログラム制御はifブロック内にネストされたif-elseステートメントに転送されます。bcと比較されます。 それ以外の場合は、c aの値が比較され、c>aがtrueの場合はcの値が出力されます。 b>cがtrueの場合は、 a の値が出力されます。 b>cがtrueの場合は、 a の値が出力され、c aの値が比較され、c>aがtrueの場合 この後、if-elseラダーの残りの部分はバイパスされます。

ただし、最初の条件a>bがfalseの場合、コントロールは最も外側のelse-ifブロックに直接転送され、bの値が cと比較されます(aが最大ではないため)。 b>cがtrueの場合、bの値が出力され、それ以外の場合、cの値が出力されます。 ネスト、中括弧の使用、およびインデントに注意してください。 このすべては、明快さを維持するために必要です。

: switch-caseステートメント

switchステートメントは、変数または式の値に基づいて異なるコードセグメントに分岐する複数のウェイ選択に使用されます。 この式または変数は整数データ型でなければなりません。

:

switch (expression){ case value1: code segment1; break; case value2: code segment2; break;... case valueN: code segmentN; break; default: default code segment;}

この式の値は、プログラムの実行中に生成されるか、ユーザー入力として読み込まれます。 式の値と同じ値のケースが選択され、実行されます。 省略可能なdefaultラベルは、式の値が大文字と小文字のいずれの値とも一致しない場合に実行されるコードセグメントを指定するために使用されます。

breakステートメントは、すべてのケースの最後に存在します。 そうでなければ、case値をチェックすることなく、次のcaseのコードセグメントに実行が継続されます。 たとえば、switchステートメントに5つのケースがあり、3番目のケースの値がexpressionの値と一致するとします。 3番目のケースの最後にbreak文が存在しない場合、ケース3以降のすべてのケースもケース3とともに実行されます。 Breakが存在する場合、必要なケースのみが選択されて実行され、その後、switch文の直後の次の文に制御が転送されます。 デフォルトのケースの後、コントロールはいずれかの方法でswitchの直後の次のステートメントに転送されるため、defaultの後にbreakはありません。

例:曜日を印刷するプログラム。

#include<stdio.h>int main( ) { int day; printf("nEnter the number of the day:"); scanf("%d",&day); switch(day) { case 1: printf("Sunday"); break; case 2: printf("Monday"); break; case 3: printf("Tuesday"); break; case 4: printf("Wednesday"); break; case 5: printf("Thursday"); break; case 6: printf("Friday"); break; case 7: printf("Saturday"); break; default: printf("Invalid choice"); } return 0; }

これは、switch-case構造の動作を説明する非常に基本的なプログラムです。 ユーザーが入力した番号に応じて、適切なケースが選択されて実行されます。 たとえば、ユーザー入力が5の場合、ケース5が実行されます。 ケース5に存在するbreak ステートメントは、ケース5の後にswitchステートメントの実行を一時停止し、コントロールはswitch後の次のステートメントに転送されます。:

return 0;

switch文のケース内に複合文を埋め込むこともできます。 これらの複合文には、制御構造が含まれている場合があります。 したがって、ケースの中にそれを埋め込むことによってネストされたスイッチを持つことも可能である。

switch-case文を使用して記述されたすべてのプログラムは、if-else文を使用して記述することもできます。 しかし、関係式と論理式の組み合わせを含む可能性のある単純または複雑な条件を評価した後に何らかのアクションを実行する必要がある場合には、if文を使用することは、プログラミング上理にかなっています(例:(if((a!=0)&&(b>5)))。

大量の値のグループから選択する必要がある場合、switch文はネストされたifsのセットよりもはるかに高速に実行されます。 スイッチは、スイッチ内のifとは異なり、等価性をテストすることしかできませんが、ifは任意のタイプのブール式を評価できます。

switch文は、与えられた選択肢のセットから選択する必要がある場合に使用する必要があります。 Switch case文は、通常、メニューベースのアプリケーションで使用されます。 Switch-case文の最も一般的な使用法は、データ処理またはファイル処理です。 ファイル処理のほとんどには、共通の関数が含まれます: ファイルの作成、レコードの追加、レコードの削除、レコードの更新、ファイル全体またはいくつかの選択的なレコードの印刷。 次のプログラムは、switch case文がデータ処理でどのように使用されるかを示しています。 ポインタ、構造体、共用体などの高度な概念を学んだ後にのみ、Cでファイル処理を議論できるため、ファイル処理のコードは含まれません。

例:データファイル処理で使用されるswitch case文。

#include<stdio.h>int main() { //create file &set file pointer . int choice; printf("n Please select from the following options:"); printf("n 1. Add a record at the end of the file."); printf("n 2. Add a record at the beginning of the file:"); printf("n 3. Add a record after a particular record:"; printf("nPlease enter your choice:(1/2/3)?"); scanf("%d",&choice); switch(choice) { case 1: //code to add record at the end of the file break; case 2: //code to add record at the beginning of the file break; case 3: //code to add record after a particular record break; default: printf("n Wrong Choice"); } return 0; }

上記のswitch-caseの例では、一般に、do-whileのような反復構造の中にswitch-case構造をネストすることが含まれています。 Nexの投稿では、これらの反復文について説明します。

Leave a Reply