C语言循环结构深入刨析

目录
  • 总述
  • while循环
    • 语法结构
    • while循环中break和continue
      • break
      • continue
  • for循环
    • 语法结构
    • for循环中break和continue
      • break
      • continue
    • for循环中省略表达式的问题
    • for循环嵌套
  • do-while循环
  • goto语句
  • 总结

总述

生活中不止处处是选择,还时常面临着重复做某事,比如呢,我们日复一日的学习、敲代码、

C语言中提供了 —while循环—for循环—do-while循环来表达循环

接下来,对三种循环进行分别介绍

while循环

while循环的流程图大致就是这样子

语法结构

while( expression )   //判断表达式是否成立,成立就执行循环体,不成立则不进入
循环体;

接下来我们使用一下while循环,打印1-10的数字

#include <stdio.h>
int main(){
    int i = 1;
    while(i < 11)
        printf("%d ",i++);
    return 0;
}

这便是while最简单的用法,接下来看一下while中的break和continue

while循环中break和continue

break

看到break大家肯定不陌生,选择结构中的switch-case就要搭配着break使用哦

#include <stdio.h>
int main(){
    int i = 1;
    while(i < 11)
    {
        if( 5 == i)
            break;
        printf("%d ",i++);
    }
    return 0;
}

可以看出,当i=5的时候,直接跳出了整个循环不再执行

break是直接跳出循环,也是直接跳出switch-case

continue

在英语中,continue是继续的意思 ,在循环中,表示跳过这次循环进行下一次循环

#include <stdio.h>
int main() {
    int i = 1;
    while (i < 11)
    {
        if (5 == i)
            continue; // 把break换成continue试一下
        printf("%d ", i++);
    }
    return 0;
}

大家可以猜一下,可想而知,大家可能会认为结果是 1 2 3 4 6 7 8 9 10 跳过5,我们来分析一下

光标一直在闪烁,死循环,那怎么样才能达到跳过5的效果呢,

核心问题在于**这样i的值没办法变化,那我们把i放在continue前面来试试**

#include <stdio.h>
int main() {
    int i = 0;
    while (i < 11)
    {
        i++;
        if (5 == i)
            continue;
        printf("%d ", i);
    }
    return 0;
}

这样continue就不会跳过循环因子 -i 的变化,所以不会死循环,来看结果

成功跳过了5,大家在while循环中使用continue时一定要注意循环因子的问题

continue 在while循环中的作用就是:

  • 本次循环中continue后边的代码不会再执行而是直接跳转到while语句的判断部分。
  • 进行下一次循环的入口判断。

for循环

语法结构

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

循环体;

  • 表达式1为**初始化部分,用于初始化循环变量的**。
  • 表达式2为_条件判断部分_,用于**判断循环时候终止**。
  • 表达式3为_调整部分_,用于**_循环条件的调整 _**。

for循环中break和continue

break

for循环中break与while循环中break完全相同,表示跳出循环

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

break基本没啥区别,就是跳出循环

continue

for循环中continue跳出的依然是此次循环,但是并不会跳过表达式3

#include <stdio.h>
int main() {
	int i = 0;
	for (i = 1; i < 10; i++) {
		if (5 == i)
			continue;
		printf("%d ", i);
	}
	return 0;
}

依然是跳过5,continue不会跳过表达式3,意味着i++可以执行,不会造成死循环

当然,一个人想写bug谁也拦不住他

比如:

for循环中省略表达式的问题

for循环中有3个表达式,都可以省略,但是分号一个不能少

int main(){
    int i = 0;
    //可以写成这样
    for (i=0;i<10;)
        ;
    //还可以这样
    for(i = 0;;)
        ;
    //甚至是这样
    for(;;);  //三分号一个也不能少
}

for(;; 这样的代码,如果循环体中没有break,基本就是妥妥死循环,并不建议大家这样使用

for循环嵌套

当出现两个for循环的时候,需要考虑循环控制的问题,行列,内外循环都代表什么?大家需要想清楚

写一个九九乘法表

#include <stdio.h>
int main() {
	int i = 0;
	int j = 0;
	for (i = 1; i < 10; i++) {  //控制行
		for (j = 1; j <= i; j++) {
			printf("%d * %d = %d  ", j, i, i * j); //控制列
		}
		printf("\n");
	}
	return 0;
}

一般情况下,内层循环因子的控制条件都和外层循环因子有关系

下面给大家几个for循环的注意事项

  • 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
  • 建议for语句的循环控制变量的取值采用“前闭后开区间”写法
#include <stdio.h>
int main(){
    int arr[10] = {1,2,3,4,5,6,7,8,9,10};//数组下标从0到9
    int i = 0;
    for(;i <=9;i++)  //前闭后闭
        printf("%d ",arr[i]);
    for(;i < 10;i++)//前闭后开
        printf("%d ",arr[i]);
    return 0;
}

前闭后开区间的写法,可能使数字有了某种含义,比如例子中的10,刚好是打印元素的个数,也是数组的长度

给大家补充一个小知识

警惕for循环后边直接跟分号的题,学校爱出这玩意,懂得都懂

do-while循环

do-while循环与其他两种循环有很大不同,而也是使用频率最小的循环

do
    循环体
while(判断条件);

do-while循环最大的特点就是无论如何,循环体一定会执行一次

只有在对应场景中,才应该使用do-while循环

do-while循环中,break以及continue的用法与while循环中一样,本文不在赘述。

goto语句

对于goto语句,是一种跳转,其实没必要说,因为能用它解决的用循环都能解决

简单介绍一下,但是并不推荐大家使用

#include <stdio.h>
int main()
{
    printf("hehe\n");
    goto flag;
    printf("haha\n");
flag:
    printf("heihei\n");
    return 0;
}

goto 会直接跳转到flag标记处,跳过打印haha

这只是goto语句的语法

goto语句真正使用在多层循环嵌套中,跳出循环,使用break达不到,只能跳出一次,这些后续碰到再说

总结

  • for循环对于初始化、条件、循环因子的控制都在一起
  • do-while循环的循环体至少执行一次
  • goto不推荐大家使用

各种循环各有千秋,大家要根据对应的场景,选择对应的循环,达到需求

本文只是对循环语法进行了介绍,对于循环,大家要勤加练习, 多思考

到此这篇关于C语言循环结构深入刨析的文章就介绍到这了,更多相关C语言循环结构内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言简明分析选择结构和循环结构的使用

    目录 一.程序中的选择结构(if) 二.switch多分支选择语句 三.while循环结构 四.do...while 与 for 五.break和continue 一.程序中的选择结构(if) if的用法 上代码: #include <stdio.h> int main() { short a = 1; short b = 2; int c = a - b; if( c > 0 ) { printf("a > b\n"); } else { printf(&qu

  • C语言循环结构详解

    目录 break语句 continue语句 C语言循环结构 一.goto 语句(现在一般很少用) 1.语句介绍: 2.语法结构: 3.goto 语句程序示例: 二.do-while语句 1.语句介绍: 2.语法结构: 3.do-while 流程图: 4.do-while 语句程序示例: 三.while 语句 1.语句介绍: 2.语法结构: 3.while 循环流程图: 4.while 语句程序示例: 四.for 循环语句: 1.语句介绍: 2.语法结构: 3.for 循环语句流程图 4.for

  • C语言中对于循环结构优化的一些入门级方法简介

    一.代码移动 将在循环里面多次计算,但是结果不会改变的计算,移到循环外面去. 例子: 优化前: void lower1(char *s){ int i; for(i=0;i<strlen(s);++i) if(s[i]>='A'&&s[i]<='Z') s[i]-=('A'-'a'); } 优化后: void lower2(char *s){ int i; int len=strlen(s); for(int i=0;i<len;++i) if(s[i]>='

  • C语言循环结构与时间函数用法实例教程

    本文实例展示了C语言循环结构与时间函数用法,对于C语言的学习来说是非常不错的参考借鉴材料.分享给大家供大家参考之用.具体如下: 完整实例代码如下: /********************************************** ** <Beginning C 4th Edition> Notes codes ** Created by Goopand ** Compiler: gcc 4.7.0 *****************************************

  • C语言循环结构深入刨析

    目录 总述 while循环 语法结构 while循环中break和continue break continue for循环 语法结构 for循环中break和continue break continue for循环中省略表达式的问题 for循环嵌套 do-while循环 goto语句 总结 总述 生活中不止处处是选择,还时常面临着重复做某事,比如呢,我们日复一日的学习.敲代码. C语言中提供了 —while循环—for循环—do-while循环来表达循环 接下来,对三种循环进行分别介绍 wh

  • JavaScript 关于事件循环机制的刨析

    目录 前言: 一.事件循环和任务队列产生的原因: 二.事件循环机制: 三.任务队列: 3.1 任务队列的类型: 3.2 两者区别: 3.3 更细致的事件循环过程 四.强大的异步专家 process.nextTick() 4.1 process.nextTick()在何时调用? 前言: 这次主要整理一下自己对 Js事件循环机制,同步,异步任务,宏任务,微任务的理解,大概率暂时还有些偏差或者错误.如果有,十分欢迎各位纠正我的错误! 一.事件循环和任务队列产生的原因: 首先,JS是单线程,这样设计也是

  • C语言数据结构经典10大排序算法刨析

    1.冒泡排序 // 冒泡排序 #include <stdlib.h> #include <stdio.h> // 采用两层循环实现的方法. // 参数arr是待排序数组的首地址,len是数组元素的个数. void bubblesort1(int *arr,unsigned int len) { if (len<2) return; // 数组小于2个元素不需要排序. int ii; // 排序的趟数的计数器. int jj; // 每趟排序的元素位置计数器. int itmp

  • C语言树与二叉树基础全刨析

    目录 一.树的概念和结构 1.1 树的概念 1.2 树的结构 & 相关名词解释 1.3 树的表示 1.4 树的应用 二.二叉树的概念 & 存储结构(重要) 2.1 二叉树的概念 2.2 特殊的二叉树 2.3 二叉树的性质 2.4 二叉树的存储结构 一.树的概念和结构 1.1 树的概念 树是一种非线性的数据结构,它是由 n(n>=0)个有限结点组成一个具有层次关系的集合.把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的. 有一个特殊的结点,称为根结点,根节点没有前

  • C语言深入刨析数据结构之栈与链栈的设计与应用

    目录 一.栈的定义 二.栈的特点 三.栈的理解 四.链栈引入 五.链栈定义 六.链栈的结构体设计 七.链栈的基本操作 7.1链栈的初始化 7.2链栈判空 7.3链栈入栈 7.4链栈出栈 7.5取栈顶元素 八.总结 一.栈的定义 栈是限定仅在表尾进行插入和删除操作的数据结构(受到限制的线性表). 我们把允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何元素为空栈. 二.栈的特点 后进先出 比如word,浏览器网页等一系列软件中,都有撤销的操作,就是利用栈的这种方式来实现的,可能不同软件的代码不

  • C语言进阶教程之循环语句缺陷详析

    目录 前言 1 循环语句的三要素 2 使用不同循环语句实现六种排列组合 2.1 第一种排列(ABC) 2.2 第二种排列(ACB) 2.3 第三种排列(BCA) 2.4 第四种排列(CBA) 2.5 第五种排列(BAC) 2.6 第六种排列(CAB) 3 什么时候用for循环语句 4 什么时候用while循环语句 5 什么时候用do-while循环语句 6 其他情况 7 总结 前言 你是否也有过下面的体会? 为什么刚开始学习C语言时很喜欢用for循环语句,但逐渐发现有经验的工程师都在用while

  • python语法之语言元素和分支循环结构详解

    目录 一.语言元素 1.变量及其类型 (1)变量 (2)变量类型 2.变量命名规则 3.变量的使用 4.运算符 二.分支循环结构 1.if 2.for-in 3.while 总结 python中严格控制缩进,一个tab键或者4个空格 一.语言元素 1.变量及其类型 (1)变量 所谓变量,就是可以改变的量. 首次使用变量会在内存中划分空间,并初始化值: 再次使用变量不再划分空间,修改原空间的. (2)变量类型 ①数值类型 int float bool:True.False ②字符串类型 字符串运算

  • C语言形参和实参传值和传址详解刨析

    目录 例题 分析 实参与形参 实际参数(实参): 形式参数(形参): 修改 分析 传值和传址 传值调用 传址调用 讲解知识点之前,我们先来做一道题! 例题 写一个函数可以交换两个整形变量的内容 例如: 交换前:20 30 交换后:30 20 题目让我们用函数的方式写 #include <stdio.h> void Swap1(int x, int y) { int z = 0; z = x; x = y; y = z; } int main() { int a = 0; int b = 0;

随机推荐