欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > C语言基础06

C语言基础06

2025/2/25 16:08:00 来源:https://blog.csdn.net/jxcklfn/article/details/144220509  浏览:    关键词:C语言基础06

文章目录

    • 循环结构
      • 什么是循环
      • 循环的分类
      • 循环的构成
      • 当行循环的实现
        • while
        • 死循环
        • for
          • 死循环
          • 循环实现的三要素
      • 直到型循环的实现
        • do..while
        • goto
      • 循环的嵌套
      • 循环结构的典型应用场景
      • 基础算法模型
      • break和continue

循环结构

什么是循环

代码的重复执行,就叫做循环

循环的分类

  • 无线循环:其实就是死循环,程序设计中尽量避免无限循环。程序中的无限循环必须可控
  • 有限循环:循环限定循环次数或者循环条件

循环的构成

  • 循环条件
  • 循环体

当行循环的实现

特点:先判断,后执行,如果条件不满足,一次都不执行

代表:while和for

while

语法:

while(循环条件)
{循环语句;//循环语句如果是单语句,可以省略{},如果是复合语句,不可以省略{}
}

说明:

1.循环条件的返回值必须是布尔类型(条件表达式只能是关系表达式或者逻辑表达式)。在C语言中,布尔类型为真使用非0,布尔类型为假使用0。如果引入#include<stdbool.h>,也可以使用true和false来表示

2.{}包起来的内容整体称之为循环体

3.我们要在循环体中控制循环条件的变化,否则会产生死循环

执行过程:
在这里插入图片描述
特点:先判断,后执行,循环体语句有可能一次都不执行

案例:

while求1~100数字和


#include <stdio.h>
/** 需求:while循环案例:如何编程计算1+2+3+....+100?(累加求和)
*/int main(int argc,char *argv[])
{//定义一个变量,保存累加的和int sum = 0;//定义一个循环变量int i = 1;while(i<=100)//循环条件,这里可以有关系表达式,逻辑表达式、整型常量{//累加运算sum += i;i++;}printf("1~100的累加和是:%d\n",sum);return 0;
}

案例:

while求1~100偶数和


#include <stdio.h>
/** 需求:while循环案例:计算1~100以内的偶数和,也就是
2+4+6+..+100的累加和
*/int test02()
{//创建一个变量,用来存放累加和int sum = 0;//创建一个循环变量,初始值2int i =2;while(i <= 100){//过掉奇数if(i%2 == 0){sum += i;}i++;}printf("1~100之间的偶数和是%d\n",sum);
}int main(int argc,char *argv[])
{test02();return 0;
}
死循环
while(1)
for

原则上,for循环能实现的,while循环一定可以实现,for循环可以看作是while循环的一种特殊写法

语法:

for(① 表达式1;②表达式2;③表达式3)
{④循环体语句;--如果是单语句,可以省略{};如果是复合语句,必须保留{}
}

说明:

1.()中可以只保留两个;;,举例:(;;)

2.①(表达式1)是循环变量,我们需要赋初值,循环变量可以是列表,多个循环变量使用逗号分隔,举例:int i=0,j=0

②(表达式2)是循环条件,用来限制循环的次数,循环条件支持表达式,如果加入逻辑表达式,会变成复合表达式,举例:i < 10 && j <= i

③(表达式3)改变循环条件,支持列表,这里可以使用赋值表达式,举例:i++,j++

3.执行顺序:①②④③->②④③->②④③->…->②

执行过程:
在这里插入图片描述
特点:

先判断,后执行,循环体语句可能一次都不执行


#include <stdio.h>
/** 需求:while循环案例:计算1~100以内的偶数和,也就是
2+4+6+..+100的累加和
*/int for_test()
{//创建一个变量,用来存放累加和int sum = 0;//创建一个循环变量,初始值2int i = 2;for(;i <= 100;){//过掉奇数if(i%2 == 0){sum += i;}i++;}printf("1~100之间的偶数和是%d\n",sum);
}
/**需求:for循环案例-求斐波拉契数列前20个数字*分析:1,1,2,3,5,8....**/int for_test2()
{//创建一个变量,用来存放累加和int f1 = 1;//前一个数int f2 = 1;for(int i = 2;i <= 100;i++){//过滤掉奇数if(i%2 == 0){sum += i;}}printf("1~100之间的偶数和是%d\n",sum);
}int main(int argc,char *argv[])
{for_test();for_test2();return 0;
}

总结

  • for语句使用语法规则上,降低/避免因为忘记循环条件更新操作,而引起的产生无限循环的几率
  • 应用场合:for语句往往应用于循环次数事先可以确定的场景
死循环
for(表达式1;;表达式3);
for(;;);
循环实现的三要素
  • 循环变量的初始化
  • 循环条件
  • 循环变量的更新

案例:


#include <stdio.h>
/** 需求:for循环案例-求斐波拉契数列前20个数* 分析:1,1,2,3,5,8....
*/int main(int argc,char *argv[])
{int f1 = 1;//前一个数默认是1int f2 = 1;//后一个数默认时1int i = 1;//循环变量for(;i<= 10;i++){printf("%12d%12d\n",f1,f2);//一行显示两个数,每两个换行f1 += f2;//f1 = 2 = 1+1f2 += f1;//f2 = 3 = 1+2}return 0;
}

直到型循环的实现

特点:先执行,后判断,不管条件满不满足,至少执行1次

代表:do…while

do…while

语法:

do 
{循环体;
}while(循环条件);

说明:

1.循环条件返回值必须是布尔类型,在C语言中,布尔类型为真使用非0来表示,为假使用0来表示

2.{}包起来的内容整体称之为循环体

3.我们要在循环体中控制循环条件的变化,否则会产生死循环

执行过程:
在这里插入图片描述

goto

语法:

goto 标签(label);

标签:标明目标的代码的位置,是一个不加“”的字符串

循环的嵌套

三种循环(while、for、do…while)可以互相嵌套。在前一个循环结构的内部又存在一个完整的循环结构。如:

#include <stdio.h>
/**需求:嵌套的for循环案例。求100~200之间的所有的素数*分析:素数又被称作质数,只能被1和自身整数的数叫做素数(思路反着来,过滤非素数)*/
int main(int argc,char *argv[])
{//创建一个变量,存放100~200之间的自然数int num = 100;//循环变量,默认从2开始,因为自然数除以1没有意义int i ;//定义标志位:用来记录1~自身之间的能整除的次数int is_flag;//第一层for循环:生成100~200之间的自然数for(;num <=200;num++){//每个自然数在判别之前,需要重置标志位is_flag = 1;//第2层for循环:验证该自认数能否被除了1~自身之间的数整除,能整除,就改变is_flag的值for(i =2;i<=num/2;i++){//校验是否能整除if(num%i==0){is_flag = 0;break;//只校验第一个能被整除的数}}//根据标志位判断,该自然数是否是素数if(is_flag)//条件判断:is_flag == 1 缩写 is_flag(推荐) is_flag == 0 缩写 !is_flag{printf("%-4d",num);}}printf("\n");return 0;
}

循环结构的典型应用场景

  • 求累和:举例1+2+3+…+100的和
  • 求累乘:举例1*2 * 3…*100的积
  • 求均值:举例(1+2+3+..+100)/100的值
  • 求极值:举例12,34,56,67中的最大值和最小值
  • 元素遍历:常用于数组元素的遍历

基础算法模型

1.累加和

  • 定义一个变量(sum),并赋初值为0;
  • 该变量累加(+=)每一个数据项(i);
  • 当访问完每一个数据项,此时该变量的取值就是累加和的结果

2.累乘

  • 定义一个变量,并赋初值为1
  • 用该变量累成(*=)每一数据项
  • 当访问完每一个数据项,此时该变量的取值就是累乘的结果

3.极值(多用于数组)

  • 定义一个变量,并赋初值为第一个数据项
  • 从第二个数据项开始,依次与该变量进行比较,如果大于/小于该变量,则将当前数据项的数据赋值给该变量
  • 当访问完每一个数据项,此时该变量的取值就是求极值的结果

break和continue

  • break

功能:

①用在switch中,用来跳出switch的case语句;如果case没有break,可能会产生case穿透

②用在循环中(while、do…while、for),提前结束循环,也就是跳出整个循环

说明:

①break不能用于循环语句和switch之外的任何其他语句

②break只能终止并跳出最近一层的循环结构

图示:
在这里插入图片描述
案例:

#include <stdio.h>
/**
* 需求:break案例:高超同学参与一阶段分段考试,如果考试及格,就跳出循环,否则就一直考
*/
int break_test()
{
printf("一阶段分段考试\n");
// 创建一个变量,存储考试成绩
int score = 0;
do
{
printf("高超同学开始一阶段分段考试...\n");
scanf("%d",&score);
// 考试合格,跳出循环
if(score >= 60)
{
break;
}
}while(1);
printf("恭喜高超同学考试通过!\n");
}
int main(int argc,char *argv[])
{
break_test();
return 0;
}
  • continue

功能:continue语句不会结束整个循环,而是跳过本次循环尚未执行的语句,进入下一次循环

说明:

①仅用于循环语句中

②在嵌套循环的情况下,continue语句只对包含它的最近的一层循环起作用

图示:
在这里插入图片描述

  • 跳出多层循环

跳出多层循环不能直接使用break和continue实现,因为它们只能跳出单层循环,跳出多层循环,需要我们自定标志位进行跳出(标志位也可以配合break使用)

注意:如果是多层循环(嵌套循环),进的时候是从外到内,跳出的时候是从内到外

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词