老师参与

第二周的逻辑表达式的题,怎么解?提交以后显示超时!

邢传军 发表于2018年04月14日
<p>#include &lt;iostream&gt;</p><p>#include &lt;cstring&gt;</p><p>#include &lt;cstdlib&gt;</p><p>using namespace std;</p><p>bool factor_value();</p><p>bool term_value();</p><p>bool expression_value();</p><p><br ></p><p>int main()</p><p>{</p><p>&nbsp; &nbsp; int count = 1;</p><p>&nbsp; &nbsp; while(1){</p><p>&nbsp; &nbsp; &nbsp; &nbsp; if(expression_value()){</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cout&lt;&lt;&quot;Expression &quot;&lt;&lt;count&lt;&lt;&quot;: V&quot;;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; }else{</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cout&lt;&lt;&quot;Expression &quot;&lt;&lt;count&lt;&lt;&quot;: F&quot;;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; }</p><p>&nbsp; &nbsp; &nbsp; &nbsp; cin.get();</p><p>&nbsp; &nbsp; &nbsp; &nbsp; count++;</p><p><br ></p><p>&nbsp; &nbsp; }</p><p><br ></p><p>&nbsp; &nbsp; return 0;</p><p>}</p><p>bool expression_value(){</p><p>&nbsp; &nbsp; bool result = factor_value();</p><p>&nbsp; &nbsp; bool more = true;</p><p>&nbsp; &nbsp; while(more){</p><p>&nbsp; &nbsp; &nbsp; &nbsp; char op = cin.peek();</p><p>&nbsp; &nbsp; &nbsp; &nbsp; if(op=='&amp;'||op=='|'){</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cin.get();</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bool value = factor_value();</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(op=='&amp;')</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result = result&amp;&amp;value;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result = result||value;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; }</p><p>&nbsp; &nbsp; &nbsp; &nbsp; else</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; more = false;</p><p>&nbsp; &nbsp; }</p><p>&nbsp; &nbsp; return result;</p><p>}</p><p>bool term_value(){</p><p>&nbsp; &nbsp; bool result = factor_value();</p><p>&nbsp; &nbsp; while(true){</p><p>&nbsp; &nbsp; &nbsp; &nbsp; char op = cin.peek();</p><p>&nbsp; &nbsp; &nbsp; &nbsp; if(op=='|'||op=='&amp;'){</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cin.get();</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bool value = factor_value();</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(op=='|'){</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result &nbsp;=result||value;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else{</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result = result&amp;&amp;value;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p><p>&nbsp; &nbsp; &nbsp; &nbsp; }else{</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; }</p><p>&nbsp; &nbsp; }</p><p>&nbsp; &nbsp; return result;</p><p>}</p><p>bool factor_value(){</p><p>&nbsp; &nbsp; bool result = false;</p><p>&nbsp; &nbsp; char c = cin.peek();</p><p>&nbsp; &nbsp; if(c=='('){</p><p>&nbsp; &nbsp; &nbsp; &nbsp; cin.get();</p><p>&nbsp; &nbsp; &nbsp; &nbsp; result = expression_value();</p><p>&nbsp; &nbsp; &nbsp; &nbsp; cin.get();</p><p>&nbsp; &nbsp; &nbsp; &nbsp;}else{</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;switch(c){</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case 'V':</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result = true;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cin.get();</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case 'F':</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result = false;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cin.get();</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case '!':</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cin.get();</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result =!expression_value();</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case ' ':</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cin.get();</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result = factor_value();</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</p><p><br ></p><p>&nbsp; &nbsp; &nbsp; &nbsp;}</p><p>&nbsp; &nbsp; return result;</p><p>}</p><p><br ></p>
5 回复

    1楼

  • 北大郭炜 发表于2018年04月14日
    0 | 0 | 举报
    <p>无穷递归了</p>
    北大郭炜 发表于2018年04月14日
    添加评论
  • 2楼

  • zockxing 发表于2018年04月15日
    0 | 0 | 举报
    <p>但是我测试可以正常结束啊!</p>
    zockxing 发表于2018年04月15日
    添加评论
  • 3楼

  • zockxing 发表于2018年04月15日
    0 | 0 | 举报
    <p>是因为主程序中的whil(1)?<br ></p>
    zockxing 发表于2018年04月15日
    添加评论
  • 4楼

  • 北大郭炜 发表于2018年04月15日
    0 | 0 | 举报
    <p>你写了while(1)还说能结束,你还是从头学C语言吧。</p>
    北大郭炜 发表于2018年04月15日
    添加评论
  • 5楼

  • appwhl 发表于2018年04月20日
    0 | 0 | 举报
    我和你一样,一开始也是照着老师求表达式的那个例子依葫芦画瓢,但这题有特殊性。表达式里会有空格,老师给的参考代码里还考虑了输入空行的情况。 最后卖弄一下,为什么老师给的参考代码里用的是位运算,而不是逻辑运算? 可不可以只用factor和expr两个函数? 加油。共勉。
    appwhl 发表于2018年04月20日
    添加评论