上一節(jié)肮帐,我們搭建了c語言開發(fā)環(huán)境后咖驮,寫了一個在控制臺打印 "Hello world!"的程序边器,不過,對代碼倒是并沒有說很細托修。下面把上一節(jié)的代碼再寫一遍忘巧,詳細說說。
#include <stdio.h>
#include "stdlib.h"
/* 打印 Hello world! */
int main()
{
printf("Hello world!\n"); // 打印語句
return 0;
}
還記的在《》一節(jié)中睦刃,我們把編程語言劃分到形式語言嗎砚嘴?形式語言對語法要求非常苛刻涩拙,這里說的語法嚴格际长,主要是指符號和結構要嚴格按照規(guī)則來。
- xxx.h 在 c 語言中叫“頭文件”兴泥,它是一個工具箱的目錄工育,有了它,我們寫的程序用到一些工具時搓彻,程序才知道從哪里找如绸。
-
include 負責將頭文件導入嘱朽,它要獨立占一行,頭文件要用 <> 或者 "" 包裹怔接,關于 <> 和 "" 的區(qū)別搪泳,接下來會詳細介紹
- main 是一個 c 語言里的特殊符號,它是默認的入口函數(shù)扼脐。整個程序只能由一個入口函數(shù)岸军,程序從這里開始執(zhí)行。
- 函數(shù)后面通常會有 ()瓦侮,緊接著是 {} 包裹屬于本函數(shù)的代碼凛膏。
- 函數(shù)的語句要用 ; 結尾
- 可以看出,函數(shù)里面的語句比 main 那一行都縮進了一些脏榆。在代碼中猖毫,可以用若干個空格和 tab 縮進。不過這只是為了美觀须喂,讓代碼看著舒服一些吁断。
c 程序寫成 int main(){...return 0;} 也是可以的,但是這樣寫的可讀性和美觀度顯然不如上面那種寫法坞生。
c 程序要嚴格按照語法規(guī)則來仔役,否則在編譯時就會報錯。關于“編譯”和“報錯”可以參照我之前的文章是己。
C 語言中的函數(shù)
在數(shù)學中有各種各樣的數(shù)學函數(shù)又兵,比如 sin ln 等函數(shù),sin(pi/2)=1卒废,ln1 = 0 等等沛厨。在 C 語言中,我們當然也可以使用這些函數(shù)摔认,請看如下代碼:
#include <math.h>
#include <stdio.h>
int main()
{
double pi = 3.1416;
printf("sin(pi/2)=%f\nln1=%f\n", sin(pi/2), log(1.0));
return 0;
}
math.h 中包含各種數(shù)學函數(shù)的目錄逆皮,只要將其用 #include 導入,在 main 中使用 sin参袱,log 函數(shù)時电谣,程序才知道從哪里找這些函數(shù)。我們在 codeblocks 中執(zhí)行它抹蚀,輸出如下:
關于如何安裝和使用 codeblocks 可參照第一節(jié)剿牺。
在數(shù)學中,使用函數(shù)時可以省略括號环壤,例如 sin pi/2晒来,而 C 語言中的函數(shù)則一定要使用 (),例如 sin(pi/2)镐捧。在C語言的術語中潜索,pi/2是參數(shù)臭增,sin是函數(shù),使用 sin(pi/2) 就是程序員常說的“函數(shù)調用”竹习。
事實上誊抛,printf("...",...); 也是一種函數(shù)調用。但是 printf 感覺不像一個數(shù)學函數(shù)整陌,為什么呢拗窃?因為像 sin 這種函數(shù),傳遞一個參數(shù)給它泌辫,它會返回給我們一個計算后的值随夸,我們調用 sin 函數(shù)就是為了得到它的返回值。至于 printf 函數(shù)震放,我們并不關心它的返回值宾毒,更關心的是它的“副作用”(計算返回值的過程中,往控制臺打印的字符殿遂。)诈铛。事實上,printf 也有返回值墨礁,它返回的是實際打印的字符數(shù)幢竹。
C 語言函數(shù)可以有“副作用”,這是它與數(shù)學函數(shù)的根本區(qū)別恩静。
最后要說一點
事實上焕毫,我的文章中有一些概念說的并不太專業(yè),比如“頭文件是一個工具箱的目錄”驶乾,而沒有說它是一系列“函數(shù)接口的聲明”邑飒。這是因為我覺得一開始太專業(yè),反而不利于理解轻掩。慢慢的介紹多了幸乒,我也盡量用一些比較專業(yè)的詞懦底。