又大又肥硕的奶头小说,又大又粗进去爽a片免费,色窝窝无码一区二区三区,特级做a爰片毛片免费看108

c語言背包問題(c語言新手常見問題?)

三角符文鍵盤怎么打開背包?I鍵和C鍵都可以打開背包。C鍵是人物面板,但是人物和背包是在一起的,所以C鍵也可以打開,比I鍵方便很多。背包問題應用實例?背包問題是一個組合優化的NP完全問題。背包問題可以描

c語言背包問題(c語言新手常見問題?)

三角符文鍵盤怎么打開背包?

I鍵和C鍵都可以打開背包。C鍵是人物面板,但是人物和背包是在一起的,所以C鍵也可以打開,比I鍵方便很多。

背包問題應用實例?

背包問題是一個組合優化的NP完全問題。

背包問題可以描述為:給定一組物品,每個物品都有自己的重量和價格。在有限的總重量內,如何選擇才能使物品總價最高?

問題的名稱來源于如何選擇最合適的物品放入給定的背包中。

類似的問題經常出現在商業、組合數學、計算復雜性理論、密碼學和應用數學等領域。

背包問題也可以描述為一個決定性問題,即在總重量不超過W的前提下,總價值能否達到V?它是由Merkle和Hellman在1978年提出的。

背包問題已經被研究了一個多世紀。早期的作品可以追溯到數學家托拜厄斯丹齊格(tobias Dancziger)在1897年的早期作品,它指的是在不超載行李的情況下打包你最有價值或最有用的物品這一常見問題。

背包問題的主要思想是假設某人有大量不同重量的物品。

這個人偷偷挑選一些物品放在背包里,加密消息。

背包里物品的總重量是公開的,所有可能的物品也是公開的,但是背包里的物品是保密的。

附加一定的限制,賦予權重,列出可能的項目,在計算上是不可行的。背包問題是一個眾所周知的不可計算問題,背包系統以其快速的加解密速度吸引了人們的注意。

但是背包系統大部分都被破譯了,所以用的人很少。

編程里出現bag怎么辦?

1.目的明確。仔細檢查異常報告,確定是否是bug,找出各種有用的信息,找到問題的癥結所在。

2.準備工作——找出正確的代碼并用排除法清潔工作區域。

3.匹配測試環境。如果客戶正在操作計算機配置,則可以跳過此過程。

4.明確代碼的用途,確保現有的所有測試工具正常。

c語言新手常見問題?

1.在編寫標識符時,大寫字母和小寫字母之間的差異被忽略。

2.忽略變量的類型,進行非法操作。

3.混淆字符常量和字符串常量。

4.忽略等號和雙等號的區別。

5.忘了獎金數字吧。

6.輸入變量時忘記添加地址運算符。

7.數據輸入方式不符合要求。

8.輸入字符的格式不符合要求。

9.輸入和輸出的數據類型與使用的格式說明符不一致。

c語言新手常見問題?

以下是C語言初學者的常見問題

1.程序屏幕一閃而過。

# include int main(void){ int I signal/*定義表示信號燈狀態的變量*/printf (# 34紅燈為0,綠燈為1

#34) /*輸出提示信息*/scanf (# 34 % d # 34,Ampisignal)/*輸入isignal變量*/if(iSignal==1) /*用if語句判斷*/{printf (# 34燈為綠色,汽車可以行駛

#34) /* Output */} if當判斷結果為真(iSignal==0)/*使用if語句判斷*/{printf (# 34燈為紅色,carscan # 39T運行

#34) /* Output */}判斷結果為真時返回0}

分析:這個程序在XP或以上系統上用win-tc、dev-cpp等ide編譯運行時,無論輸入什么數字,結果都是一閃而過,因為程序執行完語句直接退出。

解決方案:這里有幾個解決方案:

(1):在程序的開頭加上#include,然后在程序的結尾加上system(#34pause#34)。

這種方法只適用于MS-DOS,windows,不適用于*nix等系統。

(2):在需要暫停的地方添加一兩個get)

這種方法,本質上不是掛起程序,而是讓程序等待用戶輸入幾個回車。但是效果和暫停一樣。

(3):在程序開頭加#include,在需要暫停的地方加一個getch()。原理和上一個差不多。在win-tc中廣泛使用。

2.if,for,while判斷直接跟隨。

例如:

# include int main(void){ int a scanf(# 34 % d # 34,AMPA) if(a==123)///error,if(a==123)不應該加,而應該跟///{ printf()} code { printf(# 34 CCC # 34)} else { printf(# 34 DDD # 34)} return 0 } # include int main(void){ int n,i printf(#34請輸入a numbergt2:

#34,n) else printf(#34%d是一個sushu

#34,n)返回0}

解決amp解決方案:參見注釋。

3.頭文件缺失,main函數格式不規范。

例如:

main(){ int a scanf(#34%d#34,ampa) printf(#34input %d#34,a)}

分析:這個程序沒有帶頭文件stdio.h也就是省略了#include。如果只有scanf,printf函數,stdio.h可以省略,正確運行,但這是一個很不好的習慣。而main()的寫法,C89標準勉強允許這種形式,C99標準不允許。

而void main(),到目前為止,還沒有標準考慮接受它。但是一些編譯器允許這樣做。當然,這種寫法很受歡迎,應該和老譚的書有很大關系。

解決方案:使用的頭文件應該包含在include中。main()函數應該以int main(void)的形式編寫,在main()函數的末尾返回0。

也就是

# include int main(void){ int a scanf(# 34 % d # 34,ampa) printf(#34input %d#34,a) return 0}

4.scanf格式控制的誤用

例如:

#includeint main(void){ float a,b,c printf(# 34 shuru 3 ge Shu : # 34)scanf(# 34 %f, % f,%f#34,ampa,ampb,ampc) printf(#34he shi %f#34,a b c) return 0}

解析:scanf()函數允許在格式字符串中放置普通字符。除空格字符之外的普通字符必須與輸入字符串完全匹配。否則,例如上面的程序,然后scanf()將其解釋為,它將鍵入一個數字,一個逗號,然后一個數字,一個逗號,最后一個數學。也就是說必須這樣輸入:2.3,5.1,3.8。如果沒有完全匹配,scanf()讀取將失敗。

作為編寫這個程序的人,你可以用這種格式輸入,但是用戶不知道用哪種格式輸入。所以應該改成SCANF (# 34 % f % f # 34,AMPA,AMPB,AMPC)

解決方案:請參見scanf行的解析。

5.錯誤的scanf參數

例如:

# include int main(void){ char str[80]printf(# 34請輸入您的名字#34) scanf(#34%s#34,ampstr) printf(#34Hello %s#34,str) return 0}

解析:在scanf()中,讀取int、long、float、double、char等數據。需要在第n個參數(ngt=2)上加amp,因為在scanf()函數中,第n個參數(ngt=2)是變量的地址,而不是變量本身:比如定義了int num,scnaf (# 34)

但是讀取字符串時不需要加amp,因為字符串本身的變量名就代表了地址。因此,在示例中應該是scanf(#34%s#34,str)。同時,這一規則也適用于結構中的變量,即

struct foo { char chchar str[80]int num }數據

那就應該是

scanf(#34%c%s%d#34、)

解決方法:見分析。

6.數據類型混亂

例如:

# include int main(void){ int A double b=1 for(A=1 alt=6aA)b *=A printf(# 34 % LD # 34,b)}

分析:B定義為雙精度浮點型,而輸出使用%ld,即長整型,數據類型不一致。輸出是:老譚書中關于用TC調試的那一節給出的例子,好像是把int a寫到printf (# 34 % f # 34,a)引起的錯誤。

解決方法:將B定義為long,即long b=1(實際上這里涉及到隱式轉換,所以更正確的做法是將A定義為long)

7.C語言中的“除法”

例如:

# include int main(void){ printf(# 34請輸入一個華氏溫度。

# 34) float a,c scanf (# 34 % f # 34,a)c=5/9 *(a-32)printf(# 34 % 4.2f # 34,c) return 0}

解析:C語言中,兩個整數相除。如果它們不能被整除,小數部分會被直接丟棄,即“截斷”。所以5/9的結果是0。

解決方法:應該使用類型轉換,或者明確定義兩個除數的類型。

c=(浮點型)5/9*(a-32)

c=5.0/9*(a-32)

c=5.0/9.0*(a-32)

8.混合輸入數字和字符的杯子

# include int main(void){ char ch int num,I printf(# 34輸入一個字符和一個整數:

#34) while((ch=get))!=#39

#39) { scanf(#34%d#34,ampnum)for(I=0 I lt num I)putch)put # 39

# 39)printf(# 34輸入另一對??招型顺?34) }返回0}

分析:這個程序表面上看起來沒什么問題,但實際再次運行時會發現只輸入了一組數據,程序就退出了。

開始時,程序運行良好。例如,如果輸入2,程序將打印aa。但是,程序在響應第二次輸入之前退出。

問題出在換行符上,這次換行符緊接在第一個輸入的2之后。scanf()函數將換行符保存在輸入隊列中,而get)不跳過換行符。所以在循環的下一個循環中,get)讀取第一個輸入的換行符,換行符是終止循環的條件。

解決方案:在輸入流中吃回車鍵。

在while循環的末尾,添加以下語句

while(獲取)!=#39

#39)繼續

還可以添加fflush(stdin)來刷新輸入流。

9.我,我糾結了

示例:

# include int main(void){ int I=5 printf(# 34 % d % d # 34,I,i ) return 0}

分析:這個問題,在實際編程中,應該沒人會寫,但還是有很多初學者糾結于此。在編程領域,實踐在很多情況下是最好的老師。如果代碼有疑問,在電腦上敲一下,重新編譯運行,是個不錯的辦法。但是在I,I方面,這個程序即使編譯運行,也不一定有正確的結果。用VC,TC,gcc編譯運行后的結果不一定一樣。或者從某種角度來說,這里的結果是否正確其實并不重要。

Printf(#34%d %d#34,I,I)這個語句,其中I,I是一個未指定的行為。也就是說,C語言的標準并沒有規定這個操作的執行順序。如果用gcc編譯并添加-Wall選項,將會出現警告:

函數#039; main#039;6:24:中的Gcc 2_1.c -o 2_1 -g -Wall2_1.c:警告:對#039; I #039;的操作結果可能未定義。

所以,解決這個問題最好的辦法就是不要在程序中寫這樣的代碼。

解決方法:見上文。

10、60lt=等級lt=70

示例:

if(60 lt=grade lt=70)printf(# 34 pass # 34)else if(70 lt=grade lt=85)printf(# 34 good # 34)

:在數學中,表達式60lt=gradelt=70是有效的,但是在C語言中,沒有這樣的表達式。

解決方案:它應該重寫為

If ((60 lt=等級)amp amp(等級lt=70)) printf (# 34 pass #34)else.

11.switch接受什么值?

示例:

# include int main(void){ double choice scanf(# 34 % lf # 34,amp choice)switch(choice){ case 1.0 : printf(# 341.0 # 34)break case 2.0 : printf(# 342.0 # 34)break default : printf(# 34It # 39s not 1.0或2.0#34) } return 0}

分析:這種問題在實際編程中也是不會出現的。但是有些C語言的題可能會這樣出來。Switch()接受整數:整數或字符。所以switch()不接受浮點、字符串等類型。

解決方案:沒有他…

12.==的困惑

示例:

Void count(void)/* counter函數*/void show _ count(void)/* Report count result */int main(void){ puts(# 34請輸入一些字母3360(# to end)# 34)count()show _ count()puts(# 34感謝您使用本草_茶制作的這個程序!#34)系統(#34pause#34)返回0 } void count(void){ while((ch=get))!=STOP){ if(ch=SPACE){ sp _ count continue } if(ch=ENTER){ n _ count continue } other _ count }/* end of while((ch=get))!=# 39 # # 39)*/} void show _ count(void){ puts(# 34的數量

空格輸入other # 34)printf(# 34)mm

#34,sp_count,n_count,other_count)}

分析:換句話說,這個錯誤是我自己犯的。在數學中,=表示相等,而在很多編程語言中,=表示賦值,==表示相等。惰性導致錯誤。這個錯誤C編譯器既不會報告錯誤也不會發出警告。很難檢查是否出了問題。

看了二十多遍調試值監控都沒找到。最后我一行一行的看了源代碼才知道是這個問題。C語言四書五經中的C陷阱與陷阱和專家C編程都提到了這個問題。

解決方法:除了關心什么都不是。

13.溢出問題

舉例:求斐波那契數列的前n項。

# include # define N 100 int main(void){ int fib[N]int I fib[0]=fib[1]=1 printf(# 34 % d % d # 34,fib[0],fib[1])for(I=2 I lt N I){ fib[I]=fib[I-1]fib[I-2]printf(# 34 % d # 34,fib[i]) } return 0}

解析:在數學概念中,整數和小數是無限的,但在計算機中,即使是long long int或double類型也有一定的極限,會溢出。

即假設指針式體重秤的最大量程是120KG,那么一個體重130KG的人站起來,指針會指向10KG的體重秤。同樣,溢出。

在C語言中,編譯器不會檢查或處理溢出。因此,在編程時,您應該自己估計數字的大小,以選擇合適的數據類型來表示數據。

PS:由于TC編譯的程序是16位的,所以int也是16位的,所以會很容易溢出。

解決方法:一方面使用合適的數據類型,如long、long long或double。另一方面,如果數字大到連無符號的long long int或double都無法表示,那就用數組。但是定義數組的加減是好的,定義乘除就沒那么簡單了。

所以新人推薦第一種方法。第二種方法,可以考慮自己編個小程序實現。

14.四舍五入?

示例:需要將輸入的數字四舍五入到指定的精度并輸出。

# include int main(void){ double a=158.385427 printf(# 34 % . 2 lf # 34,a) return 0}

解析:C語言中,printf(#34%.2lf#34,num)直接截斷到小數點后兩位,類似于零截斷而不是四舍五入。

解決方案:如下所示

//對顯示的數字進行四舍五入,用戶可以準確輸入。//區分正負# include # include # include int main(void){ int width double a=158.385427 puts(# 34 ent ER the width # 34)scanf(# 34 % d # 34,amp width)if(AGT 0.0)a=(int)(a * pow(10,width) 0.5)/pow(10,width) else a=(int)(a*pow(10,width) - 0.5)/pow(10,width)printf(# 34t*lf

#34,寬度,a)系統(#34原因# 34)返回0}

15.函數的返回值

示例:

#includedouble salary()/*用于計算工資稅的函數*/void main(){ int choice char want 0 double result while(1){ printf(# 34歡迎使用個人所得稅計算器

#34) printf(#34

#34) printf(#341。工資薪金所得稅的計算

#34) printf(#34

#34) printf(#34,請輸入要計算的稅目序號:# 34) scanf (# 34 % d # 34,amp choice)if(choice==1){ salary()printf(# 34 % lf # 34,Result)} double sale Result printf(# 34請輸入您的薪金:#34) scanf(#34%lf#34,amp sal)if(sallt=3000)Result=# 34 sal # 34 sal=# 34

分析:問題簡單來說就是用戶自定義函數不返回計算出的值。本質上是關于存儲類和鏈接,也就是變量的作用域、鏈接和存儲周期。

解決方案:

/* * main.c * *創建于: 2011年6月11日*作者3360 ICE */# INCLUDE DOUBLE SALARY()/*用于計算工資稅的函數*/int main(void){ int choice//char want0///此want 0變量不使用DOUBLE result while(1){ printf(# 34歡迎使用個人所得稅計算器。

#34) printf(#34

#34) printf(#341。工資薪金所得稅的計算

#34) printf(#34

#34) printf(#34請輸入需要計算的稅收項目序號:#34) scanf(#34%d#34,amp choice)if(choice==1){ result=salary()//要有一個值接受返回值才可以printf(#34%lf#34,result)} } } double salary(){ double sal,result printf(#34請輸入您的薪水:#34) scanf(#34%lf#34,amps al)if(sallt=3000)result=# 34 sal # 34 sal=# 34 # 34gt 3000 amps allt=4500)result=# 34 sal * 0.05 # 34 sal=# 34 # 34gt 4500 amps allt=7500)result=# 34 sal * 0.1-75 # 34 sal=# 34 # 34gt 7500

主站蜘蛛池模板: 昌平区| 永城市| 金华市| 云南省| 乐清市| 嘉兴市| 肇州县| 福海县| 延吉市| 阜阳市| 新乡市| 图木舒克市| 连江县| 遂平县| 商都县| 泾川县| 潼关县| 上林县| 普宁市| 南川市| 福鼎市| 中西区| 洛扎县| 吉安县| 松江区| 兴山县| 颍上县| 衡水市| 郯城县| 霍山县| 绥阳县| 乌恰县| 赣榆县| 临夏市| 桃源县| 阿鲁科尔沁旗| 中卫市| 扶余县| 巴林左旗| 特克斯县| 通河县|