最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)明了文件名和程序的作用,我們把這些注釋稱為文檔。寫文檔是一個(gè)很好的習(xí)慣,可以幫助我們了解程序的作用。在由多個(gè)源文件組成的程序中,文檔顯得更為重要。由于我們目前為止所寫的都是很簡(jiǎn)單的程序,您也許還不覺(jué)得寫文檔有多大的作用,甚至還覺(jué)得浪費(fèi)時(shí)間。但是我們應(yīng)該養(yǎng)成寫文檔的習(xí)慣,這對(duì)我們以后寫復(fù)雜的程序很有幫助。對(duì)于復(fù)雜程序,我們應(yīng)該盡可能把文檔寫得更詳盡??梢詤⒖家韵赂袷剑?BR>       /***************************************************
        *  文件名:               meter2centimeters.c
        *  作者:                  Antigloss  at  http://cpp.ga-la.com
        *  編寫日期:            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. 如何編寫函數(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ù)前面寫了 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ù)的所在地。想象一下,如果我們寫了幾十個(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ù)的返回值類型,而不能列出參數(shù)列表。例如:
            void butler();
C89 之前,函數(shù)就是像上面所寫的那樣聲明的。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ù)寫在源文件的開(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í)符,稱為保留標(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)題。

相關(guān)文章

  • C++設(shè)計(jì)模式之享元模式

    C++設(shè)計(jì)模式之享元模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之享元模式,本文講解了什么是享元模式、享元模式代碼實(shí)例、享元模式的優(yōu)點(diǎn)等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C++回調(diào)函數(shù)的理解和使用教程

    C++回調(diào)函數(shù)的理解和使用教程

    這篇文章主要給大家介紹了關(guān)于C++回調(diào)函數(shù)的理解和使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Cocos2dx實(shí)現(xiàn)數(shù)字跳動(dòng)效果

    Cocos2dx實(shí)現(xiàn)數(shù)字跳動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Cocos2dx實(shí)現(xiàn)數(shù)字跳動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 基于C++實(shí)現(xiàn)擲雙骰游戲的示例代碼

    基于C++實(shí)現(xiàn)擲雙骰游戲的示例代碼

    在最流行的博彩游戲中有一種名為“擲雙骰”(craps)的骰子游戲,這種游戲在世界各地的娛樂(lè)場(chǎng)所和大街小巷非常受歡迎。本文將用C++語(yǔ)言實(shí)現(xiàn)這一游戲,需要的可以參考一下
    2022-03-03
  • C語(yǔ)言 MD5的源碼實(shí)例詳解

    C語(yǔ)言 MD5的源碼實(shí)例詳解

    這篇文章主要介紹了C語(yǔ)言 MD5的源碼實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • 深入理解C++編程中的局部變量和全局變量

    深入理解C++編程中的局部變量和全局變量

    這篇文章主要介紹了深入理解C++編程中的局部變量和全局變量,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • 基于matlab MFCC+GMM的安全事件聲學(xué)檢測(cè)系統(tǒng)

    基于matlab MFCC+GMM的安全事件聲學(xué)檢測(cè)系統(tǒng)

    這篇文章主要為大家介紹了基于matlab MFCC+GMM的安全事件聲學(xué)檢測(cè)系統(tǒng)實(shí)現(xiàn)及源碼示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-02-02
  • Visual Studio 2019下配置 CUDA 10.1 + TensorFlow-GPU 1.14.0

    Visual Studio 2019下配置 CUDA 10.1 + TensorFlow-GPU 1.14.0

    這篇文章主要介紹了Visual Studio 2019下配置 CUDA 10.1 + TensorFlow-GPU 1.14.0,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Qt使用SQLite數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)增刪改查

    Qt使用SQLite數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)增刪改查

    這篇文章主要為大家詳細(xì)介紹了Qt如何使用SQLite數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)增刪改查功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-06-06
  • C/C++混合編程之extern “C”的使用示例

    C/C++混合編程之extern “C”的使用示例

    這篇文章主要給大家介紹了關(guān)于C/C++混合編程之extern “C”使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09

最新評(píng)論

砚山县| 长顺县| 凤庆县| 交口县| 永昌县| 新营市| 泗阳县| 仪陇县| 衡南县| 安远县| 绥阳县| 义马市| 舒兰市| 万荣县| 石家庄市| 吉木萨尔县| 社旗县| 奉贤区| 柳林县| 泰顺县| 兴海县| 翼城县| 鄂尔多斯市| 阳谷县| 霸州市| 哈密市| 枞阳县| 兴业县| 固阳县| 同心县| 洛宁县| 中牟县| 开远市| 凤冈县| 奉化市| 柳江县| 西和县| 石林| 五莲县| 汾西县| 伊川县|