Time of Update: 2017-01-19
標頭檔是副檔名為.h的檔案,其中包含C函數的聲明和宏定義,也可以多個源檔案之間共用。有兩種類型的標頭檔:程式員編寫的檔案,和編譯器中附帶的檔案。要求使用標頭檔的程式,包括通過它,使用C語言預先處理指令#include就像所看到的包含stdio.h標頭檔,它隨著編譯器內建。包括一個標頭檔等於複製標頭檔的內容,但我們不這樣做,因為這很容易出錯,一個好主意是我們不複製標頭檔的內容,特別是包括多個程式的源檔案。在C或C++程式的簡單做法是,我們把所有的常量,宏全系統全域變數和函數原型在標頭檔,其中包括只
Time of Update: 2017-01-19
C語言中數組允許定義類型的變數,可容納相同類型的多個資料項目,但結構體在C語言編程中,它允許定義不同種類的資料項目可供其他使用者定義的資料類型。結構是用來代表一個記錄,假設要跟蹤圖書館的書籍。可能要跟蹤有關每本書以下屬性: Title - 標題 Author - 作者 Subject - 科目 Book ID - 編號定義結構體定義一個結構體,必須使用結構體的struct語句。該struct語句定義了一個新的資料類型,程式不止一個成員。struct語句的格式是這樣的:struct
Time of Update: 2017-01-19
從const int i 說起你知道我們聲明一個變數時象這樣int i ;這個i是可能在它處重新變賦值的。如下:int i = 0;/* . . . */i = 20; /*這裡重新賦值了*/不過有一天我的程式可能需要這樣一個變數(暫且稱它變數),在聲明時就賦一個初始值。之後我的程式在其它任何處都不會再去重新對它賦值。那我又應該怎麼辦呢?用const 。/* . . . */const int ic =20;/* . . . */ic = 40;
Time of Update: 2017-01-19
sizeof()函數1,是什嗎? sizeof其實就是一個運算子,和那些+,-一樣的東西,在程式編譯的時候進行解析轉換。雖然我們經常見到sizeof後面跟著個小括弧,長得和函數差不多,但它和函數完全是兩碼事。2,有什麼用? sizeof其實就是用於告訴我們編譯器在為某一特定資料或者某種資料類型的資料在儲存空間中開闢空間時,開闢的空間大小,以位元組為單位。3,怎麼用? sizeof(類型),
Time of Update: 2017-01-19
對函數的“定義”和“聲明”不是一回事。函數的定義是指對函數功能的確立,包括指定函數名,函數實值型別、形參及其類型以及函數體等,它是一個完整的、獨立的函數單位。而函數的聲明的作用則是把函數的名字,函數類型以及形參的類型、個數和順序通知編譯系統,以便在調用該函數時進行對照檢查(例如,函數名是否正確,實參與形參的類型和個數是否一致),它不包括函數體。——譚浩強 ,《C程式設計》(第四版),清華大學出版社,2010年6月,p182這段論述包含了許多概念性錯誤,這些概念錯誤在許多C語言書中都同樣普遍存在。
Time of Update: 2017-01-19
架設有一個數組 v 已經按升序排列了,數組 v 有 n=20 個元素。數組中有個元素 x,如何知道 x 位於該數組的第幾位呢?解決這個問題的一個普遍方法就是二分尋找法。下面是程式:#include <stdio.h>int binsearch(int x, int v[], int n);main(){ int i, result, n; int wait; int x = 17; // 需要尋找的數值 int v[19]; // 定義一個數組 // 給數組賦值 for(i
Time of Update: 2017-01-19
C語言程式的儲存地區C語言編寫的程式經過編繹-連結後,將形成一個統一的檔案,它由幾個部分組成,在程式運行時又會產生幾個其他部分,各個部分代表了不同的儲存地區:程式碼片段(Code or Text):程式碼片段由程式中的機器碼組成。在C語言中,程式語句進行編譯後,形成機器代碼。在執行程式的過程中,CPU的程式計數器指向程式碼片段的每一條代碼,並由處理器依次運行。唯讀資料區段(RO
Time of Update: 2017-01-19
為什麼要學習C語言?為什麼要學習、使用C語言?為什麼要學習一個可能比自己都歲數大的程式設計語言?選擇一門程式設計語言,“為什麼而學”這個目的是最重要的,目的不明確就沒法學好。這也是為什麼很多學生朋友在大學裡必修C語言卻覺得沒學明白的原因。因為學習的目的不明確,學習當然也沒有動力。還有一個原因是C語言是工程實踐性很強的語言,它不是來自某個研究所某個大學學院,而是實實在在從項目需要中產生,伴隨著Unix的興起而流行,語義簡明清晰,功能強大而不臃腫,簡潔而又不過分簡單,實在是居家旅行工作學習必備之良友
Time of Update: 2017-01-19
一.代碼移動將在迴圈裡面多次計算,但是結果不會改變的計算,移到迴圈外面去。例子:最佳化前:void lower1(char *s){int i;for(i=0;i<strlen(s);++i) if(s[i]>='A'&&s[i]<='Z') s[i]-=('A'-'a');}最佳化後:void lower2(char *s){int i;int len=strlen(s);for(int i=0;i<len;++i)
Time of Update: 2017-01-19
語言產生隨機數是一個常見的編程功能任務,當然這個也不難,調用兩三個函數就出來了,但是你知道這些函數具體是起到怎樣的作用,並且是它們是如何產生隨機數的嗎?幾個概念隨機數:數學上產生的都是偽隨機數,真正的隨機數使用物理方法產生的。隨機數種子:隨機數的產生是由算術規則產生的,srand(seed)的隨機數種子不同,rand()的隨機數值就不同,倘若每次的隨機數種子一樣,則rand()的值就一樣。所以要產生隨機數,則srand(seed)的隨機數種子必須也要隨機的。用srand()產生隨機數種子原型:v
Time of Update: 2017-01-19
首先來看一下排序演算法的一些相關概念:1、穩定排序和非穩定排序簡單地說就是所有相等的數經過某種排序方法後,仍能保持它們在排序之前的相對次序,我們就說這種排序方法是穩定的。反之,就是非穩定的。比如:一組數排序前是a1,a2,a3,a4,a5,其中a2=a4,經過某種排序後為a1,a2,a4,a3,a5,則我們說這種排序是穩定的,因為a2排序前在a4的前面,排序後它還是在a4的前面。假如變成a1,a4,a2,a3,a5就不是穩定的了。2、內排序和外排序在排序過程中,所有需要排序的數都在記憶體,並在記
Time of Update: 2017-01-19
C 語言中的函數等價於 Fortran 語言中的子程式或函數,也等價於 Pascal 語言中的過程或函數。函數為計算的封裝提供了一種簡便的方法,此後使用函數時不需要考慮它是如何?的。使用設計正確的函數,程式員無需考慮功能是如何?的,而只需知道它具有哪些功能就夠了。在 C 語言中可以簡單、方便、高效地使用函數。我們經常會看到在定義後僅調用了一次的短函數,這樣做可以使程式碼片段更清晰易讀。到目前為止,我們所使用的函數(如 printf、getchar 和 putchar 等)都是函數庫中提供的函數。
Time of Update: 2017-01-19
我們來編寫一個程式,以統計各個數字、空白符(包括空格符、定位字元及分行符號)以及所有其它字元出現的次數。這個程式的實用意義並不大,但我們可以通過該程式討論 C 語言多方面的問題。所有的輸入字元可以分成 12 類,因此可以用一個數組存放各個數字出現的次數,這樣比使用 10 個獨立的變數更方便。下面是該程式的一種版本:#include <stdio.h>/* count digits, white space, others */main(){ int c, i, nwhite,
Time of Update: 2017-01-19
對於某個特定任務我們可以採用多種方法來編寫程式。下面這段代碼也可以實現前面的溫度轉換程式的功能:#include<stdio.h>/*列印華氏溫度—攝氏溫度對照表*/main(){ int fahr; for (fahr = 0; fahr <= 300; fahr = fahr + 20) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));}溫度的下限、上限和步長都是常量, printf 函數的第三個參數必須是與%6.
Time of Update: 2017-01-19
統計輸入的行數標準庫保證輸入文字資料流以行序列的形式出現,每一行均以分行符號結束。因此,統計行數等價於統計分行符號的個數。#include <stdio.h>/* count lines in input */main(){ int c, nl; nl = 0; while ((c = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl);}在該程式中,while 迴圈語句的迴圈體是一個 if 語句,它控制自增語句++
Time of Update: 2017-01-19
EOF是指檔案的結束符,是一個宏定義 藉助於getchar 與putchar 函數,可以在不瞭解其它輸入/輸出知識的情況下編寫出數量驚人的有用的代碼。最簡單的例子就是把輸入一次一個字元地複製到輸出,其基本思想如下: 讀一個字元 while (該字元不是檔案結束指示符) 輸出剛讀入的字元 讀下一個字元將上述基本思想轉換為C語言程式為:#include <stdio.h>/* copy input to output; 1st version
Time of Update: 2017-01-19
C語言字元輸入與輸出標準庫提供的輸入/輸出模型非常簡單。無論文本從何處輸入,輸出到何處,其輸入/輸出都是按照字元流的方式處理。文字資料流是由多行字元構成的字元序列,而每行字元則由 0 個或多個字元組成,行末是一個分行符號。標準庫負責使每個輸入/輸出流都能夠遵守這一模型。使用標準庫的 C 語言程式員不必關心在程式之外這些行是如何表示的。標準庫提供了一次讀/寫一個字元的函數,其中最簡單的是 getchar 和 putchar 兩個函數。每次調用時,getchar
Time of Update: 2017-01-19
C語言中的符號常量在結束討論溫度轉換程式前,我們再來看一下符號常量。在程式中使用 300、20 等類似的“幻數”並不是一個好習慣,它們幾乎無法向以後閱讀該程式的人提供什麼資訊,而且使程式的修改變得更加困難。處理這種幻數的一種方法是賦予它們有意義的名字。#define 指令可以把符號名(或稱為符號常量)定義為一個特定的字串:#define 名字 替換文本在該定義之後,程式中出現的所有在 #define
Time of Update: 2017-01-19
快速排序快速排序思想
Time of Update: 2017-01-19
首先,這裡所提到的類C語言指的是如C、C++、C#和Java等文法和C語言一樣或類似的程式設計語言。這些語言中,for語句的文法和執行流程都是一樣的。本文將就這一語句的用法進行一個較為深入的討論。for語句:複製代碼 代碼如下:for (運算式1;運算式2;運算式3){ 迴圈語句}運算式1 給迴圈變數賦初值運算式2 為迴圈條件運算式3 用來修改迴圈變數的值,稱為迴圈步長。for語句的執行流程:例:編程計算:1+2+3+...+99+100的結果。這是累加問題,累加問題的通用運算式為: