繼承[K&R]的傳統,我們的第一個C語言程序也是“Hello, World.”。
書寫C語言程序的大前提:C語言中的語法符號必須都是英文字符,即在中文輸入法關閉狀態下輸入的字符。
例 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表明無參數。
第5行到第8行,用一對大括號括“{}”起來的部分稱之為函數體,也就是要實現函數功能的語句,要注意C語言中的“;”代表一條語句的結尾,如第6、7行。這里可以看到{}里面的語句比main那一行往里縮進了一些(通常一個制表位,即按一下Tab),雖然並沒有這樣的規定,但這樣做可以讓程序結構看起來更清晰,很容易看出哪些語句是屬於某個函數或某個模塊的。
今天的重點來了,第6行printf語句,我們就從它開始認識C語言的豐富多彩。
首先,這條語句是調用C語言的庫函數printf,包含在頭文件stdio.h中。而使用C語言庫函數時必須在程序中嵌入該函數對應的頭文件,用#include <>加到里面就可以了(尖括號內填寫文件名),所以我們看到了程序開始部分的#include <stdio.h>。
接下來,我們看函數調用形式:給出函數名,此處為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"); 輸出結果完全一樣,它們的本質有何不同?從文中就可以找到答案。