分支结构

1. 概述

分支结构在开发中使用非常多,主要用于条件判断,条件过滤,情况处理。。。开发中的分支结构有

  • if 分支
  • if else 分支
  • if else if 分支
  • switch case 选择分支结构

2. if 分支结构

2.1 基本格式和执行流程
if (/* 条件判断,要求结果为真假关系 */)
{
    // 语句体,有且只有在 if 之后小括号中的条件判断为真才会执行。
}

执行流程:

  • if 之后小括号中所需的条件判断,通常是利用关系运算符和逻辑运算符组合完成,也有通过单一数据判断,遵守的规则是【非 0 即真】
  • 程序执行到 if 分支结构,首先判断 if 之后小括号的条件判断情况
    • 如果为真,执行大括号中的语句体内容,执行完毕,继续后续代码执行
    • 如果为假,不执行大括号中的语句体内容。
2.2 if 分支结构案例代码

完成条件判断: 判断用户提供的字符是否为数字字符

条件完成:

// 要求字符在 '0' ~ '9' 之间。
// 假设用户提供字符的临时存储变量为 ch
'0' <= ch <= '9'; // 正常的数学方式和生活逻辑,但是代码中不支持。
ch >= '0' && ch <= '9';
#include <stdio.h>

int main(int argc, const char *argv[])
{
	char ch = '5';

	if (ch >= '0' && ch <= '9')
	{
		printf("当前字符为数字字符!\n");
	}

	printf("if 分支结构后续代码...\n");

	return 0;
}

3. if else 分支结构

3.1 基本格式和执行流程
if (/* 条件判断,要求结果为真假关系 */)
{
	// 条件判断为真,执行 if 大括号对应的语句内容
}
else
{
	// 条件判断为假,执行 else 大括号对应的语句内容
}

执行流程

  • 程序执行到 if else 分支结构,首先判断 if 之后小括号中的条件范围是否为真
    • 如果为真,执行 if 之后大括号语句内容
    • 如果为假,执行 else 之后大括号语句内容
  • 执行大括号内容结束,继续执行后续代码。
3.2 if else 分支结构案例代码

完成条件判断: 判断用户提供的字符是否为英文大写字母,如果是打印 YES ,否则打印 NO

条件判断完成,要求实现判断字符数据是否为大写英文字母

// 'A' ~ 'Z'
// 假设字符临时存储变量为 ch
ch >= 'A' && ch <= 'Z'
#include <stdio.h>

int main(int argc, const char *argv[])
{
	char ch = 'i';

	if (ch >= 'A' && ch <= 'Z')
	{
		printf("YES!\n");
	}
	else
	{
		printf("No!\n");
	}

	printf("大写字母判断案例!\n");

	return 0;
}

4. if else if 分支结构

4.1 基本格式和执行流程
if (/* 条件匹配 1,真假关系 */)
{
	// 处理方式 1
}
else if (/* 条件匹配 2,真假关系 */)
{
	// 处理方式 2
}
else if (/* 条件匹配 3,真假关系 */)
{
	// 处理方式 3
}
else 
{
	// 以上所有的 if 都没有匹配的最终处理方式
}

执行流程

  • 程序执行到 if else-if 分支结构,将当前所持条件和 if 之后的小括号内容进行匹配
    • 如果存在对应的匹配项,执行对应大括号处理方式,直接跳出分支结构
    • 如果没有任何一个 if 匹配,执行 else 中的处理方式
4.2 if else-if 分支结构案例代码

超市购物送代金券

  • 满 1000 送 300 元
  • 满 500 送 100 元
  • 满 100 送 15 元
  • 不满 100 送心相印 or 清风一包
#include <stdio.h>

int main(int argc, const char *argv[])
{
	int total_price = 88;

	if (total_price >= 1000)
	{
		printf("送 300 元劳斯莱斯代金券\n");
	}
	else if (total_price >= 500)
	{
		printf("送 100 元五菱宏光代金券\n");
	}
	else if (total_price >= 100)
	{
		printf("送 15 元雅迪代金券\n");
	}
	else
	{
		printf("送xxy or 清风 半张\n");
	}

	printf("欢迎下次光临!\n");

	return 0;
}

5. switch case 选择分支结构

5.1 基本格式和执行流程

【要求】

  • switch case 结构请使用标准结构,不允许省略任何一个组成部分
  • switch case 仅支持【整型,字符,枚举和字符串类型】,常用类型是【整型和枚举类型】
switch (/* 存储用户选择数据的变量 */)
{
    case 常量1:
       	// 处理方式1
        break;
    case 常量2:
        // 处理方式 2
        break;
    case 常量3:
        // 处理方式 3
        break;
    default:
       	// 无匹配项的最终处理方式
        break;
}

执行流程

  • switch case 结构将小括号中变量存储数据和 case 之后的常量进行匹配
    • 如果存在对应的匹配 case ,执行处理方式到 break 终止整个 switch case 结构
    • 如果没有匹配项,执行 default 处理方式。default 就是 switch case 自带的错误处理方式。
5.2 switch case 分支结构案例代码
#include <stdio.h>

int main(int argc, const char *argv[])
{
	printf("1. 地三鲜 18RMB\n");
	printf("2. 麻婆豆腐 26RMB\n");
	printf("3. 开水白菜 388RMB\n");
	printf("4. 霸王别姬 128RMB\n");
	printf("5. 红焖羊肉 38RMB\n");
	printf("6. 黄河大鲤鱼 98RMB\n");

	int choose = 16;

	switch (choose)
	{
		case 1:
			printf("1. 地三鲜 18RMB\n");
			break;
		case 2:
			printf("2. 麻婆豆腐 26RMB\n");
			break;
		case 3:
			printf("3. 开水白菜 388RMB\n");
			break;
		case 4:
			printf("4. 霸王别姬 128RMB\n");
			break;
		case 5:
			printf("5. 红焖羊肉 38RMB\n");
			break;
		case 6:
			printf("6. 黄河大鲤鱼 98RMB\n");
			break;
		default:
			printf("选择错误!");
			break;
	}

	return 0;
}

循环结构

1. 概述

简单,初步解决代码中重复功能问题,如果按照基本的 CV 大法实现,会导致以下问题

  • 代码冗余
  • 代码阅读性极差
  • 代码的可维护性极差

常用的循环结构有

  • while 循环结构
  • do while 循环结构
  • for 循环结构

2. while 循环结构

2.1 基本格式和执行流程
while (/* 循环条件,真假关系 */)
{
    // 循环体内容
    // 循环条件修改变更
}

执行流程

  • 程序执行到 while 循环结构,需要通过 while 之后小括号条件判断进行循环控制执行
    • 如果循环条件为真,执行循环体内容,包括循环条件修改,回到 while 之后小括号判断
    • 如果循环条件为假,终止循环运行。执行 while 循环结构后续代码。
2.2 while 循环结构案例代码
#include <stdio.h>
​
int main(int argc, const char *argv[])
{   
    // n 和 count 是较为常见的循环控制变量
    int n = 10; 
​
    while (n > 0)
    {
        printf("%d 今天晚上去吃烤鱼!\n", n);
        n -= 1; // --n n--
    }
​
    return 0;
}

3. do while 循环结构

3.1 基本格式和执行流程
do
{
    // 循环体内容
    // 循环条件修改变更   
} 
while (/* 循环条件,真假关系 */);

执行流程

  • 程序执行到 do while 循环结构
    • 首先执行 do 之后到 while 之间的所有代码
    • 之后判断 while 小括号中的条件判断是否为真
      • 如果为真,继续执行 do 到 while 之间的循环体内容,后续继续判断
      • 如果为假,终止循环执行。
3.2 do while 循环结构案例代码
#include <stdio.h>
​
int main(int argc, const char *argv[])
{
    int n = 10;
​
    do
    {
        printf("%d 周日在家写项目\n", n);
        n -= 1;
    }
    while (n > 0);
​
    return 0;
}

4. for 循环结构【重点,常用】

4.1 基本格式和执行流程
for (/* 循环条件初始化 */; /* 循环条件判断 */; /* 循环条件修改 */)
{
    // 循环体
}

执行流程

4.2 for 循环结构案例代码
#include <stdio.h>
​
int main(int argc, const char * argv[])
{
    /*
     * for 循环中常用的循环变量一般是 i j k l m n
     * 通常情况下使用 i j k 较多
     */
    for (int i = 1; i <= 10; i++)
    {
        printf("祝大家周末快乐!\n");
    }
​
    return 0;
}

5. break 关键字【重点】

break 关键字是用于跳出一层循环结构 或者 switch case 选择分支结构。一般情况下用于在循环过程满足特定条件之后,终止跳出循环内容。

#include <stdio.h>
​
int main(int argc, const char *argv[])
{
    for (int i = 1; i <= 10; i++)
    {   
        /*
         * 等值判断如果涉及到常量和变量比较
         * 推荐常量在前,变量在后
         */
        if (5 == i) // i == 5
        {
            printf("break 执行!\n");
            break;
        }
​
        printf("i = %d\n", i);
    }
​
    return 0;
}

tips:等值判断如果涉及到常量和变量比较,推荐常量在前,变量在后

6. continue [TODO]