C 语言编程教程

C 语言 - 首页

C 语言基础

C 语言 - 概述 C 语言 - 特性 C 语言 - 发展历史 C 语言 - 环境设置 C 语言 - 程序结构 C 语言 - Hello World C - 编译过程 C - 注释 C - 标记 C - 关键字 C - 标识符 C - 用户输入 C - 基本语法 C - 数据类型 C - 变量 C - 整数提升 C - 类型转换 C - 类型转换 C - 布尔值

C 语言中的常量和文字

C - 常量 C - 字面量 C - 转义序列 C - 格式说明符

C 语言中的运算符

C - 运算符 C - 算术运算符 C - 关系运算符 C - 逻辑运算符 C - 位运算符 C - 赋值运算符 C - 一元运算符 C - 递增和递减运算符 C - 三元运算符 C - sizeof 运算符 C - 运算符优先级 C - 其他运算符

C 语言中的决策

C - 决策 C - if 语句 C - if...else 语句 C - 嵌套 if 语句 C - switch 语句 C - 嵌套 switch 语句

C 语言中的循环

C - 循环 C - While 循环 C - For 循环 C - Do...while 循环 C - 嵌套循环 C - 无限循环 C - Break 语句 C - Continue 语句 C - goto 语句

C 语言中的函数

C - 函数 C - Main 函数 C - 按值调用函数 C - 按引用调用函数 C - 嵌套函数 C - 可变参数函数 C - 用户定义函数 C - 回调函数 C - return 语句 C - 递归

C 语言中的作用域规则

C - 作用域规则 C - 静态变量 C - 全局变量

C 语言中的数组

C - 数组 C - 数组的属性 C - 多维数组 C - 将数组传递给函数 C - 从函数返回数组 C - 可变长度数组

C 语言中的指针

C - 指针 C - 指针和数组 C - 指针的应用 C - 指针运算 C - 指针数组 C - 指向指针的指针 C - 将指针传递给函数 C - 从函数返回指针 C - 函数指针 C - 指向数组的指针 C - 指向结构体的指针 C - 指针链 C - 指针 vs 数组 C - 字符指针和函数 C - NULL 指针 C - void 指针 C - 悬垂指针 C - 解引用指针 C - Near、Far 和 Huge 指针 C - 指针数组的初始化 C - 指针与多维数组

C 语言中的字符串

C - 字符串 C - 字符串数组 C - 特殊字符

C 语言的结构体和联合

C - 结构体 C - 结构体和函数 C - 结构体数组 C - 自引用结构 C - 查找表 C - 点 (.) 运算符 C - 枚举(或 enum) C - 结构填充和打包 C - 嵌套结构 C - 匿名结构和联合 C - 联合 C - Bit 位字段 C - Typedef

C 语言中的文件处理

C - 输入和输出 C - 文件 I/O(文件处理)

C 语言中的预处理器

C - 预处理器 C - #pragma 编译指示 C - 预处理器操作符 C - 宏 C - 头文件

C 语言中的内存管理

C - 内存管理 C - 内存地址 C - 存储类

C 其他主题

C - 错误处理 C - 可变参数 C - 命令执行 C - 数学函数 C - static 静态关键字 C - 随机数生成 C - 命令行参数

C 语言编程资源

C语言问题与解答答案 C语言快速指南 C语言速查表 C语言实用资源 C语言讨论


C - if-else 语句

if-else 语句是 C 语言中常用的决策语句之一。当条件不满足时,if-else 语句提供了一条替代路径。

else 关键字可帮助您在 if 语句中的布尔表达式为假时提供替代操作方案。else 关键字的使用是可选的;是否使用它由您决定。

if-else 语句的语法

if-else 子句的语法如下:

if (Boolean expr){
   Expression;
   . . .
}
else{
   Expression;
   . . .
}

C 编译器会评估条件,如果条件为真,则执行 if 语句 后面的一条语句或一组语句。

如果编程逻辑需要计算机在条件为假时执行其他指令,则这些指令会被放在 else 子句中。

if 语句后面跟着一个可选的 else 语句,该语句在布尔表达式为假时执行。

if-else 语句流程图

以下流程图展示了 if-else 子句在 C 语言中的工作方式 -

C if...else 语句

请注意,如果要执行多个语句,则 ifelse 子句中的花括号是必需的。例如,在下面的代码中,我们不需要花括号。

if (marks<50)
   printf("Result: Fail
");
else
   printf("Result: Pass
");

但是,当 ifelse 部分有多个语句时,您需要告诉编译器它们需要被视为复合语句。

C 语言 if-else 语句示例

示例:使用 if-else 语句计算税款

在下面的代码中,计算了员工收入的税率。如果收入低于 10,000,则适用 10% 的税率。对于超过 10,000 的收入,超出部分将按 15% 征收。

#include <stdio.h>

int main() {
   int income = 5000;
   float tax;
   printf("Income: %d
", income);

   if (income<10000){
      tax = (float)(income * 10 / 100);
      printf("tax: %f 
", tax);
   }
   else {
      tax= (float)(1000 + (income-10000) * 15 / 100);
      printf("tax: %f", tax);
   }
}

输出

运行代码并检查其输出 −

Income: 5000
tax: 500.000000

将收入变量设置为 15000,然后再次运行程序。

Income: 15000
tax: 1750.000000

示例:使用 if-else 语句检查数字

以下程序检查 char 变量存储的是数字还是非数字字符。

#include <stdio.h>

int main() {
char ch='7';

   if (ch>=48 && ch<=57){
      printf("The character is a digit.");
   }
   else{
      printf("The character is not a digit.");
   }
   return 0;
}

输出

运行代码并检查其输出 −

The character is a digit.

将任何其他字符(例如"*")赋值给"ch",并查看结果。

The character is not a digit.

示例:不带花括号的 if-else 语句

考虑以下代码。如果金额大于 100,则按 10% 计算折扣,否则不计算折扣。

#include <stdio.h>

int main() {
   int amount = 50;
   float discount;
   printf("Amount: %d
", amount);

   if (amount >= 100)
      discount = amount * 10 / 100;
      printf("Discount: %f 
", discount);
   else
      printf("Discount not applicable
");

   return 0;
}

输出

程序在编译过程中显示以下错误 -

error: 'else' without a previous 'if'

编译器将执行 if 子句后的第一个语句,并假设由于下一个语句不是 else(它本身就是可选的),因此后续的 printf() 语句是无条件的。然而,下一个 else 语句并未连接到任何 if 语句,因此会报错。

示例:不带花括号的 if-else 语句

也请考虑以下代码 -

#include <stdio.h>

int main() {
   int amount = 50;
   float discount, nett;
   printf("Amount: %d
", amount);

   if (amount<100)
      printf("Discount not applicable
");
   else
      printf("Discount applicable");
      discount = amount*10/100;
      nett = amount - discount;
      printf("Discount: %f Net payable: %f", discount, nett);

   return 0;
}

输出

代码没有给出任何编译器错误,但给出了不正确的输出 -

Amount: 50
Discount not applicable
Discount: 5.000000 Net payable: 45.000000

它会产生错误的输出,因为编译器假设 else 子句中只有一个语句,其余语句都是无条件的。

以上两个代码示例强调了这样一个事实:当 ifelse else 语句中有多个语句时,必须将它们放在大括号中。

为了安全起见,即使对于单个语句,也最好使用大括号。事实上,它提高了代码的可读性。

上述问题的正确解决方案如下所示 -

if (amount >= 100){
   discount = amount * 10 / 100;
   printf("Discount: %f 
", discount);
} else {
   printf("Discount not applicable
");
}

C 语言中的 else-if 语句

C 语言也允许在程序中使用 else-if 语句。让我们看看哪些情况下可能需要使用 else-if 子句。

假设您遇到如下情况。如果某个条件成立,则运行其后的给定代码块。如果条件不成立,则运行下一个代码块。但是,如果以上条件都不成立,并且所有其他条件都失败,则最终运行另一个代码块。在这种情况下,您可以使用 else-if 子句。

else-if 语句的语法

以下是 else-if 子句的语法 -

if (condition){
    // 如果条件为真,
    // 则运行此代码
} else if(another_condition){
    // 如果上述条件为假,
    // 且此条件为真,
    // 则运行此代码块中的代码

} else{
    // 如果上述两个条件均为假,
    // 则运行此代码
}

else-if 语句示例

请看以下示例 -

#include <stdio.h>

int main(void) {
   int age = 15;

   if (age < 18) {
      printf("You need to be over 18 years old to continue
");
   }else if (age < 21) {
      printf("You need to be over 21
");
   } else {
      printf("You are over 18 and older than 21 so you can continue 
");
   }
}

输出

运行代码并检查其输出 −

You need to be over 18 years old to continue

现在,为变量"age"提供不同的值,然后再次运行代码。如果提供的值小于 18,您将得到不同的输出。

c_decision_making.html