前言:在我们初学C语言学习的时是顺序结构,这是最简单程序结构。在顺序结构中,各语言都是按自上而下的顺序执行的,执行完上一个语句就自动执行洗一个语句,是无条件的,不用作任何判断。实际上,在很多情况下,需要根据某个条件是否满足来决定是否执行指定的操作,或从给定的两种或多种操作选择一个,这就是选择结构要解决的问题。
http://t.csdn.cn/6RtwN也可以在CSDN中查看,同作者。
在我们学习选择结构前,先认识一下语句
C语句可以分为一下五类:
- 表达式语句
- 函数调用语句
- 控制语句
- 复合语句
- 空语句
今天学习的选择结构(分支语句)和循环结构(循环语句)是控制语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选 择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。
可分成以下三类:
- 条件判断语句也叫分支语句:if语句、switch语句
- 循环执行语句:do while语句、while语句、for语句
- 转向语句:break语句、goto语句、continue语句、return语句
1.选择结构和条件判断
在现实生活中需要进行判断和选择的情况很多。例如:
- 如果考试不及格,要补考 (判断是否及格)
- 周末出去旅游 (判断是否是周末)
- 输入一个数,输出其绝对值。可以写出以下语句
if (x <= 0)
printf("%d", x);
else
printf("%d", -x);
我们要处理这些问题,关键在于进行“条件判断” 。
选择结构需要在进行下一个操作前先进行条件判断。
C语言的两种选择语句:
- if语句:用来实现两个分支的选择结构
- switch语句:用来实现多分支的选择结构
2.用if语句实现选择结构
2.1在C语言中选择结构主要是用if语句实现的,为了让大家进一步了解if语句的应用,我们举个例子
例:输入两个实数,由小到大输出这两个数
解题思路: 将两数进行比较,如果a<b,直接输出;如果a>b,将两数交换,然后输出。用if语句来判断。
要执行多条语句是,要使用代码块 “{}” 因为if语句默认后边只能管理一条语句
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d%d", &a, &b);
if (a > b)
{
//将a,b的值互换
int tmp = a;
a = b;
b = tmp;
}
printf("a=%d b=%d\n", a, b);
return 0;
}
2.2if语句的一般形式
(1) if(表达式)
语句1
(2) if(表达式)
语句1
else
语句2
(3) if(表达式1)
语句1
else if(表达式2)
语句2
else if(表达式2)
语句3
else
语句4
注意:表达式不可以连着写 例:1<x<10
if(1<x<10)
//如果输入的x是11
//1<11表达式为真 返回1
//表达式将变为
if(1<10)
//1<10永远成立 就会执行if中的语句,会输出错误的结果
应该写成:x>1&&x<10
2.3悬空else
编辑
根据上述代码,我们可以看出else并不是和第一个if结合,同时VS也默认将else和第二个if对其
else的匹配:else是和它离的最近的if匹配的
int num = 1;
if(num == 5)
{
printf("hehe\n");
}
当我们写这样的代码错将等号(==)写成赋值符号(=),我们这个错误的代码也会运行下去,所以我们可以将变量写在右边,这样我们写错代码无法运行。
3.用switch语句实现多分支选择结构
switch语句的形式
switch(整型表达式)
case 整形常量表达式:
语句;
我们要实现输出今天是星期几,可以用switch语句
编辑
我们发现输入3,会打印出3以后所有的情况。我们要在每种情况后加break语句,可以跳出switch语句(case决定入口,break决定出口 )
说明:
- stitch语句括号内的表达式,其类型为整数类型(包括字符型)
- 语句体内包含多个以关键字case开头的语句和最多一行的default开头的语句。case后面跟的常量,例如:case 1或case 'a‘和default都是起标号作用,用来标志一个位置。执行switch语句,先计算switch后面表达式的值,然后将它与各csae标号比较,如果与某个case标号中的常量相同,流程就转到此caes标号后的语句。如果没有与switch表达式相匹配的case常量,流程就转去执行default标号后的语句。
- 多个case标号可以共用一组执行语句:例
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
注意:caes标号只起标号作用:根据switch表达式的值找到匹配的入口标号,就不再进行条件检查,在执行完一个case标号后面的语句,就从此标号一直执行下去,不在判断。所以要合理利用break。
这次选择结构的知识在这里就讲完啦。希望大家读完可以对选择结构有更深的理解,有所收获,如果有不正确的地方大家可以指出,同时也感谢大家的支持。