C语言分支循环语句

简介: C语言分支循环语句

分支语句

if语句

单if语句使用

if语句是C语言中最常见的,他的结构就是if(条件),如果条件成立就进入语句,否则就不进入。使用方法如下

int main()
{
  int a = 0, b = 1;
  if (a<b)
  {   //1
        printf("1\n");
        {//2
        printf("a<b\n");
        }
  }
  return 0;
}


需要注意的一点是,当if(条件),条件成立的时候。我们才运行最靠近if的{内容}中的内容。什么意思呢?我们运行程序,发现打印出来了,1和a<b。这就说明,注释1的括号是最靠近if的{},所以注释1的{}中的所有内容都会被打印。


还需要注意的一点就是,如果{}上面没有条件语句,{}是没有意义的。


if else语句

如果我们想写两个对立的条件,难道写两个if语句吗?毫无疑问,这样显得很呆。于是C语言提供了if else语句,if(条件){内容1}else{内容2}。这个语句的特点就是,如果条件成立,执行内容1,如果条件不成立,执行内容2。示例如下

int main()
{
  int a = 2, b = 1;
  if (a<b)
  {   
    printf("a<b\n");
  }
  else
  {
    printf("a>b\n");
  }
  return 0;
}


if else if else语句

既然有了if else语句,但是有时候我们又不可能只出现两种情况,于是C语言又提供了if else if else语句。


写法如下if(条件1){内容1}else if(条件2){内容2}else if(条件3){内容3}else{内容4},这个语句就是,进行判断条件1,如果条件1成立,执行内容1,之后的所有else if和else全部跳过。如果条件1不成立,进行条件2判断,条件2成立就执行内容2,依次类推,如果一直都不成立就执行else中的内容。


注意:如果不知道&&是什么的,可以看初识C语言(5)C语言一些基本常识

#include <stdio.h>
int main()
{
  int a = 0, b = 1;
  if (a==0 && b==0)
  {   
    printf("a=0 b=0\n");
  }
  else if (a == 0 && b == 1)
  {
    printf("a=0 b=1\n");
  }
  else if (a == 1 && b == 0)
  {
    printf("a=1 b=0\n");
  }
  else
  {
    printf("a=1 b=1\n");
  }
  return 0;
}


switch语句

switch基本结构

有时候可能会出现多分支的情况,比如说,输入1,执行内容1。输入2,执行内容2。如果我们全部用if else if会显得很不美观。于是C语言提供了switch语句,用法如下

#include <stdio.h>
int main()
{
  int a = 2;
  switch (a)
  {
    case 1:printf("星期1\n"); break;
    case 2:printf("星期2\n"); break;
    case 3:printf("星期3\n"); break;
    case 4:printf("星期4\n"); break;
    case 5:printf("星期5\n"); break;
    default:printf("周末\n"); break;
  }
  return 0;
}

这个意思就是说,如果变量a是1-5,就输出周一至周五,如果变量不是1-5,就输出周末。结果如下


很多人可能还没有理解switch语句是什么。以这个为例子,a是2,程序就直接跳到case 2:然后依次执行后面的所有内容!这个时候有人会有疑惑,明明这里只输出了一个星期2啊,怎么是从case2开始依次执行后面的所有内容呢?原因很简单,因为我们这里加了break;

break作用

我们看到,switch语句,每一个case后面都有一个break;我们尝试去掉break看看会发生什么

#include <stdio.h>
int main()
{
  int a = 2;
  switch (a)
  {
    case 1:printf("星期1\n"); 
    case 2:printf("星期2\n"); 
    case 3:printf("星期3\n");
    case 4:printf("星期4\n"); 
    case 5:printf("星期5\n"); 
    default:printf("周末\n"); 
  }
  return 0;
}


结果如下


很明显,我们发现他输出了星期2—星期5和周末。这就是我们上面说的程序就直接跳到case 2:然后依次执行后面的所有内容!

现在我们知道了break的作用就是结束switch这个语句。


default作用

我们看到switch最后面有一个default,而这个default作用和if else中的else的作用一样。就是说,如果输入的变量a都不满足上面case的要求,他就执行default这个语句。看代码

#include <stdio.h>
int main()
{
  int a = 6;
  switch (a)
  {
    case 1:printf("星期1\n"); break;
    case 2:printf("星期2\n"); break;
    case 3:printf("星期3\n"); break;
    case 4:printf("星期4\n"); break;
    case 5:printf("星期5\n"); break;
    //default:printf("周末\n"); break;
  }
  return 0;
}


结果我们看到什么都没有输出


循环语句

while语句

while语句结构

while语句比较简单,while(条件){内容},只要条件成立,内容就一直执行。所以我们需要一个让条件在内容中受到衰减,最后条件不满足。否则程序会一直进行下去(注意,在嵌入式写程序中,一定会有一个while(1)让程序一直跑下去,因为我们不能让程序停止)


这个地方a--。表示a这个变量在自己减1,比如说a现在是6,a--之后,a现在就是5了。


#include <stdio.h>
int main()
{
  int a = 6;
  while (a)
  {
    printf("a=%d\n", a);
    a--;  //条件在内容中衰减,逐渐接近不满足条件
  }
  return 0;
}

输出结果


while语句中break应用

我们根据上面所学,可以知道break可以结束一个switch语句。但是break在C语言中作用不仅如此,他还可以结束当前的循环。

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

#include <stdio.h>
int main()
{
  int i = 1;
  while (i <= 10)
  {
    if (i == 5)
      break;        //注意,当if后面没有加{}的时候,认为接下来的一个语句是if的内容,第二个语句不在if内容中。也就是说printf不是if语句的内容
    printf("%d ", i);
    i = i + 1;
  }
  return 0;
}


根据上面代码,我们运行结果如下

可以看到,程序就输出了1,2,3,4。但是没有输出5和接下来的数字。这就是因为break在作用。当i=5的时候,进入if语句,然后break结束当前while循环。需要注意,break只会匹配最近while或者switch。

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


我们执行上面代码,结果是而假如我们把这个break放在外面看看会怎么样

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

结果发现只有一个a=1,这就表明了,break只能结束一次循环,而这次循环就是最接近他的那个。


至于switch可以自己尝试使用以下,我再次就不再啰嗦了

int main()
{
  int i = 1;
  while (i <= 10)
  {
    switch (i)
    {
      case 1:printf("i=1 "); break;
      case 2:printf("i=2 "); break;
      case 3:printf("i=3 "); break;
      case 4:printf("i=4 "); break;
      case 5:printf("i=5 "); break;
      case 6:printf("i=6 "); break;
      case 7:printf("i=7 "); break;
      case 8:printf("i=8 "); break;
      case 9:printf("i=9 "); break;
      case 10:printf("i=10 "); break;
    }
    i = i + 1;
  }
  return 0;
}


while语句中continue应用

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

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


打印出来结果,我们发现只有5没有被打印。这就解释了结束continue后面的语句,重新开始进行进行while判断。

这个时候有人会有疑惑,我的i一开始明明是1啊,为什么是从2开始打印的呢?我们可以看到,在while循环里面,我们先是i自增了一次,然后再打印的,所以是从2开始打印。

但是有人就说,如果我把i=i+1放在while语句的最后面不可以了吗?我们尝试一下

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


结果如下,程序打印出4之后,就不动了。也不弹出 请按任意键继续. . .的提示,这是为什么呢?因为程序还在运行,所以没有弹出。


我们说了,结束continue后面的语句,重新开始进行进行while判断。但是因为i=i+1放在了continue后面,那么i=5成立的时候,i永远不会自增,这就导致i永远会是5,while语句的i<=10永远成立,从而进入一个死循环。


for语句

for语句结构

现在我们开始说for语句,这个语句比较重要,经常会用到!!!for语句的结构如下。

for(表达式1; 表达式2; 表达式3)
 循环语句;
表达式1
表达式1为初始化部分,用于初始化循环变量的。
表达式2
表达式2为条件判断部分,用于判断循环时候终止。
表达式3
表达式3为调整部分,用于循环条件的调整。


其实for语句的作用和while语句类似,都是用于循环的。但是for语句有一个特点,他可以进行条件的调整和初始化,这样让程序更加具有阅读性。我们拿上面那个while做例子

//while示例
int i = 1;
while (i <= 10)
{
    i++;   //自增,和i = i + 1;一个意思
}
//for示例
int i;
for(i=1;i<=10;i++)
{
}


根据两者对比,很明显看到for语句更加方便,特别是循环条件的调整,直接写在了for里面,方便查看。

for语句的省略写法

我们可以看到,一般定义变量的时候就已经初始化了,如果我们在for语句中的初始化部分和定义变量的初始化一样,是不是可以省略掉初始化部分?答案是可以的,其实for循环中,唯一不可省略的部分就是中间的判断部分

//while示例
int i = 1;
while (i <= 10)
{
    i++;   //自增,和i = i + 1;一个意思
}
//for示例
int i=1;
for(;i<=10;)  //注意,第一个“;”必须写上!!!第三个";"可以省略
{
    i++;
}


for循环中的break和continue

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

在break中,for和while区别不大。两个代码结果一样

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


但是continue不一样,还是有些许的区别。我们对比两个代码发现,for循环中,可以成功打印除5以外的1-10所有数字。而while循环中,打印的是除5以外的2-11所有数字。


这个是为什么呢?因为while中是先进行i自增,再打印,所以是2-11的数字,并且i自增不能写在continue之后,不然会进入死循环。(上面讲了)但是for不一样,这个i的自增是执行完for里面的内容之后再进行的。这个i自增不属于for里面的内容,不会被continue给省略掉。


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

do while 语句

do while 语句结构

do while比较特殊,他是先执行内容再进行条件判断。这就表明了至少要循环一次,很少用,而且它的作用while都可以实现,了解一下即可。以下是他的结构:

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


这个语句也没什么可讲的,while语句就是先条件判断,再执行语句。do while就是先执行语句,再条件判断,条件判断成功重新执行一次语句,如果条件判断失败,跳出循环。这导致他至少执行一次命令。


通俗的话来说就是,while是一个听话的孩子,父母说可以做,他才做。而do while不一样,他喜欢先斩后奏,先打游戏,如果父母看见允许就继续打游戏,如果不同意,那起码打了一盘游戏再结束呗,不亏。


需要注意:当第一次进入do while语句之后,执行完语句,然后就可以相当于是在执行while语句了。还是讲个例子理解一下。

#include <stdio.h>
int main()
{
 int i = 10;
 do
 {
 printf("%d\n", i);
 }while(i<10);
 return 0;
}


看这个代码,如果是while语句,那么他就不会执行。但是是do while,那么先执行一次语句,再和while语句一样,条件不成立,不执行语句。

do while 语句中的break和continue

do while中的break和continue与while一样。一样需要注意,i++要再continue前面。(只有for语句不需要注意这一点!

//break示例
#include <stdio.h>
int main()
{
  int i = 1;
  do
  {
    if (5 == i)
      break;
    printf("%d\n", i);
    i++;
  } while (i<10);
  return 0;
}
//continue示例
#include <stdio.h>
int main()
{
  int i = 1;
  do
  {
    i++;
    if (5 == i)
      continue;
    printf("%d\n", i);
  } while (i<10);
  return 0;
}
目录
相关文章
|
5月前
|
C语言
C语言分支和循环语句
分支语句由`if-else`构成,用于根据不同条件执行相应代码。`else`会与最近未配对的`if`结合,多个条件可用`else if`实现。若连续使用`if`,各条件互不影响。嵌套结构可在`if`中再加入`if-else`。此外,`switch`语句适用于多分支选择(注意表达式不能为浮点数,`case`后需加`break`)。循环语句包括`for`、`while`和`do...while`,注意`do...while`末尾需加分号。循环中,`break`直接终止循环,`continue`跳过当前循环剩余部分,但`for`的语句三仍会执行,而`while`中位置影响效果。
62 0
|
9月前
|
人工智能 Java 程序员
一文彻底搞清楚C语言的循环语句
本文介绍了C语言中的三种循环语句:`while`、`do-while`和`for`,并详细解释了它们的语法格式、执行流程及应用场景。此外,还讲解了循环控制语句`break`和`continue`的使用方法。希望这些内容能帮助你在编程道路上不断进步,共同成长!
676 0
一文彻底搞清楚C语言的循环语句
|
10月前
|
C语言
【C语言程序设计——循环程序设计】枚举法换硬币(头歌实践教学平台习题)【合集】
本文档介绍了编程任务的详细内容,旨在运用枚举法求解硬币等额 - 循环控制语句(`for`、`while`)及跳转语句(`break`、`continue`)的使用。 - 循环嵌套语句的基本概念和应用,如双重`for`循环、`while`嵌套等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台将对编写的代码进行测试,并给出预期输出结果。 5. **通关代码**:提供完整的代码示例,帮助理解并完成任务。 6. **测试结果**:展示代码运行后的实际输出,验证正确性。 文档结构清晰,逐步引导读者掌握循环结构与嵌套的应用,最终实现硬币兑换的程序设计。
140 19
|
10月前
|
算法 C语言
【C语言程序设计——循环程序设计】求解最大公约数(头歌实践教学平台习题)【合集】
采用欧几里得算法(EuclideanAlgorithm)求解两个正整数的最大公约数。的最大公约数,然后检查最大公约数是否大于1。如果是,就返回1,表示。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。作为新的参数传递进去。这个递归过程会不断进行,直到。有除1以外的公约数;变为0,此时就找到了最大公约数。开始你的任务吧,祝你成功!是否为0,如果是,那么。就是最大公约数,直接返回。
233 18
|
10月前
|
Serverless C语言
【C语言程序设计——循环程序设计】利用循环求数值 x 的平方根(头歌实践教学平台习题)【合集】
根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码,求解出数值x的平方根;运用迭代公式,编写一个循环程序,求解出数值x的平方根。注意:不能直接用平方根公式/函数求解本题!开始你的任务吧,祝你成功!​ 相关知识 求平方根的迭代公式 绝对值函数fabs() 循环语句 一、求平方根的迭代公式 1.原理 在C语言中,求一个数的平方根可以使用牛顿迭代法。对于方程(为要求平方根的数),设是的第n次近似值,牛顿迭代公式为。 其基本思想是从一个初始近似值开始,通过不断迭代这个公式,使得越来越接近。
194 18
|
10月前
|
C语言
【C语言程序设计——循环程序设计】统计海军鸣放礼炮声数量(头歌实践教学平台习题)【合集】
有A、B、C三艘军舰同时开始鸣放礼炮各21响。已知A舰每隔5秒1次,B舰每隔6秒放1次,C舰每隔7秒放1次。编程计算观众总共听到几次礼炮声。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。开始你的任务吧,祝你成功!
192 13
|
10月前
|
存储 C语言
【C语言程序设计——循环程序设计】利用数列的累加和求 sinx(头歌实践教学平台习题)【合集】
项的累加和,一般会使用循环结构,在每次循环中计算出当前项的值(可能基于通项公式或者递推关系),然后累加到一个用于存储累加和的变量中。在C语言中推导数列中的某一项,通常需要依据数列给定的通项公式或者前后项之间的递推关系来实现。例如,对于一个简单的等差数列,其通项公式为。的级数,其每一项之间存在特定的递推关系(后项的分子是其前项的分子乘上。,计算sinx的值,直到最后一项的绝对值小于。为项数),就可以通过代码来计算出指定项的值。对于更复杂的数列,像题目中涉及的用于近似计算。开始你的任务吧,祝你成功!
232 6
|
10月前
|
C语言
【C语言程序设计——循环程序设计】鸡兔同笼问题(头歌实践教学平台习题)【合集】
本教程介绍了循环控制和跳转语句的使用,包括 `for`、`while` 和 `do-while` 循环,以及 `break` 和 `continue` 语句。通过示例代码详细讲解了这些语句的应用场景,并展示了如何使用循环嵌套解决复杂问题,如计算最大公因数和模拟游戏关卡选择。最后,通过鸡兔同笼问题演示了穷举法编程的实际应用。文中还提供了编程要求、测试说明及通关代码,帮助读者掌握相关知识并完成任务。 任务描述:根据给定条件,编写程序计算鸡和兔的数量。鸡有1个头2只脚,兔子有1个头4只脚。
498 5
|
C语言
【c语言】分支语句
C语言通过三种基本结构——顺序、选择和循环,构建复杂的程序逻辑。本文主要介绍了C语言的选择结构,即if-else语句及其变体,包括简单的if语句、if-else组合、else if多分支判断、嵌套if以及解决悬空else问题的方法。此外,还详细讲解了逻辑运算符和关系运算符的使用,以及如何利用条件操作符简化逻辑判断。最后,文章对比了if-else与switch语句在实现多分支逻辑时的应用,并解释了switch语句中的break和default关键字的作用。
181 8
|
C语言
【c语言】循环语句
循环结构是C语言中用于简化重复操作的重要工具,主要包括while循环、do-while循环和for循环。while循环是最基本的形式,通过不断检查条件来决定是否继续执行循环体。do-while循环则先执行循环体,再检查条件,至少执行一次。for循环逻辑更复杂,但使用频率最高,适合初始化、条件判断和更新变量的集中管理。此外,循环中还可以使用break和continue语句来控制循环的提前终止或跳过当前迭代。最后,循环可以嵌套使用,解决更复杂的问题,如查找特定范围内的素数。
198 6