白话C语言之循环结构(for、while循环)

简介: 白话C语言之循环结构(for、while循环)

大家好这里是三岁,C语言是各类语言的基础,由于个人学习需要特别开设了C语言基础专题,内容不一定深入,都是基础知识,还是白话C语言,最简单的方式带领大家学习不是那么容易理解的C语言!


循环程序结构



循环语句是计算机编程中最基础最常用的语句,使用范围广,而且方法简单,只有用法得当可以省略非常多的代码行,而且便于理解。


举例:把1加到100,这个简单的案例大家都知道首相加末项乘以项数除以2.

使用C语言表达式就是:


#include<stdio.h>
int main()
{
    int x;
    x=(1+100)*100/2;
  printf("%d\n",x);
}  


那么人果不知道是几位呢?

#include<stdio.h>
int main()
{
    int x,y;
    printf("需要加到第几位?"); 
    scanf("%d",&y);
    x=(1+y)*y/2;
  printf("%d\n",x);
}  


20210423190230322.png


这样子也不是说不行,但是也没有什么更好的办法呢?

使用循环语句,虽然叠加的项目可以直接使用公式完成但是很多还是不行,比如阶乘比如不规则的叠加等等。

让我们来看看循环的几种形式:


while示例

#include<stdio.h>
int main()
{
    int x,y=0;
    while(y<=100){
      x+=y;
      y++;
  }
  printf("%d\n",x);
}  

202104231913541.png


仔细查看可以发现这个的运算速度比使用公式更加的快。


do–while

#include<stdio.h>
int main()
{
    int x,y=0;
    do{
      x+=y;
      y++;
  }while(y<=100);
  printf("%d\n",x);
}  


do–while语句虽然用法上和while语句差不多但是在算法和构思上缺却相差甚远,运算次数什么的也截然不同,使用时需要严格注意。


for

#include<stdio.h>
int main()
{
    int x,y;
    for(y=0;y<=100;y++){
      x+=y;
  };
  printf("%d\n",x);
}  


接下来让我们一起看看这几种循环有什么是不一样的。

让我们一个一个来看吧


while循环



while的语句结果如下:

while<判断表达式>{  //循环判断
    语句块  //循环体
}


判断表达式使用0和1表示最后的结果,如果是0while循环结束,如果是1while继续执行。

这里面的表达是逻辑表达最后出现的结果默认为逻辑结果。


如果while判断表达式始终为1则结果会呈现死循环,需要通过break语句或其他方式停止。(书写过程中需要注意防止该情况)特殊时候会用死循环完成特定逻辑(需要合理使用)


举例使用while循环完成5!(5的阶乘)


#include<stdio.h>
int main()
{
    int x=1,y=2;  //定义xy,并初始化
    while(y<=5){  //设置判断添加逻辑判断语句
      x*=y;  //算法设置
      y++;  
  };
  printf("%d\n",x);  //设置输出
}  


思路:首先了解阶乘就是逐个相加5!就是

1*2*3*4*5

  • 循环判断就是值到5那么<判断表达式>就是(y<=5)
  • 因为是乘法不能够有0所以所有的初始值都是大于1的。
    又因为1*1没有意义所以y可以从2开始那么初始数据就是:
    int x=1,y=2;
  • 判断的主体就是x*=y;或者x=x*y;
    最后要加上判断的要求就是y值要变大不然没有运行的意义。y++


遍历过程中各个数的值


遍历次数 x的值 y的值
第一次结束 x=2 y=3
第二次结束 x=6 y=4
第三次结束 x=24 y=5
第四次结束 x=120 y=6
第五次 x=120 y不符合逻辑判断语句判断结束


do–while语句



语句结构:

do{
   语句块;
}while(<逻辑判断语块>)


与while语句不同的就是他是先执行后判断的,因此有可能有些时候因为代码组合不一样会出现比while语句多训练一轮的情况,需要更据自己实际情况合理使用。

举例还是使用(5!)


#include<stdio.h>
int main()
{
    int x=1,y=2;
    do{
      x*=y;
      y++;
  }while(y<=5);
  printf("%d\n",x);
}  


原理和之前的一样。

当第4轮时y的值已经变成了6,再进行判定不符合do-while语句结束。最后的结果是120.

如果我们换一种写法!

#include<stdio.h>
int main()
{
    int x=1,y=1;
    do{
      y++;
      x*=y;
  }while(y<=5);
  printf("%d\n",x);
}  


这样子我们的道理还是那个道理但是结果


20210423205343703.png


720怎么来的呢?

第一次:y=2,x=12=2,判定成功继续执行;

第二次:y=3,x=23=6,判定成功继续执行;

第三次:y=4,x=64=24,判定成功继续执行;

第四次:y=5,x=245=120,判定成功继续执行;

第五次:y=6,x=120*6=720.判定失败语句循环结束。


问题找到了多循环了一次那么怎么办呢?

修改我们的判断语句!


#include<stdio.h>
int main()
{
    int x=1,y=1;
    do{
      y++;
      x*=y;
  }while(y<5);
  printf("%d\n",x);
}  


20210423205803511.png


这种情况在do–while里面都有可能出现就是语法不一样导致的结果不一样,需要对语法进行细致的研究。


for语句



for语句是最经常使用的循环语句。

语句结构:


for(表达式1;表达式2;表达式3){
    语句块 //循环体
}
表达式1:设置初始条件
表达式2:控制语句(相对应逻辑判断语块)
表达式3:循环调整语句
注:表达式可以不存在但是两个分号不能够少!

还是5!的例子:

#include<stdio.h>
int main()
{
    int x=1,y;
    for(y=2;y<=5;y++){
      x*=y;
  }
  printf("%d\n",x);
}  


解析:for(初始化y;y判断条件;y调整办法){

执行语句x*=y;

}


break语句



break语句用于跳出全部循环.

break语句既可以用于switch语句又可以使用于循环语句。

一般是循环语句和判定语句嵌套使用。

例如死循环里面满足一定条件就退出。


#include<stdio.h>
int main()
{
    int x=1;
    while(1){  //死循环
      x++;  //x自加先运算后输出
      if(x==10)  //判定是否等于10
        break;  //条件成立执行break指令
  }
  printf("%d\n",x);  //输出结果
}  

20210424003320237.png


continue语句



continue语句 用于结束当前循环(本次循环,不会跳出当前这个大循环),也就是终止本次循环后面发生的内容。

#include<stdio.h>
int main()
{
    int x=1,y=1; //初始化值
    for(y;y<=5;y++){  //循环定义
      x++;  //自加
      if(x==2){  //判断
        continue;  //continue语句
    }
    printf("%d\n",x); //循环输出  
  } 
}  


20210424004055513.png


问题来了按道理应该是1、3、4、5但是结果怎么会酱紫有点奇怪我们来捋一捋!


for一共可以循环5次:

第一次循环:x++得到2 2判断跳出本次循环

第二次循环:x++得到3 输出第一个值3

第三次循环:x++得到4 输出第一个值4

第四次循环:x++得到5 输出第一个值5

第五次循环:x++得到6 输出第一个值6


这里有个问题为什么x++不能够放if语句后面?

让我们来看看


#include<stdio.h>
int main()
{
    int x=1,y=1;
    for(y;y<=5;y++){
      if(x==2){
        continue;
    }
    x++;
    printf("%d\n",x);   
  } 
}  


20210424004559779.png


第一次执行:x=1,判断失败,继续执行x++并输出得到结果2

第二次执行:x=2,判定成功,跳出本次循环

第三次执行:x=2,判定成功,跳出本次循环

第四次执行:x=2,判定成功,跳出本次循环

第五次执行:x=2,判定成功,跳出本次循环

最后的结果是2


死循环



之前提到过的一个陷阱,有可能万劫不复,但是加以使用还是有好处的,特别是配合比较好的if语句和break语句。

让我们来看看这些语句的死循环形式:


while语句:

while(1){  //此处逻辑结果始终为1即可
xxx;
}


do–while语句:

do{
xxx;
}while(1);  //此处逻辑值始终为1即可


for语句:

for(;;){  //表达式2逻辑值始终为1即可
xxx;
}


嵌套循环



循环加循环加判断就可以解决几乎全部的代码(就是执行起来有可能比较麻烦)但是俗话说的好,跑的通的代码就是好的代码。

传说中的乘法口诀!

#include<stdio.h>
int main()
{
    int x,y;  //定义x,y
    for(x=1;x<=9;x++){  //设置9层大循环
      for(y=1;y<=x;y++){  //设置内部的小循环
        printf("%d*%d=%d\t",x,y,x*y);  //输出
    }
      printf("\n");  //设置换行
  } 
}  

20210424010156462.png


这里有一种错误写法需要警惕!!!

这里有一种错误写法需要警惕!!!

这里有一种错误写法需要警惕!!!


#include<stdio.h>
int main()
{
    int x,y=1;
    for(x=1;x<=9;x++){
      for(y;y<=x;y++){
        printf("%d*%d=%d\t",x,y,x*y);
    }
      printf("\n");   
  }
}  


大家会发现基本上没有什么区别理解起来也没有问题,那么为什么会说是错误的呢???


20210424010423905.png


这个是最后的结果!

理解:这个理解不是官方的,是个人在python语言的基础上理解的。

第一层循环可以读取外面的数据,也就是python里面的全局变量。

但是第二层的for循环读取不到外面的变量,只能够在通过判断的时候被x赋值,最后得到的结果也就是x的值。

(此解释仅限于个人理解,还需进一步考证)

此种问题需要警惕。


到这里C语言的基本语句就都说完了,有了这些可以完成大部分的内容,但是并没有这么简单,C语言的路程才刚刚开始,让我们继续加油吧!

目录
相关文章
|
1月前
|
算法 C语言
C语言------循环结构II
这篇文章是C语言循环结构II的实训教程,通过多个实例程序,教授如何综合运用选择结构和循环语句解决问题,体会算法在程序设计中的作用,并复习程序调试功能和技巧。
C语言------循环结构II
|
14天前
|
安全 C语言
C语言循环的使用注意点
在C语言中,合理使用循环对于编写高效、安全的代码至关重要。以下是几点建议:确保循环条件正确以避免无限循环;每次迭代时正确更新循环变量;恰当使用`break`和`continue`控制执行流程;注意嵌套循环中的变量作用域;简化循环体内逻辑;根据需求选择合适的循环类型;注意数据类型以避免溢出;保持良好的缩进和注释习惯;减少重复计算以提升性能;确保循环终止条件明确。遵循这些建议,可以提高代码质量和可维护性。
184 88
|
2月前
|
C语言
【C语言】循环语句
C语言中循环语句的相关知识点
32 2
【C语言】循环语句
|
15天前
|
C语言
【C语言基础考研向】08判断语句与循环语句
本文介绍了C语言中的关键编程概念:首先解析了关系表达式与逻辑表达式的优先级及计算过程;接着详细说明了`if-else`语句的使用方法及其多分支和嵌套应用;然后讲解了`while`循环与`for`循环的语法和注意事项;最后介绍了`continue`和`break`语句在控制循环中的作用和示例代码。
|
18天前
|
C语言
C语言程序设计核心详解 第四章&&第五章 选择结构程序设计&&循环结构程序设计
本章节介绍了C语言中的选择结构,包括关系表达式、逻辑表达式及其运算符的优先级,并通过示例详细解释了 `if` 语句的不同形式和 `switch` 语句的使用方法。此外,还概述了循环结构,包括 `while`、`do-while` 和 `for` 循环,并解释了 `break` 和 `continue` 控制语句的功能。最后,提供了两道例题以加深理解。
|
18天前
|
存储 算法 C语言
C语言手撕实战代码_循环单链表和循环双链表
本文档详细介绍了用C语言实现循环单链表和循环双链表的相关算法。包括循环单链表的建立、逆转、左移、拆分及合并等操作;以及双链表的建立、遍历、排序和循环双链表的重组。通过具体示例和代码片段,展示了每种算法的实现思路与步骤,帮助读者深入理解并掌握这些数据结构的基本操作方法。
|
1月前
|
机器学习/深度学习 C语言
【C语言篇】循环语句详解(超详细)
while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳出循环.
|
1月前
|
算法 C语言
C语言------循环结构
这篇文章是C语言循环结构I的实训教程,介绍了while、do-while和for循环的使用方法,循环程序设计中的常用算法,无条件控制语句在循环中的控制作用,以及循环嵌套的理解和执行过程,并通过多个实例代码演示了这些概念的应用。
|
1月前
|
C语言
C语言的循环语句
C语言的循环语句
45 6
|
1月前
|
算法 编译器 C语言
六:《初学C语言》— 循环结构
【8月更文挑战第1天】本篇文章详细讲解了while循环;for循环;do...while循环,break、continue语句及goto语句,并在文章中附上多个教学示例代码及一个猜数字小游戏
24 0
六:《初学C语言》— 循环结构

相关实验场景

更多