一.两种循环
入口条件循环:先判断,再执行代码块退出条件循环:先执行代码块,再判断
二.可控循环的四要素(能停下来的循环就是可控的)
1:条件不能一直是真,否则就是死循环了2:循环控制变量有初始值3:循环控制变量要参与到条件中来,有循环停止的条件4:循环控制变量要有规律地变化
三.while循环
用法示例如下:
int i = 1;
while(i<5)
{
printf("%d",i);
i++;
}注意点①while后面不加分号②只有一条语句的时候可以不加花括号,只执行下面一行的操作,但代码看起来不美观,所以以后就加上花括号
四.do while循环
用法示例如下
do{
}while(i <=5);注意点:①:它是退出条件循环,也就是说最少执行一次②:这里while后面要有分号了
五.for循环
使用格式规则如下
for(初始值;条件;变化)
{
代码块
}注意点①和while一样不要加“”和;②执行顺序:初始值->条件->代码块->变化->条件->代码块。。。。
六.嵌套循环
1:定义很简单,就是循环里边套着循环。2:着重注意while嵌套和for嵌套区别:while循环没有重新赋值,而for循环有重新赋值
比如下面的例子
int i = 1;
int j = 1;
while(i <=3)
{while(j < 3)
{printf("次数\n")
j++;
}
i++;
}
注意这里不是打印2乘以3=6次而是两次,原因就是上面的注意点,当j=3的时候,再进入循环时,没有给j初始化成1,所以j的值仍为3。
七.break
①通常与if连用,只能放在循环之内。②只跳出所在循环而非所有循环。③continue是执行下一循环。
八.数组(简单预习)
1.特点:
①是由类型相同的元素组成的集合。②他们的地址在空间上是连续的。
③数组一但定义,其长度不可变化2.分类一维数组,二维数组,。。。维数组。但是我们一般用到二维数组都很少。所以不必深究。
一维数组
1.一维数组声明类型+数组名+[元素个数]
比如 int a [5] 表示有五个元素的一维数组2.数组的初始化
①初始化全部:比如 int a [5] = {1,2,3,4,5};
②初始化部分:比如 int a [5] = {1,2,3};则其他元素默认为0
③初始化指定元素(不常用):比如 int a [5] = {1,[4] = 12};这样就给第五个元素赋值了12
④[]里面还可以是空的3.数组的赋值
比如 a [1] = 12;这样就给第二个元素赋值了12,注意是第2个元素而非第一个。第一个元素下标为0,以此类推4.数组的地址
打印形式如下
printf("%p",&a[]);
注意:
①用%p是十六进制,%d是十进制
②a[1]的地址也可以用a[0]+1来表示
③&a == &a[0];
二维数组
1.定义:元素是一维数组的数组,叫做二维数组2.形式:int a [ ][ ]; 第一个[]里面的数表示有几个一维数组,第二个[]里面的数字表示每个一维数组里面有几个元素3.初始化:比如 int a[3][2] = {{1,2},{3,4},{5,6}};类似于行列,这里表示有三行两列
如int a[3][2] =
{{1,2},
{3,4},
{5,6}};当然这里也可以不完整初始化,可以掉一个小数组,也可以掉一个小数组中部分元素,掉的元素默认为04.小注意点
①:可以省略里面的{},比如int a [3][2] = {1,2,3,4,5};这五个数据是依次往里面去存,5后面那个数默认为0
②:第一个[]里面的数据可以省略,依照第二个[]里面的数据来定。比如int a[][3] = {.....};5.数组的地址
&a[0] == &a[0][0] == a
&a[1][0] == a[1]
虽然有的数值一样,但是级别不同
数组之间的赋值
1:数组名字是常量(本质是一个地址),不能进行赋值。
所以int b[5] = {a};就相当于只给第一个元素初始化,而初始化的值就是a的地址(a也是一个数组)2:正确的赋值方式如下
int i = 0;
for(i = 0; i < 5;i++)
{b[i] = a[i];
}
如果只赋值部分元素,比如将a[5]后三位赋值到c[3],则示例如下
for(i = 0;i < 3;i++)
{
c[i] = a[i +2];
}