首页 > 其他分享 >C语言基础:循环结构

C语言基础:循环结构

时间:2024-12-10 12:58:59浏览次数:11  
标签:语句 变量 int C语言 while 循环 100 结构

循环结构

什么是循环

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

循环的分类

  • 无限循环:其实就是死循环,程序设计中尽量避免无限循环。程序中的无限循环必须是可控的

  • 有限循环:循环限定循环次数或者循环的 条件。

循环的构成

  • 循环条件

  • 循环体

当型循环的实现

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

代表:while和for

while

语法:

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

说明:

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

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

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

特点:先判断,后执行,循环语句有可能一次都不执行。

案例:

 #include <stdio.h>
 //需求:计算1+2+3+...+100
 int main ()
 {
     int sum = 0;
     int i = 1;
     whlie(i <= 100)
     {
         //累加运算
         //sum = sum + i;
         sum += i;
         //给循环变量赋值,用来影响循环判断
         i++;
     }
     printf("1~100的累加和是:%d\n",sum);
         return 0;
 }

案例:

 
#include <stdio.h>
 //需求:计算1~100的偶数和
 int main ()
 {
     int sum = 0;
     int i = 2;
     whlie(i <= 100)
     {
         //累加运算
         //sum = sum + i;
         sum += i;
         //给循环变量赋值,用来影响循环判断
         i+=2;
     }
     printf("1~100的累加和是:%d\n",sum);
         return 0;
 }
死循环
 while(1) //我们会在死循环进行必要的限制

for

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

语法:

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

说明:

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

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

    举例:int i = 0,j = 0

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

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

  5. 执行顺序:①②④③ → ②④③ → ②④③ → ... →②

特点:

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

 
#include <stdio.h>
 //需求:计算1~100的偶数和
 int main ()
 {
     int sum = 0;
     int i = 2;
     for(i=2;i <= 100;i++)
     {
         //累加运算
         //sum = sum + i;
         sum += i;
     }
     printf("1~100的累加和是:%d\n",sum);
         return 0;
 }
总结
  • for语句使用语法规则上,降低/避免因为忘记循环条件更新操作,而引起的产生无限驯悍的几率。

  • 应用场合:for语句往往应用于循环次数事先可以确定的场景。

死循环

 for(表达式1;;表达式3);
 for(;;);

循环考虑的三要素
  • 循环变量的初始化

  • 循环条件

  • 循环变量的更新

直到型循环的实现

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

代表:do..while,goto

do..while

语法:

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

说明:

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

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

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

特点:先执行,后判断,不管条件满不满足,循环体语句至少循环一次。

goto(不推荐)

语法:

 goto 标签(label);

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

循环的嵌套

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

案例:

 #include <stdio.h>
 //嵌套for循环案例-求100~200之间的所有素数
 //分析:素数被称为作质数,只能被1和自身整除的数叫做素数。(做这个题,思路反着来,过滤非素数)
 int main ()
 {
     // 创建一个变量,存放100~200之间的自然数
     int num = 100;
     // 循环遍历,默认从2开始,因为自然数除以1没有意义
     int i ;
     // 定义标志位:用来记录1~自身之间的能整除的次数,用来校验该自然数是否为素数
     int is_flag = 1;
     //第一层for循环:生成100~200之间的自然数
     for(;num <= 200;num++)
     {
         //每个自然数在判别之前,需要重置标志位
         is_flag = 1;
         //第二层循环:验证该自然数能否被除了1~自身之间的数整除,能整除,就改变is_flag的值
         for(i = 2;i < num - 1;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+4+.....+100的和

  • 求累乘:举例1* 2 * 3*... * 100的积

  • 求均值:举例(1+2+3+4+.....+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>
 int main ()
 {
     printf("一阶段分段考试");
     //创建一个变量,存储考试成绩
     int score = 0;
     do
     {
         printf("一阶段考试");
         scanf("%d",&score);
        //考试合格,跳出循环
         if(score >= 60)
         {
             break;
         }
     }while(1);
     printf("考试通过!");
     return 0;
 }

案例:

 
#include <stdio.h>
 int main ()
 {
    for (int i = 1,count = 1;i <= 100;i++)
    {
        if(i % 2 == 0)
        {
           if(count > 10)
           {
               break;
           }
            count ++;
            printf("%d\t",i);
        }
    }
     printf("\n");
     return 0;
 }

  • continue

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

说明:

① 仅用于循环语句中。

② 在我们嵌套循环的情况下,continue语句支队包含它的最近的一层循环起作用。

案例:

 
#include <stdio.h>
 //continue案例:求1~100的偶数和。(不使用continue)
 int main ()
 {
     int sum = 0;
     for (int i =1;i <= 100;i++)
     {
         if(i % 2 != 0)
         {
             continue;
         }
         sum += i;
     }
     printf("1~100的偶数和是%d\n",sum);
     return 0;
 }

  • 跳出多层循环

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

案例1:

 #include <stdio.h>
 int main()
 {
     //定义一个标志位
     int is_flag = 1;// 默认循环成立
     //定义一个变量,用来接收控制台输入
     char fu;
     while(is_flag)
     {
         printf("外层循环执行的内容..\n");
         while(is_flag)
         {
             printf("内层循环执行的内容..\n");
             scanf ("%c",&fu);
             if(fu == 'Y' || fu =='y')
             {
                 is_flag == 0;
             }
         }
     }
       return 0;
 }

案例2:

 #include <stdio.h>
 int main()
 {
     //定义一个标志位
     int is_flag = 1;// 默认循环成立
     //定义一个变量,用来接收控制台输入
     char fu;
     while(is_flag)
     {
         printf("外层循环执行的内容..\n");
         while(1)
         {
             printf("内层循环执行的内容..\n");
             scanf ("%c",&fu);
             if(fu == 'Y' || fu =='y')
             {
                 is_flag == 0;
                 break;
             }
         }
     }
        return 0;
 }

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

标签:语句,变量,int,C语言,while,循环,100,结构
From: https://blog.csdn.net/weixin_51619876/article/details/144371101

相关文章

  • C语言整理第八章(指针)
    指针(二)一,字符指针变量(一)用字符指针指向字符串常量有两种方法初始化和赋值1,初始化intmain(){char*p="Doyouknow?";} 2,赋值intmain(){char*p;p="Doyouknow?";} 其实,无论是初始化还是赋值,都是将字符串的第一个字母的地址赋给指针变量(二)字......
  • 【数据结构与算法】回溯算法:LeetCode“排列问题” 求解,解释并模拟递归+回溯的遍历过程
      【作者自述:记录学习笔记,既然写了就让更多的人看到吧!欢迎大家关注交流学习,一步一个脚印持续更新!】【更多推荐笔记】【数据结构与算法】动态规划:解密“完全背包问题”的真相!附LeetCode四大问题的实现-CSDN博客【数据结构与算法】动态规划:解密“0-1背包问题”的真相!附LeetC......
  • 数据结构6.4——归并排序
    基本思想:归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为,称为二路归并。核心思想:将两个已经排好序的数组,合成......
  • 关于车辆结构疲劳有限元分析
    引言车辆是运动并承载的机械,其结构承受的载荷大部分都是交变载荷。零部件失效中,由疲劳裂纹引起的结构失效断裂事故占总断裂事故的70%--80%以上,约有50%--90%的机械结构的破坏属于疲劳破坏。1、人们对车辆结构疲劳的研究主要集中在车辆的承载结构,如悬架、车轮、车架、横向稳定杆、......
  • 【Linux探索学习】第二十弹——基础IO:深入理解C语言文件I/O与Linux操作系统中的文件操
    Linux学习笔记:https://blog.csdn.net/2301_80220607/category_12805278.html?spm=1001.2014.3001.5482前言:文件I/O(输入输出)操作是现代计算机系统中的重要组成部分,几乎所有的程序都需要与文件进行交互。无论是读取配置文件、写入日志文件,还是处理用户数据,文件操作都是不可避......
  • Linux中空变量在循环中生成并列变量的应用
     001、[root@localhosttest]#lsa.txt[root@localhosttest]#cata.txt##测试数据001002003004005006007008009010011012013014015016017018......
  • 循环
    循环Loopfor循环如果用for循环,则可以这么写:foriinrange(1,101):print(i)foriinrange(1,101)就是说,把这些数,依次赋值给变量i。两个嵌套在一起的循环:foriinrange(0,3):forjinrange(0,3):print(i,j)foriinreversed(range(0,10,1))一种特殊写法:forr......
  • C语言数据类型与变量
    本章目标1.数据类型介绍2.signed与unsigned3.数据类型的取值4.变量5.算术操作符6。赋值操作符7.单目操作符8.强制类型转换1.数据类型介绍c语言为我们提供了大量的数据类型供我们使用,数据类型能够为我们描述我们常见的数值,和字符。例如int类型(整型)来去描述整数,ch......
  • 【唐叔学算法】第十天:广度优先遍历-探索图结构的逐层之旅
    你是否曾为如何高效地解决图论中的搜索问题而苦恼?广度优先遍历算法,就像一位经验丰富的探险家,能帮你轻松探索图中的每个角落。今天,就让我们一起揭开广度优先遍历算法的神秘面纱,探索它在Java编程中的应用。一、什么是广度优先遍历?定义广度优先遍历是一种用于遍历或搜索图(Gr......
  • UOJ #791. 【CTS2023WC2023】树据结构
    题面传送门很高妙的交互题。以下均默认已经进行了\(n\)次操作将值随机排列。首先考虑一条链怎么做。有一种类似快速排序的方法:随机一个排列,每加入一个位置,就以这个位置为分割线将值分成两半,这可以从小到大枚举值,然后和最大值交换实现。这样的操作次数是这个点和前面最近的加入......