[C语言学习]循环结构(for、while循环)

循环结构(for、while循环)

      • 循环程序结构
        • while示例
        • do--while
        • for
      • while循环
      • do--while语句
      • for语句
      • break语句
      • continue语句
      • 死循环
      • 嵌套循环
        • **这里有一种错误写法需要警惕!!!**

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

上一篇[C语言学习]选择结构(判断语句)传送门

循环程序结构

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

举例:把1加到100,这个简单的案例大家都知道首相加末项乘以项数除以2.
使用C语言表达式就是:

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

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

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

[C语言学习]循环结构(for、while循环)_第1张图片
这样子也不是说不行,但是也没有什么更好的办法呢?

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

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

while示例

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

[C语言学习]循环结构(for、while循环)_第2张图片

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

do–while

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

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

for

#include
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
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
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
int main()
{
     
    int x=1,y=1;
    do{
     
    	y++;
    	x*=y;
	}while(y<=5);
	printf("%d\n",x);
}  

这样子我们的道理还是那个道理但是结果
[C语言学习]循环结构(for、while循环)_第3张图片
720怎么来的呢?
第一次:y=2,x=12=2,判定成功继续执行;
第二次:y=3,x=2
3=6,判定成功继续执行;
第三次:y=4,x=64=24,判定成功继续执行;
第四次:y=5,x=24
5=120,判定成功继续执行;
第五次:y=6,x=120*6=720.判定失败语句循环结束。

问题找到了多循环了一次那么怎么办呢?
修改我们的判断语句!

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

[C语言学习]循环结构(for、while循环)_第4张图片
这种情况在do–while里面都有可能出现就是语法不一样导致的结果不一样,需要对语法进行细致的研究。

for语句

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

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

还是5!的例子:

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

[C语言学习]循环结构(for、while循环)_第5张图片

continue语句

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

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

[C语言学习]循环结构(for、while循环)_第6张图片
问题来了按道理应该是1、3、4、5但是结果怎么会酱紫有点奇怪我们来捋一捋!

for一共可以循环5次:
第一次循环:x++得到2 2判断跳出本次循环
第二次循环:x++得到3 输出第一个值3
第三次循环:x++得到4 输出第一个值4
第四次循环:x++得到5 输出第一个值5
第五次循环:x++得到6 输出第一个值6

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

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

[C语言学习]循环结构(for、while循环)_第7张图片

第一次执行:x=1,判断失败,继续执行x++并输出得到结果2
第二次执行:x=2,判定成功,跳出本次循环
第三次执行:x=2,判定成功,跳出本次循环
第四次执行:x=2,判定成功,跳出本次循环
第五次执行:x=2,判定成功,跳出本次循环

最后的结果是2

死循环

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

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

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

do–while语句:

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

for语句:

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

嵌套循环

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

传说中的乘法口诀!

#include
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");  //设置换行
	}	
}  

[C语言学习]循环结构(for、while循环)_第8张图片

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

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

#include
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");		
	}
	
}  

大家会发现基本上没有什么区别理解起来也没有问题,那么为什么会说是错误的呢???
[C语言学习]循环结构(for、while循环)_第9张图片
这个是最后的结果!

理解:这个理解不是官方的,是个人在python语言的基础上理解的。
第一层循环可以读取外面的数据,也就是python里面的全局变量。
但是第二层的for循环读取不到外面的变量,只能够在通过判断的时候被x赋值,
最后得到的结果也就是x的值。
(此解释仅限于个人理解,还需进一步考证)
此种问题需要警惕。

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

你可能感兴趣的:(C语言基础,编程语言,c语言,for语句,while语句)