C 语言编程教程

C 语言 - 首页

C 语言基础

C 语言 - 概述 C 语言 - 特性 C 语言 - 发展历史 C 语言 - 环境设置 C 语言 - 程序结构 C 语言 - Hello World C - 编译过程 C - 注释 C - 标记 C - 关键字 C - 标识符 C - 用户输入 C - 基本语法 C - 数据类型 C - 变量 C - 整数提升 C - 类型转换 C - 类型转换 C - 布尔值

C 语言中的常量和文字

C - 常量 C - 字面量 C - 转义序列 C - 格式说明符

C 语言中的运算符

C - 运算符 C - 算术运算符 C - 关系运算符 C - 逻辑运算符 C - 位运算符 C - 赋值运算符 C - 一元运算符 C - 递增和递减运算符 C - 三元运算符 C - sizeof 运算符 C - 运算符优先级 C - 其他运算符

C 语言中的决策

C - 决策 C - if 语句 C - if...else 语句 C - 嵌套 if 语句 C - switch 语句 C - 嵌套 switch 语句

C 语言中的循环

C - 循环 C - While 循环 C - For 循环 C - Do...while 循环 C - 嵌套循环 C - 无限循环 C - Break 语句 C - Continue 语句 C - goto 语句

C 语言中的函数

C - 函数 C - Main 函数 C - 按值调用函数 C - 按引用调用函数 C - 嵌套函数 C - 可变参数函数 C - 用户定义函数 C - 回调函数 C - return 语句 C - 递归

C 语言中的作用域规则

C - 作用域规则 C - 静态变量 C - 全局变量

C 语言中的数组

C - 数组 C - 数组的属性 C - 多维数组 C - 将数组传递给函数 C - 从函数返回数组 C - 可变长度数组

C 语言中的指针

C - 指针 C - 指针和数组 C - 指针的应用 C - 指针运算 C - 指针数组 C - 指向指针的指针 C - 将指针传递给函数 C - 从函数返回指针 C - 函数指针 C - 指向数组的指针 C - 指向结构体的指针 C - 指针链 C - 指针 vs 数组 C - 字符指针和函数 C - NULL 指针 C - void 指针 C - 悬垂指针 C - 解引用指针 C - Near、Far 和 Huge 指针 C - 指针数组的初始化 C - 指针与多维数组

C 语言中的字符串

C - 字符串 C - 字符串数组 C - 特殊字符

C 语言的结构体和联合

C - 结构体 C - 结构体和函数 C - 结构体数组 C - 自引用结构 C - 查找表 C - 点 (.) 运算符 C - 枚举(或 enum) C - 结构填充和打包 C - 嵌套结构 C - 匿名结构和联合 C - 联合 C - Bit 位字段 C - Typedef

C 语言中的文件处理

C - 输入和输出 C - 文件 I/O(文件处理)

C 语言中的预处理器

C - 预处理器 C - #pragma 编译指示 C - 预处理器操作符 C - 宏 C - 头文件

C 语言中的内存管理

C - 内存管理 C - 内存地址 C - 存储类

C 其他主题

C - 错误处理 C - 可变参数 C - 命令执行 C - 数学函数 C - static 静态关键字 C - 随机数生成 C - 命令行参数

C 语言编程资源

C语言问题与解答答案 C语言快速指南 C语言速查表 C语言实用资源 C语言讨论


C 语言中的 For 循环

包括 C 语言在内的大多数编程语言都支持使用 for 关键字来构造循环。在 C 语言中,其他与循环相关的关键字包括 whiledo-while。与其他两种循环不同,for 循环被称为自动循环,通常是程序员的首选。

for 循环 是一种入口控制循环,它会执行语句直到满足给定条件。所有元素(初始化、测试条件和增量)都放在括号内,并使用 for 关键字组合在一起,形成一个 for 循环

for 循环的语法

C 语言中 for 循环的语法为 -

for (init; condition; increment){
    statement(s);
}

For 循环的控制流

以下是"for"循环中的控制流 -

首先执行 init 步骤,并且只执行一次。此步骤允许您声明和初始化任何循环控制变量。此处无需添加任何语句,只要出现分号即可。

接下来,评估条件。如果条件为真,则执行循环体。如果条件为假,则不执行循环体,控制流跳转到紧邻"for"循环之后的下一个语句。

执行完"for"循环体后,控制流跳转回增量语句。此语句允许您更新任何循环控制变量。此语句可以留空,只要条件后出现分号即可。

现在再次评估条件。如果条件为真,则执行循环,并重复该过程(循环体,然后增量步骤,然后再次执行条件)。当条件变为假时,"for"循环终止。

for 循环流程图

以下流程图展示了 for 循环的工作原理 -

For 循环

当开发人员事先知道需要执行多少次迭代时,他们更喜欢使用 for 循环。它可以被认为是 whiledo-while 循环的简写,用于递增和测试循环变量。

for 循环可以以不同的形式使用。让我们了解 for 循环在不同情况下的工作原理。

示例:基本 for 循环

这是 for 循环的最基本形式。请注意,括号内的所有三个子句(位于 for 关键字前面)都是可选的。

#include <stdio.h>

int main(){
   int a;

   // for 循环执行
   for(a = 1; a <= 5; a++){
      printf("a: %d
", a);
   }

   return 0;
}

输出

运行代码并检查其输出 −

a: 1
a: 2
a: 3
a: 4
a: 5

在循环语句前初始化 for 循环计数器

初始化步骤可以放在 for 循环头的上方。在这种情况下,init 部分必须用分号留空。

示例

#include <stdio.h>

int main(){
   int a = 1;

   // for 循环执行
   for( ; a <= 5; a++){
      printf("a: %d
", a);
   }
   return 0;
}

输出

您仍然会得到相同的输出 -

a: 1
a: 2
a: 3
a: 4
a: 5

在 for 循环体内更新循环计数器

您也可以用一个空语句代替 increment 子句。但是,您需要将 increment 语句放在循环体内,否则它会变成无限循环

示例

#include <stdio.h>

int main(){

   int a;

   // for 循环执行
   for(a = 1; a <= 5; ){
      printf("a: %d
", a);
      a++;
   }
   return 0;
}

输出

此处,您将获得与上例相同的输出 -

a: 1
a: 2
a: 3
a: 4
a: 5

在 for 循环体中使用测试条件

您也可以省略括号中测试条件的第二个子句。在这种情况下,您需要使用 break 语句 终止循环,否则循环将无限运行。

示例

#include <stdio.h>

int main(){
   int a;

   // for 循环执行
   for(a = 1; ; a++){
      printf("a: %d
", a);
      if(a == 5)
      break;
   }
   return 0;
}

输出

执行此代码后,您将获得以下输出 -

a: 1
a: 2
a: 3
a: 4
a: 5

使用 for 循环和多个计数器

一个 for 语句中可以初始化多个变量和/或包含多个递增语句。但是,只能有一个测试条件。

示例

#include <stdio.h>

int main(){
   int a, b;

   // for 循环执行
   for(a = 1, b = 1; a <= 5; a++, b++){
      printf("a: %d b: %d a*b: %d
", a, b, a*b);
   }

   return 0;
}

输出

运行此代码时,将产生以下输出 -

a: 1 b: 1 a*b: 1
a: 2 b: 2 a*b: 4
a: 3 b: 3 a*b: 9
a: 4 b: 4 a*b: 16
a: 5 b: 5 a*b: 25

for 循环中的减量

您也可以构造一个递减的 for 循环。在这种情况下,循环变量的初始值大于其在测试条件中的值。for 语句中的最后一个子句使用了递减运算符。

示例

以下程序按降序打印数字 5 到 1 -

#include <stdio.h>
int main(){
   int a;

   // for 循环执行
   for(a = 5; a >= 1; a--){
      printf("a: %d
", a);
   }

   return 0;
}

输出

运行代码并检查其输出 −

a: 5
a: 4
a: 3
a: 2
a: 1

使用 for 循环遍历数组

For 循环 非常适合一次遍历数组中的一个元素。请注意,数组中每个元素的索引从"0"开始递增。

示例

#include <stdio.h>

int main(){
   int i;
   int arr[] = {10, 20, 30, 40, 50};

   // for 循环执行
   for(i = 0; i < 5; i++){
      printf("a[%d]: %d
", i, arr[i]);
   }

   return 0;
}

输出

运行此代码时,将产生以下输出 -

a[0]: 10
a[1]: 20
a[2]: 30
a[3]: 40
a[4]: 50

示例:使用 for 循环计算数组元素之和

以下程序计算给定数组中所有整数的平均值。

#include <stdio.h>
int main(){
   int i;
   int arr[] = {10, 20, 30, 40, 50};
   int sum = 0;
   float avg;

   // for 循环执行
   for(i=0; i<5; i++){
      sum += arr[i];
   }
   avg = (float)sum / 5;
   printf ("Average = %f", avg);

   return 0;
}

输出

运行代码并检查其输出 −

Average = 30.000000

示例:使用 for 循环计算阶乘

以下代码使用 for 循环计算一个数的阶乘值。注意,一个数的阶乘是 1 到给定数之间所有整数的乘积。阶乘的数学表示公式为:-

x! = 1 * 2 * . . . * x

以下是计算阶乘的代码:-

#include <stdio.h>

int main(){

   int i, x = 5;
   int fact = 1;

   // for 循环执行
   for(i=1; i<= x; i++){
      fact *= i;
   }
   printf("%d != %d", x, fact);

   return 0;
}

输出

运行此代码时,将产生以下输出 -

5! = 120

当重复次数已知时,for 循环是理想的选择。但是,循环行为可以通过 breakcontinue 关键字for 循环体中控制。嵌套 for 循环也常用于处理二维数组

c_decision_making.html