您现在的位置是:首页 >其他 >深入浅出循环语句—【C语言】网站首页其他
深入浅出循环语句—【C语言】
分支语句博客:http://t.csdn.cn/U2kZF
目录
前言:我们先来了解一下break 、continue在循环中的作用
前言:我们先来了解一下break 、continue在循环中的作用
break:终止循环(暴力)
continue:跳过本次循环continue后面的代码,再循环(温柔)
1. while循环
当条件满足的情况下,if语句后的语句执行,否则不执行。 但是这个语句只会执行一次。 由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。 那我们怎么做呢? C语言中给我们引入了: while 语句,可以实现循环。
while循环中的break
当n=5时,if语句为真,执行break语句,break在while循环中跳出的是整个循环,如果有多组循环嵌套,跳出的是内层循环(跳出一组循环)
while循环中的continue
当n=5的时候,执行continue语句,跳过continue后面的代码,开始下次循环
2. for循环
表达式1 为初始化部分,用于初始化循环变量的。
表达式2 为条件判断部分,用于判断循环时候终止。
表达式3 为调整部分,用于循环条件的调整。
for循环省略出错举例:
这里是两个for循环嵌套,开始时i=0,j=0,进入内部for循环,循环4次出内层循环,这是j=4,再当i=1,再次进入内层for循环的时候,这是由于j没有初始化部分,所以j还是为4,直接跳出内层for循环~~~本来打印16个hehe,现在只打印4个
for循环中的break
当i=5时,执行break代码,直接跳出for循环
for循环中的continue
当i=5时,执行continue代码——跳出本次循环continue后面的代码,直接到调整部分—>再到for循环判断部分
for循环使用建议
1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
3. do while循环
循环至少执行一次,使用的场景有限,所以不是经常使用。
、
利用do while循环打印1~10
do while循环中的break
break直接跳出循环
do while循环中的continue
continue跳过本次循环后面的代码,由于这里跳过了调整部分,i=5一直为真,一直执行continue,就打印出1234 死循环
4. 练习
4.1 计算 n的阶乘
int main()
{
int n = 0;
scanf("%d", &n);
int ret = 1; //注意ret不能定义为0
for (int i = 1; i <=n ; i++)
{
ret *= i;
}
printf("%d", ret);
return 0;
}
4.2 计算1!+2!+3!+……+10!
int main()
{
int ret = 1;
int sum = 0;
for (int i = 0; i <=10 ; i++)
{
ret *= i;
sum += ret;//sum=sum + ret;也可以这样来看
}
printf("%d", sum);
return 0;
}
5. 实现二分(折半)查找算法
二分查找算法使用的前提是数组元素有序(升序)、(降序)
5.1 思路分析
1.确定被查找范围的左右下标left、right
2.根据left和right,确定中间元素下标mid
3.根据mid锁定的元素,和要查找的元素进行比较,确定新的元素范围left和right
5.2 二分查找代码实现
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//升序
//printf("%d
", sizeof(arr));//计算的数组的总大小,单位是字节
//printf("%d
", sizeof(arr[0]));//4
//printf("%d
", sizeof(arr) / sizeof(arr[0]));
int k = 7;
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
//1
int left = 0;
int right = sz - 1;
int flag = 0;//flag的作用是标志是否找到了
//2
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] == k)
{
printf("找到了,下标是:%d
", mid);
flag = 1;
break;
}
else if (arr[mid] < k)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
//1 2
if (flag == 0)
printf("没找到
");
return 0;
}
运行结果
如果觉得文章不错,期待你的一键三连哦,你个鼓励是我创作的动力之源,让我们一起加油,顶峰相见!!!