Try   HackMD

[C語言] 基本觀念語法

本章節內容主要是幫助由Python作為第一次學習程式語言的學生,快速了解C語言的語法與觀念,以面對APCS考試的命題方式。

C語言的歷史

C 前身為B語言, 在美國Bell Lab (貝爾實驗室),由當時的研究員 Dennis Ritchie發展,目的是為了開發UNIX作業系統, 替代部份組合語言的所完成的系統功能, 並可在不同的環境上開發系統與執行。

基本程式結構

C語言的格式中預設程式執行時,從主程式main()開始執行,int main()中的int代表程式執行結束後,會傳回一個整數(integer)值

#include <stdio.h> /*宣告I/O函式庫*/ int main(void) { /*程式執行進入點由main函式開始*/ printf("Hello World\n"); return 0; }

資料輸入輸出

輸出資料

使用printf()函式,進行資料輸出。

要使用這個函式,必須加入它的宣告,定義在stdio.h 這個檔案中,所以要在程式碼最前頭進行宣告

#include <stdio.h> int main(void) { printf("Hello World\n"); return 0; }

輸入資料

使用scanf()來讓使用者可以輸入資料到程式中。

請先宣告變數,請注意C語言是靜態語言,宣告變數須預先宣告型態

#include <stdio.h> int main(void) { int age; printf("please enter your age> "); scanf("%d", &age); printf("You are %d\n",age); return 0; }

C語言內建的資料型態

以下是 C 語言的資料型態:

  • 基礎型態 (fundamental types)
    • 布林數 (boolean)
    • 整數 (integer)(unsigned/signed)
      • short
      • int
      • long
    • 浮點數 (floating-point number)
      • float
      • double
      • long double
    • 字元 (character)
      • char
    • 複數 (complex number)
    • 列舉 (enumeration)
  • 衍生型態 (derived types)
    • 陣列 (array)
    • 結構體 (structure)
    • 指標 (pointer)
    • 函式 (function)
    • 聯合體 (union)

流程控制:迴圈

for迴圈

for(int i=0; i < 10; i++){ ... }

while迴圈

有兩種,do-while跟while-do

int i = 0; while(i < 10){ ... i++; }
int i = 0; do { ... i++; } while(i < 10)

隨堂練習

  1. 請使用for迴圈,列印1,3,5,7,9
  2. 請使用while迴圈,列印2,4,6,8,10

流程控制:條件判斷

Switch-Case

switch(變數名稱或運算式) { case 符合數字或字元: 陳述句一; break; case 符合數字或字元: 陳述句二; break; default: 陳述三; break; }

if-else

if( 條件 ) { 如果條件成立時做什麼... } else { 否則做什麼... }

練習題:請讓使用者輸入成績(1~100)
如果使用者輸入90~100的數字: 顯示結果“You Got A”
如果使用者輸入80~89的數字: 顯示結果“You Got B”
如果使用者輸入70~79的數字: 顯示結果“You Got C”
如果使用者輸入60~69的數字: 顯示結果“You Got D”
如果使用者輸入60~0的數字: 顯示結果“You Got F”
如果使用者輸入範圍以外的數字,顯示結果“請輸入正確範圍數字”

Break/Continue

在迴圈敘述中,我們可以使用break指令讓它強制離開迴圈,或是用 continue指令來忽略下面的指令而繼續下一次的迴圈

break示範使用:猜數字

count = 1 ; while (true) { printf ("第 %d 次猜測:\n", count) ; printf ("請猜測一數:") ; scanf ("%d", &guess) ; if (guess > num){ printf ("太大!\n") ; } else if (guess < num){ printf ("太小!\n") ; } else{ printf ("猜中了!\n") ; break ; } count++ ; // 如果猜中了則此行不會執行 } // while loop

Continue示範使用

範例:將 2到100中的偶數相加,但必須排除10的倍數,也就是2+4+6+8+12+14+,最後印出總和。

sum = 0 ; for (x=2 ; x<=100 ; x+=2) { /* 如果 x是10的倍數則閃過後面的 sum = sum + x; 敘述 */ if (x % 10 == 0) continue ; sum = sum + x; } printf("總和:%d \n", sum) ;

隨堂練習

請設計一個程式,讓使用者輸入數字1~3

  • 如果使用者輸入1: 顯示結果“你輸入的是選項1”
  • 如果使用者輸入2: 顯示結果“你輸入的是選項2”
  • 如果使用者輸入2: 顯示結果“你輸入的是選項3”
  • 如果使用者輸入非1~3的數字: 顯示結果“請輸入正確範圍數字”

函式

我們使用函式(Function)將重複出現的程式碼,通常是一系列的程序,做成函式,可以隨時呼叫使用,增加開發效率、以及讓程式碼更容易維護。

主要好處如下:

  • 減少撰寫重覆的程式碼
  • 將程式碼以有意義的方式組織起來
  • 相同的流程下,可藉由參數調整程式的行為
  • 藉由函式庫可組織和分享程式碼
  • 做為資料結構 (data structures) 和物件 (objects) 的基礎

函式的宣告

函式的類型

函式分成兩種類型,有回傳值無回傳值
請參考以下範例程式碼:

#include<stdio.h> /*無回傳值*/ void function1(){ printf("Hello\n"); } /*有回傳值*/ int function2(){ int a = 0; a++; return a; } int main(){ int x = 0; /* 呼叫function 1 */ function1(); /* 呼叫function 2 */ x = function2(); printf("%d\n", x); return 0; }

函式的參數

函式可以帶入參數,在函式內使用該參數進行運算,但也可以不帶入參數。

#include<stdio.h> /*無參數*/ int function1(){ int a = 0; int b = 0; a += 1; b = a; return b; } /*有帶入參數*/ int function2(int a){ int b = 0; a += 2; b = a; return b; } int main(){ int x = 0; int y = 0; //呼叫function 1 y = function1(); printf("%d\n", y); //呼叫function 2 y = function2(x); printf("%d\n", y); return 0; }

隨堂練習

請使用遞迴設計程式,計算階乘5!的值

tags: C/C++程式語言觀念