分支与循环(上)

1.if else语句

1.1:if else语句的三种情况

c 复制代码
//第一种
if(判断条件)
{
	执行代码块1;
}


//第二种
if(判断条件)
{
	执行代码块1;
}
else
{
执行代码块2;
}


//第三种
if(判断条件1)
{
	执行代码块1;
}
else if(判断条件2)
{
执行代码块2;
}
else if(判断条件3)
{
执行代码块3;
}
else
{
执行代码块4;
}



//第四种:if else语句嵌套
if(判断条件1)
{
  执行代码块1;
}
else
{
    if(判断条件2)
    {
      执行代码块2;
    }
    else(判断条件3)
    {
      执行代码块3;
    }
}

1.2:if语句与else语句在默认条件下,只控制一条语句,若希望它们控制多条语句,需要用大括号将多条语句括起来。

1.3:else总是与距离最近的if匹配

这段代码的执行结果是什么?

c 复制代码
int main()
{
	int a = 0;
	int b = 2;
	 if (a == 1)
		 if (b == 2)
		 printf("hehe\n");
	 else
		 printf("haha\n");
	return 0;
}

第一个if表明上看起来是与else匹配,但与else距离最近的是第二个if,因此它俩才是匹配的。if (a == 1)控制了if (b == 2),由于第一个if的判断条件为假,因此不会执行第二个if语句,由于没有判断b是否等于2,else语句也不会执行。综上所述:代码啥也不打印。

2.三类操作符

2.1:关系操作符

2.1.1:含有关系操作符的表达式称为关系表达式,关系表达式的返回值通常为0(关系表达式为假)或1(关系表达式为真),
c 复制代码
int main()
{
	int a = (3 == 5);
	printf("%d\n", a);//0
	int b = (3 == 3);
	printf("%d\n", b);//1
	return 0;
}
2.1.2:多个关系操作符不适合连用

下面这个代码执行的结果是什么?

c 复制代码
int main()
{
	int a = 3, b = 7, c = 4;
	if (a < b < c)
	{
		printf("hehe\n");
	}
	return 0;
}

a<b<c这个关系表达式并不是比较a、b、c的大小关系,而是先判断a是否小于b,发现a小于b为真,然后返回1,再用1与c比较大小,发现1<c为真,返回1,故if语句的判断条件为真,打印hehe

若希望比较a、b、c的大小关系,应该写成a < b && b < c

2.2:三目操作符(含有3个操作数)

2.2.1:利用三目操作符,找出两个整数中的较大值
c 复制代码
int main()
{
	int a = 0, b = 0, max = 0;
	scanf("%d %d", &a, &b);
	max=(a > b ? a : b);
	printf("较大值是%d", max);
	return 0;
}

2.3:逻辑运算符:逻辑与&&、逻辑或||、逻辑取反!

2.3.1:判断年份是否为闰年

能被4整除但不能被100整除,或者能被400整除的就是闰年

c 复制代码
int main()
{
	int year = 0;
	scanf("%d", &year);
	if ( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0 )
		printf("%d是闰年\n", year);
	else
		printf("%d不是闰年\n", year);
	return 0;
}
2.3.2:&&和||的短路现象

下面两段代码的执行结果是什么

c 复制代码
int main()
{
	int i = 0, a = 0, b = 2, c = 4;
	i = (a++ && ++b && c++);
	printf(" a = %d\n b = %d\n c = %d\n i = %d\n", a, b, c, i);
	return 0;
}

先执行a++。a++表达式的值为0,a的值变为1。由于a++表达式的值为0,则括号内整体表达式为假(++b 与c++未执行),返回0,故i=0.

综上所述,a、b、c、i的值依次为1、2、4、0

c 复制代码
int main()
{
	int i = 0, a = 0, b = 2,  c = 4;
	i = (a++ || ++b || c++);
	printf(" a = %d\n b = %d\n c = %d\n i = %d\n", a, b,  c, i);
	return 0;
}

先执行a++,a++表达式的值为0,a的值变为1,接着执行++b,++b表达式的值为3(为真),则整个表达式的值为真(c++未执行),返回1,故i的值为1。综上所述,a、b、c、i的值依次为1、3、4、1

3.switch语句

3.1switch语句的语法格式

c 复制代码
 switch(整型表达式或者字符表达式)//字符在内存中存的是Ascll码值,Ascll码值是整数,因此字符也属于整型家族
 {
     case 整型常量表达式1或字符常量表达式1 :
       代码块1;
       break;
     case 整型常量表达式2或字符常量表达式2 :
       代码块2;
       break;
     default ://当整型表达式或者字符表达式的值无法与case语句匹配时,就会跳到default语句后的代码块3
       代码块3;
       break;
 }
3.1.1练习题

输入一个整数,若输入的是1 ~ 5则输出工作日,若输入的是6 ~ 7,则输出休息日

c 复制代码
#include<stdio.h>
int main()
{
    int n = 0;
    printf("请输入一个整数\n");
    scanf("%d", &n);
    switch (n)
    {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("工作日\n");
            break;
        case 6:
        case 7:
            printf("休息日\n");
            break;
        default:
            printf("输入的数字不再范围内\n");
            break;
    }
    return 0;
}

3.2:switch语句中case语句与break语句的作用

case语句决定了switch语句的入口,break语句决定了switch的出口

3.3:switch语句中的default语句必须放在case语句的前面吗?

不是,default语句与case语句的顺序不做要求,但通常是先写case语句,最后写default语句

4.while循环

4.1:while循环的执行流程图

4.2:while循环、for循环、do while循环与if语句、else语句一样,默认只控制一条语句,若希望控制多条语句,就用大括号括起来。

c 复制代码
int main()
{
    int i = 1;
    while (i)
    printf("hehe\n");
    printf("haha\n");
    return 0;
}//死循环的打印hehe,不会打印haha

5.for循环(用的最多)

5.1:for循环的语法格式

c 复制代码
for(表达式1;表达式2;表达式3)
  循环语句;

1.表达式1:循环变量的初始化(只会执行1次)

2.表达式2:循环结束条件的判断

3.表达式3:调整循环变量的值

4.三个表达式之间用英文分号隔开,且三个表达式均可以是空语句

5.2:for循环的执行流程图

6.do while循环(用的最少)

6.1:do while循环的语法格式

c 复制代码
do
{
循环体语句;
}while(判断条件);

6.2:do while循环与while循环、for循环的不同点

for循环与while循环是先进行条件判断,若条件为真就进入循环体,否则就不进入循环体。而while循环是先进入循环体,再进行条件判断,若条件为真就进入循环体,否则就不进入循环体。

6.3:do while循环的执行流程图

7、三种循环中的break语句与continue语句的作用

1.break语句在三种循环中的作用:永久的终止循环
2.continue语句在while循环与do while循环中的作用:跳过循环体中continue后面的代码,直接来到循环的判断条件进行判断(终止一次循环)

3.==continue语句在for循环中的作用:==跳过循环体中continue后面的代码,来到表达式3调整循环变量的值

c 复制代码
int main()
{
    int i = 1;
    while (i <= 10)
    {
        if (i == 3)
            continue;
        printf("%d ", i);//打印完1和2后就死循环了
        i++;
    }
    return 0;
}
c 复制代码
int main()
{
    for (int i = 1; i <= 10; i++)
    {
        if (i == 3)
            continue;
        printf("%d ", i);//1 2 4 5 6 7 8 9 10
    }
    return 0;
}
c 复制代码
int main()
{
    int i = 1;
    do
    {
        if (i == 3)
            continue;
        printf("%d ", i);打印完1和2后就死循环了
        i++;
    } while (i<=10);

    return 0;
}
相关推荐
阿巴斯甜11 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker11 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq952712 小时前
Andorid Google 登录接入文档
android
黄林晴13 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_1 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android