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;
}
目录
相关文章
|
22天前
|
安全 C语言
C语言循环的使用注意点
在C语言中,合理使用循环对于编写高效、安全的代码至关重要。以下是几点建议:确保循环条件正确以避免无限循环;每次迭代时正确更新循环变量;恰当使用`break`和`continue`控制执行流程;注意嵌套循环中的变量作用域;简化循环体内逻辑;根据需求选择合适的循环类型;注意数据类型以避免溢出;保持良好的缩进和注释习惯;减少重复计算以提升性能;确保循环终止条件明确。遵循这些建议,可以提高代码质量和可维护性。
186 88
|
3月前
|
C语言
【C语言】循环语句
C语言中循环语句的相关知识点
35 2
【C语言】循环语句
|
23天前
|
C语言
【C语言基础考研向】08判断语句与循环语句
本文介绍了C语言中的关键编程概念:首先解析了关系表达式与逻辑表达式的优先级及计算过程;接着详细说明了`if-else`语句的使用方法及其多分支和嵌套应用;然后讲解了`while`循环与`for`循环的语法和注意事项;最后介绍了`continue`和`break`语句在控制循环中的作用和示例代码。
|
26天前
|
存储 算法 C语言
C语言手撕实战代码_循环单链表和循环双链表
本文档详细介绍了用C语言实现循环单链表和循环双链表的相关算法。包括循环单链表的建立、逆转、左移、拆分及合并等操作;以及双链表的建立、遍历、排序和循环双链表的重组。通过具体示例和代码片段,展示了每种算法的实现思路与步骤,帮助读者深入理解并掌握这些数据结构的基本操作方法。
|
2月前
|
C语言
【C语言篇】分支语句详解(超详细)
在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要顺序是满⾜实际需求的就可以。 不过我们通常是把 default ⼦句放在最后处理的。
|
2月前
|
机器学习/深度学习 C语言
【C语言篇】循环语句详解(超详细)
while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳出循环.
|
2月前
|
C语言
C语言的循环语句
C语言的循环语句
49 6
|
2月前
|
C语言
C语言分支语句
C语言分支语句
24 4
|
4月前
|
C语言
C语言循环与分支
C语言循环与分支
40 5
|
4月前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现