前言
有的时候,我们可能需要多次执行同一块代码。
一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。
编程语言提供了更为复杂执行路径的多种控制结构。
循环语句则允许我们多次执行一个语句或语句组。
循环语句
1. for循环
1.1 语法
for(表达式1;表达式2;表达式3)
循环语句;
表达式1为初始化部分,用于初始化循环变量的。
表达式2为条件判断部分,用于判断循环时候终止。
表达式3为调整部分,用于循环条件的调整。
如果判断部分省略,意味着判断恒真。
实例:使用for循环在屏幕上打印1-10的数字
#include<stdio.h>
int main()
{
int i;
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
for循环的执行流程图:
for语句只控制一条语句,控制多条语句要加{}。
1.2 break和continue在for循环中
//break 代码实例
#include<stdio.h>
int main()
{
int i;
for (i = 1; i <= 10; i++)
{
if (i == 9)
break;
printf("%d ", i);
}
return 0;
}
输出结果:
为什么到8就结束了?
break在for循环中的作用:
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:for中的break是用于永久终止循环的。
//continue 代码示例
#include<stdio.h>
int main()
{
int i;
for (i = 1; i <= 10; i++)
{
if (i == 9)
continue;
printf("%d ", i);
}
return 0;
}
这段代码的输出结果又会是什么?
continue在for循环中的作用:
continue是用于终止本次循坏的,也就是本次循环中continue后边的优码不会再执行,
而是直接跳转到for语句的判断部分。进行下一次循环的入口判断。
1.3 for语句的循环控制变量
//前闭后开
int i=0;
for(i=1;i<11;i++)
{}
//两边都是闭区间
int i=0;
for(i=1;i<=10;i++)
{}
1.不可在for循环体内修改循环变量,防止for循环失去控制;
2.建议for语句的循环控制变量的取值采用”前闭后开区间写法。
1.4 一些for循环的变种
//代码1
for(;;)
{
printf("hh\n");//无限循环打印hh
}
//for循环中的初始化部分、判断部分、调整部分可以省略。
//初始化和调整部分的省略就是啥都不做
//判断部分省略了,意味着判断是恒为真的
//建议不要随便省略
//代码2
int i=0;
int j=0;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++);
{
printf("hh\n");//打印10个hh
}
}
//代码3
int i=0;
int j=0;
for(;i<10;i++)
{
for(;j<10;j++)
{
printf("hh\n");//同代码2
}
}
//代码4-使用多于一个变量控制循环
int x, y;
for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
{
printf("hh\n");//打印两个hh
}
下面这段代码会打印多少个hh?
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
//i=0 1
for (i=0; i < 4; i++)
{
for (j=0; j < 4; j++)
{
printf("hehe\n");
}
}
return 0;
}
1.5 练习
请问循环要循环多少次?
#include<stdio.h>
int main()
{
int i = 0;
int k = 0;
for (i = 0, k = 0; k = 0; i++, k++)
{
k++;
printf("hh");
}
return 0;
}
for循环可以嵌套使用:
2. while循环
2.1 语法
while(表达式)
循环结构;
while语句执行的流程:
实例:使用while循环在屏幕上打印1-10的数字
#include<stdio.h>
int main()
{
int i = 1;//初始化
while (i <= 10)//判断
{
printf("%d ", i);
i++;//调整
}
return 0;
}
2.2 break介绍
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
break;//(跳出)终止循环
printf("%d ", i);
i = i + 1;//i++;
}
return 0;
}
2.3 continue介绍
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
i = i + 1;
if (i == 5)
continue;//跳过本次循环continue后边的代码,直接去while循环的判断部分 printf("%d ", n);
printf("%d ", i);
}
return 0;
}
我们发现在while循环中也可以出现break和continue,他们的意义和在for循环中是一样的。
但是还是有一些差异。
2.4 练习
用while循环打印1-100以内的奇数
int main()
{
int i = 1;
while (i <= 100)
{
if(i % 2 == 1)//判断i是奇数的话,就打印i
printf("%d ", i);
++i;
}
return 0;
}
//打印数字字符,跳过其他字符
#include <stdio.h>
int main()
{
char ch = '\0';
while ((ch = getchar()) != EOF)
{
if (ch < '0' || ch > '9')
continue;
putchar(ch);
}
return 0;
}
补充:
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
//getchar()--接收字符
//putchar()--打印字符
//EOF -- end of file 文件结束标志
//在函数读取失败的时候返回了EOF
//scanf函数读取成功,返回的是读取到的数据的个数,读取失败返回EOF
//而getchar 读取成功返回字符的ASCII码值,读取失败返回EOF
3. do…while循环
3.1 do语句的语法
do
循环语句;
while(表达式);
do…while语句执行的流程:
3.2 do语句的特点
实例:使用do…while循环在屏幕上打印1-10的数字
#include<stdio.h>
int main()
{
int i = 1;//初始化
do
{
printf("%d ", i);
i++;//调整
} while (i<=10);//判断
return 0;
}
循环至少执行一次,使用场景有限,所以不经常使用。
3.3 do…while循环中的break和continue
//break
#include<stdio.h>
int main()
{
int i = 1;
do
{
if (5 == i)
break;
printf("%d ", i);//1 2 3 4
i++;
} while (i<=10);
return 0;
}
//continue
#include<stdio.h>
int main()
{
int i = 1;
do
{
if (5 == i)
continue;
printf("%d ", i);//1 2 3 4 _
i++;
} while (i<=10);
return 0;
}
4. 练习
1.计算n的阶乘
2.计算1!+2!+…+10!
第一题:
//for循环
//5!=5*4*3*2*1
//4!=4*3*2*1
//3!=3*2*1
#include<stdio.h>
int main()
{
int n;
int i;
int temp = 1;
scanf("%d", &n);//输入
for (i = 1; i <= n; i++)
{
temp = temp * i;
}
printf("%d\n", temp);
return 0;
}
//while循环
#include<stdio.h>
int main()
{
int n;
int i=1;
int temp=1;
scanf("%d", &n);//输入
while (i <= n)
{
temp = temp * i;
i++;
}
printf("%d\n", temp);
return 0;
}
第二题:
#include<stdio.h>
int main()
{
int i;
int temp = 1;
int sum = 0;
for (i = 1; i <= 10; i++)
{
temp *= i;//求每个数字的阶乘
sum += temp;//求和,相当于:sum=sum+temp;
}
printf("%d\n", sum);
return 0;
}
结束语
循环语句到这里就结束啦!想要完全的掌握,还需要不断地练习。
积土而为山,积水而为海。
我们下一篇文章再见。