循环结构
for循环
表达式结构:
for(表达式1;表达式2;表达式3)
{
语句;
}
-
表达式1:设置初始条件,只执行一次。可以为零个,一个,多个变量设置初值;
-
表达式2:是循环条件表达式,用来判断是否继续循环。在每次执行循环 (for后由一对花括号括起来的)体前先执行此表达式,决定是否继续执行循环;
-
表达式3:在执行完循环体后才进行此语句;
所以可以理解为:
for(循环变量赋初值;循环条件;循环变量增值)
{
语句;
}
需要注意的是:
-
表达式1可以省略,但后面的分号不能省略;
-
表达式2可以省略(但后面的分号不能省略),不设置和检查循环的条件,此循环可以终止的进行下去,也就认为表达式2始终为真值;
-
表达式3可以省略,但是应该在保证该程序能正常结束;
-
for循环与while循环无条件等价;
例子
#include <stdio.h>
int main()
{//用for循环求从1到100的和
int i, sum = 0;
for (i = 1; i <= 100; i++)
{
sum += i;
}
printf("sum=%d\n", sum);
return 0;
}
解读例子
for循环的执行顺序如下:
步骤1. 执行i=1,把i初始化为1
步骤2. 判断i<=100是否满足,满足则执行sum += i;(把i的值和sum相加然后赋值给sum),否则退出循环
步骤3. 执行i++,然后i变成2,然后继续执行步骤2,直到退出循环位置
for循环的嵌套
表达式基本结构:
for(;;)
{
for(;;)
{
...
}
}
总循环次数:外循环次数*内循环次数;
while循环
基本框架:
表达式1;
while(表达式2)
{
语句;
表达式3;
}
-
while后面的语句称为循环体;
-
循环体执行的次数由循环条件表达式(表达式2)来确定;
-
当循环条件表达式为真值时就执行循环体;
-
while(1)//是一个死循环
运算符:
运算符 | 含义 |
---|---|
&& | 且 |
! | 非 |
|| | 或 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
== | 等于 |
例子
int i=0,sum=0;
while(i<=100)
{
sum+=i;
i++;
}
-
一定要给i赋初值;
-
如果没有i++那么这个while循环就是个死循环;
只要循环条件表达式为真,就执行循环体;
do while循环
基本框架
表达式1;
do
{
语句;
}
while(表达式2);
- 先执行一次指定的循环体语句,再判别表达式是否为真,若为真返回重新执行循环体语句。
- 注意while后的()后是有的
例子
int i=0,sum=0;
do
{
sum+=i;
i++;
}
while(i<=100);
与while循环的区别:
-
while循环先判断再执行;
-
do…while循环先执行再判断;
-
只要第一次进入循环的条件就不满足,那么这两种循环的结果可能不同;
while与do while的例子
while
#include<stdio.h>
#include<windows.h>
int main()
{
int i=0, sum = 0;
scanf_s("%d", &i);
while (i < 5)
{
sum += i;
i++;
}
printf("sum=%d", sum);
system("pause");
return 0;
}
do while
#include<stdio.h>
#include<windows.h>
int main()
{
int i=0, sum = 0;
scanf_s("%d", &i);
do
{
sum += i;
i++;
} while (i < 5);
printf("sum=%d", sum);
system("pause");
return 0;
}
switch语句
关于C语言中我们做判断的时候一般是会想到if else,常见的if else的写法为:
if(表达书)
{}
else if(表表达式)
{}
else
{}
当出现更多的if else嵌套的时候通常会使我们的代码变的较为繁琐,使得我们在观看自己的代码的时候容易逻辑混淆,所以就有了switch的用法,switch的用法在代码中的运用广度没有if else 较强,
基本结构
switch(变量或者表达式)
{
case 变量情况或者表达式情况1:语句1;break;
case 变量情况或者表达式情况2:语句2;break;
case 变量情况或者表达式情况3:语句3;break;
……
default: 语句;//default情况就是指,除了你写的case的情况外的情况
}
一旦遇到 break,就不再执行 switch 中的任何语句,包括当前分支中的语句和其他分支中的语句;也就是说,整个 switch 执行结束了,接着会执行整个 switch 后面的代码。
例子
#include <stdio.h>
int main(){
int a;
printf("Input integer number:");
scanf("%d",&a);
switch(a){
case 1: printf("Monday\n"); break;
case 2: printf("Tuesday\n"); break;
case 3: printf("Wednesday\n"); break;
case 4: printf("Thursday\n"); break;
case 5: printf("Friday\n"); break;
case 6: printf("Saturday\n"); break;
case 7: printf("Sunday\n"); break;
default:printf("error\n"); break;
}
return 0;
}
break与continue
break
作用:可以使流程跳到循环之外(结束整个循环过程),接着执行循环体下面的语句。
但是:break语句只能用于循环语句和switch语句,不能单独使用
在多层循环中,一个break语句只向外跳一层
在 C语言 的 switch(开关语句)中,break 语句还可用来在执行完一个 case(分支)后立即跳出当前 switch 结构
例子
for(;;){// A
for(;;) {// B
break; // 只跳出B的for循环
}
}
int i;
switch(i){
case 1:
break; // 跳出Switch
case 2:
break; // 跳出Switch
default:
break; // 跳出Switch
}
continue
作用:并不是终止整个循环,只是提前结束本次循环,继续执行下次循环;
continue 语句的作用是跳过本次循环中余下尚未执行的语句,立即进行下一次的循环条件判定,可以理解为仅结束本次循环。
在 while 和 do-while 循环中,continue 语句使得流程直接跳到循环控制条件的测试部分,然后决定循环是否继续进行。在 for 循环中,遇到 continue 后,跳过循环体中余下的语句,而去对 for 语句中的“表达式3”求值,然后进行“表达式2”的条件进行条件测试,最后根据“表达式2”的值来决定 for 循环是否执行。
在循环体内,不论 continue 是作为何种语句中的语句成分,都将按上述功能执行,这点与 break 有所不同。
例子
int i = 0;
while(i < 10)
{
i++;
if(i == 5)
continue;
printf("%d\n",i);
}
这段代码输出为:1 2 3 4 6 7 8 9 10
所以continue的总结:continue是用于终止本次循环的,也就是本次循环中continue后边的代码都不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断。