三、 分支和循环(一)

1.if语句

1.1 if

if (表达式)
    语句

表达式判断成立(为真),则执行语句;表达式不成立(为假),则语句不执行。

在C语言中,没有直接定义布尔类型,0为假,非0表示真。也就是表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行。

1.2 else

if (表达式)
    语句1
else
    语句2

如果表达式的结果为0就执行语句2,表达式结果如果不为0就执行语句1。

1.3 分支中包含多条语句

默认ifelse语句中默认都只控制一条语句。

#include <stdio.h>
int main(){
	int age = 0;
	scanf("%d", &age);
	if(age >= 18)
		printf("成年了\n")
     	printf("可以谈恋爱了\n");
	return 0;
}

那如果我们要if语句同时控制2条语句,那就要使⽤ {} 将代码括起来, else 后也可以跟上⼤括号。

#include <stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
	{
		printf("成年了\n");
		printf("可以交⼥朋友了\n");
	}
	return 0;
}
#include <stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
	{
		printf("成年了\n");
		printf("可以交⼥朋友了\n");
	}
	else //else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
	{
		printf("未成年\n");
		printf("不可以早恋哦\n");
	}
	return 0;

1.4 嵌套if

if else语句中,else可以与另一个if语句连用,构成多重判断。

//⽅法1
#include <stdio.h>

int main() {
    int age = 0;
    scanf("%d", &age);
    if (age < 18)
        printf("少年\n");
    else if (age <= 44)
        printf("⻘年\n");
    else if (age <= 59)
        printf("中⽼年\n");
    else if (age <= 90)
        printf("⽼年\n");
    else
        printf("⽼寿星\n");
    return 0;
}
//带上⼤括号更容易看明⽩
#include <stdio.h>

int main() {
    int age = 0;
    scanf("%d", &age);
    if (age < 18) {
        printf("少年\n");
    } else {
        if (age <= 44) {
            printf("⻘年\n");
        } else {
            if (age <= 59) {
                printf("中⽼年\n");
            } else {
                if (age <= 90)
                    printf("⽼年\n");
                else
                    printf("⽼寿星\n");
            }
        }
    }
    return 0;
}

1.5 悬空else问题

如果多个ifelse,可以记住这样一条规则,else总是跟最接近的if匹配。

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
        else
            printf("haha\n");
    return 0;
}

在这里插入图片描述

虽然else是跟第一个if对齐的,但是距离第二个if比较近,所以是跟第二个if相匹配的,为了避免这种情况,我们可以在ifelse后面加上大括号,代码的逻辑就会更清晰,平常我们写代码时,不管是多条语句还是一条语句,都可以带上大括号,这样就可以避免这种匹配错误的情况。

2.关系操作符

C语言中用于比较的表达式,称为"关系表达式"(relational expression),里面使用的运算符就称为"关系表达式"(relational operator),主要有:

  • >大于运算符
  • <小于运算符
  • >=大于等于运算符
  • <=小于等于运算符
  • ==相等运算符
  • !=不相等运算符
    例如:
a == b;
a != b;
a < b;
a > b;
a <= b;
a >= b;

关系表达式通常返回01,表示真假。

C语言中,0表示假,非0表示真。

关系表达式常用于ifwhile结构.

if (x = = 5){
    printf("x的值为5\n")
}

注意:相等运算符==与赋值运算符=是两个不一样的运算符,不要混淆。

多个关系与算符不宜连用,连用不会报错但达不到想要的结果。

a<b<c;
//实际执行方式如下
(i < j) < k

可以用逻辑与符号&&来表达想要的结果

i < j && j < k

3.逻辑操作符

逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面三个运算符。

  • !:逻辑取反运算符(改变单个表达式的真假)。
  • &&:与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
  • ||:或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)。

3.1逻辑取反运算符

取反,顾名思义就是取相反的值,如过变量或表达式为真,取反则为假,反之。

int flag = 0;
if(!flag){
    printf("关系表达式为真");
}

3.2与运算符

与运算符,也是并且的意思,两边都为真时结果才为真,只要有一方为假结果就是假。

int num = 5;
if(5 > 0 && 5 < 10){
    printf("5是大于零小于10的数");
}

3.3或运算符

或运算符,也是或者的意思,两边表达式只要有一方为真结果就为真,两边都为假时结果才为假。

int month = 0;
scanf("%d",&month);
if(month == 12 || month == 1 || month == 2){
    printf("%d月为冬季"&month)}

3.4短路

C语言计算中总是从左往右计算。如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。

if(num > 0 && num < 10)

如果num的值小于0,那么右边表达式num<10便不再执行。

if(month == 12 || month == 1 || month == 2)

如果month==12,那么就不用再判断month是否等于1或2,也就不会再往后执行。

像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短路求值



学习过程中的代码我放到Gitee和Github中,欢迎大家监督,如有不对的地方欢迎大家批评指正。

Gitee: https://gitee.com/yryld
Github: https://github.com/hub-art

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值