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

C语言基础7循环结构

时间:2024-08-03 16:54:17浏览次数:12  
标签:语句 循环体 变量 C语言 break while 循环 结构

什么是循环

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

循环的分类

  • 无限循环:程序设计中尽量避免无限循环。(程序中的无限循环必须可控)
  • 有限循环:循环限定循环次数或者循环的条件

循环的构成

  • 循环体
  • 循环条件

当型循环的实现

while

语法:

while(循环条件)
{
    循环语句;
}

说明:

1. 循环条件的返回值必须是布尔类型,在 C 语言中,布尔类型为真使用 非 0 来表示,布尔类型为假使用 0 表示。 2. {} 包起来的内容整体称之为为 循环体 。 3. 我们要在 循环体 中控制 循环条件 的变化,否则会产生死循环 执行过程: 特点:         先判断,后执行,循环体语句有可能一次都不执行。 案例:

死循环

while(1) // 我们会在死循环进行必要的限制

for

语法:

for(①表达式1;②表达式2;③表达式3)
 { 
    ④循环体语句; 
}

说明:

1. () 中可以只保留两个分号,举例: (;;) 2. ① 是循环变量,我们需要赋初值,循环变量可以是列表,多个循环变量使用逗号分隔,举例: int i=0,j=0 3. ② 是循环条件,用来限制循环的次数,循环条件支持关系表达式,如果加入逻辑表达式,会变成复合表达式,举例: i < 10 && j < 10 4. ③ 改变循环条件,支持列表,这里可以使用赋值表达式,举例: i++,j++ 5. 执行顺序: ①②④③ --> ②④③ --> ②④③ ... --> ② ,这里 ① 只执行 1 次。 执行过程: 特点:         先判断,后执行,循环体语句有可能一次都不执行。 案例:

总结

  • for语句使用语法规则上,降低/避免因为忘记循环条件更新操作,而引起的产生无限循环的几率。
  • 应用场合:for语句往往应用于循环次数事先可以确定的场景。

死循环

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

for(;;);

循环实现的三要素

  • 循环变量初始化
  • 循环条件
  • 循环变量更新

案例:

直到型循环的实现

do..while

语法:

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

说明:

1. 循环条件的返回值必须是布尔类型,在 C 语言中,布尔类型为真使用 非 0 来表示,布尔类型为假使用 0 表示。 2. {} 包起来的内容整体称之为为 循环体 。 3. 我们要在 循环体 中控制 循环条件 的变化,否则会产生死循环。 执行过程: 特点: 先执行,后判断,循环体语句至少执行一次。 案例:

goto

语法:

goto 标签(label);
标签:标明目标代码的位置,是一个不加 "" 的字符串。 案例1: 案例2: 注意: goto 只能在同一个函数中跳转, goto 会破坏掉代码的结构,同时会降低代码可读性。在企业开发中,不建议使用

break和continue

break

 功能:

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

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

说明:

1. break 不能用于循环语句和 switch 语句之外的任何其它语句之中。 2. break 只能终止并跳出最近一层的结构。 图示: 案例1:
/**
* 需求:break案例-马杰参与一阶段分段考试,如果考试及格,就跳出循环,否则就一直考 
*/ 
#include <stdio.h> 
int main() 
{ 
    printf("一阶段分段考试\n"); 
    // 声明一个变量,用来存放考试成绩
    int score = 0;
    do
    { 
        // int score = 78; // score的作用域只能作用域到{}以内
         printf("小马哥开始一阶段分段考试...\n");
        scanf("%d",&score);
        // 开始合格,结束考试
        if(score >= 60){
            break;
        }
    }
    while(1);
    printf("恭喜小马哥考试通过!\n");
    return 0;
}
            

案例2:

/**
* 需求:break案例-输出1~100以内的偶数,只输出前10个 
*/ 
#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 语句不会结束整个循环,而是跳过本次循环尚未执行的语句,进入下一次循环。 说明: 1. 仅用于循环语句中。 2. 在嵌套循环的情况下, continue 语句只对包含它的最内层的循环体语句起作用。 图示: 案例:

跳出多层循环

跳出多层循环是不能使用 break 和 continue 的,因为他们只能跳出单层循环,跳出多层循环,需要 我们自己定义标志位进行跳出 案例:

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

循环的嵌套

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

案例:

循环结构的典型应用场景

  • 求累和:举例 1+2+3+4+..+100的和
  • 求累乘:举例 1*2*3*4*..*100的积
  • 求均值:举例: (1+2+3+4+..+100) / 100的值
  • 求极值:举例: 12,34,55,2,66 中的最大值或者最小值
  • 元素遍历:常用于数组元素的遍历,比如:从 [1,2,3,4,5] 获取每一个元素。

基础算法模型

累加和

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

累乘

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

极值

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

标签:语句,循环体,变量,C语言,break,while,循环,结构
From: https://blog.csdn.net/m0_69147706/article/details/140805599

相关文章

  • C语言基础6分支结构
    分支结构分支结构:又被称之为选择结构概念选择结构:根据条件成立与否,选择相应的操作条件建构关系表达式:含有关系运算符的表达式(<,>,>=,<=,!=,==)逻辑表达式:含有逻辑运算符的表达式(&&,||,!),往往用来构建复杂的符合条件:比如:常量/变量:值是否非0,取值(0|1)注意:类似以下写法,没有意义......
  • C语言运算符优先级口诀
    口诀内容(优先级自上而下递减;由逗号分隔的,优先级自左到右递减。)圆方括号,箭头句号。单目增减非反负,针强址长,从右。乘除求模,加减,位移,大小,等不等。位与异或,逻辑与或。条件赋值均右。真逗。解释(斜体字是补全;加粗字是对整行的说明;代码块即是所对应操作符。)圆括号()方括号[]......
  • 函数名冲突导致的C语言“conflicting types”编译错误
    快速解答:啊,看来你也遇到了“conflictingtypes”——类型冲突编译错误。如果你不是遇到:循环引用而没有用宏定义来解决。声明或定义在调用后面。声明和定义冲突。.h.gch未更新。那么我想告诉你,你可跟我一样忘了C语言不支持“函数重载”,即你的函数名不能重复。所......
  • C语言运算符优先级口诀
    口诀内容(优先级自上而下递减;由逗号分隔的,优先级自左到右递减。)圆方括号,箭头句号。单目增减非反负,针强址长,从右。乘除求模,加减,位移,大小,等不等。位与异或,逻辑与或。条件赋值均右。真逗。解释(斜体字是补全;加粗字是对整行的说明;代码块即是所对应操作符。)圆括号()方括号[]......
  • 一天速通顺序结构(0基础,软件“Dev-c++”需自己下载)
    今天浅浅带大家速通顺序结构,话不多说,上干货!1,cout语句我们都知道,任何程序都会用到输出,那该怎么实现输出呢,代码实现:#include<iostream>usingnamespacestd;intmain(){cout<<"字符串";cout<<endl;return0;}其中"#include<iostream>"是头文件,起到声明输入输出......
  • 数据结构-------------------二叉排序树的查找
    #include<stdio.h>#include<stdlib.h>typedefstructBSTNode{intkey;structBSTNode*lchild;structBSTNode*rchild;}BSTNode,*BSTTree;//递归实现二叉排序树的查找操作BSTNode*BSTSearch(BSTTreeT,intkey){if(T......
  • JVM内存结构划分
    JVM内存结构的划分1.堆就相当于当你new一个对象的时候,就会分配一个堆内存给你,当对象销毁时就会有垃圾回收机制来回收这个对象的堆空间。2.栈就好比一串珠子,你只能从一头加或者取,要取后面的就要把前面的取出来才可以。3.堆内存作用就是用来存放java中的对象和数组,当new一个......
  • Linux系统目录结构
    最顶层为跟目录(/)-Unix/Linux的基本哲学理念:一切皆文件-倒挂的树形结构目录说明/处于Linux文件系统树形结构的最顶端,它是Linux文件系统的入口。所有的目录、文件、设备都在/之下,它是Linux文件系统最顶层的唯一的目录;一般建议在根目录下面只有目录,不要直接存放文件;/bin......
  • 1-1 初识C语言
    初识C语言:C语言主要特点:有32个关键字,9种控制语句,34种运算符;数据类型有:整形,浮点型,字符型,数组类型,指针类型,结构体类型,共用体类型等,能实现各种复杂的数据结构(如链表,树,栈等)的运算,尤其是指针类型数据,使用十分灵活;具有结构化的控制语句(如if•••else语句.whil......
  • 数据结构--------二叉树的定义及遍历操作的实现
    /*二叉树的链式存储以及基本操作*/#include<stdio.h>#include<stdlib.h>//树的节点typedefstructBTNode{intdata;structBTNode*lchild;structBTNode*rchild;}BTNode,*BTTree;/......