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;
}