c++中的if语句,switch语句,多层条件语句
在 C++ 中,有多种方式可以进行条件判断,包括 if 语句、switch 语句、多层条件语句等。
if 语句
if 语句是最常用的条件语句之一,其语法如下:
if (condition) { // 如果条件成立,执行这里的语句 } else { // 如果条件不成立,执行这里的语句 }
其中,condition 是一个条件表达式,如果其值为 true,就执行花括号中的代码块;如果为 false,则执行 else 语句中的代码块。
switch 语句
switch 语句也用于条件判断,适用于多个可能的条件值的情况,其语法如下:
switch (expression) { case value1: // 如果 expression 的值等于 value1,执行这里的语句 break; case value2: // 如果 expression 的值等于 value2,执行这里的语句 break; default: // 如果 expression 的值不等于任何一个 case 中的值,执行这里的语句 break; }
其中,expression 是需要进行条件判断的表达式,每个 case 后面跟的是一个值,表示如果 expression 的值等于该值,就会执行该 case 中的语句。如果 expression 的值不等于任何一个 case 中的值,则执行 default 中的语句。注意,每个 case 后面需要使用 break 语句结束该 case。
多层条件语句
在实际的开发中,有时候需要进行多层的条件判断,这时候可以使用多个 if 语句嵌套来实现。例如:
if (condition1) { if (condition2) { // 如果条件1和条件2都成立,执行这里的语句 } else { // 如果条件1成立,但条件2不成立,执行这里的语句 } } else { // 如果条件1不成立,执行这里的语句 }
这种多层条件语句的缺点是代码可读性较差,容易出错。在实际的开发中,应该尽量避免使用多层条件语句,而是采用其他的编程技巧来简化代码。
当需要进行多个条件判断时,可以使用多层条件语句。多层条件语句是通过嵌套使用 if 语句或 switch 语句来实现的。
例如,下面的示例代码中,使用了多层 if 语句来判断输入的数是正数、负数还是零:
#include <iostream> using namespace std; int main() { int num; cout << "请输入一个整数:" << endl; cin >> num; if (num > 0) { cout << "这是一个正数" << endl; } else if (num < 0) { cout << "这是一个负数" << endl; } else { cout << "这是零" << endl; } return 0; }
在上面的代码中,先通过 cin 语句获取输入的数,然后通过嵌套使用多层 if 语句来进行条件判断。如果输入的数大于 0,则输出“这是一个正数”;如果输入的数小于 0,则输出“这是一个负数”;如果输入的数等于 0,则输出“这是零”。 另外,如果多层条件判断中的条件比较复杂或者需要判断的情况比较多,可以使用 switch 语句来进行处理,如下面的示例代码所示:
#include <iostream> using namespace std; int main() { char grade; cout << "请输入一个等级(A、B、C、D、E):" << endl; cin >> grade; switch (grade) { case 'A': cout << "优秀" << endl; break; case 'B': cout << "良好" << endl; break; case 'C': cout << "中等" << endl; break; case 'D': cout << "及格" << endl; break; case 'E': cout << "不及格" << endl; break; default: cout << "输入有误" << endl; break; } return 0; }
在上面的代码中,先通过 cin
语句获取输入的等级,然后使用 switch 语句来进行条件判断。如果输入的等级是 A,则输出“优秀”;如果输入的等级是 B,则输出“良好”;以此类推。如果输入的等级不是 A、B、C、D、E 中的任何一个,则输出“输入有误”。
需要注意的是,在 switch 语句中,case 后面跟的值必须是常量表达式,不能是变量或者表达式。同时,每个 case 语句后面必须加上 break 语句,用来跳出 switch 语句,否则会出现“case fall-through”现象,即程序会继续执行下一个 case 语句。如果需要执行多个 case 语句,则可以在需要执行的 case 语句后面省略 break 语句
当需要判断的情况非常多的时候,可以使用多层条件语句。多层条件语句的实现方法和 if 语句和 switch 语句类似,只不过需要嵌套多个 if 或 switch 语句。
以下是一个多层条件语句的示例代码:
#include <iostream> using namespace std; int main() { int score = 75; if (score >= 90) { cout << "A" << endl; } else if (score >= 80) { cout << "B" << endl; } else if (score >= 70) { cout << "C" << endl; } else if (score >= 60) { cout << "D" << endl; } else { cout << "E" << endl; } return 0; }
这个示例中,首先判断 score 是否大于等于 90 分,如果是,则输出 A;否则,再判断 score 是否大于等于 80 分,如果是,则输出 B,以此类推。
多层条件语句可以比较清晰地表达多种情况的处理逻辑,但是嵌套过多也会使代码难以阅读和维护。在实际开发中,需要根据实际情况选择合适的判断语句结构。
当多层条件语句中的条件判断比较复杂时,可以使用嵌套的if语句或者switch语句,或者使用逻辑运算符来简化代码。
下面是一个使用嵌套if语句的例子,判断一个数是否为素数:
#include <iostream> using namespace std; int main() { int num, i; bool isPrime = true; cout << "请输入一个正整数:"; cin >> num; if (num <= 1) isPrime = false; else { for (i = 2; i <= num / 2; ++i) { if (num % i == 0) { isPrime = false; break; } } } if (isPrime) cout << num << " 是素数。"; else cout << num << " 不是素数。"; return 0; }
下面是一个使用switch语句的例子,将数字转换为星期几:
#include <iostream> using namespace std; int main() { int day; cout << "请输入数字 1 到 7:"; cin >> day; switch (day) { case 1: cout << "星期一"; break; case 2: cout << "星期二"; break; case 3: cout << "星期三"; break; case 4: cout << "星期四"; break; case 5: cout << "星期五"; break; case 6: cout << "星期六"; break; case 7: cout << "星期日"; break; default: cout << "输入有误!"; break; } return 0; }
使用逻辑运算符可以简化多层条件语句,例如将上面的判断是否为素数的例子改为:
#include <iostream> using namespace std; int main() { int num, i; cout << "请输入一个正整数:"; cin >> num; if (num <= 1) cout << num << " 不是素数。"; else if (num == 2 || num == 3) cout << num << " 是素数。"; else if (num % 2 == 0 || num % 3 == 0) cout << num << " 不是素数。"; else { for (i = 5; i * i <= num; i += 6) { if (num % i == 0 || num % (i + 2) == 0) { cout << num << " 不是素数。"; return 0; } } cout << num << " 是素数。"; } return 0; }
在上面的例子中,首先判断num是否小于等于1,然后判断num是否等于2或3,如果不是,则判断num是否可以被2或3整除,最后再进行更为复杂的素数判断。
实际上 switch 语句中的 case 标签必须是一个常量表达式,而不能是一个变量。
这意味着,在 switch 语句中,每个 case 标签后面的值必须是一个编译时可确定的常量,例如字面量、枚举常量、const 变量等等。不能使用变量作为 case 标签,因为变量的值只能在运行时确定。
例如:
int x = 2; switch (x) { case 1: cout << "x is 1" << endl; break; case 2: cout << "x is 2" << endl; break; case 3: cout << "x is 3" << endl; break; default: cout << "x is not 1, 2 or 3" << endl; break; }
这个 switch 语句是合法的,因为它的 case 标签是整数字面量 1、2 和 3。
另一方面,下面的 switch 语句是不合法的:
int x = 2; switch (x) { case 1: cout << "x is 1" << endl; break; case x: // 错误:case 标签必须是一个常量表达式 cout << "x is 2" << endl; break; case 3: cout << "x is 3" << endl; break; default: cout << "x is not 1, 2 or 3" << endl; break; }
因为 case 标签中的 x 不是一个常量表达式,而是一个变量。