ゼロベースC言語の分岐構造とループ構造

1. 支店構造

1.if文

2.if-else文

3. 複数の if-else ステートメント

4. ネストされた if-else ステートメント

2. サイクル構造

1. while ループ

2.do-whileループ

for ループ

3つのループ構造の比較

ループ構造内の複数のループ

3. ステートメントの終了

1.breakステートメント

2. continueステートメント

4. 支店構造

1. switch ステートメント

5、goto文

6. マルチインスタンステスト

———————————————————————————————————————————
1.支部構成
1.
if 文の基本構造:
if 文は条件を判定し、条件が真の場合は{}実行中の文が実行され、そうでない場合は実行されません。
if ステートメントの構文は次のとおりです。

if(表达式)
{
    
    
	执行代码块;
}

注:最後にセミコロンを付けずに、if()その後ろに直接{}
2. if-else 文を
追加します if-else 文は条件を判定し、条件が true の場合は 1 つの演算を実行し、条件が true の場合は別の演算を実行します。
if-else ステートメントの構文は次のとおりです。

if(表达式)
{
    
    
	语句1}
else
{
    
    
	语句2}

注:
(1) if() の後にセミコロンはありません。誤って末尾にセミコロンを追加すると、文法エラーが発生し、エラー メッセージが else を指します: 違法な else、一致する if ( 2) if と
else の後に文が 1 つしかない場合、{}文が2つある場合は必ず追加してください{}中括弧を追加すると、if または else の制御範囲を明確に示すことができます。
3. 複数の if-else 文
複数の if-else 文は式の値を順番に判定し、式の値が true の場合は式に対応する演算を実行し、そうでない場合は else に対応する演算を実行します。
複数の if-else ステートメントの構文形式は次のとおりです。

if(表达式1{
    
    
	语句1}
else if(表达式2{
    
    
	语句2}
……
else if(语句m)
{
    
    
	语句m;
}
else
{
    
    
	语句n;
}

注: 式が true の場合、分岐構造の他のステートメントは下方向に実行されません。
4. ネストされた if-else ステートメント
通常、if-else ステートメントは別の if-else ステートメント内に配置され、ネストされた if-else ステートメントを形成します。
ネストされた if-else ステートメントの構文形式は次のとおりです。

if(表达式1{
    
    
	if(表达式2{
    
    
		语句2}
	else
	{
    
    
		语句3}
}
else
{
    
    
	语句4}

2. ループの構造
C 言語では、アクションを繰り返し実行することをループと呼びますが、C 言語では繰り返しの処理を実現するためのループ文が用意されています。C 言語では、各ループに制御式があり、ループ本体が実行されるたびに制御式が評価され、式がゼロ以外の場合、ループは実行を続けます。C言語のループ文には、while文、do文、for文の3種類があります。while ループはループ本体を実行する前に制御式をテストし、do ループはループ本体の実行後に制御式をテストします。for ループは反復回数を指定するループに非常に適しています。
1. while ループ
while ループは、特定の条件が true の場合に繰り返し演算を実行するのに適しているため、while ステートメントが最もシンプルで使いやすいです。
while ステートメントの一般的な形式は次のとおりです。

while(表达式)
{
    
    
	循环体语句;
}

機能: 式の値が0以外の場合、ループ本体文を繰り返し実行します。
実行処理:まず括弧内の式の値を計算し、その値が0でない場合はループ本体のステートメントを実行し続け、式を判定します。このプロセスは、式が 0 と評価されるまで続きます。
次に、while ループを使用した古典的な質問を見てみましょう。
/*プログラム: while ループを使用して 10 個の整数の合計を見つけます*/

#include<stdio.h>
int main(void)
{
    
    
	int i,number,sum;/*number用来暂存读入的整数,sum存储累加和*/
	sum=0;/*sum赋值为0*/
	i=1/*循环变量i赋值为1*/
	printf("请输入10个整数:\n");
	while(i<=10)   /*循环条件是i不大于10*/
	{
    
    
		scanf("%d",&number);/*读入一个整数存入number*/
		sum+=number;/*number累加到变量sum中*/
		i=i+1;/*循环变量i增加1,也可以写成i++*/
	}
	printf("累加和为:%d\n",sum);/*输出累加和*/
	return 0}

注:
(1) コンピュータの浮動小数点数は近似値にすぎないため、浮動小数点数をループ制御変数として使用すると不正確な値が得られ、テストでエラーが発生する可能性があります。ループの終了条件であるため、技術的なループの制御には整数値を使用する必要があります。
(2) 制御文ヘッダで制御される内部文をインデントし、制御文の前後に空行を入れることで、プログラムに二次元の階層感を持たせることができ、プログラムの可読性が大幅に向上します。
(3) while ループのループ本体に、最終的に条件を false に変更する操作がない場合、ループは終了しません。いわゆる無限ループ (つまり、無限ループ) です。
2. do-while ループ
do-while ループは、最初にループ内の文を実行し、次に while 内の式が true かどうかを判断し、true であればループを継続し、false であればループを終了します。ループ。したがって、do-while ループはループ ステートメントを少なくとも 1 回実行する必要があります。
do-while ステートメントの一般的な形式は次のとおりです。

do
{
    
    
	语句1}while(表达式);//切记,这里有分号。

注: do-while ステートメントを使用する場合は、while の括弧の後にセミコロンを追加する必要があります。

3. for ループ
for ループ ステートメントは、カウント制御の詳細をすべて処理でき、最も強力なループ ステートメントであり、多くのループを記述するための最良の方法です。
for ステートメントの標準形式は次のとおりです。

for(表达式1;表达式2;表达式3{
    
    
	语句;
}

実行処理:
(1) 式1を実行し、ループ変数を初期化して1回だけ実行します。
(2) 判定式 2 は、値が true (0 以外) の場合は for ループ内を実行し、その後下方向に実行し、値が false (0) の場合はループを終了します。
(3) 各ループで実行される最後の操作。ループのステップ サイズを設定し、ループ変数の値を変更すると、式 2 の真偽が変わります。
(4) ループが終了すると、プログラムは下方向に実行されます。
ほとんどの場合、上記の for ステートメントは次の while ステートメントとして表現できます。

表达式1
while(表达式2)
{
    
    
	语句;
	表达式3}

for ループ内:
(1) 式 1 は変数の初期値を制御するために使用される 1 つ以上の代入ステートメントです;
(2) 式 2 はループを終了するタイミングを決定する関係式です;
(3)式はループ変数のステップ値であり、各ループ後にループ変数がどのように変化するかを定義します。
(4) これら 3 つの部分はセミコロンで区切られており、カンマは書かないでください。
for 文の注意事項:
(1) for 文のヘッダー内の 3 つの式 (初期化、ループ継続条件、インクリメント演算) にはすべて算術式を含めることができます
。 次に例を示します。

for(i=m+1;i<=4*n;i+=n/m)

(2) 制御変数の増分は負の値になる場合があり、その場合にはループ回数が減分されます。
たとえば、次のプログラム セグメントの機能は、情報を「カウント ダウン」することです。

for(i=10;i>0;i=i-1)
{
    
    
	printf("%d ",i);
}

(3) for ステートメント内の 3 つの式はオプションです。式 2 を省略した場合、ループ継続条件は常に true とみなされ、無限ループが発生します。ループ制御変数の初期化がプログラム内の他の場所ですでに行われている場合は、式 1 を省略できます。ループ制御変数のインクリメントが for ループ本体のステートメントによって行われる場合、またはインクリメントがまったく必要ない場合は、式 3 を省略することもできます。for ループ ステートメント内のインクリメント式は、ループ本体の終わりにある単一のステートメントに置き換えることができます。
(4) 式 1 と式 3 は、単純な式またはカンマで区切られた複数の式にすることができます。

int sum,num;
for(sum=0,num=0;num<=3;num++,sum++)
{
    
    
	sum+=num;
	printf("num=%d,sum=%d\n",num,sum);
}

(5) ループのスコープが複数のステートメントである場合、それを追加して{}複合ステートメントを形成する必要があるため、初心者にとっては忘れやすく{}、間違いが発生します。
例えば:

for(i=1;i<=n;i++)
	scanf("%d",&number);
	sum+=number;

すると、次のプログラムセグメントと同等になります。

for(i=1;i<=n;i++)
{
    
    
	scanf("%d",&number);
}
sum+=number;`

ステートメント sum+=number はループ本体の外側にあります。
(6)
for ループの括弧の後に誤ってセミコロンを追加すると、空のステートメントが作成され、コンパイラはループの内容が空のステートメントであると認識します。

for(i=1;i<=n;i++)
{
    
    
	scanf("%d",&number);
	sum+=number;
}

このステートメントは次と同等です。

for(i=1;i<=m;i++)
{
    
    
	;
}
scanf("%d",&number);
sum+=number;

このステートメントはコンパイラによってループ本体として解釈され、設計者によって理解されるループ本体は、コンパイラによってループ ステートメントの後続ステートメントとして解釈され、ループ終了後は 1 回だけ実行されます。
(7) ループ制御変数は、ループの制御に使用するだけでなく、ループ本体の計算にも使用できます。ただし、for ループ内でループ制御変数の値を変更しないことをお勧めします。変更すると、隠れたエラーが発生する可能性があります。

ループ構造の 3 種類のループは
while、do-while、for を比較しますが、具体的な使用シナリオには
次のような違いがあります
。 while または do-while を使用する
(1) 1 回ループしないことが可能であれば、while ループの使用を検討してください
(2) ループが 1 つ以上ある場合は、do-while の使用を検討してください。 while ループ

ループ構造の複数ループ
複数ループはループ構造に現れるループ構造です
が、実際の開発では最大3層の複数ループが使用されます。

ループ層が増えると実行時間が長くなり、プログラムが複雑になるため、複数のループの最大 2 ~ 3 層が使用されます。さらに、異なるループをネストすることもできます。

複数のループの実行中、外側のループが親ループ、内側のループが子ループになります。

親ループが実行されると、サブループが終了するまですべてのサブループが実行されます。親ループは次回に入り、子ループは実行を続けます...

#include<stdio.h>
int main(void)
{
    
    
	int i,j,k;
	for(i=1;i<5;i++)
	{
    
    
	//观察每行空格数量,补全循环条件
		for(j=1;j<5;j++)
		{
    
    
			printf(" ");//输出空格
		}
		for(k=0;k<2*i-1;k++)
		{
    
    
			printf("*");//每行输出*号
		}
		printf("\n");//每次循环之后换行,打印下一行
	}
	return 0;
}

3. End 文
1.break 文
一般に、break 文はループを抜けたり、switch 文から早く抜け出すために使用され、break 文を実行するとプログラムは直ちにこれらの文から抜け出し、直後の次の文に移ります。 。
たとえば、運動場にランニングに行き、10周走る予定ですが、途中で気分が悪くなったら、早めにランニングを終了して休むことができます。上記の状況は、ロジックとして表現できます

for(i=1;i<=10;i++)
{
    
    
	if(感到身体不适)
	break;
}

文を使用する場合はbreak以下の点に注意してください
。 1. ループ構造がない場合、単一の if-else 文内で Break を使用することはできません。
2. 複数のループでは、break ステートメントはループの 1 レベルからのみジャンプでき、現在のループになることができます。

2. Continue ステートメント
continue ステートメントを使用すると、ループ本体の現在の実行を中断し (つまり、ループ本体内で実行されていないステートメントをスキップし)、ループの新しいラウンドを直ちに開始します。
Break ステートメントと continue ステートメントの違いは、
break ステートメントは現在のループ全体から飛び出すこと、そして continue ステートメントはこのループを終了して次のループを開始することです。

4. 分岐構造
1. switch 文
問題が多数の分岐 (通常は 3 つ以上) を処理する必要がある場合、プログラム設計を簡素化するために、通常、条件文の代わりに switch 文が使用されます。switch ステートメントは多方向スイッチに似ており、プログラム制御フローを複数の分岐から形成し、式のさまざまな値に応じて 1 つまたは複数の分岐を選択して実行します。C言語のswitch文はswitch文とも呼ばれます。
switch ステートメントの最も一般的な形式は次のとおりです。

switch(表达式)
{
    
    
	case 常量表达式1:语句序列1 break;
	case 常量表达式2:语句序列2 break;
	……
	case 常量表达式n:语句序列n break;
	default : 语句序列 n+1
}

switch ステートメントは、複数分岐の if ステートメントよりも読みやすい傾向があります。さらに、switch ステートメントは、特に決定する条件が多い場合、if ステートメントよりも高速に実行される傾向があります。
注:
(1) ケース後の各定数式の値は同じであってはなりません。そうでない場合はエラーが発生します。
(2) ケースの後、ブレークがない場合は、前にブレークが発生するまで実行を続けます。 switch ステートメントからの飛び出し
(3) switch 後 の式ステートメントは、整数型または文字型のみにすることができます。
(4) case の後には、文{}を囲まずに複数の文を記述できます
。 (5) 各 case とdefault 文の順序は、プログラムの実行結果に影響を与えることなく変更できます。
(6)default文は省略可能です。
switch と if ステートメントの適用により、
年間の日が計算されます。

#include<stdio.h>
int main(void)
{
    
    
	int date=0;
	int year=2008;
	int month=8;
	int day=8;
	switch(month)
	{
    
    
		case 12 :date+=30;
		case 11 :date+=31;
		case 10 :date+=30
		case 9 :date+=31
		case 8 :date+=31
		case 7 :date+=30
		case 6 :date+=31
		case 5 :date+=30
		case 4 :date+=31
		case 3 :
		if(year%4==0&&year%100!=0||year%400==0)
		{
    
    
			date+=29;
		}
		else
		{
    
    
			date+=28;
		}
		case 2:date+=31;
		case 1:date+=day;
		printf("%d年%d月%d日是该年的第%d天“,year,month,day,date);
		break;
		default:
		printf("error");
		break;
	}
	return 0;
}

5、goto文
C言語のgoto文は無条件分岐文であり、関数内の任意のラベル付き文にジャンプできます。goto ステートメントは、loop ステートメントの前身である古いステートメントです。コンピュータ開発の初期の頃、プログラムは複数のステートメント + ステートメント ラベル + ジャンプ ステートメントで構成されていました。
goto ステートメントの形式

goto 语句标号;

ステートメント ラベル: ステートメント ラベルは、プログラム内の特定の場所を識別する識別子とコロンで構成され、通常は実行可能ステートメントの左側に配置されます。
機能: プログラムを指定された位置に変換して実行を継続します。
goto ステートメントはどのようにループを実装するのでしょうか? 例として、1 ~ 100 の累積合計を考えます。

sum=0,i=1;
loop:sum=sum+1;
i++;
if(i<=100)//如果i<=100,跳转到loop处,从而实现循环
	goto loop;
printf("%d\n",sum);

goto ステートメントは、主にプログラムの構造を破壊し、読みにくく、隠れた危険をもたらしやすいため、通常は使用されません。ただし、複数のループ、または switch ステートメントを含むループを終了する必要がある場合は、goto ステートメントを使用する方が合理的です。

以上、C言語のブランチ構造とループ構造の説明でしたが、これからC言語を学習する方の参考になれば幸いです。ことわざにあるように、実践こそが真実をテストするための唯一の基準です。この記事の理解をさらに深めるために、ブランチ構造とループ構造に関するいくつかのトピックを自分で書いてみていただければ幸いです。皆さんも何かを学びましょう!私のことを好きな友達が注目してたくさんコメントしてくれると嬉しいです、ありがとうございます!

おすすめ

転載: blog.csdn.net/z2004cx/article/details/128196808