C++ if选择结构 三目运算符

本文介绍了C++中选择结构的使用方法,包括单行if语句、多行if语句、多条件if语句、嵌套if语句及三目运算符的应用,并通过实例展示了如何比较数值和进行条件判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
using namespace std;

int main()
{
	//选择结构 单行if语句
/*	
	int score = 0;
	cout << "请输入一个分数:" << endl;
	cin >> score;
	cout << "您输入的分数为:" << score << endl;
	if (score > 600)   //备注:此行不能加分号,加了分号符号内容不执行
	{
		cout << "恭喜您考上一个本大学" << endl;
	}

	//选择结构 多行if语句
	int score1 = 0;
	cout << "请输入一个分数:" << endl;
	cin >> score1;
	cout << "您输入的分数为:" << score1 << endl;
	if (score1 > 600){
		cout << "恭喜您考上一个本大学" << endl;
	}
	else {
		cout << "您未能考上一本大学" << endl;
	}

	//选择结构 多条件的if语句
	int score2 = 0;
	cout << "请输入一个分数:" << endl;
	cin >> score2;
	cout << "您输入的分数为:" << score2 << endl;
	if (score2 > 600) 
	{
		cout << "恭喜您考上一本大学" << endl;
	}
	else if (score2 > 500) 
	{
		cout << "恭喜您考上二本大学" << endl;
	}
	else 
	{
		cout << "您未能考上一本或者二本大学" << endl;
	}

	//选择结构 嵌套if语句
	int score2 = 0;
	cout << "请输入一个分数:" << endl;
	cin >> score2;
	cout << "您输入的分数为:" << score2 << endl;
	if (score2 > 600)
	{
		cout << "恭喜您考上一本大学" << endl;
		if (score2 > 700)                     //备注:嵌套语句条件得从条件高的依次排序到条件低的
		{
			cout << "恭喜您考上清华大学" << endl;
		}
		else if (score2 > 650)
		{
			cout << "恭喜您考上北京大学" << endl;
		}
		else
		{
			cout << "恭喜您考上人民大学" << endl;
		}
	}
	else if (score2 > 500)
	{
		cout << "恭喜您考上二本大学" << endl;
	}
	else
	{
		cout << "您未能考上一本或者二本大学" << endl;
	}


	//三只小猪称体重
	double A, B, C;
	cout << "请输入三只小猪A的体重:" << endl;
	cin >> A;
	cout << "请输入三只小猪B的体重:" << endl;
	cin >> B;
	cout << "请输入三只小猪C的体重:" << endl;
	cin >> C;

	if (A > B)
	{
		if (A > C)
		{
			cout << "小猪A最重" << endl;
		}
		else
		{
			cout << "小猪C最重" << endl;
		}
	}

	else
	{
		if (B > C)
		{
			cout << "小猪B最重" << endl;
		}
		else
		{
			cout << "小猪C最重" << endl;
		}
	}
	*/

	//三目运算符
	int a = 10;
	int b = 20;
	int d = 30;
	int c = 0;

	c = (a > b ? a : b); //a>b返回a,否则返回b
	cout << "c=" << endl;//20

	//在C++中三目运算符返回的是变量,可以继续赋值
	(a > b ? a : b) = 100;
	cout << "a = "<< a << endl; //10
	cout << "b = " << b << endl;//100

	(a < d ? a : b) = 100;
	cout << "a = " << a << endl;//100
	cout << "d = " << d << endl;//30

	(a >= b ? a : b) = 200;
	cout << "a = " << a << endl; //200
	cout << "b = " << b << endl;//100

	system("pause"); //固定语句
	return 0;//固定语句
}
#include <iostream>
using namespace std;

int main()
{
	//switch语言
	cout << "请你给电影打分" << endl;
	int score = 0;
	cout << "你打的分数是:" << score<<endl;
	cin >> score;

	switch (score)
	{
	case 10:
			cout << "您认为电影是经典电影" << endl;
			break;
	case 9:
		cout << "您认为电影是经典电影" << endl;
		break;
	case 8:
		cout << "您认为电影非常好" << endl;
		break;
	case 7:
		cout << "您认为电影非常好" << endl;
		break;
	case 6:
		cout << "您认为电影一般" << endl;
		break;
	case 5:
		cout << "您认为电影一般" << endl;
		break;
	default:
		cout << "您认为电影是烂片" << endl;
		break;
	}
	//if 和switch 区别?
	//switch 缺点:判断时候只能是整型或者字符型,不可以是一个区间
	//switch 优点:结构清晰,执行效率好
	system("pause"); //固定语句
	return 0;//固定语句
}
<think>好的,用户问的是if-else语句和三目运算符的效率是否一样。我需要先理解这两个结构在不同编程语言中的实现和底层机制。 首先,我应该回忆一下if-else和三目运算符的基本概念。if-else是条件控制结构,用于根据条件执行不同的代码块。而三目运算符(?:)是一种条件表达式,通常用于简化简单的条件赋值。 接下来,需要考虑不同编程语言的情况,比如C/C++、Java、Python等。不同的编译器或解释器可能会有不同的处理方式。例如,在编译型语言中,编译器可能会将两者优化成相同的机器码,而解释型语言可能效率差异更明显。 然后,查阅一些资料或示例,看看有没有基准测试的结果。比如在C语言中,使用gcc编译时,简单的三目运算和if-else生成的汇编代码是否相同。如果有优化选项开启,可能会发现两者效率几乎一样。但在没有优化的情况下,可能略有不同。 还要考虑使用场景。如果条件判断后的代码块较复杂,或者有副作用,是否会影响优化?比如三目运算符要求两个分支都是表达式,而if-else可以是语句,这可能影响代码结构,进而影响优化效果。 另外,需要提到可读性和代码风格的问题。虽然用户主要问效率,但有时候代码的可维护性更重要,特别是当性能差异可以忽略时。 最后,总结不同情况下的结论,说明在大多数现代编译器中,两者的效率相同,但某些情况下可能有差异,并给出建议优先考虑可读性。</think>在多数现代编程语言中,if-else语句和三目运算符(?:)的效率通常是一致的,但具体表现取决于编程语言、编译器优化和使用场景。以下是分点说明: --- ### 一、底层实现对比 1. **编译型语言(如C/C++)** - 开启编译器优化(如`-O2`)时,两者生成的汇编代码通常相同。 - 示例: ```c // if-else int a = (x > 0) ? 1 : -1; // 三目运算符 int a; if (x > 0) a = 1; else a = -1; ``` 两者可能被编译为完全相同的条件移动指令(如`CMOV`)。 2. **解释型语言(如Python)** - 三目运算符`x if cond else y`和if-else的性能差异可忽略,因为解释器执行的是等价的字节码。 --- ### 二、关键差异点 1. **适用场景** - **三目运算符**:仅用于简单的值选择(表达式级别),例如赋值或返回值。 ```python result = a if cond else b ``` - **if-else**:支持多行代码块和复杂逻辑(语句级别)。 2. **副作用影响** - 若分支包含函数调用或复杂计算,三目运算符可能强制同时求值两个分支(某些语言如Java会短路求值)。 - 示例(Python): ```python # 三目运算符会先计算两个分支的值 x = func1() if cond else func2() # func1和func2可能都会被预先计算 ``` --- ### 三、性能测试示例(C++) ```cpp #include <iostream> #include <chrono> int main() { volatile bool cond = true; // 防止编译器优化 volatile int result; auto start = std::chrono::high_resolution_clock::now(); // 测试三目运算符 for (int i = 0; i < 1e8; ++i) { result = cond ? 1 : 0; } auto end = std::chrono::high_resolution_clock::now(); std::cout << "Ternary: " << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << "ms\n"; // 测试if-else start = std::chrono::high_resolution_clock::now(); for (int i = 0; i < 1e8; ++i) { if (cond) result = 1; else result = 0; } end = std::chrono::high_resolution_clock::now(); std::cout << "if-else: " << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << "ms\n"; } ``` **结果(-O2优化)**: 两者耗时几乎相同(误差在1%以内)。 --- ### 四、结论与建议 1. **效率一致性**:在现代编译器中,两者效率通常无显著差异。 2. **代码可读性优先**: - 简单条件赋值 → 优先用三目运算符(代码更紧凑)。 - 复杂逻辑或多行代码 → 必须用if-else。 3. **特殊情况**: - 避免在三目运算符中嵌套复杂计算(可能导致意外求值)。 - 函数式编程语言(如Scala)中,三目运算符可能被设计为表达式,与if-else行为一致。 --- **最终建议**:除非在极端性能敏感的场景,否则优先选择可读性更高的写法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值