一篇文章让你明白C语言中的分支与循环语句(一)

简介: 一篇文章让你明白C语言中的分支与循环语句

分支与循环语句


1.1 分类


分支语句:


  • if
  • switch


循环语句:


  • while
  • for
  • do while


go to 语句


1.2 什么是语句


我们可以简单理解:以分号结尾的就是一条语句。C语言中语句可以分为:


  • 表达式语句
  • 函数调用语句
  • 控制语句
  • 复合语句
  • 空语句


本篇主要介绍控制语句:


控制语句:控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选 择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。


可分成以下三类:


  1. 条件判断语句也叫分支语句:if语句、switch语句;
  2. 循环执行语句:do while语句、while语句、for语句;
  3. 转向语句:break语句、go to语句、continue语句、return语句。


1.3 分支语句


1.3.1 if语句


if语句的语法格式:


  • if(表达式)

语句;


  • if(表达式)

语句1;

else

语句2;


  • if(表达式1) //多分支

语句1;

else if(表达式2)

语句2;

else

语句3;


看实例代码:


int main()
{
  int age = 0;
  scanf("%d", &age);
  if (age > 18)
  {
  printf("成年人\n");
  }
  else
  {
  printf("未成年\n");
  }
  return 0;
}


这里我们如果输入的age大于18那么就执行if后的条件就判断为真,就执行大括号的语句,否则就执行else大括号内的语句。


那么C语言中,真假如何表示的呢?


C语言中,0为假,非0为真。例如:


int main()
{
  int num = 1;
  printf("%d\n", num > 10);//打印0
  return 0;
}


上述代码中,num>10显然不成立,所以表达式的结果为假,也就是0,所以打印0.


int main()
{
  int num = 100;
  printf("%d\n", num > 10);//打印1
  return 0;
}


这里num>10成立,所以打印1。


注意:在vs编译器中编译C程序文件时,表达式结果为真就用1表示,若为假,就用0表示。但并不是为真就只能用1表示。


假设我们的判断条件有很多,我们可以这样写:


int main()
{
  int age = 0;
  scanf("%d", &age);
  if (age < 18)
  printf("青少年\n");
  else if (age >= 18 && age <= 30)
  printf("青年\n");
  else if (age >= 31 && age <= 50)
  printf("中年\n");
  else if (age >= 51 && age <= 80)
  printf("中老年\n");
  else if (age >= 81 && age <= 100)
  prnitf("老年\n");
  else
  printf("老寿星\n");
  return 0;
}


小测试:下面这段代码的执行结果是什么呢?


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


答案是:什么都不打印。


也许会小伙伴的答案是打印haha,这里解释一下:else会与其距离最近的if语句结合,构成if else语句。所以当判断a==1时,并不成立,所以整个if else语句都不会执行。当然也就什么都不打印了。


1.3.2 switch语句


switch语句也是一种分支语句。 常常用于多分支的情况。


语法格式:


switch(整形表达式) 注意:这里必须是整形表达式,不能是浮点型。

{

语句项;


}


这里所谓的语句项,指的是case语句,例如:


case 整形常量表达式: 注意:这里也必须是整形常量表达式。不能是被const修饰的变量,也不可以是浮点型。


语句;


假如我们要实现一个功能:输入1,打印周一,输入2,打印周二……我们就可以选择switch语句。


int main()
{
  int day = 0;
  scanf("%d", &day);
  switch (day)
  {
  case 1:
  printf("周一");
  case 2:
  printf("周二");
  case 3:
  printf("周三");
  case 4:
  printf("周四");
  case 5:
  printf("周五");
  case 6:
  printf("周六");
  case 7:
  printf("周日");
  }
  return 0;
}


但是当我们运行时,却发现:我们输入1,我们只需要程序打印周一,但是程序却将周一到周日全打印了。这是因为我们输入day的值之后,会与case之后的值由上到下进行匹配,在这个匹配过程中,并不会执行case之后的代码块。若匹配成功,就执行该case后的代码,直到遇到break才退出switch语句。


所以,我们可以这样改进:在每个case语句的代码的最后都加上break语句。


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;
}


此时程序就可以执行我们想要的功能了。


那假如我们的需求变成了:


输入1-5 ,输出工作日

输入6-7,输出休息日


int main()
{
  int day = 0;
  scanf("%d", &day);
  switch (day)
  {
  case 1:
  case 2:
  case 3:
  case 4:
  case 5:
    printf("工作日\n");
  break;
  case 6:
  case 7:
    printf("休息日\n");
  break;
  }
  return 0;
}


1.3.3 default 子句


当switch中的整形表达式的值与case的整形常量表达式的值都匹配不上时,我们就可以添加一个default子句,这时就会执行default语句。例如:


int main()
{
  int day = 0;
  scanf("%d", &day);
  switch (day)
  {
  case 1:
  case 2:
  case 3:
  case 4:
  case 5:
    printf("工作日\n");
  break;
  case 6:
  case 7:
    printf("休息日\n");
  break;
  default:
    printf("输入有误,请重新输入!");
  break;
  }
  return 0;
}


注意:


  • 一个switch语句只能有一个default子句
  • default子句可以出现在switch语句的任何位置
  • 在default语句之后也最好再加上一个break,养成好习惯

相关文章
|
2月前
|
C语言
初识C语言2——分支语句和循环语句
初识C语言2——分支语句和循环语句
78 5
|
2月前
|
机器学习/深度学习 C语言
【c语言】一篇文章搞懂函数递归
本文详细介绍了函数递归的概念、思想及其限制条件,并通过求阶乘、打印整数每一位和求斐波那契数等实例,展示了递归的应用。递归的核心在于将大问题分解为小问题,但需注意递归可能导致效率低下和栈溢出的问题。文章最后总结了递归的优缺点,提醒读者在实际编程中合理使用递归。
69 7
|
2月前
|
C语言
【c语言】分支语句
C语言通过三种基本结构——顺序、选择和循环,构建复杂的程序逻辑。本文主要介绍了C语言的选择结构,即if-else语句及其变体,包括简单的if语句、if-else组合、else if多分支判断、嵌套if以及解决悬空else问题的方法。此外,还详细讲解了逻辑运算符和关系运算符的使用,以及如何利用条件操作符简化逻辑判断。最后,文章对比了if-else与switch语句在实现多分支逻辑时的应用,并解释了switch语句中的break和default关键字的作用。
34 8
|
2月前
|
C语言
【c语言】循环语句
循环结构是C语言中用于简化重复操作的重要工具,主要包括while循环、do-while循环和for循环。while循环是最基本的形式,通过不断检查条件来决定是否继续执行循环体。do-while循环则先执行循环体,再检查条件,至少执行一次。for循环逻辑更复杂,但使用频率最高,适合初始化、条件判断和更新变量的集中管理。此外,循环中还可以使用break和continue语句来控制循环的提前终止或跳过当前迭代。最后,循环可以嵌套使用,解决更复杂的问题,如查找特定范围内的素数。
48 6
|
2月前
|
Serverless C语言
C语言控制语句:分支、循环和转向
C语言控制语句:分支、循环和转向
|
2月前
|
存储 机器学习/深度学习 编译器
一篇文章,把你的C语言拉满绩点
一篇文章,把你的C语言拉满绩点
15 0
|
2月前
|
C语言
教你快速理解学习C语言的循环与分支
教你快速理解学习C语言的循环与分支
19 0
|
2月前
|
小程序 C语言
初识C语言:走近循环
初识C语言:走近循环
|
C语言 SDN
《C语言及程序设计》程序阅读——用循环累加
返回:贺老师课程教学链接  写出下面程序运行的结果。(1) #include &lt;stdio.h&gt; int main( ) { int i,m=1; for(i=5; i&gt;=1; i--) { m=(m+1)*2; printf("m=%d\n",m); } return 0; } (2)#include
799 0
|
C语言
《C语言及程序设计》实践项目——用循环累加
返回:贺老师课程教学链接  【项目1:分数的累加】编程序,输出1/3-3/5+5/7-7/9…+19/21的结果提示:如果直接解决上面的问题有困难,可以设计一条“由易到难”的路线,逐渐解决其中要解决的问题,让自己的思路明朗起来。(1)1+2+...+20  ——这个应该会(2)1+1/2+1/3+…+1/20  ——分数的累加,注意两个整型相除,商也为整型,而显然求和结果应该是小数(3)1/2
989 0