C语言——分支与循环

一、什么是控制语句

        C语言中共有5种语句类型:空语句、表达式语句、函数调用语句、复合语句、控制语句

        顺序、选择、循环结构是计算机编程中的三种基本控制结构,它们的存在是为了实现不同类型的任务和逻辑,以便有效地编写和执行程序。

以下是三种控制结构的简单示意图:

本篇介绍选择(即分支)结构、循环结构以及转向语句的使用

二、分支语句

if语句

作用:根据条件执行不同的代码块。

基本语法

if (condition) {
    // 如果条件为真,执行这里的代码块
} else {
    // 如果条件为假,执行这里的代码块
}

//单分支
if(expression)
{
     // 如果条件为真,执行这里的代码块
}

//多分支
if(expression)
{
     // 如果条件为真,执行这里的代码块
}
else
{
    // 如果条件为假,执行这里的代码块
}


if(expression1)
{
    // 如果条件为真,执行这里的代码块
}
else if(expression2)
{
    // 如果条件为真,执行这里的代码块
}
else
{
    // 如果条件为假,执行这里的代码块
}

//if语句的嵌套
if(expression1)
{
    if(expression2)
    {
        // 如果条件为真,执行这里的代码块
    }
    else 
    {
        // 如果条件为假,执行这里的代码块
    }
else
{
    // 如果条件为假,执行这里的代码块
}

例子

//判断是否为闰年
思路:1、能被4和100同时整除的为闰年
      2、能被400整除的也为闰年


#include<stdio.h>
int main()
{
	int year = 0;
	scanf("%d", &year);
	if (year % 4 == 0)
	{
		if (year % 100 != 0)
			printf("闰年\n");
	}
	if (year % 400 == 0)
	{
			printf("闰年");
	}
	
	return 0;
}

//优化1.0
int main()
{
	int year = 0;
	scanf("%d", &year);
	if (year % 4 == 0 && year % 100 != 0)
		printf("闰年\n");
	else if (year % 400 == 0)
		printf("闰年\n");
	else
		printf("不是闰年\n");

	return 0;
}

//优化2.0
int main()
{
	int year = 0;
	scanf("%d", &year);
	if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
		printf("闰年\n");
	else
		printf("不是闰年\n");

	return 0;
}

注:1、if和else语句后只能控制一条语句,如果需要控制多条,需用大括号{}括起(表复合语句)

       2、else跟随上面、最近、未与else配对的if

switch语句

作用:基于表达式的值选择不同的分支。

基本语法

switch (expression) 
{
    case constant1:
        // 代码块1
        break;
    case constant2:
        // 代码块2
        break;
    // 可以有更多的case分支
    default:
        // 如果没有匹配的常量,执行默认代码块
}

例子

//根据输入的grade,输出评价
char grade;
printf("grade=");
scanf("%c", &grade);
printf("输出结果:");

switch(grade)
{
	case 'a':
		printf("good");
	case 'b':
		printf("better");
	default:
		printf("bad");
}

输出结果:

                  

        当grade为a时,会把后面的所有语句都执行,而我们只想得到输出为“good”。这就涉及到了转向语句中的break,其在这里的作用是用于终止switch语句的执行,导致程序跳出switch块。如果没有break语句,程序将继续执行下一个case分支,直到遇到breakdefault为止。(具体可见四、转向语句)

//加入break后

char grade;
printf("grade=");
scanf("%c", &grade);
printf("输出结果:");
switch (grade)
{
	case 'a':
		printf("good");
		break;
	case 'b':
		printf("better");
		break;
	default:
		printf("bad");
		break;
}

输出结果:  

三、循环语句

do while语句

作用:在条件满足时重复执行,且至少会执行一次循环体。

基本语法

do
{
	循环体语句
} while (condition);

while语句

作用:在条件满足时重复执行,通常用于不确定次数的迭代。

基本语法

while (condition) 
{
    // 只要条件为真,执行这里的代码块
}

例子

int count = 0;
while (count < 5) 
{
    printf("Count is %d\n", count);
    count++; 
}

for语句

作用:基于计数器的循环,通常用于已知次数的迭代。

基本语法

for (计数器i初始化; 判断条件;i变化 ) 
{
    // 在每次迭代中执行这里的代码块
}

例子

int i;
int j;
for (i = 1; i < 10; i++)
{
	for (j = 1; j <= i; j++)
		printf("%d*%d=%2d  ", j, i, j * i);
	printf("\n");
}

输出结果:

四、转向语句

break语句

作用:用于跳出并终止循环。

范围:循环体和switch体

continue语句

作用:用于跳过当前迭代的其余部分,继续下一次迭代。

范围:循环体

goto语句

作用:用于无条件跳转到程序中的标签位置的控制流语句。

基础语法

label_name:
// 代码块
// ...
goto label_name; // 跳转到标签位置

例子

printf("hehe\n");
goto flag;
printf("haha\n");
flag:
printf("heihei\n");

输出结果:

goto语句在某些编程语言中不推荐使用,但在多层嵌套循环中需跳出,可用goto语句

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值