☀️光天化日学C语言☀️(30)- for 语句 | 子子孙孙无穷尽也
Posted 英雄哪里出来
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了☀️光天化日学C语言☀️(30)- for 语句 | 子子孙孙无穷尽也相关的知识,希望对你有一定的参考价值。
🙉饭不食,水不饮,题必须刷🙉
C语言免费动漫教程,和我一起打卡! 🌞《光天化日学C语言》🌞
LeetCode 太难?先看简单题! 🧡《C语言入门100例》🧡
数据结构难?不存在的! 🌳《数据结构入门》🌳
LeetCode 太简单?算法学起来! 🌌《夜深人静写算法》🌌
究极算法奥义!深度学习! 🟣《深度学习100例》🟣
文章目录
一、前言
本文作者是从 2007 年开始学 C语言 的,不久又接触了C++,基本就是 C/C++ 技术栈写了 14 年的样子,不算精通,但也算差强人意。著有《夜深人静写算法》系列,且承诺会持续更新,直到所有算法都学完。主要专攻 高中 OI 、大学 ACM、 职场 LeetCode 的全领域算法。由于文章中采用 C/C++ 的语法,于是就有不少读者朋友反馈语言层面就被劝退了,更何况是算法。
于是,2021 年 06 月 12 日,《光天化日学C语言》 应运而生。这个系列文章主要服务于高中生、大学生以及职场上想入坑C语言的志同道合之人,希望能给祖国引入更多编程方面的人才,并且让自己的青春不留遗憾!
这一章的主要内容是 一种循环结构,for 循环语句。
二、人物简介
- 第一位登场的就是今后会一直教我们C语言的老师 —— 光天。
- 第二位登场的则是今后会和大家一起学习C语言的没什么资质的小白程序猿 —— 化日。
三、for 语句简介
- 对于循环结构,除了 while 语句以外,还有 for 语句。
1、语法规则
- for 语句的一般形式为:
for(循环初始化表达式; 循环条件表达式; 循环执行表达式){
循环体
}
它的运行过程为:
1)首先,执行 循环初始化表达式;
2)然后,执行 循环条件表达式,如果它的值为真,则执行循环体,否则结束循环;
3)接着,执行完循环体后再执行 循环执行表达式;
4)重复执行步骤 2)和 3),直到 循环条件表达式 的值为假,则结束循环。
- 上面的步骤中,2)和 3)是一次循环,会重复执行,for 语句的主要作用就是不断执行步骤 2)和 3)。执行过程如下图所示:
- 细心的读者可能会发现,循环体 和 循环执行表达式 其实是可以合并的,是的,的确是这样。在下面的例子中我会讲到。
2、简单应用
- 接下来,我们就来实现一个最简单的循环语句,求 1 + 2 + 3 + . . . + n 1 + 2 + 3 + ... + n 1+2+3+...+n 的值。
#include <stdio.h>
int main() {
int n, i;
int sum;
while(scanf("%d", &n) != EOF) { // (1)
sum = 0; // (2)
for(i = 1; i <= n; ++i) { // (3)
sum += i; // (4)
}
printf("%d\\n", sum); // (5)
}
return 0;
}
- ( 1 ) (1) (1) 通过输入函数,输入一个数 n n n ,代表求和的上限;
- ( 2 ) (2) (2) 初始化求和的值为 0;
-
(
3
)
(3)
(3) for 语句三部分:循环初始化表达式:
i = 1
;循环条件表达式:i <= n
;循环执行表达式:++i
; -
(
4
)
(4)
(4) 循环体:
sum += i;
,表示将 1、2、3、4、… 累加到sum
上; -
(
5
)
(5)
(5) 输出求和
sum
的值; - 以上这段代码,实现了一个数学上的 等差数列 求和。也可以用公式来表示,如下:
- s u m = ( 1 + n ) n 2 sum = \\frac {(1 + n)n} {2} sum=2(1+n)n
- 而利用 for 循环,让我们抛开了数学思维,用程序的角度来实现数学问题。
【例题1】给定一个整数 n ( 1 ≤ n ≤ 12 ) n(1 \\le n \\le 12) n(1≤n≤12),输出 1 × 2 × 3 × 4 × . . . × n 1 \\times 2 \\times 3 \\times 4 \\times ... \\times n 1×2×3×4×...×n 的值。
四、for 语句中的表达式
- for 循环中的那个表达式都可以省略,但它们之间的 分号 必须保留。
1、初始化表达式
1)初始化表达式外置
- 我们可以把 初始化表达式 提到 for 循环外面,如下:
int i = 1, sum = 0; // (2)
for(; i <= n; ++i) { // (3)
sum += i; // (4)
}
- 其中注释中的编号对应上文代码中的编号。
2)初始化表达式内置
- 我们也可以把需要的初始化信息,都在 初始化表达式 内进行赋值,并且用逗号进行分隔,如下:
int i, sum; // (2)
for(i = 1, sum = 0; i <= n; ++i) { // (3)
sum += i; // (4)
}
- 具体选择哪种方式,是 代码规范 的问题,不在本文进行讨论,都是可以的。
2、条件表达式
- 如果省略 条件表达式,那就代表这个循环是一个 死循环,如下:
int i, sum = 0; // (2)
for(i = 1;; ++i) { // (3)
sum += i; // (4)
}
- 这段代码表示这个循环没有 结束条件,那自然就不会结束了,编码过程中应该尽量避免(当然,某些情况下还是需要的,例如游戏开发中的主循环),或者,函数内部有能够跳出函数的方法,比如 break 关键字。
3、执行表达式
- 执行表达式 的作用是 让循环条件 逐渐 不成立,从而跳出循环。
- 当然,它也是可以省略的,因为 循环体 本身也是一个 语句块,也可以达到类似功能,如下代码所示:
int i, sum = 0; // (2)
for(i = 1; i <= n;) { // (3)
sum += i; // (4)
++i;
}
- 这段代码同样达到了求和的功能,因为 执行表达式 被放入了 循环体,这也正是上文所说的 循环体 和 循环执行表达式 合并的问题。
五、for 语句 类比 while 语句
- 最后,我们将 for 循环 和 while 循环 进行一个类比。
- 还是以求和为例,如下代码所示:
#include <stdio.h>
int main() {
int n, i;
int sum;
while(scanf("%d", &n) != EOF) {
sum = 0;
for(i = 1 /*(1)*/; i <= n/*(2)*/; ++i /*(3)*/) {
sum += i; // (4)
}
printf("%d\\n", sum);
}
return 0;
}
- 我们把它用 while 语句来实现,如下:
#include <stdio.h>
int main(){
int n, i, sum;
while(scanf("%d", &n) != EOF) {
sum = 0;
i = 1; /*(1)*/
while(i <= n /*(2)*/ ) {
sum += i;/*(4)*/
i ++; /*(3)*/
}
printf("%d\\n",sum);
}
return 0;
}
- ( 1 ) (1) (1) 循环初始化;
- ( 2 ) (2) (2) 循环条件;
- ( 3 ) (3) (3) 循环执行;
- ( 4 ) (4) (4) 循环体;
- 写成 while 语句以后,更加确定了一件事情,就是 ( 3 ) (3) (3) 和 ( 4 ) (4) (4) 其实是一回事。
通过这一章,我们学会了:
for 语句的用法;
- 希望对你有帮助哦 ~ 祝大家早日成为 C 语言大神!
课后习题
🙉饭不食,水不饮,题必须刷🙉
C语言免费动漫教程,和我一起打卡! 🌞《光天化日学C语言》🌞
LeetCode 太难?先看简单题! 🧡《C语言入门100例》🧡
数据结构难?不存在的! 🌳《数据结构入门》🌳
LeetCode 太简单?算法学起来! 🌌《夜深人静写算法》🌌
以上是关于☀️光天化日学C语言☀️(30)- for 语句 | 子子孙孙无穷尽也的主要内容,如果未能解决你的问题,请参考以下文章
☀️光天化日学C语言☀️(29)- while 语句 | 死循环啦!
☀️光天化日学C语言☀️(28)- switch case 语句 | 小孩才做选择,成年人全都要!
☀️光天化日学C语言☀️(34)- 函数进阶 | 面向过程编程