基礎ゼロで C 言語をプレイする 第 1 章 - ブランチ文

皆さんこんにちは、深魚です〜

目次

序文:

1. 文とは何ですか?

2. 分岐文(選択構造)

2.1 if ステートメント

2.1.1 他をぶら下げる

2.1.2 ifの書き方の比較

2.1.3 演習

2.2 switch ステートメント

 2.2.1 switch ステートメント内のbreak ステートメントとdefault ステートメント

2.2.2 演習

結論:向こう側にはまだ栄光があり、若者は長い年月を恐れていない


序文:

今日は、分岐ステートメントに関連する内容を学習することに焦点を当てます。分岐ステートメントについては誰もがよく知っているはずですが、まだ知らない知識があるはずです。私の言うことが信じられない場合は、見てください。

1. 文とは何ですか?

C 言語のステートメントは次の 5 つのカテゴリに分類されます。

(1)式ステートメント                       3+5;                
(2)関数呼び出しステートメント                    printf("hehe\n");    
(3)空ステートメント:                            ;      

場合によってはステートメントが必要になりますが、このステートメントでは何もする必要はなく、空のステートメントを使用できます。   

(4)制御文: プログラムの実行フローを制御するために使用されます。

次の 3 つのカテゴリに分類できます。

<1>分岐文(条件判定文):if文、switch文

<2> ループ文:do while文、while文、for文

<3> Turn to 文:break 文、goto 文、 continue 文、return 文

(5)複合文

2. 分岐文(選択構造)

2.1 if ステートメント

文法構造: C 言語: 0 は false を意味し、0 以外は true を意味します

if (式) if (式) //複数分岐 if (式 1)

     ステートメント; ステートメント 1; ステートメント 1;

                                 else else if(式2)

                                     ステートメント 2; ステートメント 2;

                                                                                       それ以外

                                                                                            ステートメント 3;

コードデモ:
単一ブランチ:

//单分支
#include<stdio.h>
int main()
{
	//如果年纪大于18输出成年人
	int age = 0;
	//输入
	scanf("%d", &age);
	//判断
	if (age >= 18)
		printf("成年人\n");
	return 0;
}

二重分岐: else の後に式が続かないことに注意してください

//双分支
#include<stdio.h>
int main()
{
	//如果年龄大于等于18-成年人,否则打印-未成年人
	int age = 0;
	//输入
	scanf("%d", &age);
	//判断
	if (age >= 18)
		printf("成年人\n");
	else
		printf("未成年\n");
	return 0;
}

マルチブランチ: 各ブランチは相互に排他的であるため、18-30 は 18 より大きいため、次のように記述する必要はありません。

//age<18  - 未成年
//18~30   - 青年
//31~50   - 中年
//51~70   - 中老年
//71~99   - 老年
//>99     - 老寿星
#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("未成年\n");
	else if (age <= 30)
		printf("青年\n");
	else if (age <= 50)
		printf("中年\n");
	else if (age <= 70)
		printf("中老年\n");
	else if (age <= 99)
		printf("老年\n");
	else
		printf("老寿星\n");
	return 0;
}

注: (1) C言語で18<年齢<30を表現したい場合、どのように表現すればよいか:数学のように直接書くことはできず、C言語には連結というものはありません。

if(age>18&&age<30)

(2) デフォルトでは 1 つのステートメントしか制御できない場合、複数のステートメントを実行したい場合は、 {}を追加する必要があります。

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
	{//代码块
		printf("成年了\n");
		printf("谈恋爱\n");
	}
	return 0;
}

2.1.1 他をぶら下げる

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hehe\n");
	else
			printf("haha\n");

	return 0;
}

このプログラムの結果がどうなるかわかりますか?

実際には、else の一致ルールが最も近い if に一致するため、何も出力されません。

これは、コード スタイルが非常に重要であることを示しています。コードのロジックをより明確にするために、{} を適切に使用できます。
 

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
	{
		if (b == 2)
			printf("hehe\n");
		else
			printf("haha\n");
	}
	return 0;
}

このコードのロジックを明確に理解するには、これを次のように変更します。

2.1.2 ifの書き方の比較

if(condition)
 { 
     return x;
 }
return y;

このコードを解析して、条件が満たされた場合は x を返すか、条件が満たされない場合は y を返すかを考えてください。

答えは「はい」ですが、そのロジックを知るには、そのようなコードについて考える必要があります。

if(condition)
 { 
     return x;
 }
else
{
     return y;
}

このようにして、改善のロジックを明確に知ることができます

別のコードを見てみましょう

#include <stdio.h>
int main()
{
	int a = 10;
	if (a == 5)
		printf("hehe\n");

	return 0;
}

5 行目は、初心者にとって = と == の違いが分からない可能性が高いため、if の後の式の後に = を使用することがよくあります。

まず、= と == の違いを見てみましょう。

=代入記号               例:a=5、a に 5 を代入することを意味します

==等しいかどうかの判定 例: a==5 は、a と 5 が等しいかどうかを判定します。

 ==は等しいかどうかを判断するものなので左右の位置には影響しないので、タイプミスを防ぐために

 if(5==a)

2.1.3 演習

(1) 数値が奇数かどうかを判断する

#include<stdio.h>
int main()
{
	int number = 0;
	scanf("%d", &number);
	if (number % 2 == 1)
		printf("是奇数\n");
	else
		printf("不是奇数\n");
	return 0;
}

(2) 1~100の奇数を出力

方法 1:

#include<stdio.h>
int main()//输出1-100之间的奇数
{
	int i = 0;
	for (i = 1; i <= 100; i++)
	{
		//判断并输出
		if (i % 2 == 1)
			printf("%d ", i);//记得加一个空格隔开
	}
	return 0;
}

方法 2: 1 は奇数で、次の奇数に 2 を加算します (直接 i=i+2)。

#include<stdio.h>
int main()//输出1-100之间的奇数
{
	int i = 0;
	for (i = 1; i <= 100; i = i + 2)
	{
		printf("%d ", i);//记得加一个空格隔开
	}
	return 0;
}

2.2 switch ステートメント

switch ステートメントも分岐ステートメントですが、多くの場合は複数分岐の状況になります (これにより、if..else if...else if.. 形式が回避されます)。

例えば:

switch ステートメントの構造は次のとおりです。

switch(整数式)
{

       case 整数定数式:

                       文;

}

 : switch ステートメントでは、 case と switch は必ずしも int 型である必要はなく、 char、short、long 型にすることもできますが、 double、float 型は使用できません。

 2.2.1 switch ステートメント内のbreak ステートメントとdefault ステートメント

Break は switch ステートメントが分岐ステートメントから飛び出した効果を実現し、switch ステートメントを Break とともに使用して実際の分岐を実現できます。

例えば:

#include<stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("星期1\n");
		break;
	case 2:
		printf("星期2\n");
		break;
	case 3:
		printf("星期3\n");
		break;
	case 4:
		printf("星期4\n");
		break;
	case 5:
		printf("星期5\n");
		break;
	case 6:
		printf("星期6\n");
		break;
	case 7:
		printf("星期天\n");
		break;
	}
	return 0;
}

でももしあなたが欲しければ

1. 1~5を入力、「平日」を出力

2. 6~7を入力、「weedend」を出力

 コードは以下のように表示されます。

#include<stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("weekday\n");
		break;
	case 6:
	case 7:
		printf("weekend\n");
		break;
	default:
		printf("选择错误\n");
		break;
	}
	return 0;
}

入力値がすべての case ラベルの値と異なる場合は、default ステートメントを直接入力します。各 switch ステートメントに出現できるのは 1 つのデフォルト節のみであり、default 節はステートメント リストのどこにでも出現できることに注意してください。

プログラミングの良い習慣: 最後の case ステートメントとdefault ステートメントの後に Break ステートメントを追加します。

2.2.2 演習

質問:次のコードの結果は何ですか?

#include <stdio.h>
int main()
{
	int n = 1;
	int m = 2;
	switch (n)
	{
	case 1:
		m++;
	case 2:
		n++;
	case 3:
		switch (n)
		{//switch允许嵌套使用
		case 1:
			n++;
		case 2:
			m++;
			n++;
			break;
		}
	case 4:
		m++;
		break;
	default:
		break;
	}
	printf("m = %d,n = %d\n", m, n);
	return 0;
}

答え: m=5、n=3

分析:最初に n=1、m=2、次に switch ステートメント、n=1 を入力、ブレークがないため case1、m=3 を直接入力、続けて case2、n=2 を入力、その後ブレークがありません。 n=2 であるため case3 を入力し続け、case2、m=4、n=3 を入力し、小さな switch ステートメントから抜け出します。case3 にはブレークがないため、case4、m=5 を入力し続け、ステートメントから直接ジャンプします。ブレークに遭遇したときに大きな switch ステートメントを実行し、最終的に m= 5、n=3 を出力します。

結論:向こう側にはまだ栄光があり、若者は長い年月を恐れていない

著者の文章が大丈夫だと思ったとき、または少し得したと感じたときは、ワンクリックトリプルリンクにご協力ください、ありがとうございます 

おすすめ

転載: blog.csdn.net/qq_73017178/article/details/131761276