目录
1. 分支语句 ( 选择结构 )
1.1 if 语句
1.2 switch 语句
2. 循环语句
2.1 while 循环语句
2.1.1 while 语句的基本语法:
2.1.2 while 语句中的 continue 和 break
2.2 for 循环语句
2.2.1 for 语句的基本结构
2.2.2 for 循环中的 break 和 continue
2.2.3 for 循环的一些变种
3.1 do while 循环语句
3.3.1 do while 语句的语法与基本结构
3.3.2 do while 语句中的 break 和 continue
4.1 goto 语句
4.1.1 goto 语句的基本语法
C语言是一门结构化程序设计语言。支持三种结构
1. 顺序结构 2.选择结构 3.循环结构
这三种结构可以实现所有的代码逻辑。它们由特定的语句定义符组成,C语言有九种控制语句
分以下三类:
if 语句的语法结构如下。 其中 如果表达式的结果为真,则执行块中的语句。
在C语言中如何表示真假呢? 不止 if 所有的判断表达式都是: 0 表示假 ,非0 表示真。
//单分支
if (表达式)
{
语句;
}
//多分支
if (表达式)
{
语句1;
}
else
{
语句2;
}
//
if (表达式)
{
语句1;
}
else if (表达式)
{
语句2;
}
else
{
语句3;
}
在写代码时应注意一一对应,养成良好的代码风格。else 与最近的 if 相对应。
switch 也是一种分支语句。常常用于多分支的情况。switch 的语法结构 还需搭配 break 才能真正实现分支。
switch (整型表达式) // 只能是 整型 !!
{
语句项;
}
// 案例
#include
int main()
{
int day = 0;
scanf("%d", &day) //输入一个日期
switch(day)
{
case 1:
printf("星期一");
break;
case 2:
printf("星期2");
break;
case 3:
printf("星期3");
break;
case 4:
printf("星期4");
break;
case 5:
printf("星期5");
break;
case 6:
printf("星期6");
break;
case 7:
printf("星期7");
break;
default:
printf("wrong")
break;
}
return 0;
}
//或者直接写成
int main()
{
int day = 0;
scanf("%d", &day) //输入一个日期
switch(day)
{
case 1: //如 day 为1 ,首先执行case 1: 而case 1无表达式,无break
case 2: // 故继续执行 case 2: case 3: 一直到 case 5:
case 3: //程序输出 工作日。 同理,day = 2 时也是输出 工作日
case 4: // day = 6 或者 day = 7时输出 休息日
case 5:
printf("工作日");
break;
case 6:
printf("休息日");
break;
case 7:
default: // 输入除了1 - 7 的数时,输出 wrong
printf("wrong")
break;
}
return 0;
}
break 和 default 的作用。
break 的实质作用就是把语句列表划分为不同的分支部分。如果不加break, 语句执行完case1 的内容时不会跳出 switch 而是会继续向下执行,直到遇到 break 或者执行完全部代码结束程序才会停止。例子可见上述代码。
default 的作用。我们指导首先要通过 switch (整型表达式) 进入case 语句。如果case的值与表达式的值都不一样怎么办呢? 实际上程序并不会报错,也并不会结束,只是所有语句都被跳过,其实也没什么问题。但是为了程序效果的完整性,可以加入一个 default 子句。 如上述例子中,假设表达式的值为 8 。则会输出 wrong 。 如不设置,程序什么都不输出。
循环语句有 while 、for 、do while 语句。
int main()
{
int i = 10; // 初始化部分
while (i < 10) // 条件判断部分
{
printf("%d", i);
i++; // 调整部分
}
}
1. break 在 while 中的作用。 只要在循环中遇到 break ,就停止后期所有的循环,直接终止循环,跳出循环。
int main()
{
int i = 10; // 初始化部分
while (i < 10) // 条件判断部分
{
if (i == 5)
{
break; // 直接跳出循环,不执行后面代码。
}
printf("%d ", i);
i++; // 调整部分
}
}
// 最后的输出结果为 1 2 3 4
2. continue 在 while 中的作用。只要在循环中遇到 continue ,就直接跳过后面的代码,回到 while 语句的判断部分。进行下一次循环判断。
int main()
{
int i = 10; // 初始化部分
while (i < 10) // 条件判断部分
{
if (i == 5)
{
continue; // 直接跳到while的判断部分,跳过本次循环,
} // 进入下次循环,不执行后面代码。
printf("%d ", i);
i++; // 调整部分
}
}
// 最后的输出结果为 1 2 3 4 6 7 8 9
int main()
{
int i = 0;
for (i = 1; i < 10; i++) // 初始化部分 // 条件判断部分 // 调整部分
{
printf("%d ", i);
}
}
//输出结果: 1 2 3 4 5 6 7 8 9
可知 for 循环 的 初始化部分, 条件判断部分, 调整部分都在一起,结构优于 while 循环,比 while 循环应用的场景更多。
与 while 循环 中效果类似
int main()
{
int i = 0;
for (i = 1; i < 10; i++) // 初始化部分 // 条件判断部分 // 调整部分
{
if (i == 5)
{
break; //直接跳出循环,不执行后面代码。
}
printf("%d ", i);
}
}
//输出结果: 1 2 3 4
continue:
int main()
{
int i = 0;
for (i = 1; i < 10; i++) // 初始化部分 // 条件判断部分 // 调整部分
{
if (i == 5)
{
continue; //跳过后面代码不执行,直接跳到for的判断部分
}
printf("%d ", i);
}
}
//输出结果: 1 2 3 4 6 7 8 9
注意: 不能再for循环体内修改循环变量, 不然 for 循环可能失去控制 !
int main()
{
int i = 0;
for (; ; ) // 初始化部分 // 条件判断部分 // 调整部分
{
printf("aa");
}
}
//
for (; i < 10; i++ ) // 初始化部分 // 条件判断部分 // 调整部分
{
printf("aa");
}
//
int x = 0;
int y = 0;
for (x = 0, y = 0; x < 2 && y < 5; x++, y++) // 初始化部分 // 条件判断部分 // 调整部分
{
printf("sa");
}
如上 for 可以省略各个部分。但需注意,省略条件判断部分可能导致死循环。
do
{
循环语句;
}while (表达式) //条件判断部分
do while 语句的特点: 循环至少执行一次,所使用的场景有限,不常使用。
循环语句的使用频率: for > while > do while
break :
int main()
{
int i = 1;
do
{
if (i == 5)
{
break; //跳出循环
}
printf("%d ", i);
}while (i <= 10) //循环判断部分
}
//输出结果: 1 2 3 4
continue:
int main()
{
int i = 1;
do
{
if (i == 5)
{
continue; //跳过后面代码不执行,直接跳到 do while的判断部分
}
printf("%d ", i);
}while (i <= 10) //循环判断部分
}
//输出结果: 1 2 3 4 6 7 8 9
int main()
{
int flag;
int i = 0;
flag:
while(1)
{
i++;
if (i == 5)
{
goto flag;
}
}
return 0;
}
goto 语句一般不用,因为有时候会打乱原来程序运行的顺序和逻辑性。没有 go 语句也能实现代码效果,但是 go 语句也有自己适用的场景。 比如,可以一次跳出多个循环。在多循环中若出现错误,可以一次性跳出所有循环,对错误进行处理。例子如下代码:
int main()
{
int flag;
for (...)
{
for (...)
{
for (...)
{
if (disaster) //发生错误
goto flag;
}
}
}
flag: //之间跳出多个for循环,来到此处处理问题
if(disaster)
// 处理错误
return 0;
}