欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C 語言基礎(chǔ)教程(我的C之旅開始了)[二]

 更新時間:2007年02月25日 00:00:00   作者:  

3. C 程序的結(jié)構(gòu)

   C 程序由一個以上的函數(shù)組成,而且必須有 main 函數(shù)。此外,C 程序一般還有一些預(yù)處理指令。例如 #include 指令。當(dāng)然并不是必須要有 #include 指令。函數(shù)由函數(shù)頭和函數(shù)體組成。函數(shù)頭由返回值、函數(shù)名以及參數(shù)列表(可以是void)組成。函數(shù)體從 { 開始,以 } 結(jié)束。函數(shù)體里可以有一系列的語句,每個語句以分號(;)結(jié)束。例如:

       預(yù)處理指令     ——〉   #include <stdio.h>

       函數(shù)頭         ——〉  int main( void )
       函數(shù)體開始      ——〉  {
       變量聲明語句    ——〉      int i;
       賦值語句        ——〉      i = 1;

       函數(shù)調(diào)用語句    ——〉      printf( "%d\n", i );

       return 語句     ——〉     return 0;
       函數(shù)體結(jié)束      ——〉  }

簡而言之,一個簡單的標(biāo)準(zhǔn) C 程序的結(jié)構(gòu)如下:

       #include <stdio.h>/*非必須。若沒用到stdio.h里聲明的函數(shù),則不需要*/

       int main(void)
       {
           一系列語句

           return 0;
       }

4. 第二個 C 程序

 

    首先請看以下代碼,并且和我們的第一個 C 程序比較比較,看看這個程序新增了什么知識點。

     /* meter2centimeters.c -- 以厘米為單位來表示兩米 */

     #include <stdio.h>

     int main(void)
     {
         int meters, centimeters;
         meters = 2;

         centimeters = 100 * meters;  /* 100 乘以 meters */
         printf( "%d-meter is equal to %d centimeters.\n", meters, centimeters );
         printf( "Yes, I said %d centimeters!\n", 100 * meters );

         return 0;
     }

下面我們來仔細(xì)分析這個小程序。

1. 文檔
    這段代碼頭部的注釋標(biāo)明了文件名和程序的作用,我們把這些注釋稱為文檔。寫文檔是一個很好的習(xí)慣,可以幫助我們了解程序的作用。在由多個源文件組成的程序中,文檔顯得更為重要。由于我們目前為止所寫的都是很簡單的程序,您也許還不覺得寫文檔有多大的作用,甚至還覺得浪費時間。但是我們應(yīng)該養(yǎng)成寫文檔的習(xí)慣,這對我們以后寫復(fù)雜的程序很有幫助。對于復(fù)雜程序,我們應(yīng)該盡可能把文檔寫得更詳盡。可以參考以下格式:
       /***************************************************
        *  文件名:               meter2centimeters.c
        *  作者:                  Antigloss  at  http://cpp.ga-la.com
        *  編寫日期:            05-9-9 0:00
        *  最后修改日期:      05-9-9 0:00
        *  功能:                  以厘米為單位來表示兩米
        *  算法:                  1 米 = 100 厘米
        **************************************************/

2. 多重聲明
          int meters, centimeters;
    上面那句聲明語句聲明了兩個變量。我們可以在一句聲明語句中聲明任意數(shù)目的變量,只要變量名之間用逗號,)隔開就可以了。例如下面這個語句聲明了 4 個變量。
          int a, b, c, d;

3. 乘法運(yùn)算
    C 語言中,* 是乘法運(yùn)算符,所以 centimeters = 100 * meters; 的意思是:用 100 乘以變量 meters 的值(本例中為 2),然后把相乘的結(jié)果賦值給變量 centimeters 。

4. printf 函數(shù)
        printf( "%d-meter is equal to %d centimeters.\n", meters, centimeters );
    上面這個語句中占位符 %d 出現(xiàn)了兩次。第一個 %d 由變量 meters 的值替換;而第二個 %d 則由 centimeters 的值替換。注意:每個變量由逗號(,)隔開;"%d-meter is equal to %d centimeters.\n" 中的雙引號是必須的,而且必須是英文的雙引號,不能是中文的雙引號。

        printf( "Yes, I said %d centimeters!\n", 100 * meters );
    上面這個語句表明,用于替換占位符的不僅僅可以是變量,也可以是表達(dá)式(100 * meters 是一個乘法表達(dá)式)。 


5. 如何編寫函數(shù)

 

    首先請看以下代碼。

         /* my_func.c -- 這個程序使用了一個自定義函數(shù) */
         #include <stdio.h>

         void butler(void);      /* ISO/ANSI C 函數(shù)原型 */

         int main(void) /* 函數(shù)頭 */
         { /* 函數(shù)體開始 */
               printf("I will summon the butler function.\n");
               butler();  /* 調(diào)用 butler 函數(shù) */
               printf("Yes. Bring me some tea and writeable CD-ROMS.\n");

               return 0;
         } /* 函數(shù)體結(jié)束 */

         void butler(void)   /* butler 函數(shù) */
         {
               printf("You rang, sir?\n");
         }

    上面的代碼中,butler 出現(xiàn)了 3 次。第一次是作為函數(shù)原型;第二次是函數(shù)調(diào)用語句;第三次是函數(shù)定義。下面我們分別對 butler 的這三次出現(xiàn)作詳細(xì)說明。

    1. 函數(shù)原型是聲明函數(shù)的一種方式,是 C89 標(biāo)準(zhǔn)加入的概念,老舊的編譯器可能不支持函數(shù)原型。函數(shù)原型用于告訴編譯器我們將要使用一個特定的函數(shù),它指明了函數(shù)的屬性。例如,butler 的函數(shù)原型中,第一個 void 指明 butler 函數(shù)沒有返回值;第二個 void 表明 butler 沒有參數(shù),也就是不接收任何參數(shù)。在 main 函數(shù)前面寫了 butler 的函數(shù)原型后,當(dāng) main 函數(shù)調(diào)用 butler 時,編譯器就能檢測到 butler 函數(shù)調(diào)用語句是否正確。如果 main 函數(shù)前面沒有 butler 的函數(shù)原型,那么我們就不能在 main 函數(shù)中調(diào)用 butler 函數(shù),除非我們把函數(shù)定義放在 main 函數(shù)之前。不過把函數(shù)定義置于 main 函數(shù)之前是一種不好的編程風(fēng)格,因為這將導(dǎo)致我們花不少時間來尋找 main 函數(shù)的所在地。想象一下,如果我們寫了幾十個函數(shù),如果每個函數(shù)定義都置于 main 函數(shù)之前,那樣 main 函數(shù)還算好找;但是如果我們不小心把某些函數(shù)放在了 main 函數(shù)后面,也就是說 main 函數(shù)被放在一堆函數(shù)中間,那就很難找了!
    C89 標(biāo)準(zhǔn)出臺之前,C 語言也支持函數(shù)聲明,不過我們只能指定函數(shù)的返回值類型,而不能列出參數(shù)列表。例如:
            void butler();
C89 之前,函數(shù)就是像上面所寫的那樣聲明的。C89 和 C99 標(biāo)準(zhǔn)都支持這種聲明方式,不過它們同時也指出,這種聲明方式遲早會被淘汰!所以我們不要使用這種聲明方式,而要用函數(shù)原型。

    2. 在 main 函數(shù)里,語句 butler(); 的作用是調(diào)用 butler 函數(shù)。因為 butler 的參數(shù)列表為空(void),所以函數(shù)名(butler)后面的括號中不能有任何參數(shù),也不能是 butler(void); 。

    3. butler 函數(shù)和 main 函數(shù)的定義方式一樣,也是由函數(shù)頭函數(shù)體構(gòu)成。函數(shù)頭和函數(shù)原型幾乎一模一樣,只是少了一個分號。注意,函數(shù)定義僅僅是一個定義而已,并不能決定函數(shù)什么時候執(zhí)行,也不能決定函數(shù)是否執(zhí)行。main 函數(shù)什么時候調(diào)用 butler 函數(shù),butler 函數(shù)就什么時候執(zhí)行;如果 main 函數(shù)沒有調(diào)用 butler 函數(shù),那么 butler 函數(shù)就不會執(zhí)行。

    所有 C 程序都是從 main 函數(shù)開始執(zhí)行的。無論 main 函數(shù)處在源文件中的任何位置,中間也罷,末尾也罷,總之,C 程序一定是從 main 函數(shù)開始執(zhí)行。把 main 函數(shù)寫在源文件的開頭是一個好的編程習(xí)慣,因為這樣可以讓讀者很快地弄清楚程序的結(jié)構(gòu)。

    到目前為止,我們已經(jīng)對函數(shù)有了一個概要的了解。在后續(xù)的教程中,我們還會更詳細(xì)更系統(tǒng)地學(xué)習(xí)函數(shù)。

6. 關(guān)鍵字和保留標(biāo)識符

 

     關(guān)鍵字是保留字,不能用來做標(biāo)識符(如變量名),例如:int double; 是錯誤的,因為 double 是關(guān)鍵字,不能做變量名。使用關(guān)鍵字來做變量名是一種語法錯誤,不能通過編譯!下表列出了 C 語言的所有關(guān)鍵字,其中紅色的是 ISO C99 標(biāo)準(zhǔn)新增的關(guān)鍵字。

        auto         enum        restrict      unsigned 
        break        extern      return          void 
        case         float       short           volatile
        char         for         signed          while 
        const        goto        sizeof          _Bool 
        continue     if          static          _Complex 
        default      inline     struct          _Imaginary 
        do           int         switch
        double       long        typedef
        else         register    union   

    C 語言已經(jīng)使用了的標(biāo)識符,以及使用權(quán)利被 C 語言保留的標(biāo)識符,稱為保留標(biāo)識符。保留標(biāo)識符包括以下劃線(_)開始的標(biāo)識符(如 __LINE__)和標(biāo)準(zhǔn)庫里定義的函數(shù)的函數(shù)名(如 printf)。
    我們不應(yīng)該使用保留標(biāo)識符來做我們自定義的變量或者函數(shù)等的標(biāo)識符。使用保留標(biāo)識符來做自定義變量或者函數(shù)等的標(biāo)識符不是語法錯誤,可以通過編譯,因為保留標(biāo)識符是合法的標(biāo)識符,符合標(biāo)識符命名法則。但是,因為這些標(biāo)識符已經(jīng)被 C 語言使用或者保留了,所以使用保留標(biāo)識符來做自定義變量或者函數(shù)等的標(biāo)識符可能會引起意想不到的問題。

  • C++代碼和可執(zhí)行程序在x86和arm上的區(qū)別介紹

    C++代碼和可執(zhí)行程序在x86和arm上的區(qū)別介紹

    這篇文章主要介紹了C++代碼和可執(zhí)行程序在x86和arm上的區(qū)別,X86和ARM是占據(jù)CPU市場的兩大處理器,各有優(yōu)劣,本文給大家詳細(xì)介紹了兩者的區(qū)別,需要的朋友可以參考下
    2022-07-07
  • C語言數(shù)據(jù)結(jié)構(gòu)之線索二叉樹及其遍歷

    C語言數(shù)據(jù)結(jié)構(gòu)之線索二叉樹及其遍歷

    這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之線索二叉樹及其遍歷的相關(guān)資料,為了加快查找節(jié)點的前驅(qū)和后繼。對二叉樹的線索化就是對二叉樹進(jìn)行一次遍歷,在遍歷的過程中檢測節(jié)點的左右指針是否為空,如果是空,則將他們改為指向前驅(qū)和后繼節(jié)點的線索,需要的朋友可以參考下
    2017-08-08
  • 詳解C++ 創(chuàng)建文件夾的四種方式

    詳解C++ 創(chuàng)建文件夾的四種方式

    這篇文章主要介紹了C++ 創(chuàng)建文件夾的四種方式,本文示例都是在 E:\database 路徑下創(chuàng)建一個叫做 testFolder 的文件夾,文章通過實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-11-11
  • C語言18個必背經(jīng)典程序

    C語言18個必背經(jīng)典程序

    這篇文章主要分下工的是18個C語言必背的經(jīng)典程序,下面文章我們就來看看實例,需要的小伙伴可以參考一下喲,希望對你有所幫助
    2021-10-10
  • c語言中enum類型的用法案例講解

    c語言中enum類型的用法案例講解

    這篇文章主要介紹了c語言中enum類型的用法案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是本文的詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++實現(xiàn)學(xué)生住宿管理系統(tǒng)

    C++實現(xiàn)學(xué)生住宿管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)學(xué)生住宿管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++?opencv圖像處理實現(xiàn)灰度變換示例

    C++?opencv圖像處理實現(xiàn)灰度變換示例

    這篇文章主要為大家介紹了C++?opencv圖像處理灰度變換的實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • C語言入門學(xué)習(xí)筆記之typedef簡介

    C語言入門學(xué)習(xí)筆記之typedef簡介

    typedef為C語言的關(guān)鍵字,作用是為一種數(shù)據(jù)類型定義一個新名字,下面這篇文章主要給大家介紹了關(guān)于C語言入門學(xué)習(xí)筆記之typedef簡介的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • C++數(shù)據(jù)結(jié)構(gòu)之哈希算法詳解

    C++數(shù)據(jù)結(jié)構(gòu)之哈希算法詳解

    這篇文章主要為大家詳細(xì)介紹了C++數(shù)據(jù)結(jié)構(gòu)中哈希算法的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,希望對大家有所幫助
    2022-12-12
  • 最新評論