C语言之分支与循环【附6个练习】(一)

简介: C语言之分支与循环【附6个练习】(一)

前言

C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。我们可以使⽤if 、 switch 实现分⽀结构,使⽤ for 、 while 、 do while 实现循环结构。

一、什么是语句?

在我们平时写字中,一句话的结尾是句号,然而正在C语言中一句话的结尾是;

  • 语句可以分为以下五类:

1)表达式语句

2)函数调用语句

3)控制语句

4)复合语句

5)空语句

1.1 表达式语句

下面这个就是表达式语句:

3 + 5;

1.2 函数调用语句

函数调用语句,就是将函数进行使用时调用的语句。

printf("%d\n", a);  
ADD(3, 5);

1.3 控制语句

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

可分成以下三类:

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

1.4 复合语句

  • 复合语句就是被多个扩号括起来的语句
{
    int a = 0;
    int b = 0;
    printf("%d\n", a + b);
    return 0;
}

1.5 空语句

  • 空语句虽然很简单,但是其用途很大:有时候需要一条语句,但这条语句什么都不需要做
  • 例如下面这段代码,我们会后面在字符章节也会详细讲解
while(*dest++ = *src++)
{
    ;
}

二、分支语句(选择结构

  • 分支语句可以为双分支或者多分支。
  • 在C语言中需要知道真假两个概念:非0为真,0为假(注意:正数和负数都是真)
  • 分支语句分为两类if语句,switch语句

2.1 if语句

  • 那么if语句的语法结构是怎么样的?
if(表达式)//表达式为真执行下面的语句
    语句;
//单分支语句
if(表达式)
    语句1;
else
    语句2;
//多分支语句
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;
  • 单分支练习(输入大于等于18输出为成年人,否则不输出):
#include <stdio.h>#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age >= 18)
    {
        printf("成年人\n");
    }
}
  • 单分支练习(输入大于等于18输出为成年人,否则输出未成年人):
#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age >= 18)
    {
        printf("成年人\n");
    }
    else
    {
        printf("未成年\n");
    }
}
  • 多分支练习
#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age < 18)
    {
        printf("少年\n");
    }
    else if (age >= 18 && age < 30)
    {
        printf("青年\n");
    }
    else if (age >= 30 && age < 50)
    {
        printf("中年\n");
    }
    else if (age >= 50 && age < 80)
    {
        printf("老年\n");
    }
    else
    {
        printf("老寿星\n");
    }
}
2.1.1 悬空else
  • 当你写了这个代码:
#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
    else
        printf("haha\n");
    return 0;
}
  • 上面那个代码虽然可以运行,但是风格不是很好
#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
   {
        if(b == 2)
       {
            printf("hehe\n");
       }
   }
    else
   {
         printf("haha\n");
   }       
    return 0;
}
  • 这段代码加上了{}使代码变得逻辑更加清楚,要养成更好的代码分格
  • 如何写出一个好的代码呢?

这里我推荐《高质量C/C++编程》,而这本书就写了如何写出好的风格,大家可以看一下

  • 在我们判断是否等于一个变量或者数的时候我们有可能少一个等于号,那么我们怎么避免呢?
//代码1
int num = 1;
if(num == 5)
{
    printf("hehe\n");
}
//代码2
int num = 1;
if(5 == num)
{
    printf("hehe\n");
}

上面的代码哪个比较好?

  • 肯定是代码2,因为在判断是否相等时用两个等于号写,这样反过来写就会避免只写一个等于号,只写一个等于号的话会编译错误,可以及时发现。
2.1.2 练习(1. 判断一个数是否为奇数 2. 输出1-100之间的奇数)
  1. 判断一个数是否为奇数
  • 思路:要判断是不是奇数,那么我们就可以看一个数的余数是不是等于1,如果等于1那么这个数就是奇数,否则就是偶数了
int main()
{
  int n = 0;
  scanf("%d", &n);
  if (n % 2 == 1)
  {
    printf("YES\n");
  }
  else
  {
    printf("NO\n");
  }
  return 0;
}
  1. 输出1-100之间的奇数
  • 思路:要输出1-100之间的奇数,就要产生1~100的数,然后将每个数进行判断是不是奇数然后再输出
  • 我们目前学了while循环,那么我们就用while循环来解决这道题~,后面学到了for循环也可以很简便的写出来

方法一:

#include<stdio.h>
int main()
{
  int i = 1;
  while (i<= 100)//产生1~100的数字
  {
    if(i % 2 ==1)//进行判断是否奇数
      printf("%d ", i);
    i++;
  }
  return 0;
}

方法二:

  • 这个方法的话就有点投机取巧了~~
#include<stdio.h>
int main()
{
  int i = 1;
  while (i <= 100)//产生1~100的数字
  {
    printf("%d ", i);
    //i+=2;
    i = i + 2;//也可以这样写
  }
  return 0;
}

2.2 switch语句

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

比如:

输入1,输出星期一;

输入2,输出星期二;

输入3,输出星期三;

输入4,输出星期四;

输入5,输出星期五;

输入6,输出星期六;

输入7,输出星期七。

  • 如果写成if…else if…else if…else的情况就很复杂,那我们需要有不一样的语法形式
  • switch语句(支持嵌套使用)
switch(整形表达式)
{
    语句项;
}
  • 而语句项是什么呢?
//是一些case语句:
//如下:
case 整形常量表达式:
    语句;

2.3 switch语句中的break:

  • 在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。
#include <stdio.h>
int main()
{
    int day = 0;
    switch(day)
   {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;    
        case 4:
            printf("星期四\n");
            break;    
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期天\n");    
            break;
   }
    return 0;
}
  • 有时候我们的需求变了:
  1. 输入1-5,输出的是“weekday”;
  2. 输入6-7,输出“weekend”
  • 所以我们的代码就应该这样实现了:
include <stdio.h>
//switch代码演示
int main()
{
    int day = 0;
    switch (day)
    {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday\n");
            break;
        case 6:
        case 7:
            printf("weekend\n");
            break;
    }
    return 0;
}
  • 其中break语句的实际效果是把语句列表划分为不同的分支部分。

在这里我推荐一个编程好习惯

  • 在最后一个 case 语句的后面加上一条 break语句。
    (之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句~~)

2.4 switch语句中的default子句:

如果表达的值与所有的case标签的值都不匹配怎么办?

default:

  • 写在任何一个 case 标签可以出现的位置。
    当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
  • 所以,每个switch语句中只能出现一条default子句。
    但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。
  • 推荐编程好习惯
  • 在每一个switch语句中都放入一条default语句是一个好习惯,甚至可以在后面加一个break。

2.5 练习

#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;
        }
    case 4:
        m++;
        break;
    default:
        break;
    }
    printf("m = %d, n = %d\n", m, n);
    return 0;
}

上面这段代码的结果是什么呢?

C语言之分支与循环【附6个练习】(一):https://developer.aliyun.com/article/1426993

相关文章
|
2月前
|
C语言
初识C语言2——分支语句和循环语句
初识C语言2——分支语句和循环语句
78 5
|
3月前
|
安全 C语言
C语言循环的使用注意点
在C语言中,合理使用循环对于编写高效、安全的代码至关重要。以下是几点建议:确保循环条件正确以避免无限循环;每次迭代时正确更新循环变量;恰当使用`break`和`continue`控制执行流程;注意嵌套循环中的变量作用域;简化循环体内逻辑;根据需求选择合适的循环类型;注意数据类型以避免溢出;保持良好的缩进和注释习惯;减少重复计算以提升性能;确保循环终止条件明确。遵循这些建议,可以提高代码质量和可维护性。
236 88
|
2月前
|
C语言
【c语言】分支语句
C语言通过三种基本结构——顺序、选择和循环,构建复杂的程序逻辑。本文主要介绍了C语言的选择结构,即if-else语句及其变体,包括简单的if语句、if-else组合、else if多分支判断、嵌套if以及解决悬空else问题的方法。此外,还详细讲解了逻辑运算符和关系运算符的使用,以及如何利用条件操作符简化逻辑判断。最后,文章对比了if-else与switch语句在实现多分支逻辑时的应用,并解释了switch语句中的break和default关键字的作用。
33 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语言】实现猜数字游戏(分支语句与循环语句的运用)
【C语言】实现猜数字游戏(分支语句与循环语句的运用)
|
2月前
|
C语言
教你快速理解学习C语言的循环与分支
教你快速理解学习C语言的循环与分支
19 0
|
2月前
|
小程序 C语言
初识C语言:走近循环
初识C语言:走近循环
|
2月前
|
编译器 C语言 C++
【C语言】循环语句(语句使用建议)
【C语言】循环语句(语句使用建议)
|
2月前
|
程序员 C语言
【C语言】分支语句(逻辑运算符与关系运算符)
【C语言】分支语句(逻辑运算符与关系运算符)