【C语言基础系列】C语言分支结构

写在前面:学习的第一门语言是Java,之前对C也了解一点,也只是了解一点,在加上长时间没有接触了,基本就只会一个Hello World了。现在由于准备升本考试,不得不从头开始学C。这里从零开始,记录C语言学习点滴。欢迎正在学习C语言的小伙伴一起学习,未来可期,一起加油!

文章目录

      • 关系运算符
      • if-else语句
      • 多分支结构和else-if语句
      • switch语句


关系运算符

在学习分支结构前,先来了解一下C语言的关系运算符。在C语言中,关系运算符就是比较运算符,对两个操作数进行比较,结果为“真”或“假”。C语言共提供了6中关系运算符,如下:

运算符 < <= > >= == !=
名称 小于 小于或等于 大于 大于或等于 等于 不等于

if-else语句

if-else语句的一般形式为:
if(表达式)
    语句1;
else
    语句2;

该语句用于实现分支结构,根据表达式的值选择语句1或语句2中的一条执行。if-else语句的执行流程如下:
【C语言基础系列】C语言分支结构_第1张图片
首先需要求解表达式,如果表达式的值为“真”,则执行语句1;如果表达式的值为“假”,则执行语句2。
例:判断一个数字是奇数还是偶数。

#include

int main(){
    int x;
    printf("请输入一个数字:");
    scanf("%d", &x);
    if(x % 2 == 0){
        printf("%d是偶数!\n", x);
    }else{
        printf("%d是奇数!\n", x);
    }
    return 0;
}

scanf()函数:
上述代码中的scanf()函数是系统提供的用于输入的库函数,也在系统文件stdio.h中声明。该函数用于从键盘输入数据,其调用格式与函数printf()类似:
scanf(格式控制字符串,输入参数1,…,输入参数n);
格式控制字符串表示输入的格式,输入参数是变量地址(变量名前加&)。
格式控制字符串中包含两种信息:格式控制说明和普通字符。
① 格式控制说明:按指定的格式读入数据,它包含以%开头的格式控制字符,不同类型的数据采用不同的格式控制字符(和printf()函数一样)。
scanf()函数的输入参数必须和格式控制字符串中的格式控制说明相对应,并且它们的类型,个数和位置要一一对应。
② 普通字符:在输入数据时,需要原样输入的字符。
例:scanf(“x=%d”, &x);
程序输入:
x = 13

上述代码运行效果:
【C语言基础系列】C语言分支结构_第2张图片

多分支结构和else-if语句

else-if语句是最常用的实现多分支(多路选择)的方法,一般形式为:
if(表达式1)
    语句1;
else if(表达式2)
    语句2;

else if(表达式n-1)
    语句n-1;
else
    语句n;

执行的流程图如下:
【C语言基础系列】C语言分支结构_第3张图片
首先会求解表达式1,如果表达式1的值为“真”,则执行语句1,并结束整个if语句的执行,否则,求解表达式2…最后的else处理给出条件都不满足的情况,即表达式1、表达式2…表达式n-1的值都为“假”时,执行语句n。

下面来看一个简单的例子:
输入一个形式如 “操作数    运算符   操作数” 的四则运算表达式,输出运算结果。

#include

int main(){
    double value1, value2;
    char op;

    printf("请输入一个表达式: ");
    scanf("%lf%c%lf", &value1, &op, &value2);

    if(op == '+')
        printf("%.2f + %.2f = %.2f\n", value1, value2, value1+value2);
    else if(op == '-')
        printf("%.2f - %.2f = %.2f\n", value1, value2, value1-value2);
    else if(op == '*')
        printf("%.2f * %.2f = %.2f\n", value1, value2, value1*value2);
    else if(op == '/')
        printf("%.2f / %.2f = %.2f\n", value1, value2, value1/value2);
    else
        printf("请输入正确格式数据!\n");

    return 0;
}

char字符内息的数据,包含一个字符型常量,字符写在单引号中。
输出%.2f为输出字符型变量,并保留2位小数。
上述案例中输出结果为:
【C语言基础系列】C语言分支结构_第4张图片
字符型数据的输入和输出
字符型数据的输入输出可以用scanf()、printf(),也可以用getchar()、putchar()。
scanf()和printf()这里就不多说了,这里说一下getchar()和putchar()。

字符输入函数getchar()
调用字符输入函数getchar()可以从键盘输入一个字符。
设ch是字符型变量,函数getchar()的一般使用格式为:
ch = getchar();
其功能是从键盘输入一个字符,并赋值给变量ch。
由于函数getchar()只能读入一个字符,如果输入多个字符,则需要多次调用该函数。

字符输出函数putchar()
调用字符输出函数putchar()可以输出一个字符
函数putchar()的一般调用格式为:
putchar(输出参数);
其功能是输出参数是字符型变量或字符型常量。

【注】函数getchar()和putchar()只能处理单个字符的输入和输出,即调用一次函数,只能输入或输出一个字符。

逻辑运算符
上面的例子关系表达式都是只给定了一个条件,如果需要同时满足两个条件时,就需要用到逻辑运算符了。C语言提供了三种逻辑运算符,如下:

运算符 && ||
名称 逻辑非 逻辑与 逻辑或

设a和b表示逻辑运算对象,逻辑运算符的功能描述如下:
!a:如果a为“真”,结果是“假”;如果a为“假”,结果是“真”。
a && b:当a和b都为“真”时,结果是“真”;否则结果为“假”。
a || b:但a和b都为“假”时,结果是“假”;否则结果是“真”。

同样来通过一个例子来了解一下其用法
判断键盘输入的字符是否为英文字母

#include

int main(){
    char ch;
    printf("请输入一个字符:");
    ch = getchar(); /* 输入一个字符赋值给ch变量 */
    printf("输入的字符为:");
    putchar(ch);

    if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')){
        printf("\n%c是字母!", ch);
    }else{
        printf("\n%c不是字母!", ch);
    }

    return 0;
}

测试运行结果如下:
【C语言基础系列】C语言分支结构_第5张图片
输入一个年份,判断是否是闰年

#include

int main(){
    int year;
    printf("请输入一个年份:");
    scanf("%d", &year);
    if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
        printf("%d是闰年", year);
    else
        printf("%d不是闰年", year);

    return 0;
}

测试结果如下:
【C语言基础系列】C语言分支结构_第6张图片
嵌套if语句
在if-else语句的内嵌语句是另一条基本的if语句,就形成了嵌套的if-else语句。形式如下。
if(表达式1)
    if(表达式2)   语句1;
    else   语句2;
else
    if(表达式3)   语句3;
    else 语句4;

流程图如下:
【C语言基础系列】C语言分支结构_第7张图片
具体用法如下:

#include

int main(){
    int x;
    printf("请输入一个整数:");
    scanf("%d", &x);
    if(x > 50){
        if(x % 2  == 0){
            printf("%d是一个大于50的偶数!", x);
        }else{
            printf("%d是一个大于50的奇数!", x);
        }
    }else{
        printf("%d小于50", x);
    }

    return 0;
}

测试效果如下:
【C语言基础系列】C语言分支结构_第8张图片

switch语句

switch语句可以处理多分支选择问题,根据其中break语句的使用方法(break语句为强制结束循环),一般分两种情况。
1、在switch语句的每个语句段中都使用break语句,也是switch语句的主要使用方法,一般形式为:
switch(表达式){
    case 常量表达式1:语句段1; break;
    case 常量表达式2:语句段2: break;
        …
    case 常量表达式n:语句段n; break;
    default: 语句段n+1; break;
}
该switch语句的执行流程如下:
【C语言基础系列】C语言分支结构_第9张图片
首先求解表达式,如果表达式的值与某个常量表达式的值相等,则执行该常量表达式后的相应语句段,如果表达式的值与任何一个常量表达式的值都不相等,则执行default后的语句段,最后执行break语句,跳出switch语句。
在switch语句中,表达式和常量表达式的值一般是整形或字符型。每个语句段可以包括一条或多条语句,也可以为空语句。
switch语句中default可以省略,如果省略了default,当表达式的值与任何一个常量表达式的值都不相等时,就什么都不执行。

还是上面的那个小例子:输入一个形式如 “操作数 运算符 操作数” 的四则运算表达式,输出运算结果。用switch语句编写。代码如下:

#include

int main(){
    double value1, value2;
    char op;

    printf("请输入一个表达式:");
    scanf("%lf%c%lf", &value1, &op, &value2);
    switch(op){
        case '+':
            printf("%.2f + %.2f = %.2f\n", value1, value2, value1+value2);
            break;
        case '-':
            printf("%.2f - %.2f = %.2f\n", value1, value2, value1-value2);
            break;
        case '*':
            printf("%.2f * %.2f = %.2f\n", value1, value2, value1*value2);
            break;
        case '/':
            printf("%.2f / %.2f = %.2f\n", value1, value2, value1/value2);
            break;
        default:
            printf("请输入正确格式数据!\n");
            break;
    }
    return 0;
}

运行效果如下:
【C语言基础系列】C语言分支结构_第10张图片
2、在switch语句中不使用break语句
break语句在switch语句中是可选的,不使用break的switch语句如下:
switch(表达式){
    case 常量表达式1:语句段1;
    case 常量表达式2:语句段2:
        …
    case 常量表达式n:语句段n;
    default: 语句段n+1;
}

该switch语句的执行流程如下:
【C语言基础系列】C语言分支结构_第11张图片
求解表达式后,如果表达式的值与某个常量表达式的值相等,则执行该常量表达式后的所有语句段,如果表达式的值与任何一个常量表达式的值都不相等,则执行default后的所有语句段。

不使用break时,如果表达式的值与常量表达式2的值相等,不但执行语句段2,还执行其后的所有语句段,即执行语句段2 ~ 语句段n+1。

比较这两种switch语句的形式和用法,如果执行相应的语句段后,要终止switch语句的继续执行,可以使用break语句,它一般放在语句段的最后,用于跳出正在执行的switch语句;否则,就继续执行其后的所有语句段。

由此可见,在switch语句所有语句段的末尾使用break,可以降低,清晰的实现多分支选择,这也是switch语句的主要使用方法。


由于初学C语言,上述内容如有错误地方,恳请各位大佬指出!

你可能感兴趣的:(C语言基础系列)