C语言零基础入门—9.选择结构程序设计
这一节我们讲解 选择结构程序设计。
1. 前言
- 我们先来谈一谈什么是选择程序设计。
- 从第一节到前一节中我们讲解的都是顺序程序设计,当时我们说过,顺序设计的意思就是从上到下的执行每一行程序。
- 但是我们的生活中,不可能任何事情都是从上到下的顺序执行吧。
- 举一个栗子:小明考试之前,爸爸对他说:
- 如果你数学考了90分以上,那么就奖励你一顿大餐。
- 如果数学在70-90之间就奖励你一个篮球。
- 如果数学成绩在60-70分之间就奖励你一本习题册。
- 如果成绩在60分以下的话,就奖励你一个你最爱的大嘴巴子。
- 这个例子就反驳了顺序程序设计的思路,因为这个栗子所做的事情就是,在数学成绩每一个区间内才执行相应的奖励。而不是小明考了95分之后,先奖励大餐,在奖励篮球,在奖励习题册,在给大嘴巴子。
- 这个例子就是选择程序设计需要做的事情,根据区间不同,而选择不同的事情去做。
2. 选择程序设计
- 选择程序设计有两种实现的形式
- 1)使用if...else进行判断。
- 2)使用switch...case进行选择。
2.1 if...else讲解
2.1.1 语法讲解
完整格式
if( 条件1 ){
满足条件1,于是执行这里的代码。
}else if( 条件2 ){
满足条件2,于是执行这里的代码。
}else if( 条件3 ){
满足条件3,于是执行这里的代码。
}else{
以上条件均不满足,执行这里的代码。
}
- 语法中的 if 的中文意思就是:“如果”,所以我们要记住只要写出来if,那么我们就要在if后边加一个括号,在括号内写入要进行判断的事情。当括号内判断的事情成立了,才会执行对应的大括号 { } 内的语句。
if( 条件1 ){
满足判断条件1,于是执行这里的代码。
}
这一句的意思就是:如果 条件1 正确,就执行对应的{...}里边的代码 - else的意思就是:“其他”,它的作用就是排除掉已经判断过的条件。
else if( 条件3 ){
满足条件3,于是执行这里的代码。
}
这一句的意思就是:我们排除掉条件1,条件2的情况,我们再来判断条件3,如果如果 条件3 正确,就执行对应的{...}里边的代码 - 最后的else的含义就是:判断过前边的条件1,2,3之后,都没有进入相应的{...}的话,就执行最后一句的else后的大括号的代码。
else{
以上条件均不满足,执行这里的代码。
}
这一句的意思就是:以上条件均不满足的时候,就执行这里的{...}的内容。
栗子
- 我门来写一下小明的栗子吧。
#include<stdio.h>
void main(){
float score;
printf("请输入小明的成绩,以获得相应的奖励,成绩为:");
scanf("%f",&score);
if( score >= 90){
printf("恭喜你,获得大餐一顿n");
}else if(score < 90 && score >= 70){
printf("恭喜你,获得篮球一个n");
}else if(score < 70 && score >= 60){
printf("恭喜你,获得练习册一本n");
}else{
printf("恭喜你,获得大嘴巴子一个n");
}
}
- 对应的结果是
- 程序解读
2.1.2 格式拓展
- 上边的格式是一个完整的用法,并且else...if可以有很多个,当然也可以有很少个,甚至可以没有。
- 拓展1:只进行一次判断,不做其他处理。
if( ){
}
- 拓展2:只进行一次判断,当判断不成立的时候再做出处理。
if( ){
}else{
}
- 拓展3:进行多次判断。
if( ){
}else if(){
}else if(){
}
...
...
- 大家细细品味一下就可以知道怎么使用了,这里再讲得太细会适得其反,如果真的不会,可以加我微信私聊。
2.2 switch讲解
2.2.1 语法讲解
- switch与if都是条件判断的语句,但是又有着很显著的区别。
- 我们通过上面的讲解会发现if判断的条件可以是区间范围,比如:
if(成绩 >= 80 && 成绩 <= 90)
的意思就是:如果成绩处于 80~90之间,这是区间的范围。当然特殊一点的区间就是值,因此if判断的条件也可以是一个准确值,比如:if(成绩 == 85)
的意思就是:如果成绩是85(至于为什么是两个等号,我们下节讲),这是准确值的判断。 - 然而switch判断的条件就是准确值的判断。由于是准确值,所以switch只适用于准确值数量较少的情况。(一般使用if较多,但是switch也有用处)。
完整格式
switch( 可以得出准确值的表达式 ){
case 准确值1:
满足准确值1时,应该执行的语句。
break;
case 准确值2:
满足准确值2时,应该执行的语句。
break;
case 准确值3:
满足准确值3时,应该执行的语句。
break;
...
default: 以上都不满足,则执行这里的语句
}
- 语法中
switch( )
之后的括号内填写的是可以得到准确值的表达式或者变量。 case
后边紧跟一个空格,空格后边的准确值就是待判断的准确值。- 每一个该执行的语句后边都应该跟一个
break
,用于跳出此次switch
的判断。(如果我们没有加break的话,就会把所有的case后边的语句都执行一次) - 最后的
default
就是当所有的case都不满足的时候,该执行这里的语句。通常用于输出不满足的原因。
栗子
- 我们把一开始的成绩改为A,B,C,D等级进行评比。
- 令成绩大于90分的为A,成绩是70~90的为B,成绩是60~70的为C,成绩小于60的为D。(我们之所以要这样子改是因为前边分析过,switch使用的是准确值进行判断的,如果不转化成等级的话,就要写0~100一个101个case了,不是我们想要的)
#include<stdio.h>
void main(){
char score;
printf("成绩处于 0~59之间,属于等级 D n");
printf("成绩处于 60~69之间,属于等级 C n");
printf("成绩处于 70~89之间,属于等级 B n");
printf("成绩处于90~100之间,属于等级 A n");
printf("请输入小明的成绩等级,以获得相应的奖励,等级为:");
scanf("%c",&score);
switch(score){
case 'A' : printf("恭喜你,获得大餐一顿n");
break;
case 'B' : printf("恭喜你,获得篮球一个n");
break;
case 'C' : printf("恭喜你,获得练习册一本n");
break;
case 'D' : printf("恭喜你,获得大嘴巴子一个n");
break;
default: printf("等级输入有误,程序结束!n");
}
}
- 输入正确的等级:
- 输入错误的等级:
- 程序解读:
3. 结束
- 我们这一节先讲到这里,大家先看着两个程序了解下。
- 我们下一节会解决下遗留的问题:
- 逻辑表达式
- break与continue
- 在讲解一个程序:给定一个年份,如何计算出是不是闰年。
公众号:小小猿笔记