Gary Gong

1 minute read

1.01 你的第一個程式


本文章同步刊載於 https://learning.juice.codes/ 的 Programming in C 教材(須註冊登入),在 Juice 上你能直接執行這篇教學的範例程式碼,以及練習相關題目(系統會自動幫你改喲!)

寫 C 語言其實是一件愉快的事,C 語言博大精深引人入勝,但並不代表它不好入門;在此,我們要建立屬於自己的第一支程式:

02C_Basic_01 你的第一個程式.png

給定一個範例,其範例將輸出 Hello, Juice! 這個句子(或稱「字串」)。

實驗室 1 - 印出 Hello, Juice!

#include <stdio.h>

int main ( void )
{
  printf("Hello, Juice!");
  return 0;
}

C 語法要件

在撰寫 C 程式的時候,都會有一個結構,不外乎就是:

  1. 標頭檔(Header File)—— 在第 1 行
  2. 主函式(main Function)—— 在第 3 ~ 7 行

第 1 行:標頭檔(Header File)

在這個範例程式中,我們引用了 stdio.h 這個標頭檔,stdio.h 為「標準輸入/輸出函式庫標頭檔」(Standard Input/Output Header),許多廣泛的功能需要由這個標頭檔協助,否則會無法運作,其中 printf 就是一例。我們大致上可以把標頭檔看成一個圖書館的概念,你想要某個資料的時候,就跑去圖書館借,沒有圖書館,想要什麼東西也就無法實現了。

許多人看著 stdio 會看著看著就把他念成「studio」,然後在寫程式時就會拼成 studio.h,導致編譯錯誤(Compilation Error, CE),請特別小心謹慎。

第 2 行:主函式 (main Function)

當我們編譯好寫完的程式並開始執行時,系統會建立一連串的程序並準備執行我們的程式,首先會被執行到的就是我們的「主函式」(main Function),這個 main 名稱原則上是固定的,改動會造成未預期的錯誤。

main 前面是 int,是宣告其函式(Function)的回傳值(Return Value)是整數型態(Integer)。所以我們後面的 return 才會接一個 0 這個整數數字。

那我 return 別的數字可不可以?當然可以,而且還會順利執行呢!return 0 的意義基本上是一個慣例,代表「順利執行,完美結束」的意思。

可是我看有人用 void main() {...} 寫程式呢,而且沒有 return 值?這也可以,void 是指無回傳值,所以也就沒有回傳值了。

實驗室 2 - 印出 Hello, Juice!(void main 版本)

#include <stdio.h>

void main ( void )
{
  printf("Hello, Juice!");
  return 0;
}

甚至是,你不寫回傳值也可以,但是 C 編譯器會警告你這樣不太好。

實驗室 3 - 印出 Hello, Juice!(只有 main 版本)

#include <stdio.h>

main ( void )
{
  printf("Hello, Juice!");
  return 0;
}

要了解的是,在 C 語言裡頭,在宣告完函式型別後,會用左右大括號括住你撰寫的程式內容,左右大括號要配的剛剛好,不可多也不可少,否則會有錯誤的情況發生。

實驗室 4 - 【手賤特區】大括號沒有括好導致編譯錯誤

#include <stdio.h>

int main ( void )
{
  printf("Hello, Juice!");
  return 0;

第 5 行:printf

printf 裡面,我們可以填寫一句話;在電腦上廣義來說,一個字我們稱為「字元」(Character),多於一個字我們稱為「字串」(String),字串必須使用雙引號包著,就如同我們範例程式給的:"Hello, World!" 一樣。

分號結尾

要記住,每一行敘述(Statement),都要給一個分號(;),否則會出錯;只有哪些地方不用分號呢?

  1. 所有開頭是「#」後都不用
  2. 函式右大括號後都不用
  3. 註釋後面不用

實驗室 5 - 【手賤特區】指令忘了分號結尾導致編譯錯誤

#include <stdio.h>

int main ( void )
{
  printf("Hello, Juice!") // 忘了分號
  return 0;
}

其中第五行部分 // 忘了分號 ,代表著是「單行註解」(Single-Line Comment)的意思,而前面的 // 代表著是包含這兩個斜線之後,程式都會一概跳過而不執行該行內容;我們下一節會更深入探討如何使用註解的部分。

程式執行的順序?

程式執行時,是一行一行由上而下執行的,不會無故亂跳(就算要跳,也是跳過去之後按上而下執行)。


也看看

Weather Research and Forecasting Model (WRF) Installation Guide on Ubuntu 16.04

Compiling TensorFlow-GPU on Ubuntu 16.04 with CUDA 9.1(9.2) and Python3

小工具的必要性與設計

KNUTH, MORRIS, PRATT (KMP) PATTERN MATCHING ALGORITHM

SPARSE MATRIX MULTIPICATION

Sparse Matrix Fast Transpose

Julia Triple-Quoted String Literals Alignment

comments powered by Disqus