本次将要带来的是分支结构的题目及其讲解。
首先,分支就是分岔路,你只能走向一条路,这时候就需要我们去选择了,而选择就自然而然地需要条件,所以分支结构往往会带有条件限制。
然后,我们来了解一下常见的分支结构:
1、if.....else...类型:
用法:if(条件)+语句, else + 语句
具体讲解:这种用法常用于非A则B的情况,即若我不满足if的条件,我就实行else中的语句。如图
#include<stdio.h> int main() { int i; scanf("%d", &i); if (i >= 0) { printf("A"); } else { printf("B"); } return 0; }
在这一组代码中,我们输入的值i若大于等于0,则输出A,否则输出B,这里的否则其实意思就是若i小于0,也是非常典型的不是这个就是这个。 有一点非常重要,就是大家不要忽视if语句的筛选作用,就像如图中的语句,i在经过if语句的条件筛选时,其实已经把i的范围缩小了,所以后面的i必然是小于0的。
2、接着是 if.... else if.....else类型:
当我们无法非A则B,即需要讨论多种情况时则需采用这种类型了,即在if...else的类型上,再多了种类,可以很多种,也可以只有一种。如图(只多一种):
#include<stdio.h> int main() { int i; scanf("%d", &i); if (i > 0) { printf("A"); } else if(i == 0) { printf("B"); } else { printf("C"); } return 0; }
这时我们分了三种情况 大于 等于 小于 0,分别对应A B C三个值,希望大家能够理解,需要注意的是,这种类型依旧可以进行筛选作用,即if中筛选了大于0的,else if 中筛选了等于0的,最后else中的必然为小于0的了。
3、switch...case......default 结构
这种结构可以说是选择结构,我们日常生活中其实会经常遇到,比如售卖机,我在点击一个按钮时他就是对应一个条件,并执行该语句,弹出我们选的商品。
具体用法介绍:Switch(条件)case 对应的其中一个条件:语句。 让我们用代码来理解会更容易一些,如图:
#include<stdio.h> int main() { int i; scanf("%d", &i); switch (i) { case 1://若i等于1,则打印A printf("A"); break; case 0://若i等于0,则打印B printf("B"); break; case -1://若i等于-1,则打印C printf("C"); break; default: printf("输入错误"); } return 0; }
接下来我为大家一一讲解一下:
首先,我们大致看一下整个整体,switch函数内部中,case后面跟着的是:(冒号),且之后的语句并没有用大括号括起来。(其实也可以,但我们一般不这样做,因为结构已经非常清晰了。),再接着我们看到里面有break,这里break是跳出整个函数的作用,这就意味着若我们不break,那么即使条件不符,他也会接着执行下面的语句,就会导致错误了。如图:
接着我们能看到一个defalut,这个的作用则是,若是输入的数与内部的条件一个都没有满足,那么就会执行这一条,如图: 当我们输入2时 没有与之对应的选项,则执行default的语句。
那么分支结构的三种类型就介绍到这里,我们来做一下题目吧。
题目一:
成绩转换 (30 分)
本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:
输入在一行中给出一个整数的百分制成绩。
在一行中输出对应的五分制成绩。
90
结尾无空行
A
结尾无空行
我们先观察一下题目,其实是非常明显的一个if.....else if...else 类型的, 则代码如下:
#include<stdio.h> int main() { int a ; scanf("%d ", &a); if (a < 60) { printf("E"); } else if (a >= 60 && a < 70) { printf("D"); } else if (a >= 70 && a < 80) { printf("C"); } else if (a >= 80 && a < 90) { printf("B"); } else { printf("A"); } return 0; }
这里我需要说一下的就是 && ,这个是逻辑与,也就是我们数学中的且,a && b,需要a和b同时为真才能为真,一假即为假,特别需要的是,这种语句,若a为假,则 b表达式不会再执行,直接输出为0(假)。
还有一个比较重要的点就是if(),括号中的条件判断的是真或假,即1或非1,1为真,非1为假。
这意味着if(1)是真,f(5)即为假,大家不要定式思维,里面不一定要表达式哦。
接着我们来到题目二:
本题要求将输入的任意3个整数从小到大输出。
输入在一行中给出3个整数,其间以空格分隔。
在一行中将3个整数从小到大输出,其间以“->”相连。
4 2 8
结尾无空行
2->4->8
结尾无空行
大家在看到之后会不会想,哎呀,三个数比大小,不就六种情况嘛,把六种都写出来不就行咯。其实不然,就像我上文中提到的,if本身具有筛选作用,所以总的来说其实也只是进行了三次判断即可判断出他们的大小关系了。
如图:
#include<stdio.h> int main() { int t;//用于交换两个数 int max, mid, min; scanf("%d %d %d", &max, &mid, &min); if (max < mid) { t = mid; mid = max; max = t; } if (max < min) { t = min; min = max; max = t; } if (mid < min) { t = min; min = mid; mid = t; } printf("%d->%d->%d",min,mid,max); return 0; }
我现在来解释一下,为什么是这样子的,这里的逻辑就是分别创建一个用于存放最大值、中间值、最小值的变量,只要符合条件就放进去。这个思维非常重要,日后作用很大。
而在存放过程,就像交换瓶子中的水,我们是不是需要先用第三个瓶子装好第一个瓶子的水,然后把第二个瓶子中的水放进第一个,然后再从第三个瓶子中把水倒回给第二个瓶子呢? 这里用的就是这个思路,最最重要的还是 if具有筛选作用,所以我们只需要进行三次判断即可把六次情况都表达出来了