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

简介: C语言初阶-分支与循环语句(1)

一、什么是语句?

C语言可分为下面五类:

      1.表达式语句

      2.调用函数语句

      3.控制语句

      4.复合语句

      5.空语句

本次介绍的是控制语句。

控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。

可分为下面三类:

        1.条件判断语句也叫分支语句:if语句,switch语句;

        2.循环执行语句:do while语句、while语句、for语句;

        3.转向语句:break语句、goto语句、continue语句、return语句。

二、分支语句(选择结构)

1.if语句

1.1 if语句的语法结构

语法结构:
if(表达式)
        语句1;
else
        语句2;
//多分支
if(表达式1)
         语句1;
else if(表达式2)
         语句2;
else
         语句3;

1.2 if语句的使用示例

用双分支根据输入年龄的大小实现成年和未成年的判断:

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

如果我们想分的更细致点,就可以使用多分支:

#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 if (age >= 50 && age < 80)//判断
    printf("中老年");
  else
    printf("老年");
  return 0;
}

注意:if 语句后面默认只能跟一条语句,如果要写多条语句,应该用大括号{}括起来。

如下图所示:

if (age < 18)
  {
    printf("青少年");
    printf("好好学习");
  }

1.3 悬空else

看下面一段代码:

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

大家认为打印结果是什么呢?

 结果应该是什么都不会打印。因为代码中的else是和第二个 if 相匹配的,并且它们合起来属于第一个 if 的一条语句,第一个 if 的判断条件都不成立,后面的肯定不会打印。

 在这里有一个常见的错误就是有人看见第一 if 和else是对齐的,就误以为他们两个是相匹配的,打印结果就是haha,实际上是上述代码的风格误导了大家,由此可见好的代码风格的重要性,如果你的代码写的更加工整规范,就不会发生这种误会,可读性也会变强。

下面我们对上述代码用更好的风格写一下,大家会发现一目了然:

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

else的匹配:else是和离它最近的 if 相匹配的。

1.4几种代码书写方式的对比

1.

如图代码1和代码2的运行结果是一样的,但是代码1的写法就很容易给人造成误解。

2.

  上述第二个代码书写方式就优于第二个,因为代码1在书写时如果错误的少一个等号,编译器仍然会成功编译,但是代码2会编译报错。(如下图)所以代码2如果错误了,很容易发现错误。代码1则不行。

1.5 练习:输出1~100之间的奇数

#include<stdio.h>
int main()
{
  int i = 0;
  while (i <= 100)//循环判断
  {
    if (i % 2 == 1)//判断是否为奇数
      printf("%d ", i);
    i++;
  }
  return 0;
}

2. switch语句

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

比如:输入1,输出星期一

           输入2,输出星期二

           输入3,输出星期三

           输入4,输出星期四

           输入5,输出星期五

           输入6,输出星期六

           输入7,输出星期日

如果我们用 if else 语句写就太复杂了,这时就要用到switch语句了。

2.1switch语句的语法结构

语法结构:
switch(整型表达式)
{
        语句项;
}
//语句项就是一些case语句:
case 整型常量表达式:
          语句;

注意:1.switch后面括号()中的必须是整型表达式,case后面必须跟整型常量表达式 。

          2.在写case 整型常量表达式:时不要忘了中间有空格和后面的冒号。

2.2switch语句中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("星期日");
  }
  return 0;
}

运行结果示例:

代码中switch(day)是循环入口,break是出口,代表着跳出整个switch语句

如果去掉break,输出结果就变成:

这是因为代码从入口进来后会继续执行后面的代码,去掉break后,没有及时跳出switch,继续执行完后面的代码才结束。

当然break是根据需要写的,不用每个case后面都写上break,比如我们要打印周一到周五是工作日,周六和周天是休息日,只需要在星期五和星期日后面写上break:

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

2.3 default子句

如果输入的不在1~7的范围内怎么提醒用户呢?

这时候用default子句就可以实现:

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

运行结果示例:

default子句可以在switch语句中的任意位置使用,使用时注意后面的break要写上。

2.4练习:switch语句是可以嵌套使用的

#include<stdio.h>
int main()
{
  int n = 1;
  int m = 2;
  switch (n)
  {
  case 1:
    m++;
  case 2:
    n++;
  case 3:
    switch (n)
    {//switch的嵌套使用
    case 1:
      n++;
    case 2:
      m++;
      n++;
      break;
    }
  case4:
    m++;
    break;
  default:
    break;
  }
  printf("m = %d,n = %d\n", m, n);
  return 0;
}

输出的结果是什么呢?答案放在评论区。(提醒:注意break的使用

今天就学到这里啦,未完待续。。。

目录
相关文章
|
4月前
|
C语言
初识C语言2——分支语句和循环语句
初识C语言2——分支语句和循环语句
94 5
|
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的值,直到最后一项的绝对值小于。为项数),就可以通过代码来计算出指定项的值。对于更复杂的数列,像题目中涉及的用于近似计算。开始你的任务吧,祝你成功!
42 6
|
1月前
|
C语言
【C语言程序设计——循环程序设计】鸡兔同笼问题(头歌实践教学平台习题)【合集】
本教程介绍了循环控制和跳转语句的使用,包括 `for`、`while` 和 `do-while` 循环,以及 `break` 和 `continue` 语句。通过示例代码详细讲解了这些语句的应用场景,并展示了如何使用循环嵌套解决复杂问题,如计算最大公因数和模拟游戏关卡选择。最后,通过鸡兔同笼问题演示了穷举法编程的实际应用。文中还提供了编程要求、测试说明及通关代码,帮助读者掌握相关知识并完成任务。 任务描述:根据给定条件,编写程序计算鸡和兔的数量。鸡有1个头2只脚,兔子有1个头4只脚。
56 5
|
4月前
|
C语言
【c语言】分支语句
C语言通过三种基本结构——顺序、选择和循环,构建复杂的程序逻辑。本文主要介绍了C语言的选择结构,即if-else语句及其变体,包括简单的if语句、if-else组合、else if多分支判断、嵌套if以及解决悬空else问题的方法。此外,还详细讲解了逻辑运算符和关系运算符的使用,以及如何利用条件操作符简化逻辑判断。最后,文章对比了if-else与switch语句在实现多分支逻辑时的应用,并解释了switch语句中的break和default关键字的作用。
54 8
|
4月前
|
C语言
【c语言】循环语句
循环结构是C语言中用于简化重复操作的重要工具,主要包括while循环、do-while循环和for循环。while循环是最基本的形式,通过不断检查条件来决定是否继续执行循环体。do-while循环则先执行循环体,再检查条件,至少执行一次。for循环逻辑更复杂,但使用频率最高,适合初始化、条件判断和更新变量的集中管理。此外,循环中还可以使用break和continue语句来控制循环的提前终止或跳过当前迭代。最后,循环可以嵌套使用,解决更复杂的问题,如查找特定范围内的素数。
69 6
|
4月前
|
Serverless C语言
C语言控制语句:分支、循环和转向
C语言控制语句:分支、循环和转向