C语言 --- 分支
C语言 --- 分支
- 语句
- 分支语句
- 含义
- if...else语句
- 单分支if语句
- 语法形式
- 双分支 if-else 语句
- 语法形式
- 悬空else
- 含义
- 问题描述
- 多分支 if-else 语句
- 语法形式
- switch...case语句
- 含义
- 语法形式
- 总结
💻作者简介:曾与你一样迷茫,现以经验助你入门 C 语言
💡个人主页:@笑口常开xpr的个人主页
📚系列专栏:C 启新程
✨代码趣语:C 语言是一种简洁、高效、强大的语言,它能够让你做任何你想做的事情。
💪代码千行,始于坚持,每日敲码,进阶编程之路。
在编程的世界里,每一行代码都可能隐藏着无限的可能性。你是否想过,一个小小的程序究竟能改变什么?它可以是解决复杂问题的工具,也可以是实现梦想的桥梁。今天,就让我们一起走进 C 语言分支和循环的世界,探索它的无限潜力。
语句
C语言的代码是由⼀条⼀条的语句构成的,C语言中的语句可为以下五类:
- 空语句
- 表达式语句
- 函数调用语句
- 复合语句
- 控制语句
分支语句
含义
在 C 语言中,分支语句也被称为选择语句,它通常用于根据不同的条件来执行不同的代码块。
if…else语句
if-else 语句是最基本的选择结构,用于根据条件的真假来决定执行哪一段代码。
单分支if语句
语法形式
if(表达式)
{
//当表达式为真时,执行的代码块。
}
注:如果表达式的结果为真,则语句执行。在C语言中0表示假,非0表示真。
下面展示一些
代码示例
。
#include <stdio.h>
int main()
{
int num = 10;
scanf("%d", &num);//输入一个数字
if (num > 5) //if语句进行条件判断
{
printf("输入的数字大于5\n");
}
return 0;
}
代码解释
在上面的代码中,如果输入的数字大于5,则会输出"输入的数字大于5";
反之,则不输出。
双分支 if-else 语句
语法形式
if(表达式)
{
//当表达式为真时,执行的代码块。
}
else
{
//当表达式为假时,执行的代码块。
}
注:在C语言中语句是以分号结束,且从主函数开始执行,自上而下依次执行的。
下面展示一些
代码示例
。
#include <stdio.h>
int main()
{
int num = 10;
scanf("%d", &num);//输入一个数字
if (num > 5) //条件判断
{
printf("输入的数字大于5\n");//条件为真时执行
}
else
{
printf("输入的数字小于5\n");//条件为假时执行
}
return 0;
}
代码解释
在上面的代码中,如果输入的数字大于5,则会输出"输入的数字大于5",这句话;
反之,则输出"输入的数字小于5"这句话。
悬空else
含义
“悬空 else”是在使用 if-else 语句嵌套时容易出现的一个问题,它涉及到 else 子句与 if 语句的匹配规则。
问题描述
在 C 语言中,当有多个 if 语句嵌套且只有一个 else 语句时,else 子句会和离它最近的、还未匹配 else 的 if 语句进行匹配,即使在代码缩进上可能会让人产生误解,这就可能导致程序的逻辑与开发者的预期不符,从而出现 “悬空 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;
}
代码解释
在 C 语言中,else子句总是与离它最近的、尚未匹配else的if语句相匹配。
这里的else是与内层的if (b == 2)相匹配,而不是外层的if (a == 1)。
首先判断外层条件a == 1,由于a的值为0,所以a == 1这个条件不成立;
那么内层的if-else语句就不会被执行。
由于外层if (a == 1)条件不成立,程序不会进入内层的if-else判断;
因此不会输出任何信息,程序直接结束。
改进建议
为了避免 “悬空 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;
}
多分支 if-else 语句
语法形式
if(表达式)
{
//当表达式为真时,执行的代码块。
}
else if(表达式)
{
//当if的表达式为假时且else if的表达式为真时,执行的代码块。
}
...
...
else
{
//当前面的表达式都为假时,执行的代码块。
}
下面展示一些
代码示例
。
#include <stdio.h>
int main()
{
int score = 0;
scanf("%d", &score);
if (score >= 90)
{
printf("优秀\n");
}
else if (score >= 70)
{
printf("良好\n");
}
else if (score >= 60)
{
printf("及格\n");
}
else
{
printf("不及格\n");
}
return 0;
}
代码解释
在上面的代码中,如果输入的成绩大于等于90,则会输出"优秀";
如果输入的成绩大于等于70小于等于90,则会输出"良好";
如果输入的成绩大于等于90,则会输出"优秀";
如果输入的成绩大于等于60小于等于70,则会输出"及格";
反之,如果分数小于60,则输出"不及格"。
switch…case语句
含义
switch 语句用于基于一个表达式的值从多个分支中选择一个来执行。
语法形式
switch (expression)
{
case constant1:
// 当 expression 的值等于 constant1 时执行的代码块
break;//跳出switch...case语句
case constant2:
// 当 expression 的值等于 constant2 时执行的代码块
break;
// 可以有更多的 case 分支
default:
// 当 expression 的值与所有 case 常量都不匹配时执行的代码块
break;
}
注:switch语句用于判断条件有多个结果的情况。
它把多重的else if改成更易用、可读性更好的形式。
switch后的expression必须是整型表达式。
case后的值必须是整形常量表达式。
case决定入口,break决定出口
下面展示第一个代码示例
。
//输入1~7的数字,打印对应的星期几
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
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;
}
代码解释
此程序根据 day 的值输出对应的星期信息。
break 语句用于跳出 switch 语句;
若省略 break,会继续执行后续 case 分支的代码。
编程好习惯
1 在最后一个 case 语句的后面加上一条 break语句。
(之所以这么写是可以避免出现在以前的最后一个case语句后面忘了添加 break语句)。
2 在每个switch语句中都放一条default子句是个好习惯,甚至可以在后边再加一个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("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入错误,请输入1~7的数字\n");
break;
}
return 0;
}
代码解释
此程序根据 day 的值输出是工作日还是休息日。
如果输入1-5,则输出工作日;
如果输入6-7,则输出休息日;
反之,则输出"输入错误,请输入1~7的数字"这句话。
注:default和case没有顺序要求,取决于编码习惯
总结
至此,关于 C 语言的分支探索暂告一段落,但你的编程征程才刚刚启航。写代码是与机器深度对话,过程中虽会在语法、算法困境里挣扎,但这些磨砺加深了对代码的理解。愿你合上电脑后,灵感不断,在 C 语言的世界里持续深耕,书写属于自己的编程传奇,下一次开启,定有全新的精彩等待。小编期待重逢,盼下次阅读见你们更大进步,共赴代码之约!