前言:C语言是由顺序结构、选择结构、循环结构组成的结构化的程序设计语言。 那C语言是如何设计和实现这些结构的呢?话不多说,马上开始。
三种结构如图所示:
我们可以使用 if else语句、 switch语句 来实现选择(分支)结构,使用for 、 while 、 do while 来实现循环结构。
ps:本篇将先总结分支结构的知识,循环结构留到(下)篇。
看完觉得有帮助的话记得点赞收藏加关注哦~
目录
一、关系、条件、逻辑操作符
二、if else 语句
三、switch语句
四、分支结构小练习:判断闰年
首先补充分支与循环必备操作符
一、关系、条件、逻辑操作符
(1)关系操作符:
C语⾔⽤于⽐较的表达式,称为“关系表达式”,⾥⾯使⽤的运算符就称为“关系运算符”,主要有下⾯6个。
>:⼤于运算符
<:⼩于运算符
>=: ⼤于等于运算符
<=:⼩于等于运算符
==: 相等运算符
!=: 不相等运算符
用法:用于比较两个值的大小或相等性,结果通常返回0或1,表示真假。
- eg:20<25是正确的,结果返回1;25<20是错误的,结果返回0。
(2)条件操作符:
条件操作符需要接受三个参数,因此又叫三目操作符。形式如下(exp是表达式expression的缩写):
exp1 ? exp2 : exp3
用法:如果exp1为真, exp2计算,计算的结果是整个表达式的结果;如果exp1为假, exp3计算,计算的结果是整个表达式的结果。
- eg:1<2?1:0 exp1是1<2,结果为真,计算exp2,结果是本身。因此这个表达式最终的结果就是exp2的结果1。
(3)逻辑运算符
提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。
! :逻辑取反运算符(改变单个表达式的真假)。
&& :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
|| :或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。
- eg:!0为非零表示真,1&&0为假,1||0为真。
二、if else 语句
(1)结构:
if(表达式)语句1;
else语句2;
执行流程:
- step1:判断if中表达式的真假。
- step2:表达式为真➡执行if中的语句1,跳过else。
- step3:表达式为假➡跳过if,直接执行else中的语句2。
tips:上面的结构仅适用于单语句的情况,因为if和else只能控制一条语句,当分支中包含多条语句时要用大括号{}将多条语句括起来形成代码块
if(表达式) {语句1;语句3; } else {语句3;语句4; }
先看一个问题:输⼊⼀个分数,>=60分就输出:及格,<=60分就输出:不及格。
下面三种写法都可以解决这个问题
int score=0; scanf("%d",&score);//输入一个成绩①if(score>=60)printf("及格");elseprintf("不及格");②if(score>=60)printf("及格");if(score<=60)printf("不及格");③if(score>=60)printf("及格");else if(score<=60)//嵌套ifprintf("不及格");
(2)嵌套if(else if)
在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。
#include <stdio.h>
int main()
{int num = 0;scanf("%d", &num);if(num > 0)printf("输⼊的数字是正数\n");else if(num < 0) printf("输⼊的数字是负数\n");//这⾥的if 相当于嵌套在else语句中,形成了嵌套结构elseprintf("输⼊的数字是0\n");return 0;
}
(3)悬空else问题
先看这样一段代码:
#include <stdio.h>
int main()
{int a = 0;int b = 2;if(a == 1)if(b == 2)printf("11\n");elseprintf("22\n");return 0;
}
大家觉得结果输出什么呢?
小飞在初学阶段看到这段代码时本能的以为结果应该打印11,但实际上什么也不输出。
为什么会这样呢?这就是悬空else问题。分析如下:
在编写代码时,如果遇到多个if和else语句。需要注意一个规则:else总是与最接近的if匹配。有时候,代码的排版可能会让人产生误解,比如上面的else与第一个if对齐,从而误以为当第一个if条件不成立时,会执行else子句。但实际上,else是和第二个最近的if语句匹配,形成嵌套的if else语句。如果第一个if条件不成立,那么嵌套的if和else语句根本就没有机会执行,因此最终可能什么都不会打印。
为了让代码更容易理解,我们应该调整代码块(添加大括号),使else与其真正匹配的if语句关系更加清晰。
#include <stdio.h> int main() {int a = 0;int b = 2;if(a == 1){if(b == 2)printf("11\n");}else{printf("22\n");}return 0; }
带上适当的⼤括号形成代码块,代码的逻辑就会更加的清晰,所以以后在写代码的时候要注意括号的使⽤,让代码的可读性更⾼。
三、switch语句
除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。switch语句可以看作是⼀种特殊形式的if else语句,⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易⽤、可读性更好的形式。
(1)结构:
switch (表达式)
{case value1:语句1;case value2: 语句2;default: 语句3;
}
上⾯结构中,根据表达式不同的值,执⾏相应的 case 分⽀。如果找不到对应的值,就执⾏ default 分⽀。
注意:
- switch 后的(表达式)必须是整型表达式(可以是数值,也可以是表达式,如a+b,a,b均是变量)。
- case 后的value值,必须是整形常量表达式(只能是数值,如1、2)。
- case 和后边的数字之间必须有空格。
(2)break和default
①break
每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。
eg:
写一个输入⼀个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; }
当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。
比如当判断星期几是工作日还是休息日时,我们可以只在星期五和星期日时写break,这样在遇到星期1~5时因为没有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;}return 0; }
②default
在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加⼊default ⼦句。switch 后边的表达式结果不是 value1 ,也不是 value2 的时候,就会执⾏default ⼦句。
就⽐如上面打印星期的练习,如果 day 的输⼊不是1~7的值,如果我们要提⽰:输⼊错误,即可:
switch(day){case 1:case 2:case 3:case 4:case 5:printf("⼯作⽇\n");break;case 6:case 7:printf("休息⽇\n");break;default://输入无匹配printf("输⼊错误\n");break;}
tips:switch语句中的case和default无顺序要求,只要顺序是满⾜实际需求的就可以。不过习惯把 default ⼦句放在最后处理。
四、分支结构小练习:判断闰年
输⼊⼀个年份year,判断year是否是闰年?
闰年判断的规则:
①能被4整除并且不能被100整除是闰年,即满足year%4==0 && year%100!=0
②能被400整除是闰年,即满足year%400==0
参考代码:
#include <stdio.h>
int main()
{int year = 0;scanf("%d", &year);if(year%4==0 && year%100!=0)printf("是闰年\n");else if(year%400==0)printf("是闰年\n");return 0;
}
结语:非常感谢耐心看到这里的小伙伴,本文主要讲了分支与循环中的分支结构,它们是代码中的重要组成成分,是构建任何复杂结构的基石。下期主要围绕循环结构展开。本篇文章到此结束,我们下期再见!
如果上述内容对您有帮助的话,还请点赞收藏✿
如果发现内容有误,还请给予指正,十分感谢:>