繼承[K&R]的傳統,咱們的第一個C語言程序也是「Hello, World.」。程序員
書寫C語言程序的大前提:C語言中的語法符號必須都是英文字符,即在中文輸入法關閉狀態下輸入的字符。ide
例 1. Hello World函數
1 /*暫且記住只要用到 printf 輸出函數,就如今程序開頭寫上以下一行#include <stdio.h>。*/ 2 #include <stdio.h> 3 /* main函數是C程序有且只能有一個的主函數(特例除外),C 程序老是從 main 裏面的第一條語句開始執行。*/ 4 int main(void) 5 { 6 printf("Hello, world.\n"); 7 return 0; 8 }
第1行和第3行的/* ... */結構是一個註釋(Comment),其中能夠寫一些描述性的話,解釋這段程序在作什麼。註釋只是寫給程序員看的,編譯器會忽略從/*到*/的全部字符,而且無論寫多少都不會被編譯進可執行文件中。換言之,註釋不影響C程序的功能。但這裏仍是要注意一點,/* ... */結構是不容許嵌套的,以下/* .../*…*/... */結構是錯誤的嵌套結構。學習
第4行要多說幾句。它包含着函數定義的幾個要素:1.函數名,這裏的函數名是main;2.函數返回值類型,放在函數名前面空格隔開,這裏的int代表main函數的返回值類型是int類型,即整型;3.函數參數,緊跟函數名,用括號括起來,這裏的void代表無參數。spa
第5行到第8行,用一對大括號括「{}」起來的部分稱之爲函數體,也就是要實現函數功能的語句,要注意C語言中的「;」表明一條語句的結尾,如第六、7行。這裏能夠看到{}裏面的語句比main那一行往裏縮進了一些(一般一個製表位,即按一下Tab),雖然並無這樣的規定,但這樣作可讓程序結構看起來更清晰,很容易看出哪些語句是屬於某個函數或某個模塊的。3d
今天的重點來了,第6行printf語句,咱們就從它開始認識C語言的豐富多彩。code
首先,這條語句是調用C語言的庫函數printf,包含在頭文件stdio.h中。而使用C語言庫函數時必須在程序中嵌入該函數對應的頭文件,用#include <>加到裏面就能夠了(尖括號內填寫文件名),因此咱們看到了程序開始部分的#include <stdio.h>。blog
接下來,咱們看函數調用形式:給出函數名,此處爲printf;給出參與函數執行的參數,此處爲括號裏的內容。printf的參數類型是可變的,這裏咱們先介紹兩種狀況。繼承
第一種狀況如例程1所示,printf函數的參數只有一類,放在雙引號內,此時函數功能是將雙引號內的字符原樣輸出在屏幕上。但這裏須要注意一類特殊字符,即轉義字符。C語言規定斜槓「\」爲轉義字符,也就是說「\」後跟的字符會失去它的原義而變爲其它的內容。在例程中的「\n」就表示換行,而再也不是字符n。更多的轉義字符可查閱相關資料。例程1運行結果如圖:編譯器
按上面的介紹,給出以下調用:printf("Hello \n world.\n");,它的輸出結果是什麼呢?雖然簡單,但咱們也要知其因此然:雙引號裏的內容原樣輸出,因而先輸出Hello和一個空格;遇到\n時因爲轉義因此輸出一個換行,接着在下一行繼續輸出一個空格和world.;又遇到一個\n,因此繼續輸出一個換行。如圖:
第二種狀況,printf函數具備兩類參數的狀況。先看例程2:
1 #include <stdio.h> 2 int main(void) 3 { 4 printf("There are %d people in my family.\n", 5); /* print the number of people in my family*/ 5 return 0; 6 }
此時printf函數的參數分兩類,一類是雙引號內的,一類是雙引號外的,用逗號隔開了。雙引號外面的整數5有什麼用呢?它的做用是與括號內的%d這個符號對應的。%d是輸出格式符的一種,在這裏表示一個整型數據。咱們也將這類輸出格式符叫作「佔位符」。它的做用就比如先告訴printf函數一聲,「哥們兒,我先把這個輸出位置佔下,一下子輸出的時候將雙引號外的那個整數放到我這個位置上顯示出來。」
這樣,整個的輸出過程咱們就能夠這樣理解了:首先輸出雙引號的字符There are ,這時遇到了%d符號,根據提早的告知狀況,printf函數便會到雙引號外把整數5拿過來放到%d的位置上按照其格式要求顯示出來,而後繼續輸出後面的字符people in my family.最後遇到\n,輸出什麼內容你們已經很清楚了----換行唄。例程2的運行結果如圖:
There are 5 people in my family. 與咱們的分析徹底一致。
若是雙引號內出現兩個、三個,甚至更多的佔位符呢?這時就須要在雙引號外給出更多與之對應的數據,並用逗號隔開(注意:雙引號外的第一個數據前就有逗號,千萬別丟掉!),數據的前後順序與佔位符出現的前後順序是一一對應的。如例程3:
View Code
例程3輸出結果如圖:
若是與你的分析如出一轍,那麼恭喜你,能夠繼續新的學習了。
最後留個問題:printf("There are %d people in my family.\n", 5); 與printf("There are 5 people in my family.\n"); 輸出結果徹底同樣,它們的本質有何不一樣?從文中就能夠找到答案。