-
讓我們先深入了解幾個問題。
1.字串中的 是轉義字元。 即它寫在具有特殊含義的字串中。 例如,t 表示乙個選項卡; 表示字元"\";指示換行符。
2.八進位數的表示。 以 0 開頭,後跟乙個不大於 than 的整數,例如 07,表示 ASCII 為 7 個字元。
讓我們看一下第乙個字串。
string 097“,不用說前 6 個字母,當編譯器遇到”097“時,由於它不是合法的八進位數,(9 大於 8),則認為字串結束。
This t a 078string“是 16 的原因:
this-4
t---1a---1
string---6
n---1 總共有 16 個。
-
沒錯,strlen(“string 097”) 是 6strlen(“this t a 078string”) 是 16char a[20];
strcpy(a,"string\097");
檢視 a[6] 的值是否為 0
strcpy(a,"this\t\\a\078string");
看看 a[7] 的值是多少,它實際上是 7
這裡 07 被解釋為乙個整體,即八進位的 7
c 字元常量中的轉義字元 ddd 或 xhh 可用於方便靈活地表示任意字元。 DDD 是斜槓後跟三位八進位數,三位數八進位數的值是對應的八進位 ASCII 碼值。
X 後跟乙個兩位十六進製數,它是相應字元的十六進製 ASCII 程式碼值。
因為八進位中沒有 9"string\097"這裡 0 是以字串結尾的 0
-
遇到 0 已停止!
0 表示空終結者!
在 C++ 中,所有字串都以 0 結尾!
strlen() strcpy 等,都是基於此的!
-
跟隨字串"\0"後面小於 8 的數字被視為八進位數,後面小於 8 的數字被視為 0"\097"0 後面跟著 9,不小於 8,所以第乙個語句的字串是"string",結果是第二個語句的 6"\078"因此,0 之後是 7"\07"它被視為乙個字元,整個字串長度為 16
-
第乙個 097 不是八進位的,所以當它遇到 0 時會停止。
第二個 078 是八進位的。
-
1. 如果 an=bn,則 an(或 bn)*cn 是最大公約數,演算法結束。
2. 如果 an=0,則 bn 為最大公約數,演算法結束。
3. 如果 bn=0,則 an 為最大公約數,演算法結束。
4. 設定 a1=a、b1=b 和 c1=1
5. 如果 an 和 bn 都是偶數,則 an+1=an 2, bn+1=bn 2, cn+1=cn*2(注意,乘以 2 只需要將整數向左移動一位,除以 2 只需要將整數向右移動一位)。
6. 如果 an 是偶數,而 bn 不是偶數,則 an+1=an 2,bn+1=bn,cn+1=cn(顯然,2 不是奇數)。
7. 如果 bn 是偶數,而 an 不是偶數,那麼 bn+1=bn 2,an+1=an,cn+1=cn(顯然,2 不是奇數)。
8. 如果 an 和 bn 都不是偶數,則 an+1=|an-bn|/2,bn+1=min(an,bn),cn+1=cn
9. N 加 1,轉 1
以前的演算法是錯誤的,因為根本沒有使用 CN。 我是在程式設計時才發現的。 現在我已經修復了這個錯誤。
-
提出這個問題的人水平太差了,多做半路修士,非物質的名聲往往不專業,你的分析是合理的。
也許提問者只用過 turbo c,而螞蟻喜歡畫蛇並自動新增結尾,因為只有像 turbo c 這樣的小程式,所以長度會是 3。
Turbo C 自動新增終止符的做法是沒有標準化的,而且 C 語言也沒有這樣規定編譯器的行為,我們一定要記住在編寫程式時不要依賴這些不規範之處,否則在編寫手機程式和 UNIX 程式時,你會感到無數的莫名其妙,很多時候你永遠無法理解程式的原因。
你的分析是完全正確的,在UNIX、Linux、Free BSD等常規C語言中,沒有結束字元,這是我在sco Unix下執行程式的情況:
catmain()
char p=q[10]=;
printf("%d %d", strlen(p), strlen(q));
為什麼輸出 9 和 3 是 cc,因為 unix 負載初始化為記憶體為 0,所以第二個長度是 3,而前 9 讓我們知道兩個變數 p 和 q 之間有多少記憶體浪費來對齊:)
r5vb8mxqwlgedfhippxc
-
提出這個問題的人水平太差了,半途而廢很不專業,你的分析是合理的。
也許提問者只用過 turbo c,因為只有像 turbo c 這樣的小程式喜歡自動新增蛇和新增結束字元,所以長度會是 3。
給 Turbo C 新增終結器的做法是沒有標準化的,而且 C 語言定義也沒有這樣規定編譯器的行為,我們一定要記住在編寫程式時不要依賴這些非標準的行為,否則在編寫手機程式和 UNIX 程式時,會感到無數的莫名其妙, 很多時候,您永遠不會理解該程式的原因。
你的分析是完全正確的,在UNIX、Linux、Free BSD等常規C語言中,沒有結束字元,以下是我在sco Unix下執行的程式的聲譽:
catmain()
char p=q[10]=;
printf("%d %d", strlen(p), strlen(q));
為什麼輸出結果是 cc 的 9 和 3,因為 unix 負載必須將記憶體初始化為 0,所以第二個長度是 3,而前面的 9 可以讓我們知道兩個變數 p 和 q 之間有多少記憶體浪費來對齊:)
5月17日石榴演算法預告片,這次演算法主要是針對低質量頁面進行調整,具體來說部分頁面上有很多彈窗廣告,這些廣告嚴重影響了使用者瀏覽頁面的體驗,所以這個演算法主要針對這個。 >>>More
你應該說的是計算機演算法,如果你真的想深入研究,建議提高數學的基礎,最基礎的兩門課是離散數學和資料結構,當然,普通高校的教材還是比較好的,資料結構一開始比較抽象, 而當你學習它時,你會發現它非常有趣,學好它,並努力能夠理解並實際程式設計所有常用的資料結構和相關演算法,然後看看《計算機演算法基礎》一書,從分而治之到回溯等,學習常用演算法(典型問題)並以程式設計方式實現它們, 差不多就是這樣。推薦幾本書:《資料結構》、《計算機演算法基礎》、《演算法: >>>More