探索条件程序流程
立即解锁
发布时间: 2025-08-21 00:53:44 阅读量: 1 订阅数: 3 


C语言编程入门与实践
### 探索条件程序流程
在编程中,程序运行时不仅变量的值会发生变化,执行流程也可能改变。条件表达式的结果能够改变语句的执行顺序。在条件程序流程里,有一个必选分支和一个可选分支。若条件满足,就会执行第一个分支;反之,则执行第二个分支。
#### 条件表达式的理解
执行流程由条件表达式的求值结果决定,条件表达式有简单和复杂之分。复杂的条件语句应清晰明确,若无法做到,就需简化;若简化后代码更糟糕,就应对复杂的条件表达式详细注释。同时,要仔细考虑条件表达式的有效输入和预期结果。
条件表达式在复杂语句中有特定位置,总是被括号 `()` 括起来,无论表达式多复杂,结果都为真或假。以下是一些条件表达式示例:
```c
( bResult == true )
( bResult ) /* 简洁替代形式 */
( status != 0 )
( status ) /* 当 status 为 0 时为 false 的简洁替代形式 */
( count < 3 )
( count > 0 && count <= maxCount ) /* 两个条件都为真时整体表达式才为真 */
```
#### `if()… else…` 复杂语句介绍
`if()… else…` 语句有两种形式:简单形式(只有 `if()` 部分)和完整形式(`if()` 和 `else…` 部分都有)。在该语句中,要么执行真分支,要么执行假分支,未执行的分支会被忽略。
其语法形式如下:
- 最简单形式(无假分支):
```c
if( expression )
statement1
statement3 /* 下一条要执行的语句 */
```
- 完整形式(真分支和假分支都有):
```c
if( expression )
statement1
else
statement2
statement3 /* 下一条要执行的语句 */
```
在这两种形式中,都会对 `expression` 求值。若结果为真,执行 `statement1`;在完整形式中,若结果为假,执行 `statement2`,之后继续执行 `statement3`。需注意,`statement1` 或 `statement2` 可能是简单语句(以 `;` 结尾),也可能是复合语句(用 `{}` 括起来)。
下面是使用 `if()… else…` 语句判断整数奇偶性的示例:
```c
bool isEven( int num ) {
bool isEven = false; // 初始假设不是偶数
if( (num % 2) == 0 )
isEven = true;
return isEven;
}
```
此函数先假设值不是偶数,再用简单的 `if` 语句测试并返回结果。还可以将该函数写成更简洁的形式:
```c
bool isEven ( int num) {
if( num % 2 )
return false;
return true;
}
```
```c
bool isEven ( int num) {
return !(num % 2 )
}
```
使用完整形式判断奇数的函数如下:
```c
bool isOdd ( int num) {
bool isOdd;
if( num % 2 ) isOdd = true;
else isOdd = false;
return isOdd;
}
```
接下来看计算闰年的函数,最初的近似计算函数如下:
```c
bool isLeapYear( int year ) {
// 1752 年之前格里高利历中没有闰年
if( year < 1751 ) return false;
// 年份是否是 4 的倍数
if( (year % 4) == 0 ) return true;
return false;
}
```
该函数中,每次确定年份是否为闰年时,就用 `return` 语句返回结果。第二条件表达式有多种写法,如:
```c
if( (year % 4) == 0 ) …
if( (year % 4) < 1 ) …
if( !(year % 4) ) …
```
其中,第一种最明确,最后一种最简洁,都是正确的。
完整程序如下:
```c
#include <stdio.h>
#include <stdbool.h>
bool isLeapYear( int );
int main( void ) {
int year;
printf( "Determine if a year is a leap year or not.\n\n" );
printf( "Enter year: ");
scanf( "%d" , &year );
// 简单的输出结果方式
if( isLeapYear( year ) )
printf( "%d year is a leap year\n" , year );
else
printf( "%d year is not a leap year\n" , year );
// 更符合 C 语言风格的输出结果方式
printf( "%d year is%sa leap year\n" , year , isLeapYear( year ) ? " " : " not " );
return 0;
}
```
不过,该程序并不正确,因为未考虑世纪闰年。实际上,太阳年约为 365.2425 天,需要考虑每 100 年和每 400 年的情况。
#### `switch()` 复杂语句使用
`if()… else…` 语句的条件表达式结果只有真或假两种。当一个结果有多个值,且每个值需要执行不同代码时,可使用 `switch()` 语句。
其语法如下:
```c
switch( expression ) {
case constant-1 : statement-1
case constant-2 : statement-2
…
case constant-n : statement-n
default : statement-default
}
```
`expression` 求值为单个结果,`case` 语句块包含一个或多个 `case` 子句和一个可选的 `default:` 子句。结果会与每个 `case` 子句中的常量值比较,相等时执行该子句的代码路径;若都不匹配,则执行 `default` 路径。
虽然 `default:` 子句可选,但最好加上,以便确保 `switch()` 语句按预期使用。
可以用 `switch` 语句重写闰年计算函数:
```c
switch( year % 4 ) {
case 0 :
return true;
case 1 :
case 2 :
case 3 :
default :
return false;
}
```
简化后:
```c
switch( year % 4 ) {
case 0 :
return true;
default :
return false;
}
```
当需要执行特定路径的操作后不再进行 `case` 比较时,可使用 `break` 语句跳出语句块。以下是一个 `calc()` 函数示例:
```c
double calc( double operand1 , double operand2 , char operator ) {
double result = 0.0;
printf( "%g %c %g = " , operand1 , operator , operand2 );
switch( operator ) {
case '+':
result = operand1 + operand2; break;
case '-':
result = operand1 - operand2; break;
case '*':
result = operand1 * oper
```
0
0
复制全文
相关推荐









