条件表达式

时间:2015-12-04 21:48:24

标签: c++ modulo modulus

我是编程的新手,我开始使用Bjourne的书:编程原理和实践c ++第2版。练习8第3章他要求:

  

“编写一个程序来测试一个整数值,以确定它是奇数还是偶数......提示:参见§3.4中的余数(模数)运算符。”

我可以用以下的方式做到:

int main() {
int n;
cout << "Enter an integer: ";
cin >> n;
if ( n%2 == 0) {
    cout << n << " is even.";
}
else {
    cout << n << " is odd.";

}
return 0;
}

但他在自己的网站上给出了自己的解决方案:

int main()
{
int val = 0;
cout << "Please enter an integer: ";
cin >> val;;
if (!cin) error("something went bad with the read");
string res = "even";
if (val%2) res = "odd"; 

cout << "The value " << val << " is an " << res << " number\n";

keep_window_open(); 
}
catch (runtime_error e) {   
cout << e.what() << '\n';
keep_window_open("~");  
}

/*
Note the technique of picking a default value for the result ("even") and changing it only 
if needed.
The alternative would be to use a conditional expression and write
    string res = (val%2) ? "even" : "odd";

什么是

string res = "even";
if (val%2) res = "odd";

string res = (val%2) ? "even" : "odd";
实际上在做什么?我没有看到他在书中解释过这些。另外,最后一个代码,当我输入偶数值时,它给我“奇数”结果,当我输入和奇数时,给出“偶数”结果。到底是怎么回事?对不起,很长的帖子,希望我能解释一下我的需要......

3 个答案:

答案 0 :(得分:3)

? :是ternary operator

using Project.Totals;

public void btnCalculate_Click(object sender, EventArgs e) 
{
    var cost = new Cost();

只是

的一个相当简洁的版本
if (val%2) res = "odd";

请注意,if (val%2) { res = "odd"; } 实际上并不关心该值是否为&#34; true&#34;或&#34;假。&#34;它只检查零或非零。所以它等同于

if(...)

第二个命令行:if( val%2 != 0) 相似是写作的简短方法:

string res = (val%2) ? "even" : "odd";

这些命令的语法是string res; if(val%2 != 0){ res = "even"; } else{ res = "odd"; }

答案 1 :(得分:1)

添加到之前的答案,你必须注意布尔值(或&#34;真&#34;值)是0和1,(0表示假,1表示在布尔代数中为真)

所以,当

string res = (val % 2) ? "even" : "odd";

请注意,当您给出奇数值时,它将始终返回数字1,即#34; true&#34;,反之为偶数。

你必须转过来让程序运转起来。

答案 2 :(得分:0)

他只是不是编写多个括号,而是根本不使用它们

function (doc) {
  if(doc.entities){
    var arrayLength = doc.entities.length;
    for (var i = 0; i < arrayLength; i++) {
    if (parseFloat(doc.entities[i].relevance) > 0.5)
    index("default", doc.entities[i].text);
}
}
}

而不是

string res = "even"; //default value 
if (val%2) res = "odd"; //in case it is odd, value changes 

//output or threat in some way value. 

简单地写一下你之前写过的string res = (val%2) ? "even" : "odd";