C语言中的选择语句与循环语句

选择语句与循环语句

C语言是结构化的程序设计语言

  • 顺序结构
  • 选择结构
  • 循环结构

一、选择语句(分支语句)

1.1 if语句
  • 语句结构

    if(逻辑表达式)
    {
      语句体1;
    }
    else
    {
      语句体2;
    }
    

    解释: 如果逻辑表达式成立,就执行语句体1;否则,执行语句体2(else可以省略)

  • 应用举例

if else语句

#include <stdio.h>

int main(void) 
{
	int choose = 0;
	printf("是否将开关打开(0/1):");
	scanf("%d", &choose);
	if (choose == 1)
	{
		printf("打开\n");
	}
	else if(choose == 0)
	{
		printf("关闭\n");
	}
	else
	{
		printf("错误输入\n");
	}

	return 0;
}
if(表达式)
{
  语句列表;
}
  • 如果表达式的结果为真,则语句执行
  • 0表示假,非0表示为真
if else(表达式)
{
  语句列表;
}
  • if else语句,是紧接在if语句后的带有选择条件else语句
  • 如果表达式的结果为真,则语句执行
else
{
  	语句列表;
}
  • 一般位于if else语句的最后,作用于其它未被选择的条件,类似于集合与其补集的关系
  • else遵循就近原则,即else与离其最近的if匹配

例1:if语句实现判断奇偶数

int main()
{
	while(1)
	{ 
		int num = 0;
		printf("输入一个数:");
		scanf("%d", &num);
		if (num % 2 == 1)
			printf("%d为奇数\n", num);
		else
			printf("%d为偶数\n", num);
	}
	return 0;
}
  • 输出结果

    输入一个数:1
    1为奇数
    输入一个数:12
    12为偶数
    输入一个数:123
    123为奇数
    

例2:if语句输出1-100之间的奇数

//定义一个可返回奇数的函数
int Retu_J(int Num)
{
	if (1 == Num % 2)
	{
		return Num;
	}
	else 
		return 0;
}

int main()
{
	int i = 0;
	int num = 0;
	while (i <= 100)
	{
		num = Retu_J(i);
		if (num)
		{
			printf("%d ", num);
		}
		i++;
	}
	return 0;
}
  • 输出结果

    1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99
    

    ​ 此处运用了外部函数的调用来实现函数功能,当然除此之外还有更加简便的写法,此处不过多赘述。

1.2 switch语句

switch语句也是一种分支语句,但通常用于多分支的情况。

  • 语句结构

    switch(整形变量)
    {
      case 常量1 : 语句体1 ; break;
      case 常量2 : 语句体2 ; break;
        ......
      default : 语句体x ; break;
    }
    

    含义: 将变量与case后的各个常量对比,若有相等,则执行相应的语句;若全不等,则执行default后面的语句。

  • switch应用举例

    int main()
    {
    	int day;
    	while (1)
    	{
    		scanf("%d", &day);
    		switch (day)
    		{
    		case 1:printf("星期一\n"); break;
    		case 2:printf("星期二\n"); break;
    		case 3:printf("星期三\n"); break;
    		case 4:printf("星期四\n"); break;
    		case 5:printf("星期五\n"); break;
    		case 6:printf("星期六\n"); break;
    		case 7:printf("星期七\n"); break;
    		default : printf("没有这一天\n"); break;
    		}
    	}
    	return 0;
    }
    
    • 输出结果:
    5
    星期五
    6
    星期六
    9
    没有这一天
    
  • switch应用举例:case穿透

    使用switch实现的代码功能:

    当输入1~5时,输出工作日;

    当输入6~7时,输出周末;

    int main()
    {
    	int day = 1;
    	while(1)
    	{ 
    		scanf("%d", &day);
    		switch (day)
    		{
    		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;
    }
    
    • 输出结果:
    1
    工作日
    6
    周末
    9
    输入错误
    

    case穿透可以实现多个case匹配同一个执行语句

二、循环语句

2.1 while循环
  • 语句结构

    while(逻辑表达式)
    {
      循环体;
    }
    

    解释: 如果逻辑表达式成立,则执行循环体,执行后再次判断,直至不成立时才停止执行

  • while 循环执行流程图

    请添加图片描述

  • while应用举例

    代码实现功能: 打印数字1~10

    int main()
    {
    	int a = 1;
    	while (a <= 10)
    	{
    		printf("%d ", a);
    		a++;
    	}
    	return 0;
    }
    
    • 输出结果:
    1 2 3 4 5 6 7 8 9 10
    
  • break中止while循环

    break可以永久的中止整个循环

    int main()
    {
    	int a = 1;
    	while (a <= 10)
    	{
    		if (5 == a)
    			break;//此代码执行时,会直接跳出while循环
    		printf("%d ", a);
    		a++;
    	}
    	return 0;
    }
    
    • 输出结果:
    1 2 3 4 
    
  • continue跳过本次while循环

    continue被执行时,会跳过continue后面的语句(结束本次循环),直接去判断部分,进行下一次循环的判断

    int main()
    {
    	int a = 0;
    	while (a <= 9)
    	{
        		a++;
    		if (5 == a)
    			continue;
    		printf("%d ", a);
    	}
    	return 0;
    }
    

    ​ 因此在a=5时,continue被执行,程序将直接结束本次循环,开始下一次循环,故而等于5时的a没有被打印

    • 输出结果:
    1 2 3 4 6 7 8 9 10//输出结果中的5被直接跳过
    

    注意:变量a的变化应在continue之前,否则会陷入死循环

2.2for循环
  • 语句结构

    for(初始化;逻辑表达式;更改条件)
    {
    	循环体;
    }
    

    解释: 先执行初始化,再判断逻辑表达式。若逻辑表达式成立,则执行循环体,执行后更改条件,再判断逻辑表达式,以此往复,直至逻辑表达式不成立才停止循环。

    1. 初始化: 用于初始化循环变量
    2. 逻辑表达式: 条件判断,不满足循环条件则停止循环
    3. 更改条件: 用于循环条件的调整
  • for循环执行流程图

    请添加图片描述

  • for循环应用举例

    *代码实现功能:*打印数字1~10

    int main()
    {
    	int i = 1;
    	for (i = 1; i <= 10; i++)
    	{
    		printf("%d ", i);
    	}
    	return 0;
    }
    
    • 输出结果:
    1 2 3 4 5 6 7 8 9 10
    
  • break中止for循环

    int main()
    {
    	int i = 0;
    	for (i = 1; i <= 10; i++)
    	{
    		if (i == 7)
    			break;
    		printf("%d ", i);
    	}
    	return 0;
    }
    
    • 输出结果:
    1 2 3 4 5 6
    

    ​ 当i==7时,执行break命令,直接结束整个循环。因此输出结果中只打印了1至6。

  • continue跳过本次while循环

    continue被执行时,会跳过continue后面的语句(结束本次循环),直接去判断部分,进行下一次循环的判断。因此在输出中跳过了7的打印。

    int main()
    {
    	int i = 0;
    	for (i = 1; i <= 10; i++)
    	{
    		if (i == 7)
    			continue;
    		printf("%d ", i);
    	}
    	return 0;
    }
    
    • 输出结果:
    1 2 3 4 5 6 8 9 10
    
  • 注意事项

    尽量别在for循环体内修改循环变量,防止for循环失去控制。

2.2.1 for循环的一些变种
  1. for循环的初始化部分、判断部分、调整部分是可以省略的

    int main()
    {
    	for (;;)
    	{
    		printf("1 ");
    	}
    	return 0;
    }
    

    此时程序会陷入死循环

  2. for循环的嵌套

    int main()
    {
    	int i = 0;
    	int j = 0;
    	for (i = 0; i < 3; i++)
    	{
    		for (j = 0; j < 3; j++)
    		{
    			printf("A ");
    		}		
    	}
    	return 0;
    }
    
    • 输出:

      A A A A A A A A A
      

      此时将打印3x3=9个A

    若将for循环的初始化部分省略掉:

    int main()
    {
    	int i = 0;
    	int j = 0;
    	for (; i < 3; i++)
    	{
    		for (; j < 3; j++)
    		{
    			printf("A ");
    		}		
    	}
    	return 0;
    }
    
    • 输出:

      A A A
      

      此时只打印3个A

  3. 多变量控制for循环

    int main()
    {
    	int x = 0;
    	int y = 0;
    	for (x = 0, y = 0; x < 4 && y < 9; x++, y++)
    	{
    		printf("A ");
    	}
    	return 0;
    }
    
    • 输出:

      A A A A 
      
2.2.2 例题
#include <stdio.h>
int main()
{
	int i = 0;
	int k = 0;
	for (i = 0, k = 0; k = 0; i++, k++)
		k++;
	return 0;
}

问: 循环多少次?

解释: for循环的逻辑表达式k=0是赋值,可理解为:k为假。因此这里不会进入循环,循环次数为0次。

【要区分清===的不同】

2.3 do...while循环
  • 语句结构

    do
      	循环体;
    while(表达式);
    

    ​ **解释:**先执行循环体,再判断表达式,如若表达式成立,则继续循环,反之则跳出循环。

    do...while语句的特点:循环体至少会执行一次

  • do...while循环执行流程图

    请添加图片描述

  • do...while循环应用举例

    *代码实现功能:*打印数字1~10

    int main()
    {
    	int i = 0;
    	do
    	{
    		i++;
    		printf("%d ", i);
    	}		
    	while (i < 10);
    	return 0;
    }
    
    • 输出结果:

      1 2 3 4 5 6 7 8 9 10
      
  • break中止do...while循环

    int main()
    {
    	int i = 0;
    	do
    	{
    		i++;
    		if (i == 7)
    			break;
    		printf("%d ", i);
    	}		
    	while (i < 10);
    	return 0;
    }
    
    • 输出结果:

      1 2 3 4 5 6
      
  • continue跳过本次do...while循环

    int main()
    {
    	int i = 0;
    	do
    	{
    		i++;
    		if (i == 7)
    			continue;
    		printf("%d ", i);
    	}		
    	while (i < 10);
    	return 0;
    }
    
    
    • 输出结果:

      1 2 3 4 5 6 8 9 10
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值