本章分支结构的学习内容如下:
三、C语言中的分支与循环—if语句 (1)
三、C语言中的分支与循环—关系操作符 (2)
三、C语言中的分支与循环—条件操作符 与逻辑操作符(3)
三、C语言中的分支与循环—switch语句(4)分支结构 完
本章循环结构的学习内容如下:
三、C语言中的分支与循环—while循环 (5)
三、C语言中的分支与循环—for循环 (6)
三、C语言中的分支与循环—do-while循环 (7)
三、C语言中的分支与循环—break和continue语句(8)循环结构 完
接下来我们开始for循环的学习,为什么有了while循环还要引入for循环呢?
for
循环:由于它将所有循环相关的元素(初始化、条件、更新)封装在一个语句中,因此通常更容易阅读和理解,特别是对于迭代过程。while
循环:可能需要在循环体外初始化变量,在循环体内更新变量。这可能使得跟踪循环的状态和控制变量更加困难。
我们一起来看看for循环是怎样工作的吧!
1.基本语法
for
循环在C语言中是一种常用的循环控制结构,用于在已知循环次数的情况下重复执行一段代码。
for (初始化表达式; 循环条件表达式; 更新表达式) {// 循环体
}
- 初始化表达式:在循环开始之前执行一次。通常用于初始化循环控制变量。
- 循环条件表达式:在每次循环迭代之前评估。如果为真(非零),则执行循环体。
- 更新表达式:在每次循环迭代后执行。通常用于更新循环控制变量。
- 循环体:如果循环条件为真,则执行的代码块。
2.执行流程
- 初始化:首先执行初始化表达式。
- 条件检查:评估循环条件表达式。如果为真,进入循环体;如果为假,退出循环。
- 执行循环体:执行循环体内的代码。
- 更新表达式执行:执行更新表达式。
- 回到步骤2:再次检查循环条件表达式。
3.while循环和for循环的对比
4.代码示例
1)使用 for
循环从1打印到10
#include <stdio.h>int main() {for (int i = 1; i <= 10; i++) {printf("%d\n", i);}return 0;
}
2)数组遍历
如何安全地输入数组,见二、C语言数据类型与变量(scanf和printf (4)完)scanf的安全用法
数组长度计算
数组遍历,我们首先需要知道数组的长度,再用“数组名[数组下标]”这种方法取出每一个元素
例如 初始化数组int arr[] = { 1, 2, 3, 4, 5 }; 我们想打印第一个元素,数组下标从0开始,即可以执行语句
int arr[] = { 1, 2, 3, 4, 5 };
printf("%d",arr[0]);
那么C语言中计算数组的元素个数的常见用法是:
int length = sizeof(arr) / sizeof(arr[0]);
-
sizeof(arr)
:这部分计算整个数组arr
在内存中占用的总字节数。 -
sizeof(arr[0])
:这部分计算数组中第一个元素的大小(字节数)。由于数组的所有元素都是同一类型,因此任何一个元素的大小都代表数组中每个元素的大小。 -
除法操作:将数组的总大小除以单个元素的大小,得到的结果就是数组中元素的数量。
arr是一个 int
类型的数组,每个 int
元素通常占用4个字节(这可能根据不同的系统和编译器而有所不同)。如果数组总共占用了40个字节,那么 sizeof(arr) / sizeof(arr[0])
就是 40 / 4
,结果是10,意味着这个数组有10个元素。
这种方法在计算静态数组(在编译时大小已知的数组)的长度时特别有用。但请注意,这种方法不适用于动态分配的数组(如使用 malloc
分配的数组)或指针,因为 sizeof
对于指针只会返回指针本身的大小,而不是它指向的内存区域的大小。动态数组我们以后再讨论。
遍历数组的代码如下:
#include <stdio.h>
int main() {int arr[] = { 1, 2, 3, 4, 5 };//初始化一个数组int length = sizeof(arr) / sizeof(arr[0]);//整型变量lengthfor (int i = 0; i < length; i++) {printf("%d\n", arr[i]);}return 0;
}
我们看一下结果,数组元素被成功打印。
5.代码练习题
计算1~100之间3的倍数的数字之和
解法1
#include <stdio.h>
int main()
{int sum = 0;//初始化变量和for (int i = 0; i <= 100; i++){if (i % 3 == 0)sum += i;//如果i是3的倍数,就把i加进和里面}printf("%d", sum);return 0;
}
结果如下:
优化解法
//如果能直接产⽣3的倍数的数字就省去了多余的循环和判断
#include <stdio.h>
int main()
{int i = 0;int sum = 0;for(i=3; i<=100; i+=3){sum += i;}printf("%d\n", sum);return 0;
}