C语言基础:分支结构(条件判断 & 用if语句实现分支结构)
创作时间:
作者:
@小白创作中心
C语言基础:分支结构(条件判断 & 用if语句实现分支结构)
引用
CSDN
1.
https://m.blog.csdn.net/2402_88621999/article/details/145702356
本文将详细介绍C语言中的分支结构,包括条件判断、关系运算、逻辑运算以及使用if语句实现的单分支、双分支和多分支结构。通过详细的理论解释和多个代码案例,帮助读者理解如何在C语言中实现分支结构。
分支结构
在程序设计中,我们经常会遇到需要根据某个条件的结果来选择下一步操作的情况。例如,下面的函数计算:
$$
y = \begin{cases}
1/x & \text{当 } x \neq 0 \
10000 & \text{当 } x = 0
\end{cases}
$$
这种算法上的分支结构在C语言中主要通过if语句来实现。
条件判断
条件判断是根据某个条件成立与否,决定是否执行指定的任务(操作)。条件判断的结果是逻辑值(布尔类型值),在程序中用真(1)和假(0)来表示。
关系运算及其表达式
关系运算符及其优先级次序
C语言中提供了6种关系运算符:
在C语言中,用1(非0)表示关系表达式的值为真(条件成立),0表示关系表达式的值为假(条件不成立)。
逻辑运算及其表达式
逻辑运算符及其优先级
C语言中提供了3种逻辑运算符:
- 逻辑非(!)
- 逻辑与(&&)
- 逻辑或(||)
逻辑表达式中各种运算符的优先级顺序如下:
- 逻辑非(!)
- 算术运算符(+、-、*、/、%)
- 关系运算符(>、<、>=、<=、==、!=)
- 逻辑与(&&)
- 逻辑或(||)
- 赋值运算符(=、+=、-=、/=、%=)
用if语句实现分支结构
单分支:if
语法:
// 语法1:可以舍弃{}
if (条件表达式)
单语句;
// 语法2:必须保留{}
if(条件表达式)
{
单语句或者复合语句;
}
功能:
- 若表达式值为真(非0),则执行表达式后面的语句,执行完该语句后继续执行if语句后的代码。
- 若表达式值为假(0),则不执行表达式后面的语句而直接执行if语句后面的语句。
案例
计算并输出下列分段函数的值:
$$
y = \begin{cases}
-2 & \text{当 } x < 0 \
2 & \text{当 } x \geq 0
\end{cases}
$$
代码:
#include <stdio.h>
int main(int argc, char *argv[])
{
double x, y = -2;
printf("请输入一个数,作为x的值:\n");
scanf("%lf", &x);
if (x >= 0) y = 2;
printf("x=%lf,y=%lf\n", x, y);
return 0;
}
双分支:if...else
语法:
// 语法1:舍弃{}
if(条件表达式)
单语句1;
else
单语句2;
// 语法2:保留{}
if(条件表达式)
{
单语句1或者复合语句1;
}
else
{
单语句2或者复合语句2;
}
功能:
- 若表达式的值为1,则执行语句1;否则执行语句2。
- 不管条件表达式成不成立都要执行一个语句。
- 语句1和语句2都可以是单语句或者复合语句。
案例
计算并输出下列分段函数的值:
$$
y = \begin{cases}
-2 & \text{当 } x < 0 \
2 & \text{当 } x \geq 0
\end{cases}
$$
代码:
#include <stdio.h>
int main(int argc, char *argv[])
{
int x, y;
printf("请输入一个整数:\n");
scanf("%d", &x);
if (x < 0)
y = -2;
else
y = 2;
printf("x=%d,y=%d\n", x, y);
return 0;
}
三目运算符
语句:
表达式1?表达式2:表达式3;
说明:
- 如果表达式1的结果为真,就执行表达式2,否则就执行表达式3
- 三目运算符的写法实际上就是单语句的双分支的缩略写法
案例
将上面双分支的案例改造为三目运算符的写法:
代码:
#include <stdio.h>
int main(int argc, char *argv[])
{
int x, y;
printf("请输入一个整数:\n");
scanf("%d", &x);
y = x < 0 ? -2 : 2;
printf("x=%d,y=%d\n", x, y);
return 0;
}
多分支:if...else if...else
语法:
// 写法1:嵌套if..else..(不推荐)
if (表达式1) 语句1;
else
if (表达式2) 语句2;
else
...
else
if (表达式n) 语句n;
else 语句n+1;
// 写法2:并列if..else if....else..(推荐)
if (表达式1) 语句1;
else if (表达式2) 语句2;
...
[else if (表达式n) 语句n;]
[else 语句n+1;] // else是可选,写不写由我们最终的需求决定
注意:多分支中,同一时刻只能满足一个分支。
案例
根据学生的成绩,对学生进行分级:
- 成绩 >= 90 A
- 成绩 >= 80 B
- 成绩 >= 60 C
- 成绩 < 60 D
代码:
#include <stdio.h>
int if_test1()
{
int score;
printf("请输入一个整数:\n");
scanf("%d", &score);
if (score >= 90) printf("A\n");
else if (score >= 80) printf("B\n");
else if (score >= 60) printf("C\n");
else printf("D\n");
}
int if_test2()
{
int score;
printf("请输入一个整数:\n");
scanf("%d", &score);
if (score >= 60 && score < 80) printf("C\n");
else if (score >= 80 && score < 90) printf("B\n");
else if (score >= 90) printf("A\n");
else printf("D\n");
}
int main(int argc, char *argv[])
{
if_test1();
if_test2();
return 0;
}
if语句的嵌套
语法:
if(..)
if(..) 语句1;
else 语句2;
else
if(..) 语句3;
else 语句4;
注意:
- else总是与前面最近的未配对的if配对使用
- 可通过增加{}来确定配对关系
- 只要if中包含if,都属于是if语句的嵌套
案例
#include <stdio.h>
int if_test1()
{
int score;
printf("请输入一个整数:\n");
scanf("%d", &score);
if(score < 0 || score > 100)
{
printf("您的输入不合法!\n");
}
else
{
if(score >= 90)
{
printf("A\n");
}
else if(score >= 80)
{
printf("B\n");
}
else if(score >= 60)
{
printf("C\n");
}
else
{
printf("D\n");
}
}
}
int if_test2()
{
int score;
printf("请输入一个整数:\n");
scanf("%d", &score);
if(score < 0 || score > 100)
{
printf("您的输入不合法!\n");
}
else if(score >= 60 && score < 80)
{
printf("C\n");
}
else if(score >= 80 && score < 90)
{
printf("B\n");
}
else if(score >= 90)
{
printf("A\n");
}
else
{
printf("D\n");
}
}
int if_test3()
{
int num;
printf("请输入一个整数:\n");
scanf("%d", &num);
if(num == 0)
{
printf("0既不是偶数也不是奇数!");
}
else
{
if(num % 2 == 0)
{
printf("%d是偶数!\n", num);
}
else
{
printf("%d是奇数!\n", num);
}
}
}
int main(int argc, char *argv[])
{
if_test1();
if_test2();
if_test3();
return 0;
}
小贴士
如何拆出一个三位数中的每一位:
实现:123,
- 个位:123 % 10 = 3
- 十位:123 % 100 / 10 = 2
- 百位:123 / 100 = 1
热门推荐
如何让协作同事及时回复
水流量的计算方法及计算公式
探访济南瓶装水市场“大战”:每瓶水低至0.65元
绝品红烧鱼:步步详解,从新手到大师的秘籍
中药陈皮的神奇功效与日常应用
普洱茶的健康益处与正确泡茶方法全面指南
理解吨与公斤的换算及其在生活中的重要性与应用
谷氨酰转肽酶600U/L:如何恢复与肝脏健康
酒桶纯CD出装:技能冷却缩减最大化,团战控制输出两不误
亚冬会与冬奥会项目都有哪些区别?一组问答带你解密亚冬会
【加快构建房地产发展新模式】宜昌:单月新发放住房贷款环比增长65.43%
脂溢性皮炎是什么菌感染引起的
那些容易混淆的皮肤病,你未必能分清
排名飙升!福建4校入选!1校首次上榜世界榜单!
张雪峰谈中医学专业的就业前景-中医最厉害的三个专业
心电图:心跳的秘密
如何使用罗盘看风水:罗盘在风水布局中的应用
案例九:探索光照对植物生长的影响
分布式存储与云存储,究竟哪个更适合我的需求?
Stable Diffusion——文生图界面参数讲解与提示词使用技巧
职业发展目标是什么
此夜曲中闻折柳:音乐、情感与文化的交织
常住人口突破60万的兰州新区密码
科学饮食锻炼,暑期助你轻松瘦
买房朝向选择指南:如何选择最适合你的房屋朝向
马化腾如何做产品经理
被人伤害成抑郁症怎么办
5部高分医疗剧,靳东占了两部,9年前这部剧百看不厌
二十八星宿:中国古代天文学的瑰宝
揭秘!二十八星宿vs十二生肖,其中有啥联系?