3、程序结构和控制语句
1、程序结构
从程序流程角度来看,C语言中的语句可以分为三种基本结构:顺序结构、分支结构和循环结构。
1.1、顺序结构
顺序结构即程序按顺序执行,不发生跳转。顺序结构的执行过程如下:

1.2、分之结构(选择结构)
选择结构即依据条件是否满足,有选择的执行相应功能。分支结构的执行过程如下:

1.3、循环结构
循环结构即依据条件是否满足,循环多次执行某段代码。循环结构的执行过程如下:

2、C语言控制语句
2.1、条件判断语句
(1)、if语句的形式
A、单行if语句
if(表达式) { 语句; }
B、多行if语句
if(表达式) { 语句1; } else { 语句2; }
C、多条件if语句
if(表达式1) { 语句1; } else if(表达式2) { 语句2; } else if(表达式3) { 语句3; } ……………. else if(表达式n-1) { 语句n-1; } else { 语句n; }
D、嵌套if语句
{ if()语句1 else 语句2 } else { if()语句3 else 语句4 } if() { if()语句1 } else { if()语句2 else 语句3 }
注意:if语句里面还可以嵌套if语句。在嵌套if语句中,else总是与它上面最近的if配对。
(2)、三目运算符
语法:<表达式1> ? <表达式2>:<表达式3>;
如果表达式1的值为真,执行表达式2,并返回表达式2的结果;如果表达式1的值为假,执行表达式3,并返回表达式3的结果;
<M> ? <a++>:<a-->; //M为0执行a--并返回值,非0执行a++并返回值,M等价于M!=0
C++中的三目运算符返回的是变量,可以继续赋值,如下:
(a>b?a:b)=100;//执行完给a赋值100
(3)、switch语句
A、从匹配项开始执行到最后
switch(表达式) { case 常量表达式1:语句1; case 常量表达式2:语句2; case 常量表达式3:语句3; case 常量表达式4:语句4; ……….. case 常量表达式n:语句n; default:语句n+1; }
B、只执行匹配的一项,执行完该项后立即跳出循环
switch(表达式) { case 常量表达式1:语句1;break; case 常量表达式2:语句2;break; case 常量表达式3:语句3;break; case 常量表达式4:语句4;break; ……….. case 常量表达式n:语句n;break; default:语句n+1;break; }
2.2、循环语句
(1)for循环语句
for(起始表达式;条件表达式;末尾循环体) { 循环体语句; } 执行顺序:起始表达式、条件表达式、循环体语句、末尾循环体、条件表达式、循环体语句、末尾循环体……….其中起始表达式只执行一次。
for(;;) { 循环体语句; }
(2)、while循环
A、先判断循环条件,循环条件成立时才执行循环体语句
whiel(循环条件)
{
循环体语句;
}
B、先执行一次循环体语句,再判断循环条件,循环条件成立时执行循环体语句
do { 循环体语句; } whiel(循环条件);
(3)、 goto语句构成循环
goto语句也称为无条件转移语句,其一般格式如下:
goto语句标号;
其中语句标号是按标识符规定书写的符号,放在某一语句行的前面,标号后面加上冒号(:)。语句标号起标识语句的作用,与goto语句配合使用。
C语言不限制程序中使用标号的次数,但各标号不得重名。Goto语句的语意是改变程序流向,转去执行语句标号所标识的语句。可以与条件判断语句配合使用,来构成循环。
2.3、转向语句
(1)、break语句
break语句只能用在switch语句或循环语句中,其作用是跳出选择结构或跳出循环结构,转去执行后面的语句,break只能跳出一层循环。
在switch条件语句中,作用是终止case并跳出switch。
出现在循环语句中,作用是跳出当前循环语句。
出现在嵌套循环中,跳出最近的内层循环语句。
(2)、continue语句
其功能是结束本次循环,但是并不跳出循环,即不再执行continue语句之后的语句,而是转入下一次循环。
(3)、goto语句
Goto语句除了可以用来构造循环外,还可以实现无条件跳转、条件转移、跳出循环体等功能。
语法:
goto 标记;
如果标记的名称存在,程序执行到goto语句时,会跳转到标记的位置。
/*举例*/
goto loop; //跳转到loop loop: 程序;
3、运算符
(1)关系运算符
关系运算符在使用时,它的的两边都会有一个表达式,比如变量、数值、加减乘除运算等,关系运算符的作用就是判明这两个表达式的大小关系。注意,是判明大小关系,不是其他关系。
C语言提供了以下关系运算符:
| 关系运算符 | 含 义 | 数学中的表示 |
|---|---|---|
| < | 小于 | < |
| <= | 小于或等于 | ≤ |
| > | 大于 | > |
| >= | 大于或等于 | ≥ |
| == | 等于 | = |
| != | 不等于 | ≠ |
关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,<、<=、>、>=的优先级相同,高于==和!=,==和!=的优先级相同。
在C语言中,有的运算符有两个操作数,例如 10+20,10和20都是操作数,+ 是运算符。我们将这样的运算符称为双目运算符。同理,将有一个操作数的运算符称为单目运算符,将有三个操作数的运算符称为三目运算符。
常见的双目运算符有 +、-、*、/ 等,单目运算符有 ++、-- 等,三目运算符只有一个,就是 ? :。
(2)逻辑运算符
在高中数学中,我们就学过逻辑运算,例如p为真命题,q为假命题,那么“p且q”为假,“p或q”为真,“非q”为真。在C语言中,也有类似的逻辑运算:
| 运算符 | 说明 | 结合性 | 举例 |
|---|---|---|---|
| && | 与运算,双目,对应数学中的“且” | 左结合 | 1&&0、(9>3)&&(b>a) |
| || | 或运算,双目,对应数学中的“或” | 左结合 | 1||0、(9>3)||(b>a) |
| ! | 非运算,单目,对应数学中的“非” | 右结合 | !a、!(2<5) |
在编程中,我们一般将零值称为“假”,将非零值称为“真”。逻辑运算的结果也只有“真”和“假”,“真”对应的值为 1,“假”对应的值为 0。
1) 与运算(&&)
参与运算的两个表达式都为真时,结果才为真,否则为假。例如:
5&&0 //5为真,0为假,相与的结果为假,也就是 0
(5>0) && (4>2) //5>0 的结果是1,为真,4>2结果是1,也为真,所以相与的结果为真,也就是1
2) 或运算(||)
参与运算的两个表达式只要有一个为真,结果就为真;两个表达式都为假时结果才为假。例如:
10 || 0 //10为真,0为假,相或的结果为真,也就是 1
(5>0) || (5>8) //5>0 的结果是1,为真,5>8 的结果是0,为假,所以相或的结果为真,也就是1
3) 非运算(!)
参与运算的表达式为真时,结果为假;参与运算的表达式为假时,结果为真。例如:
!0 //0 为假,非运算的结果为真,也就是 1
!(5>0) //5>0 的结果是1,为真,非运算的结果为假,也就是 0
(3)位运算符


浙公网安备 33010602011771号