一、什么是控制语句
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
分支,直到遇到break
或default
为止。(具体可见四、转向语句)
//加入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语句