【C语言】分支和循环

分支和循环


C语言一共有顺序、选择、循环三种结构。顺序结构没什么好介绍的,选择结构在C语言中体现为分支语句,循环结构在C语言中体现为循环语句,接下来主要介绍选择和循环两种结构。

1. 分支语句(选择语句)

分支语句只要分为两类,一类是if语句,一类是switch语句,主要都是实现选择的功能。

1.1 if语句

if语句的第一种语法结构为:

if (表达式)
    语句;           //如果表达式为真,则执行语句;反之则不执行

第二种结构为:

if (表达式)
    语句1;
else
    语句2;         //如果表达式为真,执行语句1;反之执行语句2

第三种结构为:

if (表达式1)
    语句1;
else if (表达式2)
    语句2;
else
    语句3;           //如果表达式1为真,执行语句1;如果表达式2为真,执行语句2;反之                        执行语句3
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main() 
{
	int age;
	printf("请输入你的年龄:");
	scanf("%d", &age);
	if (age < 18)
		printf("你的年龄是%d岁,未成年\n", age);
	else if (18 <= age & age <= 60)
		printf("你的年龄是%d岁,是青壮年\n", age);
	else
		printf("你的年龄是%d岁,属于老年\n", age);
	return 0;
}

如果说 if–else 语句需要控制多条语句,就需要使用代码块的形式了。

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main() 
{
    if(表达式)
    {
        语句列表1;
    }
    else
    {
        语句列表2;
    }
    return 0;
}

这里需要注意一下悬空else的情况,即else和离他最近的未匹配的if进行匹配。比如以下代码:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main() 
{
    int a = 1;
    int b = 2;
    if(a == 0)
        if (b == 2)
            printf("haha\n")
    else
        print("hehe\n")
    return 0;
}

此处运行的结果为空。根据悬空else的原理,这个else其实是和if(b==2)进行匹配的,所以代码变为:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main() 
{
    int a = 1;
    int b = 2;
    if(a == 0)
        if (b == 2)
            printf("haha\n")
    	else
        	print("hehe\n")
    return 0;
}

1.2 switch语句

switch是分支当中的一种语句,专门用于实现多分支。其语法格式为:

switch(整型表达式)
{
        语句项;
}

其中,语句项的格式为:

case 整型常量表达式:
	语句;

示例:

int main()
{
	int day;
	printf("请输入天数:");
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("今天是星期1\n");
		break;
	case 2:
		printf("今天是星期2\n");
		break;
	case 3:
		printf("今天是星期3\n");
		break;
	case 4:
		printf("今天是星期4\n");
		break;
	case 5:
		printf("今天是星期5\n");
		break;
	case 6:
		printf("今天是星期6\n");
		break;
	case 7:
		printf("今天是星期日\n");
		break;
	}
	return 0;
}

对于以上示例程序,switch语句的入口在于day,day等于多少就直接从对应的case入口进入,退出则是从break退出;如果不加break,则执行当前的case之后还会继续执行后面的case,直到碰到break才退出switch语句。

示例2:

int main()
{
	int day;
	printf("请输入天数:");
	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;
}

default处理的是case之外的情况,随意放在哪里,建议放在case之后

2. 循环语句

C语言中循环有三种,分别是while循环,for循环以及do while循环。

2.1 while循环

while (表达式)
	循环语句;

示例:打印1-4

int main() 
{
	int num = 1;
	while (num <= 10)
	{
		if (num == 5)
			continue;
		printf("%d\n", num);
		num++;
	}
	return 0;
}

这里需要注意一下continue与break。循环碰到break,循环结束;循环碰到continue,本次循环结束,即跳过continue之后的代码不执行,直接跳到循环初始入口,进行下一次循环的入口判断。

2.2 for循环

for (表达式1; 表达式2; 表达式3)
    循环语句;

表达式1称为初始化部分,用于初始化循环变量的。表达式2称为条件判断部分,用于判断循环时候终止。表达式3称为调整部分,用于循环条件的调整。

示例1:

int main()
{
	for (int i = 1; i <= 10; i++)
	{
		printf("%d\n", i);
	}
	return 0;
}
for循环执行流程介绍:
continue
BREAK
==0
exp1
exp2
stmt
exp3
end
关于for循环的一些建议:
  • 不可在for循环体内修改循环变量,防止for循环失去控制

    int main()
    {
        int i = 0;
        for (i=0; i<10; i++)
        {
            if (i = 5)
                printf("haha\n");
            printf("hehe\n");
        }
        return 0;
    }
    

    这里面在循环体内if语句将变量i改变了,因此循环失去了控制

  • 建议for循环语句到的循环控制变量的取值采用"前闭后开区间的写法"

    int main()
    {
        int i = 0;
        int arr[10] = {1,2,3,4,5,6,7,8,9,10};
        for (i=0; i<10; i++)
        {
            printf("%d", arr[i]);
        }
        return 0;
    }
    

    这里0为闭,10为开

for循环的一些变种形式:
  • for循环的初始化、调整、判断都可以省略。但是for循环的判断部分如果被省略,那判断条件则恒为真。

    int main()
    {
        int i = 0;
        for (; ;)
        {
            printf("haha");
        }
        return 0;
    }
    
  • for循环内同时使用两个循环变量的情况

    int main()
    {
        int x, y;
        for (x=0, y=0;x<2 && y<5; ++x,y++)
        {
            printf("haha");
        }
        return 0;
    }
    

2.3 do…while()循环

do
{
    循环语句; 
}
while (表达式);

当表达式为真时,执行do里面的代码块,反之则跳出循环。其循环体至少执行一次,使用的场景有限,因此不是经常使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值