亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2007年02月25日 00:00:00   作者:  

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

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

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

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

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

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

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

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

       int main(void)
       {
           一系列語(yǔ)句

           return 0;
       }

4. 第二個(gè) C 程序

 

    首先請(qǐng)看以下代碼,并且和我們的第一個(gè) C 程序比較比較,看看這個(gè)程序新增了什么知識(shí)點(diǎn)。

     /* meter2centimeters.c -- 以厘米為單位來(lái)表示兩米 */

     #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;
     }

下面我們來(lái)仔細(xì)分析這個(gè)小程序。

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

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

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

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

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


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

 

    首先請(qǐng)看以下代碼。

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

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

         int main(void) /* 函數(shù)頭 */
         { /* 函數(shù)體開(kāi)始 */
               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)用語(yǔ)句;第三次是函數(shù)定義。下面我們分別對(duì) butler 的這三次出現(xiàn)作詳細(xì)說(shuō)明。

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

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

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

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

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

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

 

     關(guān)鍵字是保留字,不能用來(lái)做標(biāo)識(shí)符(如變量名),例如:int double; 是錯(cuò)誤的,因?yàn)?double 是關(guān)鍵字,不能做變量名。使用關(guān)鍵字來(lái)做變量名是一種語(yǔ)法錯(cuò)誤,不能通過(guò)編譯!下表列出了 C 語(yǔ)言的所有關(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 語(yǔ)言已經(jīng)使用了的標(biāo)識(shí)符,以及使用權(quán)利被 C 語(yǔ)言保留的標(biāo)識(shí)符,稱(chēng)為保留標(biāo)識(shí)符。保留標(biāo)識(shí)符包括以下劃線(_)開(kāi)始的標(biāo)識(shí)符(如 __LINE__)和標(biāo)準(zhǔn)庫(kù)里定義的函數(shù)的函數(shù)名(如 printf)。
    我們不應(yīng)該使用保留標(biāo)識(shí)符來(lái)做我們自定義的變量或者函數(shù)等的標(biāo)識(shí)符。使用保留標(biāo)識(shí)符來(lái)做自定義變量或者函數(shù)等的標(biāo)識(shí)符不是語(yǔ)法錯(cuò)誤,可以通過(guò)編譯,因?yàn)楸A魳?biāo)識(shí)符是合法的標(biāo)識(shí)符,符合標(biāo)識(shí)符命名法則。但是,因?yàn)檫@些標(biāo)識(shí)符已經(jīng)被 C 語(yǔ)言使用或者保留了,所以使用保留標(biāo)識(shí)符來(lái)做自定義變量或者函數(shù)等的標(biāo)識(shí)符可能會(huì)引起意想不到的問(wèn)題。

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

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

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

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

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

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

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

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

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

    c語(yǔ)言中enum類(lèi)型的用法案例講解

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

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

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

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

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

    C語(yǔ)言入門(mén)學(xué)習(xí)筆記之typedef簡(jiǎn)介

    typedef為C語(yǔ)言的關(guān)鍵字,作用是為一種數(shù)據(jù)類(lèi)型定義一個(gè)新名字,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言入門(mén)學(xué)習(xí)筆記之typedef簡(jiǎn)介的相關(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ì),具有一定的借鑒價(jià)值,希望對(duì)大家有所幫助
    2022-12-12
  • 最新評(píng)論