什么是控制流?控制流的作用
有时候我们运行程序时候,程序工作过程需要某些判断
程序设计分成顺序结构,选择结构,循环结构
二路分支(if语句不能使用break否则报错)
- 逻辑:程序中某段代码需要在满足某个条件时才能运行
- 判断条件可为任意表达式 :算术运算符表达式,逻辑运算符表达式,位运算符表达式,
- 形式:
- if 语句:表达一种 如果-则 的条件执行关系
- if(判断条件){ ....} //小括号表示判断条件,大括号表示满足此条件运行的范围
- if-else 语句:表达一种 如果-否则 的互斥分支关系
- If(){ }else{} 判断if()条件是否成立,如果成立执行if下面的{}里面的内容,否则执行else
- If(){}-else if(){}else{} 语句:
- If(){if(){}else if(){}else{}}else if(){}else{} // if具有可嵌套功能 // if(){...}else if(){}else是一条语句
- 编程建议,不管if里面是当语句还是复合语句,请先写{},再往{}里面填充语句
- else匹配问题:
- else总是与它上面的,最近的,同级未匹配的if语句配对
- if 语句:表达一种 如果-则 的条件执行关系
- 举例:
// if 语句
if(a%2 == 0)
{
printf("a是偶数\n");
}
//if-else 语句
if(a%2 == 0)
{
printf("a是偶数\n");
}
else
{
printf("a是奇数\n");
}
- 注意:
- if 语句可以单独使用,else 语句不可以,else 语句必须跟if语句配套使用
- 不管是 if 语句还是 else 语句,代码块都必须使用大括号{}括起来,否则只有首句有效
多路分支
- 逻辑:根据不同的条件执行不同的代码片段
- 语法:
switch(n)
{
case 1: //case 2...6; 表示2<n<6
printf("one\n");
break;
case 2:
printf("two\n");
break;
case 3:
printf("three\n");
break;
default:
printf("其他数字\n");
}
- 要点解析:
- switch(n) 语句中的 n 必须是一个整型表达式,即 switch 判断的数据必须是整型
- case 语句只能带整型常量,包括普通整型或字符,不包括 const 型数据。
- break 语句的作用是跳出整个 swtich 结构,没有 break 程序会略过case往下执行
- default 语句不是必须的,一般放在最后面(因此不需要 break)
while与 do…while循环
- 逻辑:使得程序中每一段代码可以重复循环地运行
- 形式:
- while 循环:先判断,再循环
- do-while 循环:先循环,再判断
while循环
while循环:入口判断
// 循环输出一系列整数,直到100为止
int a;
scanf("%d", &a);
while(a <= 100)
{
printf("%d\n", a);
a++;
}
do-while 循环
do-while循环:出口判断
// 循环输出一系列整数,直到100为止
int a;
scanf("%d", &a);
do
{
printf("%d\n", a);
a++;
}while(a <= 100);
- 语法点:
- while 循环先进行判断,条件为真后才执行循环体,因此循环体可能一遍也不执行。
- do-while 循环先执行循环体,再进行判断,因此循环体至少会执行一遍。
- do-while 循环中的 while 语句后面有分号;
for循环
- 逻辑:与 while 循环类似,但更加紧凑,for 循环将控制循环的变量集中在一行
- 示例:
// 循环输出一系列整数,直到100为止
int a;
for(a=30; a<=100; a++)
{
printf("%d\n", a);
}
- 语法点:
- 循环头的标准语法是: for(表达式1 ; 表达式2 ; 表达式3)
- 表达式1一般用来初始化循环控制变量
- 表达式2一般用来作为循环判定条件,为真则进入循环,为假则跳出循环
- 表达式3一般用来更新循环控制变量
- 三个表达式均可以省略,但分号不能省略
while与for的区别:
一般来说while()更加注重循环条件,for()更加注重循环次数,如果有确定的循环次数
请多用for()循环
break与continue
- 逻辑:
- break:① 跳出 switch 语句; ② 跳出当层循环体
- continue:结束当次循环,进入下次循环
- 举例:
switch(n)
{
case 1:
printf("one\n");
break; // 跳出 switch 语句
case 2:
printf("two\n");
break;
}
while(1)
{
int n = scanf("%d", &a);
if(n == 0)
break; // 跳出当层 while 循环体
}
for(int i=1; i<=100; i++)
{
if(i%7 == 0)
continue; // 跳过所有能被7整除的数
printf("%d\n", i);
}
goto语句
- 逻辑:无条件跳转
- 示例:
int main()
{
printf("%d\n", __LINE__); // 打印第3行
// 无条件跳转到label处
goto label;
printf("%d\n", __LINE__); // 打印第7行,此处被略过
label:
printf("%d\n", __LINE__); // 打印第9行
}
- 语法:
- goto语句直接跳转到本代码块中的标签处
- 标签指的是以冒号结尾的标识符
- 作用:
- goto语句的无条件跳转不利于程序的可读性,一般不建议使用
- goto语句常被用在程序的错误处理中