目录
前言
1.什么是语句?
2. 分支语句(选择结构)
2.1 if语句 & if…else语句
2.1.1 if语句
2.1.2 if…else语句
2.1.3 嵌套使用
2.1.4 悬空的else
2.2 switch语句
2.2.1 switch语句
2.2.2 嵌套
2.2.3 default
3.循环语句
3.1 while语句
3.1.1 语法
3.1.2 break&continue
3.2 for循环
3.2.1 语法
3.2.2 break&continue
3.2.3 for循环变种
3.3 do…while循环
3.3.1 语法
3.3.2 continue & break
3.4 goto语句
3.4.1 语法
3.4.2 用法
3.4.3 关机程序
C语言中,分支和循环是非常重要且基础的理论知识,熟练的掌握对于进一步学习有着至关重要的作用,在这篇文章中你能学习到C语言中有关分支和循环的系统知识,如有不足之处,希望能够指正。
1.C语句可分为以下五类:
表达式语句、函数调用语句、 控制语句 、复合语句 、 空语句。
2.控制语句:
控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语 言有九种控制语句。
可分成以下三类:
①条件判断语句也叫分支语句:if语句、switch语句;
② 循环执行语句:do while语句、while语句、for语句;
③ 转向语句:break语句、goto语句、continue语句、return语句。
1.if语句语法:
2.如果if后面没有{ }:默认只有接下里一条语句在if条件为真的时候执行。
1.if…else语句语法:
注: 还有所谓else if的语句用法
if(表达式1) if(condition){
{ return x;
语句1; }
语句2; return y;
…… //上面代码的意思是条件为真返回x,条件为假返回y。
}
else if(表达式2)
{
语句3;
语句4;
……
}
else
{
语句5;
语句6;
……
}
1.在 C 语言中,嵌套 if-else 语句是合法的,这意味着您可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。
1.else总是跟最近的一条if语句匹配。(没有大括号{}的时候)
//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
#include
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
{
printf("hehe\n");
}
}
else
{
printf("haha\n");
}
return 0;
}
1.一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。
1.语法:
注:
①switch 语句中的 expression 是一个常量表达式,必须是一个整型或枚举类型,不能是浮点型。
②在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
③case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
④当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
⑤当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
⑥不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
⑦一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。
实例:根据性别满足工龄奖励小程序
#include
int main(void)
{
char sex;
int age ;
printf("请输入你的性别简称!男(M),女(F)\n");
scanf_s("%c", &sex);
switch (sex)
{
case 'M':
case 'm':
printf("你的性别为“男”请你进入测试!\n");
printf("请输入你的工龄!\n");
scanf_s("%2d",&age);
switch (age)
{
case 5:
printf("奖励iphone一台!!\n");
break;
case 10:
printf("奖励汽车一辆!!\n");
break;
case 15:
printf("奖励小楼一栋!!\n");
break;
default:
printf("抱歉,未满足奖励条件或者超出工龄!!\n");
break;
}
break;
case 'F':
case 'f':
printf("你的性别为“女”请你进入测试!\n");
printf("请出入你的工龄!\n");
scanf_s("%2d",&age);
switch (age)
{
case 5:
printf("奖励iphone一台!\n");
break;
case 10:
printf("奖励名牌化妆品一套!\n");
break;
case 15:
printf("奖励爱马仕包一个!\n");
break;
default:
printf("抱歉, 未满足奖励条件或者超出工龄!!\n");
break;
}
break;
}
return 0;
}
1.语法:(可以写在仍何一个case处)
default:
语句;
2.每个switch只能有一条default语句。
只要给定的条件为真,C 语言中的 while 循环语句会重复执行一个目标语句。
①continue:continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行, 而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
②其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的break是用于永久终止循环的。
for(表达式1; 表达式2; 表达式3)
{
循环语句;
}
//表达式1:变量初始化
//表达式2:循环条件
//表达式3:自增衡量变量
①continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行, 而是直接跳转到for语句的判断部分。进行下一次循环的入口判断。(但是不会跳过自增衡量变量)
②其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:for中的break是用于永久终止循环的。
#include
int main()
{
for(;;)
{
printf("hehe\n");
}
return 0;
}
注:for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问 题。
例:第一个代码可以打印9个hehe; 但是第二个代码只能打印3个hehe。
int i = 0;
int j = 0;
//这里打印多少个hehe?
for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
printf("hehe\n");
}
}
int i = 0;
int j = 0;
//这里打印多少个hehe?
for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
printf("hehe\n");
}
}
特点:先循环,再判断,至少循环一次
do
{
循环语句1;
循环语句2;
……
} while(表达式)
1.break:直接跳过循环。(永久终止这个循环)
2.continue:结束本次循环,直接跳到循环的判断部分。
- C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
- C 语言中的 goto 语句允许把控制无条件转移到同一函数(不同函数无法跳跃)内的被标记的语句。
- 在任何编程语言中,都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。
但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。
例如:一次跳出两层或多层循环。 多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。
goto语言真正适合的场景如下:
for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
…
error:
if(disaster)
// 处理错误情况
#include
int main()
{
char input[100] = { 0 };
system("shutdown -s -t 90");
printf("你的电脑将在1分半内关机,若不想关机,请输入lim x[(x^2 + 100)^1/2 + x]在x趋于无穷的答案\n");
again:
scanf("%s", input);
if (strcmp(input, "-50") == 0) {
system("shutdown -a");
printf("回答正确,已取消关机");
}
else {
printf("回答错误,请重新输入\n");
goto again;
}
return 0;
}