|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
用C語(yǔ)言,思考方向不同,實(shí)現(xiàn)結(jié)果就不同,看下面的例子 |
| 作者:蘭天白云 欄目:單片機(jī) |
用C語(yǔ)言,思考方向不同,實(shí)現(xiàn)結(jié)果就不同,看下面的例子 圖A如何用用C語(yǔ)言實(shí)現(xiàn),我不能,你試試。 再來(lái)看看圖B(圖A與圖B實(shí)現(xiàn)相同的功能)很容易用用C語(yǔ)言實(shí)現(xiàn),見程序。
|
| 2樓: | >>參與討論 |
| 作者: 蘭天白云 于 2005/5/23 20:40:00 發(fā)布:
無(wú)法上傳圖B,見“用C語(yǔ)言實(shí)現(xiàn)圖B功能” |
|
| 3樓: | >>參與討論 |
| 作者: 蘭天白云 于 2005/5/23 20:50:00 發(fā)布:
版主,為什么只能上傳300K以下的圖片? 版主,為什么只能上傳300K以下的圖片?我本想把圖A與圖B放一起好做比較。 |
|
| 4樓: | >>參與討論 |
| 作者: xieyuanbin 于 2005/5/24 7:49:00 發(fā)布:
你的積分可能不夠。 每個(gè)貼只能放一個(gè)圖片。你要發(fā)兩個(gè),就要在回貼里面貼。 |
|
| 5樓: | >>參與討論 |
| 作者: 蘭天白云 于 2005/5/24 18:18:00 發(fā)布:
1000分以上不夠嗎? 回貼里找不到貼圖的地方,另版主如何用C寫圖A的程序?,有時(shí)間寫個(gè)看。 |
|
| 6樓: | >>參與討論 |
| 作者: hotpower 于 2005/5/24 20:44:00 發(fā)布:
C語(yǔ)言實(shí)現(xiàn)的方法很多 goto語(yǔ)句,while循環(huán),或void函數(shù)等. 后2中的break或return都能替代討厭的goto語(yǔ)句 例(while循環(huán)): while(1) {//假死循環(huán),因?yàn)樽詈蠖糱reak強(qiáng)行退出 if (t1 != 0x0a) { if (t1 != 0x00) break;//實(shí)現(xiàn)第1個(gè)goto prgend t1 = 0x0b;//繼續(xù) } if (dip == 1) break;//實(shí)現(xiàn)第2個(gè)goto prgend if (t2 != 0) break;//實(shí)現(xiàn)第3個(gè)goto prgend t2 = 0x0b; break;//強(qiáng)行跳入goto prgend } //prgend void函數(shù)方法雷同: //假定t1,t2,dip是全局變量 在主程序中運(yùn)行f(); void f(void) { if (t1 != 0x0a) { if (t1 != 0x00) return;//實(shí)現(xiàn)第1個(gè)goto prgend t1 = 0x0b;//繼續(xù) } if (dip == 1) return;//實(shí)現(xiàn)第2個(gè)goto prgend if (t2 != 0) return;//實(shí)現(xiàn)第3個(gè)goto prgend t2 = 0x0b; } goto是最基本也是最討厭的... 實(shí)際還有SWITCH等具有break功能的語(yǔ)句都能替代goto |
|
| 7樓: | >>參與討論 |
| 作者: 張明峰 于 2005/5/24 22:07:00 發(fā)布:
C語(yǔ)言中應(yīng)該用不著goto的 雖然goto在C語(yǔ)言中合法,但不應(yīng)該用。誰(shuí)用誰(shuí)的C語(yǔ)言就基本不及格--個(gè)人觀點(diǎn)。 |
|
| 8樓: | >>參與討論 |
| 作者: hotpower 于 2005/5/24 22:59:00 發(fā)布:
哈哈,不及格倒不是 goto有時(shí)為優(yōu)化程序也是不得已的,特別是為幾個(gè)字節(jié)傷心時(shí)特別開心... 那時(shí)就忘記不及格的問(wèn)題了... |
|
| 9樓: | >>參與討論 |
| 作者: computer00 于 2005/5/25 0:02:00 發(fā)布:
既然有這條語(yǔ)句,為何不用?沒必要跟自己過(guò)不去。 |
|
| 10樓: | >>參與討論 |
| 作者: hotpower 于 2005/5/25 0:24:00 發(fā)布:
因?yàn)镃人被A人的jmp搞暈了才拋棄goto |
|
| 11樓: | >>參與討論 |
| 作者: computer00 于 2005/5/25 0:33:00 發(fā)布:
呵呵……我覺得跳來(lái)跳去思路也蠻清晰的嘛, 總比搞個(gè)其它的語(yǔ)句,一邊判斷,一邊還要想著跳哪 來(lái)得快。 我先判斷好了,直接跳那就是那了,錯(cuò)不了。 |
|
| 12樓: | >>參與討論 |
| 作者: hotpower 于 2005/5/25 0:36:00 發(fā)布:
所以A人比較勤儉C人比較酷 大程序三級(jí)跳太累...還是做C人瀟灑... A人太累...頭發(fā)肯定比C人白的早... * - 本貼最后修改時(shí)間:2005-5-25 0:40:09 修改者:hotpower |
|
| 13樓: | >>參與討論 |
| 作者: 蘭天白云 于 2005/5/25 18:14:00 發(fā)布:
大家談了這么多,也該把流程圖寫成C了。 幫幫忙,寫一寫,我很差,真的寫不出。 |
|
| 14樓: | >>參與討論 |
| 作者: 蘭天白云 于 2005/5/25 18:23:00 發(fā)布:
多謝hotpower 我只知break用在循環(huán)里面。卻不知還有這種變通用法。 |
|
| 15樓: | >>參與討論 |
| 作者: dengm 于 2005/5/25 18:26:00 發(fā)布:
第一個(gè)分支用if塊, 其他goto到“單點(diǎn)”(圖A) |
|
| 16樓: | >>參與討論 |
| 作者: hotpower 于 2005/5/25 18:58:00 發(fā)布:
這種變通用法是為了"C及格" dengm同志: C人死了都不愿讓人說(shuō)用了goto,可A人不用goto(jmp)就不是真正的A人!!! 這可能就是C和A最大的區(qū)別--(A人整日琢磨如何用活jmp) |
|
| 17樓: | >>參與討論 |
| 作者: xieyuanbin 于 2005/5/25 19:30:00 發(fā)布:
我對(duì)C不熟,整了一個(gè),歡迎指正。 while(1) { if (t1==0x0a); { test_dip(); break; } if (t1==0); { t1=0x0b; test_dip(); } break; } void test_dip (void) { if (dip!=1 && t2==0); {t2=0x0b}; } 我想?yún)R編以后BREAK語(yǔ)句就是一個(gè)GOTO,個(gè)PICC在低檔MCU中堆棧不夠的情況下是用GOTO代替CALL的。 |
|
| 18樓: | >>參與討論 |
| 作者: hotpower 于 2005/5/25 19:41:00 發(fā)布:
if (xxx)后的分號(hào)不敢要 哈哈...while(1)+break=goto終于"銷路不錯(cuò)"... |
|
| 19樓: | >>參與討論 |
| 作者: hotpower 于 2005/5/25 22:50:00 發(fā)布:
只用if即可搞定不用goto的例子 if (!((t1 != 0x0a) && (t1 != 0x00))) {//避開第1個(gè)goto if (t1 == 0x00) { t1 = 0x0b; } if (dip != 1) {//避開第2個(gè)goto if (t2 != 0) {//避開第3個(gè)goto t2 = 0x0b; } } } |
|
| 20樓: | >>參與討論 |
| 作者: computer00 于 2005/5/25 23:08:00 發(fā)布:
呵呵……看了頭暈,結(jié)果編譯器一編譯,展開來(lái),還是那樣子…… |
|
| 21樓: | >>參與討論 |
| 作者: hotpower 于 2005/5/25 23:32:00 發(fā)布:
展開肯定都是goto 哈哈..."根"就是goto... |
|
| 22樓: | >>參與討論 |
| 作者: computer00 于 2005/5/26 8:20:00 發(fā)布:
以前初學(xué)BASIC時(shí),就用過(guò)很多的GOTO,一行行標(biāo)號(hào)那種 后來(lái)學(xué)C語(yǔ)言了,書上說(shuō),GOTO語(yǔ)句不是結(jié)構(gòu)化編程的語(yǔ)句,最好不要用。 不用就不用吧。好象我平時(shí)寫的那些C程序都沒用過(guò)GOTO語(yǔ)句,可能沒遇到 真正頭疼的問(wèn)題。因?yàn)槠綍r(shí)寫的程序也不大,最多的也才3千行左右, 結(jié)果還要除掉開頭的幾行注釋,還有大括號(hào)的換行,就沒剩幾行了^_^。 |
|
| 23樓: | >>參與討論 |
| 作者: 蘭天白云 于 2005/5/26 20:09:00 發(fā)布:
圖B沒發(fā)上 * - 本貼最后修改時(shí)間:2005-5-26 20:13:36 修改者:XIEYUANBIN |
|
| 24樓: | >>參與討論 |
| 作者: xieyuanbin 于 2005/5/26 20:14:00 發(fā)布:
鏈接無(wú)效? |
|
| 25樓: | >>參與討論 |
| 作者: 蘭天白云 于 2005/5/26 20:27:00 發(fā)布:
xieyuanbin的程序簡(jiǎn)潔,但不直觀,hotpower的好象有問(wèn)題 只用if即可搞定不用goto的例子 if (!((t1 != 0x0a) && (t1 != 0x00))) {//避開第1個(gè)goto if (t1 == 0x00) { t1 = 0x0b; } if (dip != 1) {//避開第2個(gè)goto if (t2 != 0) {//避開第3個(gè)goto t2 = 0x0b; } } } 我想應(yīng)該是 if ((t1 == 0x0a) && (t1 == 0x00)) {//避開第1個(gè)goto if (t1 == 0x00) { t1 = 0x0b; } if (dip != 1) {//避開第2個(gè)goto if (t2 == 0) {//避開第3個(gè)goto t2 = 0x0b; } } } |
|
| 26樓: | >>參與討論 |
| 作者: 蘭天白云 于 2005/5/26 20:37:00 發(fā)布:
仔細(xì)想想,hotpower是對(duì)的,有一行要改,可能是筆誤吧。 仔細(xì)想想,hotpower是對(duì)的,有一行要改,可能是筆誤吧!我的是錯(cuò)的 只用if即可搞定不用goto的例子 if (!((t1 != 0x0a) && (t1 != 0x00))) {//避開第1個(gè)goto if (t1 == 0x00) { t1 = 0x0b; } if (dip != 1) {//避開第2個(gè)goto if (t2 == 0) {//避開第3個(gè)goto //----改改改---- t2 = 0x0b; } } } 我自己的也改一下 if ((t1 == 0x0a) || (t1 == 0x00)) {//避開第1個(gè)goto if (t1 == 0x00) { t1 = 0x0b; } if (dip != 1) {//避開第2個(gè)goto if (t2 == 0) {//避開第3個(gè)goto t2 = 0x0b; } } } |
|
| 27樓: | >>參與討論 |
| 作者: 蘭天白云 于 2005/5/26 20:40:00 發(fā)布:
TO: xieyuanbin 鏈接無(wú)效 點(diǎn)擊 有什么用? |
|
| 28樓: | >>參與討論 |
| 作者: hotpower 于 2005/5/26 23:05:00 發(fā)布:
(t2 != 0)是筆誤 主要是粘貼了if (t2 != 0) break;//實(shí)現(xiàn)第3個(gè)goto prgend 至于if (!((t1 != 0x0a) && (t1 != 0x00))) {//避開第1個(gè)goto 和 if ((t1 == 0x0a) || (t1 == 0x00)) {//避開第1個(gè)goto 實(shí)際是一樣的,這實(shí)際就是"摩根定律"... 不過(guò)蘭天白云寫的簡(jiǎn)單些...我也想過(guò)if ((t1 == 0x0a) || (t1 == 0x00)) {//避開第1個(gè)goto 但當(dāng)時(shí)又覺得不對(duì)... 我是用"直接法"編程的,因?yàn)榈?個(gè)goto處可以用 if ((t1 != 0x0a) && (t1 != 0x00)) {//進(jìn)入第1個(gè)goto 那么,自然就得到避開第1個(gè)goto的邏輯肯定是上式的"非",即 if (!((t1 != 0x0a) && (t1 != 0x00))) {//避開第1個(gè)goto 哈哈,雖然別人感覺主題太弱智...但我還是對(duì)其感興趣... 因?yàn)樗俏覀兙幊痰?quot;根基"所在... |
|
| 29樓: | >>參與討論 |
| 作者: cf100 于 2005/5/27 16:08:00 發(fā)布:
goto 會(huì)濫用的確不好,但也不是絕對(duì)不能用,看場(chǎng)合而定 比如某些深層的循環(huán)中,用別的方法跳出反而會(huì)造成思路不清或速度時(shí)效上的低劣。如果在用GOTO最方便的場(chǎng)合究竟用還是不用GOTO,看個(gè)人愛好。 |
|
| 30樓: | >>參與討論 |
| 作者: BitFu 于 2005/5/27 18:55:00 發(fā)布:
這樣可以嗎? if(((t1==0x0a)||(t1==0x99))&&(dip!=1)&&(t2==0)) t2=0x0b; if(t1==0x99) t1=0x0b; * - 本貼最后修改時(shí)間:2005-5-27 19:46:11 修改者:BitFu |
|
| 31樓: | >>參與討論 |
| 作者: BitFu 于 2005/5/27 19:59:00 發(fā)布:
關(guān)于goto 很多書考慮可讀性的原因,建議不要使用goto,我也一直那樣認(rèn)為,正如上面所提到的用了就是不及格的人,然而當(dāng)microsoft開始不及格的時(shí)候我才明白,局部的goto語(yǔ)句對(duì)C程序的結(jié)構(gòu)優(yōu)化是那么的重要。 microsoft用goto的一般格式如下: int fun(...) { .... if(...) goto ERROR; ... if(...) goto ERROR; ... return 0; ERROR: //錯(cuò)誤處理 return ERROR_CODE; } 我也慢慢意識(shí)到,goto可以避免很多的函數(shù)嵌套或語(yǔ)句的嵌套,這無(wú)疑是單片機(jī)資源的節(jié)省。并且在函數(shù)內(nèi)部的跳轉(zhuǎn)不會(huì)對(duì)可讀性產(chǎn)生太大的影響,甚至可以加強(qiáng)代碼的可讀性。當(dāng)然除了這樣的場(chǎng)合外我從不使用goto。 個(gè)人觀點(diǎn),無(wú)意爭(zhēng)論。 * - 本貼最后修改時(shí)間:2005-5-28 9:28:04 修改者:BitFu |
|
| 32樓: | >>參與討論 |
| 作者: 圓圈 于 2005/5/27 23:25:00 發(fā)布:
暈死人 整個(gè)流程圖,除了兩條是執(zhí)行語(yǔ)句外,其他都是判斷,那還不簡(jiǎn)單 void fun( void ) { if ( t1 == 0x00 ) t1 = 0x0b; if ( (( t1 == 0x00 ) || ( t1 == 0x0a )) && ( dip != 1 ) && ( t2 == 0x00 ) t2 = 0x0b; return; } 樓豬的流程圖本來(lái)就有問(wèn)題,設(shè)計(jì)人員不應(yīng)該被誤導(dǎo),應(yīng)透過(guò)現(xiàn)象看本質(zhì),這才是化繁為簡(jiǎn)的程序設(shè)計(jì)思路之根本... |
|
| 33樓: | >>參與討論 |
| 作者: hotpower 于 2005/5/28 0:11:00 發(fā)布:
圓圈的簡(jiǎn)化很好但還是錯(cuò)了 圓圈的思路是如何滿足2個(gè)條件而非三個(gè)goto分支. 但在滿足第1個(gè)條件后,在進(jìn)入第2個(gè)條件前,t1只能有2個(gè)值:1是0x0a和0變化后的0x0b. 故應(yīng)該改為(( t1 == 0x0b ) || ( t1 == 0x0a ))而非(( t1 == 0x00 ) || ( t1 == 0x0a ))才是. 即: void fun( void ) { if ( t1 == 0x00 ) t1 = 0x0b; if ( (( t1 == 0x0b ) || ( t1 == 0x0a )) && ( dip != 1 ) && ( t2 == 0x00 )) t2 = 0x0b; return; } * - 本貼最后修改時(shí)間:2005-5-28 0:12:15 修改者:hotpower |
|
| 34樓: | >>參與討論 |
| 作者: 圓圈 于 2005/5/28 0:44:00 發(fā)布:
暈死,粗心啦。。 |
|
| 35樓: | >>參與討論 |
| 作者: BitFu 于 2005/5/28 9:34:00 發(fā)布:
hotpower的也錯(cuò)了 假如t1一開始就0x0b怎么辦? 不過(guò)思路對(duì)了就可以了。 |
|
| 36樓: | >>參與討論 |
| 作者: hotpower 于 2005/5/28 9:50:00 發(fā)布:
哈哈, 分析了中間又忘了從前 看來(lái)做變性手術(shù)后就不知他(她)的本性了... 哈哈...近來(lái)老犯很弱智的問(wèn)題.說(shuō)出來(lái)真難為情... |
|
| 37樓: | >>參與討論 |
| 作者: dengm 于 2005/5/28 9:57:00 發(fā)布:
就一個(gè)小小題目就出這么多BUGs, 還討厭“goto”嗎? |
|
| 38樓: | >>參與討論 |
| 作者: hotpower 于 2005/5/28 10:08:00 發(fā)布:
用goto確實(shí)不甘心... 但看老外的程序幾乎好程序都有g(shù)oto的身影... 不過(guò)既然不想用goto實(shí)現(xiàn)樓主的題目,BUGs也是難免的... 可以肯定goto是能排除的,不過(guò)要頭痛些. |
|
| 39樓: | >>參與討論 |
| 作者: yuocean 于 2005/5/28 10:40:00 發(fā)布:
我認(rèn)為GOTO非常的好用! 我認(rèn)為GOTO非常的好用。 |
|
| 40樓: | >>參與討論 |
| 作者: lingjunwei 于 2005/5/28 10:51:00 發(fā)布:
ok 好用,哈哈 |
|
| 41樓: | >>參與討論 |
| 作者: cf100 于 2005/5/28 16:03:00 發(fā)布:
不推薦使用GOTO,但不禁止使用GOTO 在結(jié)構(gòu)化程序設(shè)計(jì)中一般不提倡使用goto語(yǔ)句, 以免造成程序在流程的混亂,使可理解性降低和調(diào)試程序難度增加。 其實(shí),我們?cè)谑褂肅語(yǔ)言及以上等級(jí)的語(yǔ)言編寫程序時(shí),有時(shí)可以使用goto語(yǔ)句優(yōu)化程序,提高程序的運(yùn)行效率,減少代碼的冗余,因?yàn)間oto的高效率是其它方法不能比擬的。 濫用goto是會(huì)破壞程序的可讀性,但合理地使用goto語(yǔ)句,除了能提高程序的效率外,還是有可能增加程序的可讀性的。 用結(jié)構(gòu)化設(shè)計(jì)的程序具有良好的可讀性,但以犧牲一定的效率和資源為前提,但在如PICC編程中,效率和資源占用率有時(shí)比可讀性要重要得多。而且風(fēng)格好的程序也不見得都是用了結(jié)構(gòu)化的方法。 |
|
| 42樓: | >>參與討論 |
| 作者: 蘭天白云 于 2005/5/29 15:07:00 發(fā)布:
變換一下流程圖就簡(jiǎn)單了 * - 本貼最后修改時(shí)間:2005-5-29 16:29:42 修改者:XIEYUANBIN |
|
| 43樓: | >>參與討論 |
| 作者: 蘭天白云 于 2005/5/29 15:11:00 發(fā)布:
然后再寫一次程序,是不是簡(jiǎn)單很多? void fun1(unsigned CHAR t1,unsigned CHAR t2,unsigned CHAR dip) { if(t1=0x0a||t1=0x00) { if(t1==0x00) {t1=0x0b;} if(dip!=0x01) {if(t2==0x00) {t2=0x0b;} } } } |
|
| 44樓: | >>參與討論 |
| 作者: hotpower 于 2005/5/30 0:13:00 發(fā)布:
還是教授說(shuō)得有道理 村里人就是說(shuō)不好... |
|
| 45樓: | >>參與討論 |
| 作者: hotpower 于 2005/5/30 0:19:00 發(fā)布:
圖B要比圖A簡(jiǎn)單的多 if ((t1 == 0x0a) || (t1 == 0x00)) { if (t1 == 0x00) t1=0x0b; if ((dip != 0x01) && (t2 == 0x00)) t2=0x0b; } 注意: if(t1=0x0a||t1=0x00) 寫法錯(cuò)誤!!! |
|
| 46樓: | >>參與討論 |
| 作者: 蘭天白云 于 2005/5/30 20:00:00 發(fā)布:
hotpower指點(diǎn)的正是 這么老是犯這種小錯(cuò)誤,說(shuō)出不好意思! |
|
| 47樓: | >>參與討論 |
| 作者: FZJ 于 2006/1/15 9:07:00 發(fā)布:
厲害的hotpower 像hotpower多多學(xué)習(xí)!佩服! |
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |