一、循环
for循环语句:
循环就是让一段代码反复执行,达到你想要的效果
for是一一种比较灵活且危险(与其他循环语句相比)的一种循环
一般使用一个变量来引导它的运行,这个变量叫做循环变量i,index
for([1];[2];[3])
{
[4]
}
1、给循环变量赋初值,C99标准可以定义循环变量-std=gnu99
在此处定义的循环变量,只能在for循环内使用
2、判断循环变量的值是否到达边界
4、被反复执行的代码,也叫做循环体
3、改变循环变量,防止死循环,一般对循环变量进行自加或自减
大括号问题:
1、建议上下对齐
2、循环体如果只有一行代码,大括号可以省略
但是不利于代码的扩展,一般的商业代码要求大括号不能省略
for循环的多种写法:
for(;;)
{
//死循环
}
int i=0;
for(; i<10; i++)
{
}
for(int i=0; i<10;)
{
//
i++;
}
for(int i=0,j=0;i<10;i++)
{
}
while语句:
while(条件) // 条件为真时执行循环体,为假时结束循环
{
//循环体
}
while循环相当于for循环的精简版本
for循环负责解决明确知道循环次数的问题
while循环负责只知道循环条件而不确定循环次数的问题
do while语句:
do{
// 循环体
}while(条件);
先执行循环体,再判断循环条件,该循环至少执行一次
适合先干活、后检查的特殊情况,例如:输入密码
循环嵌套:
循环语句中包含循环语句
外层循环执行一次,内层循环执行n次
跳转语句:
goto 可以在函数内任意跳转
它可能会破坏已经设计好的分支或循环循环语句,因此绝大多数的公司都禁止使用goto
但是它在驱动编程中非常适合处理异常。
标签名:
//代码
goto 标签名;
break
1、在switch开关语句中执行关闭开关
2、跳出循环,只能跳出一层循环
continue
结束本次循环,进入下一次循环
return
1、返回一个数据给函数的调用者
2、结束函数的执行
二、数组:
什么是数组:变量的组合,是一种批量定义变量的方式
定义:类型 数组名[数量];
int arr[5];
使用:数组名[下标];
下标:从零开始,范围:0~数量-1
遍历: 与for循环配合,使用循环变量i作为数组的下标
初始化:类型 数组名[数量] = {1,2,3,4,5...};
1、数组与普通变量一样默认值是随机的,为了安全起见要对它进行初始化
2、这种初始化的方式只能在定义语句中使用,而且只能逐个赋值,不能整体赋值
3、初始化的数量过多,编译器会产生警告并丢弃
4、初始化的数量过少,编译器会补0
5、大括号里的数据可以省略,只写大括号,相当于给所有成员赋0
6、初始化时数量也可以省略,编译器会自动计算数据的个数然后告诉数组
计算数组长度: sizeof(arr)/sizeof(arr[0]) = 数组的长度
数组越界: 为了程序运行效率是不会检查数组的下标
数组越界的后果:
1、一切正常
2、段错误
3、脏数据
二维数组:
一维数组相当于把变量排成一排,通过编号来访问
二维数组相当于把变量排成矩阵,通过行号和列号来访问
定义:
类型 数组名[行数][列数];
int arr[3][5];
[0,0][0,1][0,2][0,3][0,4]
[1,0][1,1][1,2][1,3][1,4]
[2,0][2,1][2,2][2,3][2,4]
使用:
数组名[行下标][列下标]
行下标:0~行数-1
列下标:0~列数-1
遍历:
需要与双层for循环配合,外层循环负责遍历行,内层循环负责遍历列
for(int i=0; i<3; i++)
{
for(int j=0; j<5; j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
初始化:
类型 数组名[行数][列数] = {{第一行},{第二行},{第三行}...};
变长数组:
定义数组时使用变量作为数组的长度,在编译期间数组的长度是不确定的,当程序运行到数组的定义语句时它的长度才能确定下来,一旦确定长度,无法改变
优点:可以根据实际情况确定数组的长度,达到解决内存的目的
缺点:不可以初始化,初始化发生在编译期间