本次教程我们将会进一步学习while,并学习他的孪生兄弟for
进一步学习他们的好搭档数据组
while
上一篇我们已经学习过 while,知道 while 可以让程序重复执行一段代码。
这一次我们进一步理解一下它是怎么工作的。
我们先来尝试使用 while 输出 1-10:
#include<stdio.h>intmain(){inti=0;while(i<10){i=i+1;printf("%d\n",i);}}上一篇讲了,while 后面的括号里面需要是一个条件。
只要条件的结果是非 0,while 就会继续循环。
这里我们先int i=0声明变量,下面的程序先循环了一次,i变为了1
while变为非0,就循环了下去
这时候就有人有疑问了
i=i+1;这是啥?在数学的角度看不可能成立
但是我们学的c语言啊,
这并不是数学意义上的“等式”,而是:
把 i 原来的值加 1,然后把计算结果重新赋值给 i。
以此类推,while括号里面的条件变为非0,开始一直循环,直到i=10,程序停止
for
为什么说for是while的孪生兄弟呢,
因为它们都可以用来进行循环。
比如刚才我们使用 while 输出 1-10:
使用 for 也可以完成同样的事情:
#include<stdio.h>intmain(){for(inti=1;i<11;i=i+1){printf("%d\n",i);}}for的基本结构
我们重点观察这一句:
for(inti=1;i<11;i=i+1)for 括号里面有三个部分:
for(初始化;条件;更新){要重复执行的代码;}这里的:
int i = 1
实际上声明了一个变量 i。
因为这个变量是在 for 的括号里面声明的,所以它属于这个 for 循环的局部变量。
接着我们必须着重学习理解一下这个执行顺序
一个特别容易混淆的地方
你可能会想:
i=i+1 不就在 printf 前面吗?
i=1 i<11 所以i=1+1
为什么不是先变成 2?
但是 for 循环的执行顺序是:
初始化 → 判断条件 → 执行循环体 → 更新变量 → 再次判断
inti=1;// ① 先让 i = 1i<11// ② 判断 1 < 11,成立printf("%d\n",i);// ③ 输出 i,也就是 1i=i+1;// ④ i 变成 2i<11// ⑤ 判断 2 < 11,成立printf("%d\n",i);// ⑥ 输出 2i=i+1;// ⑦ i 变成 3所以第一次输出一定是 1。
你可能会发现:
while 和 for 其实非常像。
它们完成的是同一件事情。
主要区别在于:
while 更强调:
只要条件成立,就一直执行。
而 for 很适合:
知道循环大概需要进行多少次,并且有明确的初始值、条件和更新方式。
数组
1. 先理解:数组到底是什么
学完 while 和 for 后,我们再来学习一个非常重要的东西:
数组。
可以先把数组理解成:
一次性创建很多个相同类型的变量。
比如你想保存 5 个学生的成绩。
不用数组,你得写:
intscore1;intscore2;intscore3;intscore4;intscore5;有了数组,只需要:
intscore[5];这就创建了 5 个 int 类型的空间。
2. 数组最基本的写法
int score[5];
这里:
int:数组里面存的是整数
score:数组名字
[5]:数组有 5 个元素
这里有一个非常重要的规则:
数组下标从 0 开始。
所以:
score[0]score[1]score[2]score[3]score[4]一共 5 个。
没有 score[5]。
3. 给数组赋值
比如:
intscore[5];score[0]=90;score[1]=80;score[2]=70;score[3]=60;score[4]=50;```c 现在数组里面就是: 下标01234↓ ↓ ↓ ↓ ↓ score9080706050你可以通过下标读取它:printf("%d",score[0]);输出: ```c90数组特别适合和 for 一起用
例如同样是输出1-10
#include<stdio.h>intsource[5];intmain(){for(inti=0;i<5;i++){source[i]=i+1;}for(inti=0;i<5;i++){printf("%d\n",source[i]);}}怎么样?是不是很巧妙呢?