C语言分支语句

C语言的分支语句和循环语句是我们在学习编程语言时的必经之路

一、了解所有的操作符

1.关系操作符

C 语⾔⽤于⽐较的表达式,称为 “关系表达式”(relational expression),⾥⾯使⽤的运算符就称
为“关系运算符”(relational operator),主要有下⾯6个:
(1) > 大于 运算符
(2) < 小于运算符
(3) >= 大于等于运算符
(4) <= 小于等于运算符
(5) == 相等运算符
(6) != 不相等运算符
关系表达式通常返回0(假)或1(真)
注意:在C语言中非0的所有数都可以表示真。
在写关系操作语句时可能会遇到以下问题:
(1) 相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符,不要混淆。有时候,可能会不⼩⼼写
出下⾯的代码,它可以运行,但很容易出现意料之外的结果。
1 if (x = 3) ...
上面实例中,原意是 x == 3 ,但是不小心写成 x = 3 。这个式⼦表⽰对变量 x 赋值 3 ,它的返
回值为 3 ,所以 if 判断总是为真。 为了防止出现这种错误,有的程序员喜欢将变量写在等号的右边。

1 if (3 == x) ...

这样的话,如果把 == 误写成 = ,编译器就会报错。

(2)很多新手程序员在写程序时会想当然地将多个关系运算符连用,这是大忌。

1 i < j < k

上⾯⽰例中,连续使⽤两个⼩于运算符。这是合法表达式,不会报错,但是通常达不到想要的结果,即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式。

1 (i < j) < k
上⾯式⼦中, i < j 返回 0 1 ,所以最终是 0 1 与变量 k 进⾏⽐较。如果想要判断变量 j 的值是否在 i k 之间,应该使⽤下⾯的写法。
1 i < j && j < k

 这里的&&,就是我们马上要讲到的逻辑操作符。

2.逻辑操作符

(1) !      :逻辑取反运算符(改变单个表达式的真假)
(2)  && :与运算符,就是并且的 意思(两侧的表达式都为真,则为真,否则为假)
(3) ||     :或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)
这里的与或运算大家可以跟数学当中的交并运算联系起来理解,其实还是很容易接受的,下面着重介绍一下逻辑取反运算。
这张图就可以很清晰地介绍逻辑取反是怎样一回事了,在后面的分支语句中咱们再结合到一起进行理解。
上面两张图是对与或运算的补充。

3.条件运算符

条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:
1 exp1 ? exp2 : exp3

这里的? 就是我们要介绍的条件运算符,也是C语言中唯一一个三目运算符。条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果 exp1 为假, exp3 计算,计算的结果是整个表达式的结果。

比如:我们想要找两个数的较大的一个,我们可以这样写:

#include <stdio.h>
int main()
{
    int a = 0;
    int b =0;
    scanf(("%d %d", &a, &b);
    int m = a>b ? a : b;
    printf("%d\n", m);

    return 0;
}

我们从键盘上读入两个数a,b之后,重新定义一个m,来接一下a>b的返回值,如果a>b是真的即返回值为1,那么就把a的值赋给m,如果a>b是假的即返回值为0,那么就把b的值赋给m,最后输出m的值即为两个数中较大的那个了。

二、分支语句

1.if语句

#include <stdio.h>
int main()
{
     int num = 0;
     scanf("%d", &num);
     if(num % 2 == 1)
         printf("%d 是奇数\n", num);
     return 0;
}

if后面跟的表达式,也就是这里的(num % 2 == 1),如果它的值为真,那么就执行后面的语句,也就是我们的printf,如果为假,则结束。

如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表 ⽰呢?
这⾥就需要 if...else... 语句了:
#include <stdio.h>
int main()
{
     int num = 0;
     scanf("%d", &num);
     if(num % 2 == 1)
         printf("%d 是奇数\n", num);
     else
         printf("%d 是偶数\n", num);
     return 0;
}

2.switch语句

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。 switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易⽤、可读性更好的形式。
switch (expression) {
 case value1: statement
 case value2: statement
 default: statement
}
上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值, 就执⾏ default 分⽀。
注:
(1) switch 后的 expression 必须是整型表达式
(2) case 后的值,必须是整形常量表达式
我们将if语句和switch对比一下,大家就更容易理解了:
用C语言完成:输⼊任意⼀个整数值,计算除3之后的余数
如果使⽤if语句完成,如下:
#include <stdio.h>
int main()
{
     int n = 0;
     scanf("%d", &n);
     if(n%3 == 0)
         printf("整除,余数为0\n");
     else if(n%3 == 1)
         printf("余数是1\n");
     else
         printf("余数是2\n");
 return 0;
}
如果使⽤switch语句改写,就可以是这样的:
#include <stdio.h>
int main()
{
     int n = 0;
     scanf("%d", &n);
     switch(n%3)
     {
     case 0:
         printf("整除,余数为0\n"); 
     break;
     case 1:
         printf("余数是1\n"); 
     break;
     case 2:
         printf("余数是2\n"); 
     break;
     }
     return 0;
}
上述的代码中,我们要注意的点有:
1. case 和后边的数字之间必须有空格
2. 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。
如果去掉break会怎样呢?
#include <stdio.h>
int main()
{
     int n = 0;
     scanf("%d", &n);
     switch(n%3)
     {
     case 0:
         printf("整除,余数为0\n"); 
     case 1:
         printf("余数是1\n"); 
     case 2:
         printf("余数是2\n"); 
     }
     return 0;
}

我们运行代码,输入7

原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执⾏,有可能执⾏其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码就执⾏了 case 2 中的语句。所以在 switch 语句中 break 语句是⾮常重要的,能实现真正的分⽀效果。
当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。
另外, 在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹 配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加⼊ default ⼦句。 switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执⾏ default ⼦句。
注意:
在 switch 语句中 case ⼦句和 default ⼦句有要求顺序吗? default 只能放在最后吗?其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实际需求的就可以。 不过我们通常是把 default ⼦句放在最后处理的。
今天的分支循环内容就到这里,希望对你有帮助。
  • 33
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值