freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c語言編程要點(diǎn)-資料下載頁

2025-08-12 10:02本頁面

【導(dǎo)讀】本章主要描述C語言一些基本要素。當(dāng)你開始編寫C程序時(shí),你可能對(duì)C語言的一些基本問題感到困惑,如C語言所使用的約定、關(guān)鍵字和術(shù)語等。例如,switch語句是最常用的一種C語言構(gòu)件,本章將回答與它有關(guān)的三個(gè)常見問題。本章還涉及其它幾。在閱讀本章時(shí),請(qǐng)注意有關(guān)switch語句和運(yùn)算符優(yōu)先。級(jí)的一些問題,這些問題常常會(huì)使C語言的初學(xué)者感到迷惑。局部程序塊是指一對(duì)大括號(hào)({})之間的一段C語言程序。你可以在局部程序塊中說明一些變量,這種變量被稱為局部變量,此外還要注意,當(dāng)if語句的局部程序塊結(jié)束時(shí),程序重新進(jìn)入最初定義的test_var變量。的作用范圍,此時(shí)test_var的值為10。方說明一個(gè)變量有時(shí)就會(huì)使程序變得更易讀。然而,編寫得較好的程序通常不采用這種方式來說。注意,使用switch語句的前提是條件表達(dá)式必須基于同一個(gè)數(shù)字型變量。不,但是為了進(jìn)行錯(cuò)誤檢查或邏輯檢查,還是應(yīng)該在switch語句中加入default分支。

  

【正文】 整數(shù)。 浮點(diǎn)類型包括 float, double 和 longdouble 這三種固有類型。整數(shù)類型包括 char,unsigned char, short, unsigned short, int, unsigned int, long 和 unsigned long。對(duì)這些類型都可進(jìn)行以下 4 種算術(shù)運(yùn)算: + 加 減 * 乘 / 除 對(duì)整數(shù)類型不僅可以進(jìn)行上述 4 種運(yùn)算,還可進(jìn)行以下幾種運(yùn)算: % 取模或求余 右移 左移 amp。 按位與 | 按位或 ^ 按位異或 ! 邏輯非 ~ 取反 盡管 C 允許你使用 “ 混 合模式 ” 的表達(dá)式 (包含不同類型的算術(shù)表達(dá)式 ),但是,在進(jìn)行運(yùn)算之前,它會(huì)把不同的類型轉(zhuǎn)換成同一類型 (前面提到的指針運(yùn)算除外 )。這種自動(dòng)轉(zhuǎn)換類型的過程被稱為 “ 運(yùn)算符升級(jí) (operator promotion)” 。 請(qǐng)參見: 2. 12 什么是運(yùn)算符升級(jí) (operatorpromotion)? . 什么是運(yùn)算符升級(jí) (operatorpromotion)? 當(dāng)兩個(gè)不同類型的運(yùn)算分量 (operand)進(jìn)行運(yùn)算時(shí),它們會(huì)被轉(zhuǎn)換為能容納它們的最小的類型,并且運(yùn)算結(jié)果也是這種類型。下表列出了其中的規(guī)則,在 應(yīng)用這些規(guī)則時(shí),你應(yīng)該從表的頂端開始往下尋找,直到找到第一條適用的規(guī)則。 19 運(yùn)算分量 1 運(yùn)算分量 2 轉(zhuǎn)換結(jié)果 long double 其它任何類型 long double double 任何更小的類型 double float 任何更小的類 float unsigned long 任何整數(shù)類 unsigned long long unsignedLONG_MAX unsigned long long 任何更小的類型 long unsigned 任何有符號(hào)類型 unsigned 下面的程序中就有幾個(gè)運(yùn)算符升級(jí)的例子。變量 n 被賦值為 3/4,因?yàn)?3和 4都是整數(shù),所以先進(jìn)行整數(shù)除法運(yùn)算,結(jié)果為整數(shù) 0。變量 f2 被賦值為 3/,因?yàn)? float 類型,所以整數(shù) 3 也被轉(zhuǎn)換為 float 類型,結(jié)果為 float 類型 。 include main () { float f1 = 3/4。 float f2 = 3/ printf(3/4== %g or %g depending on the type used. \n,f1, f2)。 } 請(qǐng)參見: 2. 11對(duì)不同類型的變量進(jìn)行算術(shù)運(yùn)算會(huì)有問題嗎 ? 2. 13什么時(shí)候應(yīng)該使用類型強(qiáng)制轉(zhuǎn)換 (typecast)? . 什么時(shí)候應(yīng)該使用類型強(qiáng)制轉(zhuǎn)換 (typecast)? 在兩種情況下需要使用類型強(qiáng)制轉(zhuǎn)換。第一種情況是改變運(yùn)算分量的類型,從而使運(yùn)算能正確地進(jìn)行。下面的程 序與 2. 12 中的例子相似,但有不同之處。變量 n被賦值為整數(shù) i 除以整數(shù) j的結(jié)果,因?yàn)槭钦麛?shù)相除,所以結(jié)果為 0。變量 f2也被賦值為 i除以 j 的結(jié)果,但本例通過 (float)類型強(qiáng)制轉(zhuǎn)換把 i轉(zhuǎn)換成一個(gè) float 類型,因此執(zhí)行的是浮點(diǎn)數(shù)除法運(yùn)算 (見 2. 11),結(jié)果為 0. 75。 include main ( ) { int i = 3。 int j = 4 float f1 =i/j。 float f2= (float) i/j。 printf(3/4== %g or %g depending on the type used. \n,f1, f2)。 } 第二種情況是在指針類型和 void * 類型之間進(jìn)行強(qiáng)制轉(zhuǎn)換,從而與期望或返回 void 指針的函數(shù)進(jìn)行正確的交接。例如,下述語句就把函數(shù) malloc()的返回值強(qiáng)制轉(zhuǎn)換為一個(gè)指向 foo 結(jié)構(gòu)的指針: struct foo *p= (struct foo *)malloc(sizeof(struct foo)); 20 請(qǐng)參見: 2. 6 什么時(shí)候應(yīng)該使用 volatile 修飾符 ? 2. 8 什么時(shí)候應(yīng) 該使用 const 修飾符 ? 2. 11 對(duì)不同類型的變量進(jìn)行算術(shù)運(yùn)算會(huì)有問題嗎 ? 2. 12 什么是運(yùn)算符升級(jí) (operator promotion)? 2. 14 什么時(shí)候不應(yīng)該使用類型強(qiáng)制轉(zhuǎn)換 (typecast)? 7. 5 什么是 void 指針 ? 7. 6 什么時(shí)候使用 void 指針 ? 7. 21 什么是堆 (heap)? 7. 27 可以對(duì) void 指針進(jìn)行算術(shù)運(yùn)算嗎 ? . 什么時(shí)候不應(yīng)該使用類型強(qiáng)制轉(zhuǎn)換 (typecast)? 不應(yīng)該對(duì)用 const 或 volatile 說明了的對(duì)象進(jìn)行類型強(qiáng)制轉(zhuǎn)換,否則程序就不能正確運(yùn)行。 不應(yīng)該用類型強(qiáng)制轉(zhuǎn)換把指向一種結(jié)構(gòu)類型或數(shù)據(jù)類型的指針轉(zhuǎn)換成指向另一種結(jié)構(gòu)類型或數(shù)據(jù)類型的指針。在極少數(shù)需要進(jìn)行這種類型強(qiáng)制轉(zhuǎn)換的情況下,用共用體 (union)來存放有關(guān)數(shù)據(jù)能更清楚地表達(dá)程序員的意圖。 請(qǐng)參見: 2. 6 什么時(shí)候應(yīng)該使用 volatile 修飾符 ? 2. 8 什么時(shí)候應(yīng)該使用 const 修飾符 ? . 可以在頭文件中說明或定義變量嗎 ? 被多個(gè)文件存取的全局變量可以并且應(yīng)該在一個(gè)頭文件中說明,并且必須 在一個(gè)源文件中定義。變量不應(yīng)該在頭文件中定義,因?yàn)橐粋€(gè)頭文件可能被多個(gè)源文件包含,而這將導(dǎo)致變量被多次定義。如果變量的初始化只發(fā)生一次, ANSIC 標(biāo)準(zhǔn)允許變量有多次外部定義;但是,這樣做沒有任何好處,因此最好避免這樣做,以使程序有更強(qiáng)的可移植性。 注意:變量的說明和定義是兩個(gè)不同的概念,在 2. 16 中將講解兩者之間的區(qū)別。 僅供一個(gè)文件使用的 “ 全局 ” 變量應(yīng)該被說明為 static,而且不應(yīng)該出現(xiàn)在頭文件中。 請(qǐng)參見: 2. 16 說明一個(gè)變量和定義一個(gè)變量有什么區(qū)別 ? 2. 17 可以在頭文件中說明 static 變量嗎 ? . 說明一個(gè)變量和定義一個(gè)變量有什么區(qū)別 ? 說明一個(gè)變量意味著向編譯程序描述變量的類型,但并不為變量分配存儲(chǔ)空間。定義一個(gè)變量意味著在說明變量的同時(shí)還要為變量分配存儲(chǔ)空間。在定義一個(gè)變量的同時(shí)還可以對(duì)變量進(jìn)行初始化。下例說明了一個(gè)變量和一個(gè)結(jié)構(gòu),定義了兩個(gè)變量,其中一個(gè)定義帶初始化: extern int decll。 / * this is a declaration * / struct decl2 { int member。 } 。 / * this just declares the typeno variable mentioned * / int def1 = 8。 / * this is a definition * / 21 int def2。 / * this is a definition * / 換句話說,說明一個(gè)變量相當(dāng)于告訴編譯程序 “ 在程序的某個(gè)位置將用到一個(gè)變量,這里給出了它的名稱和類型 ” ,定義一個(gè)變量則相當(dāng)于告訴編譯程序 “ 具有這個(gè)名稱和這種類型的變量就在這里 ” 。 一個(gè) 變量可以被說明許多次,但只能被定義一次。因此,不應(yīng)該在頭文件中定義變量,因?yàn)橐粋€(gè)頭文件可能會(huì)被一個(gè)程序的許多源文件所包含。 請(qǐng)參見; 2. 17 可以在頭文件中說明 static 變量嗎 ? . 可以在頭文件中說明 static變量嗎 ? 如果說明了一個(gè) static 變量,就必須在同一個(gè)文件中定義該變量 (因?yàn)榇鎯?chǔ)類型修飾符static 和 extern 是互斥的 )。你可以在頭文件中定義一個(gè) static 變量,但這會(huì)使包含該頭文件的源文件都得到該變量的一份私有拷貝,而這通常不是你想得到的結(jié)果。 請(qǐng)參見: 2. 16 說明一個(gè)變量和定義一個(gè)變量有什么區(qū)別 ? . 用 const 說明常量有什么好處 ? 使用關(guān)鍵字 const 有兩個(gè)好處;第一,如果編譯程序知道一個(gè)變量的值不會(huì)改變,編譯程.序就能對(duì)程序進(jìn)行優(yōu)化;第二,編譯程序會(huì)試圖保證該變量的值不會(huì)因?yàn)槌绦騿T的疏忽而被改變。 當(dāng)然,用 define 來定義常量也有同樣的好處。用 const 而不用 define 來定義常量的原因是 const 變量可以是任何類型 (如結(jié)構(gòu),而用 define 定義的常量不能表示結(jié)構(gòu) )。此外, const變量是真正的變量,它有可供使用的地址,并且 該地址是唯一的 (有些編譯程序在每次使用用define 定義的字符串時(shí)都會(huì)生成一份新的拷貝,見 9. 9)。 請(qǐng)參見: 2. 7 一個(gè)變量可以同時(shí)被說明為 const 和 volatile 嗎 ? 2. 8 什么時(shí)候應(yīng)該使用 const 修飾符 ? 2. 14 什么時(shí)候不應(yīng)該使用類型強(qiáng)制轉(zhuǎn)換 (typecast)? 9. 9 字符串和數(shù)組有什么不同 ? 第 3 章 排序與查找 排序 程序員可以使用的基本排序算法有 5種: 插入排序 (insertionsort. ) 交換 排序 (exchangesort) 選擇排序 (selectionsort) 22 歸并排序 (mergesort) 分布排序 (distributionsort) 為了形象地解釋每種排序算法是怎樣工作的,讓我們來看一看怎樣用這些方法對(duì)桌上一付亂序的牌進(jìn)行排序。牌既要按花色排序 (依次為梅花、方塊、紅桃和黑心 ),還要按點(diǎn)數(shù)排序 (從 2 到 A)。 插入排序的過程為:從一堆牌的上面開始拿牌,每次拿一張牌,按排序原則把牌放到手中正確的位置。桌上的牌拿完后,手中的牌也就排好序了。 交換排序的過程為: (1)先拿兩張牌放到手中。如果左邊的牌要排在右邊的牌的后面,就交換這兩張牌的位置。 (2)然后拿下一張牌,并比較最右邊兩張牌,如果有必要就交換這兩張牌的位置。 (3)重復(fù)第 (2)步,直到把所有的牌都拿到手中。 (4)如果不再需要交換手中任何兩張牌的位置,就說明牌已經(jīng)排好序了;否則,把手中的牌放到桌上,重復(fù) (1)至 (4)步,直到手中的牌排好序。 選擇排序的過程為:在桌上的牌中找出最小的一張牌,拿在手中;重復(fù)這種操作,直到把所有牌都拿在手中。 歸并排序的過程為:把桌上的牌分為 52堆,每堆為一張牌。因?yàn)槊慷雅贫际怯行虻?(記住,此時(shí)每堆中只有一張牌 ),所以如果把相鄰的兩堆牌合并為一堆,并對(duì)每堆牌進(jìn)行排序,就可以得到 26 堆已排好序的牌,此時(shí)每一堆中有兩張牌。重復(fù)這種合并操作,就可以依次得到 13堆牌 (每一堆中有 4 張牌 ), 7堆牌 (有 6 堆是 8張牌,還有一堆是 4 張牌 ),最后將得到 52 張的一堆牌。 分布排序 (也被稱作 radix sort,即基數(shù)排序 )的過程為:先將牌按點(diǎn)數(shù)分成 13 堆,然后將這 13堆牌按點(diǎn)數(shù)順序疊在一起;再將牌按花色分成 4 堆,然后將 這 4 堆牌按花色順序疊在一起,牌就排好序了。 在選用排序算法時(shí),你還需要了解以下幾個(gè)術(shù)語: (1)自然的 (natural) 如果某種排序算法對(duì)有序的數(shù)據(jù)排序速度較快 (工作量變小 ),對(duì)無序的數(shù)據(jù)排序速度卻較慢 (工作變量大 ),我們就稱這種排序算法是自然的。如果數(shù)據(jù)已接近有序,就需要考慮選用自然的排序算法。 (2)穩(wěn)定的 (stable) 如果某種排序算法能保持它認(rèn)為相等的數(shù)據(jù)的前后順序,我們就稱這種排序算法是穩(wěn)定的。 例如,現(xiàn)有以下名單: Mary Jones Mary Smith Tom Jones Susie Queue 如果用穩(wěn)定的排序算法按姓對(duì)上述名單進(jìn)行排序,
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1