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 不是一个常量表达式,而是一个变量。

