C语言学习笔记—程序流程控制
其他
2019-05-14 23:31:50
阅读次数: 0
前言
- 顺序结构:代码从前往后依次执行,没有任何“拐弯抹角”,不跳过任何一条语句,所有的语句都会被执行到。
- 选择结构:也叫分支结构。代码会被分成多个部分,程序会根据特定条件(某个表达式的运算结果)来判断到底执行哪一部分。
- 循环结构:程序会重新执行同一段代码,直到条件不再满足,或者遇到强行跳出语句。
条件分支语句
- 在C语言中,0代表false,非0代表true。在C语言的运算符优先级分类详见下链接:https://blog.csdn.net/qq_34935373/article/details/88036824
关系运算符 |
含 义 |
数学中的表示 |
< |
小于 |
< |
<= |
小于或等于 |
≤ |
> |
大于 |
> |
>= |
大于或等于 |
≥ |
== |
等于 |
= |
!= |
不等于 |
≠ |
- 在六个关系运算符中,<、<=、>、>=的优先级相同,高于==和!=,==和!=的优先级相同。
- 在C语言中,我们一般将零值称为“假”,将非零值称为“真”。逻辑运算的结果也只有“真”和“假”,“真”对应的值为 1,“假”对应的值为 0。
运算符 |
说明 |
结合性 |
举例 |
&& |
与运算,双目,对应数学中的“且” |
左结合 |
1&&0、(9>3)&&(b>a) |
|| |
或运算,双目,对应数学中的“或” |
左结合 |
1||0、(9>3)||(b>a) |
! |
非运算,单目,对应数学中的“非” |
右结合 |
!a、!(2<5) |
- 逻辑运算符和其它运算符优先级从低到高依次为:赋值运算符(=) < &&和|| < 关系运算符 < 算术运算符 < 非(!)。
- if 和 else 是两个新的关键字,if 意为“如果”,else 意为“否则”,用来对条件进行判断,并根据判断结果执行不同的语句。由于if else 语句可以根据不同的情况执行不同的代码,所以也叫分支结构或选择结构总结起来,if else 的结构为:
if(判断条件){
语句块1
}else{
语句块2
}
- 如果语句块中只有一个语句,也可以省略{ }。
- 有的时候,我们需要在满足某种条件时进行一些操作,而不满足条件时就不进行任何操作,这个时候我们可以只使用 if 语句。也就是说,if else 不必同时出现。
- if else 语句也可以多个同时使用,构成多个分支,形式如下:
if(判断条件1){
语句块1
} else if(判断条件2){
语句块2
}else if(判断条件3){
语句块3
}else if(判断条件m){
语句块m
}else{
语句块n
}
- if 语句也可以嵌套使用,例如:
#include <stdio.h>
int main(){
int a,b;
scanf("%d %d",&a,&b);
if(a!=b)
{
if(a>b)
printf("a>b\n");
else
printf("a<b\n");
}else{
printf("a=b\n");
}
return 0;
}
- if 语句嵌套时,要注意 if 和 else 的配对问题。C语言规定,else 总是与它前面最近的 if 配对。
- switch 是另外一种选择结构的语句,用来代替简单的、拥有多个分枝的 if else 语句,基本格式如下:
switch(表达式)
{
case 整型数值1: 语句 1; break;
case 整型数值2: 语句 2; break;
......
case 整型数值n: 语句 n; break;
default: 语句 n+1; break;
}
- case 后面必须是一个整数,或者是结果为整数的表达式,但不能包含任何变量。如下:
-
case 1+2: printf("..."); break; //正确
case 'A': printf("..."); break; //正确,字符和整数可以相互转换
case 'A'+1: printf("..."); break; //正确,字符和整数可以相互转换
case 9.5: printf("..."); break; //错误,不能为小数
case a: printf("..."); break; //错误,不能包含变量
case a+1: printf("..."); break; //错误,不能包含变量
- default 不是必须的。当没有 default 时,如果所有 case 都匹配失败,那么就什么都不执行。
- 语法格式为:表达式1 ? 表达式2 : 表达式3
- 条件运算符是C语言中唯一的一个三目运算符,其求值规则为:如果表达式1的值为真,则以表达式2 的值作为整个条件表达式的值,否则以表达式3的值作为整个条件表达式的值。条件表达式通常用于赋值语句之中。如:
c = (a > b) ? a : b; //如果a大于b,则c等于a,否则,c等于b
- 条件运算符的优先级低于关系运算符和算术运算符,但高于赋值符。如上述程序段的括号可以省去。
- 条件运算符?和:是一对运算符,不能分开单独使用。
- 条件运算符的结合方向是自右至左。例如下面2个程序段等价:
a>b ? a : c>d ? c : d;
<=>
a>b ? a : ( c>d ? c : d );
- goto语句是一种无条件转移语句,使用格式为:
goto 语句标号;
- goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时,用goto语句则比较合理。
循环语句
- while循环一般形式为:
while(表达式)
{
语句块;
}
- while循环规则:先计算“表达式”的值,当值为真(非0)时, 执行“语句块”;执行完“语句块”,再次计算表达式的值,如果为真,继续执行“语句块”……这个过程会一直重复,直到表达式的值为假(0),就退出循环,执行 while 后面的代码。
- do while循环一般形式:
do
{
语句块;
}while(表达式);
- do while循环规则:先执行“语句块”,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while 循环至少要执行一次“语句块”。
- continue 语句的作用是跳过循环体中剩余的语句而强制进入下一次循环。continue语句只用在 while、for 循环中,常与 if 条件语句一起使用,判断条件是否成立。
- 当 break 关键字用于 while、for循环时,会终止循环而执行整个循环语句后面的代码。break 关键字通常和 if 语句一起使用,即满足条件时便跳出循环。
- break与continue的对比:break 用来结束所有循环,循环语句不再有执行的机会;continue 用来结束本次循环,直接跳到下一次循环,如果循环条件成立,还会继续循环。
- 一般形式为:
for(表达式1; 表达式2; 表达式3)
{
语句块;
}
- 规则:“表达式1”仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句。“表达式2”一般是一个关系表达式,决定了是否还要继续下次循环,称为“循环条件”。“表达式3”很多情况下是一个带有自增或自减操作的表达式,以使循环条件逐渐变得“不成立”。一般形式也可写为:
for(初始化语句; 循环条件; 自增或自减)
{
语句块;
}
- for 循环中的“表达式1(初始化条件)”、“表达式2(循环条件)”和“表达式3(自增或自减)”都是可选项,都可以省略(但分号
;
必须保留)。
- “表达式1”可以是初始化语句,也可以是其他语句。如:
i = 0;
for( sum=0; i<=100; i++ ) sum=sum+i;
- “表达式1”和“表达式3”可以是一个简单表达式也可以是逗号表达式。如:
for( i=0,j=100; i<=100; i++,j-- ) k=i+j;
- “表达式2”一般是关系表达式或逻辑表达式,但也可是数值或字符,只要其值非零,就执行循环体。如:
for( i=0; (s=getchar())!='\n'; i+=s );
- 在C语言中,if-else、while、do-while、for 都可以相互嵌套。所谓嵌套(Nest),就是一条语句里面还有另一条语句,例如 for 里面还有 for,while 里面还有 while,或者 for 里面有 while,while 里面有 if-else,这都是允许的。
转载自blog.csdn.net/qq_34935373/article/details/88524583