【C语言】分支和循环语句详解

简介: 【C语言】分支和循环语句详解

什么是语句

在C语言中有以下几种语句:

  1. 表达式语句;
  2. 函数调用语句;
  3. 控制语句;
  4. 复合语句;
  5. 空语句。
  6. 控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选 择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。可分成以下三类:
  7. 条件判断语句也叫分支语句:if语句、switch语句;
  8. 循环执行语句:do while语句、while语句、for语句;
  9. 转向语句:break语句、goto语句、continue语句、return语句。

分支语句(选择结构)

主要是根据条件的不同用来选择不同的结果。

if语句

if语句可以分为以下三类:

  1. 单分支if
  2. 双分支if…else
  3. 多分支if…else if…else if…else

单分支if

语法结构:

if(表达式)
{
    语句;
}

案例:

#include<stdio.h>
int main()
{
    int age=0;
    scanf("%d",&age);
    if(age<18)
    {
        printf("未成年");
    }
}

如果输入的数大于18那么程序就没有结果出现,这符合我们生活中的选择,因为任何一种选择在生活中都会产生结果,所以我们有引入了双分支和多分支if,能够更加的贴近我们的生活。

双分支if

语法结构

if(表达式)
    语句1;
else
    语句2;

案例:

#include<stdio.h>
int main()
{
  int age = 0;
  scanf("%d", &age);
  if (age>18)
  {
    printf("成年");
  }
  else
  {
    printf("未成年");
  }
  return 0;
}

可以得到的结果就是成年和未成年两种结果,但是我还想要在成年中分为青年、中年、老年,很显然要是还是使用双分支if的话就有点麻烦了,所以就需要使用到多分支if。

多分支if

语法结构:

if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;

案例:

#include<stdio.h>
int main()
{
  int age = 0;
  scanf("%d", &age);
  if (age<18)
  {
    printf("未成年");
  }
  else if (age>=18&&age<30)
  {
    printf("青年");
  }
  else if (age >= 30 && age < 50)
  {
    printf("中年");
  }
  else
  {
    printf("老年");
  }
  return 0;
}

可以看出来当条件大于2个以上时,使用多分支if可以让代码结构更加的舒服。

如果表达式的结果为真,则语句执行。 在C语言中如何表示真假?

非0为真,0为假。

switch语句

switch语句也是一种分支语句,他适用与多分支,但是他的判断条件必须是整型表达式。

语法结构:

switch(整型表达式)
{
    语句项;
}

语句项是什么呢?

case 整形常量表达式:
    语句;

在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。

比如:

 #include<stdio.h>
int main()
{
  int day = 0;
  scanf("%d", &day);
  switch (day)
  {
  case 1:
    printf("星期一");
    break;
  case 2:
    printf("星期二");
    break;
  case 3:
    printf("星期三");
    break;
  case 4:
    printf("星期四");
    break;
  case 5:
    printf("星期五");
    break;
  case 6:
    printf("星期六");
    break;
  case 7:
    printf("星期天");
    break;
  }
  return 0;
}

如果我们需要把周一到周五改成工作日,周六周天改成休息日,我们的代码可以改成以下形式:

#include<stdio.h>
int main()
{
  int day = 0;
  scanf("%d", &day);
  switch (day)
  {
  case 1:   
  case 2:
  case 3:
  case 4:
  case 5:
    printf("工作日");
    break;
  case 6:
  case 7:
    printf("休息日");
    break;
  }
  return 0;
}

break语句 的实际效果是把语句列表划分为不同的分支部分。

如果我们输入的数字不是1到7而是其他的数字,那么我们的程序也是没有结果出现的呢,所以这不符合我们生活,那么我们就可以在switch语句中加入defalut字句。

如下:

#include<stdio.h>
int main()
{
  int day = 0;
  scanf("%d", &day);
  switch (day)
  {
  case 1:
  case 2:
  case 3:
  case 4:
  case 5:
    printf("工作日");
    break;
  case 6:
  case 7:
    printf("休息日");
    break;
  default:
    printf("输入错误");
    break;
  }
  return 0;
}

当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。

每个switch语句中只能出现一条default子句。

但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

循环语句

在c语言中有以下几种循环:

  • while
  • for
  • do while

while循环

语法结构:

while(表达式)
 循环语句;

案例:

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

在while循环中可以使用break和 continue

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

这个程序的结果就是当i=5时通过break跳出循环打印的结果为1 2 3 4 。 其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环 。

如果把循环中的break换成continue会怎么样呢

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

这个程序会出现死循环的结果,打印1 2 3 4 然后死循环。

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

for循环

语法结构:

for(表达式1; 表达式2; 表达式3)
 循环语句;
  • 表达式1 表达式1为初始化部分,用于初始化循环变量的。
  • 表达式2 表达式2为条件判断部分,用于判断循环时候终止。
  • 表达式3 表达式3为调整部分,用于循环条件的调整。
#include<stdio.h>
//循环打印1-10
int main()
{
  for (int  i = 1; i <= 10; i++)
  {
    printf("%d ", i);
  }
  return 0;
}

在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹;for循环使用的频率也最高。

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

do…while()循环

语法结构:

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

循环至少执行一次,然后再判断是否接着循环。

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

一定要注意是do…while循环中的判断后面要加上英文的分号。

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

goto语句

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

只有使用goto语句可以直接跳出多层循环。

goto循环使用的场景:

for(...)
    for(...)
   {
        for(...)
       {
            if(disaster)
                goto error;
       }
   }
error:
 if(disaster)

使用案例:

#include<stdio.h>;
int main()
{
    char input[10] = { 0 };
    system("shutdown -s -t 60");
    while (1)
    {
        printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
        scanf("%s", input);
        if (0 == strcmp(input, "我是猪"))
        {
            system("shutdown -a");
            break;
        }
    }
    return 0;
}


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

热门文章

最新文章

相关实验场景

更多