初阶C语言:分支与循环(2)--循环语句

简介: C语言中的分支与循环语句分步详解,承接上篇的分支语句,本篇是循环语句

承接上篇,本篇我们来介绍循环语句

紫蓝色几何渐变科技互联网微信公众号封面 (1).gif

目录

  • 循环语句
  1. while
  2. for
  3. do while

📍go to

循环语句

循环语句简而言之就是如果满足循环条件,则进入循环,不满足就会跳出循环,在初识C语言种我们已经介绍了while循环的简单步骤以及基本的使用方法,通过上篇对分支语句的学习,我们也应该会使用分支语句,然而这两者可以嵌套使用,本篇会再介绍几种循环语句的使用。

1.while循环

我们已经掌握了分支语句的基本用法,但是在分支语句中如果判断条件满足,只会执行一次,但是通常情况我们都需要进行多次判断,因此就要将分支语句引用进循环语句里面,这样就可以实现多次判断,多次执行,直到某一天不满足循环条件则会跳出循环。

语法结构:

//while 语法结构while(表达式)
{
循环语句;
}

比如:在屏幕上打印1~10

代码演示:

//while循环#include <stdio.h>intmain()
{
inti=1;
while (i<=10)        //设置循环条件,控制打印10次    {
printf("%d ", i);
i++;               //每一次进入循环i++直到i不满足循环条件    }
return0;
}

上述代码已经帮我们了解了while循环的基本语法,接下来我们再来学习学习while循环中新的东西

1.1while循环中的break

break介绍:

break在分支语句里面我们见到过,在循环中也常常使用,其作用是终止循环

//break代码实例#include <stdio.h>intmain()
{
inti=1;
while (i<=10)
    {
if (5==i)
        {
printf("END\n");
break;
        }
printf("%d ", i);
i++;
    }
return0;
}

可以看到,当i等于5时打印了END然后执行break跳出循环

总结:

break在while循环中的作用: 其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的break是用于 永久 终止循环的。

1.2while循环中的continue

关于continue还是第一次遇见,它在循环中也起着一定的作用

//continue 代码实例1#include <stdio.h>intmain()
{
inti=1;
while (i<=10)
    {
if (i==5)
continue;
printf("%d ", i);
i=i+1;
    }
return0;
}

可以看到这个代码打印出来的只有1 2 3 4,但是代码还没有停止,进入了死循环

//continue 代码实例2#include <stdio.h>intmain()
{
inti=1;
while (i<=10)
    {
i=i+1;
if (i==5)
continue;
printf("%d ", i);
    }
return0;
}

可以看到,这段打印出的没有5,这就很奇怪,那continue到底有着怎样的效果呢?

总结:

continue在while循环中的作用就是: continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行, 而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。也就是说只要条件满足遇到了continue,无论continue后面有多少串代码都不执行,直接跳转到循环的判断条件入口处,进行下一次的判断

看到这里就会对代码1中的死循环有所理解

小知识点:while循环条件将会比循环体多执行一次

2.for循环

我们已经学了while循环,我们再来了解for循环,两者各有优势,循环效果是一样的。

语法结构:

for(表达式1; 表达式2; 表达式3)
{
循环语句;
}

表达式1

表达式1为初始化部分,用于初始化循环变量的。

表达式2

表达式2为条件判断部分,用于判断循环时候终止。

表达式3

表达式3为调整部分,用于循环条件的调整。

例如:使用for循环在屏幕上打印1~10
#include <stdio.h>intmain()
{
inti=0;
//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)for (i=1; i<=10; i++)
    {
printf("%d ", i);
    }
return0;
}

使用for循环也可以很好的打印出1~10,而且简洁明了,所以呢,for循环使用频率较高

2.1while循环和for循环比较

inti=0;
//实现相同的功能,使用whilei=1;//初始化部分while(i<=10)//判断部分{
printf("hehe\n");
i=i+1;//调整部分}
//实现相同的功能,使用whilefor(i=1; i<=10; i++)
{
printf("hehe\n");
}

通过比较可以发现,在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,如果我们写了上百行代码,假设要修改其中的三个循环必要条件都会变得不方便,所以,for循环的风格更胜一筹;for循环使用的频率也最高。但是在某些地方要合理选择,两种方法使用得当才可以使你的代码逻辑变得清晰

2.2for循环中的break

我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。

//代码1#include <stdio.h>intmain()
{
inti=0;
for (i=1; i<=10; i++)
    {
if (i==5)
break;
printf("%d ", i);
    }
return0;
}

break在for循环中也是起着终止循环的功能。

2.3for循环中的continue

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

2.4for语句的循环控制变量

建议:

1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
#include <stdio.h>intmain()
{
inti=0;
for (i=1; i<=10; i++)
    {
//i=2;不可在for 循环体内修改循环变量if (i==5)
continue;
printf("%d ", i);
    }
return0;
}
2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
inti=0;
//前闭后开的写法for(i=0; i<10; i++)
{}
//两边都是闭区间for(i=0; i<=9; i++)
{}

2.5for循环的变种

代码1:
#include <stdio.h>intmain()
{
for (;;)
    {
printf("hehe\n");
    }
return0;
}

for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问题。

如果省略判断部分就意味着判断恒为真,就进入了死循环。

代码2:
#include <stdio.h>intmain()
{
inti=0;
intj=0;
intn=0;  //使用n来统计//这里打印多少个hehe?for (i=0; i<10; i++)
    {
for (j=0; j<10; j++)
        {
n++;
printf("hehe ");
printf("%d ",n);
        }
    }
return0;
}

一共打印100个hehe,在i=0时j有10中情况,i=1时j也有10中情况,以此类推就是10*10个hehe,所以for循环也可以嵌套使用。

代码3:
#include <stdio.h>intmain()
{
inti=0;
intj=0;
//如果省略掉初始化部分,这里打印多少个hehe?for (; i<10; i++)   //循环1    {
for (; j<10; j++)  //循环2        {
printf("hehe ");
        }
    }
return0;
}

如果省略了初始化的部分,就打印了10个hehe,这是为什么呢?是因为当i等于0时,进入循环1,j等于0;进入循环2然后打印第一个hehe,j++等于1,再打印一个hehe,直到j等于10,打印了10个hehe,然后出循环2,这时i++等于1,走到循环2,这时由于没有对上一次的j进行初始化,这时的j等于10,不满足循环2(j<10),所以无法进入循环2,然后i++等于2,再走到循环2,又因为没有对j进行初始化,所以又不满足循环2的条件,所以呀,直到i++等于到10,都无法再进入循环2,所以这个代码只打印10个hehe。这也就告诉我们不要随便省略条件,老老实实写上基本不会出错。

代码4:
#include <stdio.h>intmain()
{
intx=0;
inty=0;
for (x=0, y=0; x<2&&y<5; ++x, y++)
    {
printf("hehe\n");
    }
return0;
}

可以看到,for循环里面不一定只有一个变量来控制循环,有时会有多个变量来同时控制,因为for语法结构里面规定的是表达式来控制。所以控制循环的可以是一个变量也可以是多个变量。

2.6for循环笔试题

下面的代码一共可以执行多少次?

#include <stdio.h>intmain()
{
inti=0;
intk=0;
for (i=0, k=0; k=0; i++, k++)
k++;
return0;
}

大家可以仔细思考一下,在文章后面我会公布答案

3.do  while循环

语法结构:

do{
循环语句;
}while(表达式);

3.1 do while循环特点

循环至少执行一次,使用的场景有限,所以不是经常使用。

代码演示:

//打印1~10的数#include <stdio.h>intmain()
{
inti=1;
do    {
printf("%d ", i);
i=i+1;
    } while (i<=10);
return0;
}

do  while循环先执行循环语句再进行判断,所以至少都要执行一次循环语句

3.2do  while循环中的break

代码演示:

#include <stdio.h>intmain()
{
inti=1;
do    {
if (5==i)
break;
printf("%d ", i);
i=i+1;
    } while (i<=10);
return0;
}

break在do  while中的作用也是终止循环

3.3do while循环中的continue

代码演示:

#include <stdio.h>intmain()
{
inti=1;
do    {
if (5==i)
continue;
printf("%d ", i);
i=i+1;
    } while (i<=10);
return0;
}

在do while循环中的continue也是跳过continue下面的语句直接跳转到判断部分,所以当i等于5时就进入了死循环

📍go to语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。

从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。

但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理程。

例如:一次跳出两层或多层循环。

多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

goto语言真正适合的场景如下:
for(...)
{
for(...)
    {
for(...)
        {
if(disaster)
gotoerror;
        }
    }
}
error:
if(disaster)

如果我们写了很多的循环,如果要一次性跳转出整个循环的话很不方便,所以就可以使用go to语句

笔试题解析

下面的代码一共可以执行多少次?

#include <stdio.h>intmain()
{
inti=0;
intk=0;
for (i=0, k=0; k=0; i++, k++)
k++;
return0;
}

在做题之前我们得分清楚‘=’和‘==’,前者是赋值,后者是相等,那我们再看这段代码,i和k先初始化为0,然后进入for循环,再对i和k进行初始化,这时到了判断部分,但这时的判断部分是k=0;意思是将0赋值给k,并不是k==0,又因为0是假,所以不会进入循环,因此这段代码执行0次。


本期分享就到此结束,欲知后续如何,请听下回分解!!

目录
相关文章
|
1月前
|
C语言
【C语言程序设计——循环程序设计】枚举法换硬币(头歌实践教学平台习题)【合集】
本文档介绍了编程任务的详细内容,旨在运用枚举法求解硬币等额 - 循环控制语句(`for`、`while`)及跳转语句(`break`、`continue`)的使用。 - 循环嵌套语句的基本概念和应用,如双重`for`循环、`while`嵌套等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台将对编写的代码进行测试,并给出预期输出结果。 5. **通关代码**:提供完整的代码示例,帮助理解并完成任务。 6. **测试结果**:展示代码运行后的实际输出,验证正确性。 文档结构清晰,逐步引导读者掌握循环结构与嵌套的应用,最终实现硬币兑换的程序设计。
51 19
|
1月前
|
算法 C语言
【C语言程序设计——循环程序设计】求解最大公约数(头歌实践教学平台习题)【合集】
采用欧几里得算法(EuclideanAlgorithm)求解两个正整数的最大公约数。的最大公约数,然后检查最大公约数是否大于1。如果是,就返回1,表示。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。作为新的参数传递进去。这个递归过程会不断进行,直到。有除1以外的公约数;变为0,此时就找到了最大公约数。开始你的任务吧,祝你成功!是否为0,如果是,那么。就是最大公约数,直接返回。
77 18
|
1月前
|
Serverless C语言
【C语言程序设计——循环程序设计】利用循环求数值 x 的平方根(头歌实践教学平台习题)【合集】
根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码,求解出数值x的平方根;运用迭代公式,编写一个循环程序,求解出数值x的平方根。注意:不能直接用平方根公式/函数求解本题!开始你的任务吧,祝你成功!​ 相关知识 求平方根的迭代公式 绝对值函数fabs() 循环语句 一、求平方根的迭代公式 1.原理 在C语言中,求一个数的平方根可以使用牛顿迭代法。对于方程(为要求平方根的数),设是的第n次近似值,牛顿迭代公式为。 其基本思想是从一个初始近似值开始,通过不断迭代这个公式,使得越来越接近。
57 18
|
1月前
|
C语言
【C语言程序设计——循环程序设计】统计海军鸣放礼炮声数量(头歌实践教学平台习题)【合集】
有A、B、C三艘军舰同时开始鸣放礼炮各21响。已知A舰每隔5秒1次,B舰每隔6秒放1次,C舰每隔7秒放1次。编程计算观众总共听到几次礼炮声。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。开始你的任务吧,祝你成功!
52 13
|
1月前
|
存储 C语言
【C语言程序设计——循环程序设计】利用数列的累加和求 sinx(头歌实践教学平台习题)【合集】
项的累加和,一般会使用循环结构,在每次循环中计算出当前项的值(可能基于通项公式或者递推关系),然后累加到一个用于存储累加和的变量中。在C语言中推导数列中的某一项,通常需要依据数列给定的通项公式或者前后项之间的递推关系来实现。例如,对于一个简单的等差数列,其通项公式为。的级数,其每一项之间存在特定的递推关系(后项的分子是其前项的分子乘上。,计算sinx的值,直到最后一项的绝对值小于。为项数),就可以通过代码来计算出指定项的值。对于更复杂的数列,像题目中涉及的用于近似计算。开始你的任务吧,祝你成功!
51 6
|
1月前
|
C语言
【C语言程序设计——循环程序设计】鸡兔同笼问题(头歌实践教学平台习题)【合集】
本教程介绍了循环控制和跳转语句的使用,包括 `for`、`while` 和 `do-while` 循环,以及 `break` 和 `continue` 语句。通过示例代码详细讲解了这些语句的应用场景,并展示了如何使用循环嵌套解决复杂问题,如计算最大公因数和模拟游戏关卡选择。最后,通过鸡兔同笼问题演示了穷举法编程的实际应用。文中还提供了编程要求、测试说明及通关代码,帮助读者掌握相关知识并完成任务。 任务描述:根据给定条件,编写程序计算鸡和兔的数量。鸡有1个头2只脚,兔子有1个头4只脚。
57 5
|
4月前
|
C语言
【c语言】循环语句
循环结构是C语言中用于简化重复操作的重要工具,主要包括while循环、do-while循环和for循环。while循环是最基本的形式,通过不断检查条件来决定是否继续执行循环体。do-while循环则先执行循环体,再检查条件,至少执行一次。for循环逻辑更复杂,但使用频率最高,适合初始化、条件判断和更新变量的集中管理。此外,循环中还可以使用break和continue语句来控制循环的提前终止或跳过当前迭代。最后,循环可以嵌套使用,解决更复杂的问题,如查找特定范围内的素数。
70 6
|
1月前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
63 23
|
1月前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
68 15
|
1月前
|
C语言
【C语言程序设计——函数】亲密数判定(头歌实践教学平台习题)【合集】
本文介绍了通过编程实现打印3000以内的全部亲密数的任务。主要内容包括: 1. **任务描述**:实现函数打印3000以内的全部亲密数。 2. **相关知识**: - 循环控制和跳转语句(for、while循环,break、continue语句)的使用。 - 亲密数的概念及历史背景。 - 判断亲密数的方法:计算数A的因子和存于B,再计算B的因子和存于sum,最后比较sum与A是否相等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台对代码进行测试,预期输出如220和284是一组亲密数。 5. **通关代码**:提供了完整的C语言代码实现
61 24

热门文章

最新文章

相关实验场景

更多