C言語学習(5)サイクル

1. サイクル

1.1 定義

プログラムでは、特定のコードが条件が満たされるまでループで繰り返し実行され、条件が満たされると終了しますが、この部分のコードはループ構造に含まれます。

1.2 循環分類

C 言語には、for ループ、while ループ、do...while() ループという 3 つの主なタイプのループがあります。以下、詳しく説明する。

1、for()循环
2、while()循环
3、do...while()循环 

1.3 真偽の判定

サイクルを紹介する前に、まずC言語における真偽の判定について説明します。ループは条件が真の場合にループを終了するため、真か偽の判断を知ることは非常に重要です。C言語の場合:

1、非零即真
2、0为假

1.3.1 C言語におけるtrueとfalseの例

#include <stdio.h>


int main(){
    
    

    int num1 = 5;   // 5为非零数,则为真。-5时同样的结果
    int num2 = 0;   // 为0则为假

    int num3 = num1 && num2;    // 逻辑与同为真时则为真,有一个为假则为假,所以结果为 0
    int num4 = num1 || num2;    // 逻辑或同为假时则为假,有真则为1,所以输出结果为 1
   
   printf("%d\n", num3);  // 结果为:0
   printf("%d", num4);  // 结果为:1

    return 0;
}

2、for () ループ

2.1 文法

for(exp1; exp2; exp3){
		statement
}

for ループの後の括弧内には、セミコロンで区切られた 3 つの式があります。の:

1、表达式1是初始化,只会在for循环开始时执行一次。
2、表达式2是测试条件,在执行循环之前对表达式求值。如果表达式为假,则循环结束。
3、表达式3是执行更新,在每次循环结束时求值。

2.2 サンプルプログラム

2.2.1 ループ加算 1 ~ 10

# include <stdio.h>

int main(void)
//1-10的加法
{
    
    
	int i; // 定义i变量
	int sum = 0;	// 定义并初始化求和结果的变量
	for (i = 1; i <= 10; i++)//i=1为初始化i变量的值,i<=10为测试条
	//件,在本例中当i=11时,表达式2为假,则跳出循环。i++为执行循环的更新
	//条件,执行一次循环,i+1
		sum = sum + i;
	printf("sum = %d", sum);
	return 0;
}

2.2.2 for ループで 1 ~ 10 の奇数の和を求める

# include <stdio.h>

int main(void)
{
    
    
	int i;
	int sum = 0;
	// 同上,当表达式3为i+=2时,循环每次的更新条件为i+2,就会过滤掉偶
	// 数,从而奇数相加
	for (i = 1; i <= 10; i+=2)
			sum = sum + i;
	printf("sum = %d", sum);
	return 0;
}

2.2.3 1 ~ 100 の 3 で割り切れる合計を求める For ループ

# include <stdio.h>

int main(void)
{
    
    
	int i;
	int sum = 0;
	for (i = 1; i <= 100; ++i)
	// if判断1-100之间的数,只有能被3整除时,才会被相加
		if (i % 3 == 0)
			sum = sum + i;
		printf("sum = %d\n", sum);
	return 0;
}

2.2.4 for ループは、1 ~ 100 の奇数の合計、奇数の数、奇数の平均値を計算します。

#include <stdio.h>

// 求1-100之间的奇数之和,奇数的个数,奇数的平均值
int main(void)

{
    
    
	int i, j = 0, sum_j = 0;
	float aver_j;
	for (i = 1; i <= 100; ++i)
		if (i % 2 != 0)
		{
    
    
			sum_j = sum_j + i;
			j++;
			aver_j = sum_j / j;
		}
		printf("奇数个数为:%d 奇数之和为:%d 平均值为:%f\n", j, sum_j, aver_j);
}

2.2.2 1+1/2+...+1/100 を見つけるための for ループ

#include <stdio.h>

int main(void)
// 1+1/2+...+1/100
{
    
    
	int i;
	float sum = 0;
	for (i = 1; i <= 100; ++i)
	{
    
    
		sum = sum + 1 / (float)(i);//也可以写为sum = sum + 1.0/ i 
	}
	printf("%f\n", sum);
	return 0;
}

2.3 for ループのネスト

for ループは for ループ内にネストされており、ネストされた for ループを構成します。
構造例:

for (int i = 0; i < count; i++) // 外层for循环
{
    
    
    for (int j = 0; j < count; j++)	//内层for循环
    {
    
    
        /* code */
    }   
}

2.3.1 forループネスト印刷乗算表

#include <stdio.h>

int main(){
    
    

int i, j;

for (int i = 1; i < 10; i++)    // 外层循环
{
    
    
    for (int j = 1; j <= i ; j++)   // 内层循环
    {
    
    
        printf("%d * %d = %d\t", i, j, i*j);
    }
     printf("\n");
}
    return 0;
}

3、while () ループ

3.1 文法

while ( expression){
		statement
}

1、statement部分可以是分号结尾的简单语句,也可以是花括号括起来的符合语句
2、如果expression为真,执行statement部分一次,然后再次判断expression。在expression为假之前,循环的判断和执行一直重复执行。每一次的循环称为一次迭代
3、while循环有一点非常重要:在构建while循环时,必须让测试表达式有所变化,表达式最终为假,否则,循环就不会终止。

3.2 サンプルプログラム

3.2.1 while ループの合計は 1 ~ 100

#include <stdio.h>

int main(void)

{
    
    
	// 定义自增变量
	int i = 1;
	// 定义求和结果变量
	int sum = 0;
	// while循环
	while (i < 101)
	{
    
    
		sum = sum + i;
		// 自增变量
		++i;
	}
	printf("sum = %d", sum);
	return 0;
}

3.3 for と while の間の変換

for(exp1; exp2; exp3){
    
    
	statement
}

等价于:


exp1;
while(exp2){
    
    
	statement;
	exp3;
}

While と for は相互に変換できますが、for の方が論理的でエラーが発生しにくいため、for more を使用することをお勧めします。

4. do...while() ループ

for ループと while ループはどちらも開始条件付きループです。つまり、ループの各反復の前にテスト条件がチェックされるため、ループ本体の内容がまったく実行されない可能性があります。C 言語には、ループの各反復後にテスト条件をチェックする終了条件ループもあります。これにより、ループ本体の内容が少なくとも 1 回実行されることが保証されます。このループは do...while ループと呼ばれます。

4.1 文法

do
{
    
    
	statement;
}while(expression);

4.2 サンプルプログラム

4.2.1 入力した数値が正しいか確認する

#include <stdio.h>

int main(){
    
    

// 定义并初始化只读变量
const int secret_code = 11;
// 定义输入的变量
int enter_code;

do
{
    
    
	// 先打印输出语句
    printf("please enter secret code:");
    // 接收键盘输入的数字
    scanf("%d", &enter_code);
    // 判断输入的数字是否和规定的相同,如果不相同,执行循环,如果相同,打印输出内容
} while (secret_code != enter_code);
printf("Congulation!");
    return 0;
}

do...while は for と同等ではなく、while と同等でもありません。

5、休憩して継続する

一般に、プログラムがループに入ると、次のループ テストの前にループ本体内のすべてのステートメントが実行されます。continue と Break は、ループ本体内のテスト結果に従ってループの内容の一部を無視したり、ループを終了したりすることもできます。

5.1ブレイク

プログラムがループ内の Break ステートメントまで実行されると、それを含むループが終了し、プログラムの次のステージが実行されます。

5.1.1 サンプルプログラム

#include <stdio.h>

int main(){
    
    

int ret = 3;

for(int i = 0; i < 5; i++){
    
    
	// 判断i的值是否等于ret,如果等于则跳出循环
    if (i == ret)
    {
    
    
        break;  
    }
    printf("hello world\n");  // 输出三句hello world
}
    return 0;
}

5.1.2 注意事項

1、break如果用于循环是用来终止循环。
2、break如果用于switch,则是用来终止switch。
3、break不能直接用于if,除非if属于循环内部的一个子句。
4、在多层循环嵌套中,break只能终止距离它最近的循环。

ここに画像の説明を挿入
ここに画像の説明を挿入

5.2 続行

3 つのループはすべて continue ステートメントを使用できます。このステートメントが実行されると、現在の反復の残りの部分がスキップされ、次の反復が開始されます。continue ステートメントがループ内にネストされている場合、そのステートメントを含む内側のループのみが影響を受けます。

5.2.1 プログラム例

#include <stdio.h>

int main(){
    
    

for(int i = 0; i <= 5; i++){
    
    
   
	// 当i等于3时,跳过i=3的本次循环
    if (i == 3)
    {
    
    
        continue;
    }
    printf("i=%d hello world\n", i);
    }
    return 0;
}

// 输出结果:
// i=0 hello world
// i=1 hello world
// i=2 hello world
// i=4 hello world
// i=5 hello world

5.2.2 while サンプルプログラム

#include <stdio.h>

int main(){
    
    

int i = 0;

while (i < 5)
{
    
    
	// 当i=3时跳过本次循环,但注意,在跳过之前需要将i+1,
	// 否则i会始终等于3,而不能退出循环
    if (i == 3){
    
    
        i++;
        continue;        
    }     
    printf("i=%d Hello world\n", i);
    i++;
}
    return 0;
}

おすすめ

転載: blog.csdn.net/qq_46292926/article/details/127568810