C語言程式輸入注意事項﹕
1.C 語言程式以windows的記事本或UNIX的vi等純文字編輯器作成,這些文字編輯器中輸入的程式碼,一般稱為原始程式碼(source code),簡稱程式碼。
2.英文或阿拉伯數字請使用半型文字,不要使用全型。
3.英文有大寫小寫之分,請輸入時注意。
4.程式中有空白的地方,請按空白鍵或Tab鍵產生空白。
5.每一行程式的最後,或者要產生空白行時,請按Enter 鍵。
6.分號(;),冒號(:)使用時機不同。
7.{},[ ],()三者的使用時機亦不同。
8.輸入時請不要弄錯0(零)和o(英文字母o),1(阿拉伯數字)和l(英文字母L)。
9.輸入完程式碼後存檔,請用副檔名 *.cpp *.c。
C語言程式碼轉換為機器語言的程序稱為編譯(Compile),此項作業必須使用一種名為編譯器(compiler)的軟體。執行編譯程式後,通常翻譯為機器語言的新檔案,會被儲存在原始程式碼所在位置的資料夾(目錄)內,而這個檔案便稱之為目的檔(object file)。
1. 程式是用來指定、要求電腦從事特定的工作。
2. C語言的程式碼,只要在一般的文字編輯器中輸入即可。
3. 將目的檔連結起來,便可產生出可以執行的程式。
![]() | |||||||
![]() |
程式碼基本輸入﹕
1 #include
2 #include
3 int main(void)
4 {
5
6 return 0; (要省略)
7 system(“pause”); (有時省略)
8 }
第1行帶有#者,會透過編繹器內建的前置處理器(prepro cesser),在編繹程式之前先被讀入。第一行表示”用來執行輸出到螢幕功檔案[stdio.h]”,要在編碼前先行引入這個檔案作業就稱為include。這類要事先引入的讀案也稱標頭檔(header file)。
第2行與第一行同性質。
第3行main()函數是我們要讓電腦知道哪裡才是程式主體的起頭、應執行哪些部分。Main()後面由2個大括號{}所包含的部分,稱之為程式區塊(block)。
第5行中,C語言將每一個要執行的工作分為一行一行的小單元,每一行就是一個敘述句(statement ),並在每一行最後加上(;分號 ),當敘述句輸入完成時,則須在下一行輸入大括號為結尾,即宣告完成。執行敘述句時,原則上會 根據程式先後順序,從最前面的敘述句開始依序執行。
第6行main()主題之程式執行到這一行時,表示程式執行完畢,main()函數結束。
第7行 此system(“pause”)包含在
Printf(“ 想要顯示的字串 ”) ﹕輸出至螢幕上
\n ﹕換行
文字與數值
轉換規格﹕
Printf可用來顯示字串,它還可以有下列功能﹕
字串如果出現%●的記號,這個部分在輸出時所顯示出來的會是逗號(,)之後的文字或數值,%●稱之為轉規格。●的部分會根據所要輸出的文字或數值而使用不同的符號。具代表的如下轉換規格﹕
文字類……..%c
整數類……..%d
小數類……..%f
可以使用轉換規格,將文字或數值插入顯示在字串當中。
Printf(“%c為字元。\n”,’A’);
螢幕輸出為 A為字元。
有些無法用鍵盤輸入之特殊文字,這些特殊文字的前面前必加上 \ ,與原來的字元組合後產生新生的意義。這樣的特殊文字通稱為跳脫字元。
表﹕跳脫字元
跳脫字元 | 說明 |
\a | 警告聲 |
\b | Backspace |
\t | 水平tab |
\v | 垂直tab |
\n | 換行 |
\f | 換頁 |
\r | return |
\\ | \ |
\’ | ‘ |
\” | “ |
\? | ? |
0256 | 8進位000字元碼(0為0~7的數字) |
0xhh | 16進位hh字元碼(h為0~9的數字與A~F的英文字母) |
字元碼的種類很多,例如BIG-5,Unicode(萬國碼),視使用環境而定。
字元由單一字母所構成,字串由2個或2個以上字母組合而成,字元由單引號而字串由雙引號將內容包圍起來。
重點整理
1. main()函數是C語言程式的主題。
2. 程式敘述句(statement)是程式處理的最小單位名稱。
3. 程式區塊(block)是程式處理的較大單位名稱。
4. 程式當中寫在//符號後面的文字稱為註解內容,善用註解可以提高程式的可讀性。
5. 使用printf來輸出。
6. C語言中有字元、字串、數值等。
7. 字元的外圍要用’ ’框住。
8. 某些特殊符號,需透過跳脫字元才能顯示。
9. 字串的外圍要用” “框住。
10. 整數除了可以使用10進位表示外,還可以使用8進位制、16進位表示。
變數﹕
電腦內部的記憶體記住特定資料的功能稱為變數(Variable)。
變數可想成是各種資料型態(如數值、文字),每一種資料都被儲存在特定空格中。
識別字
使用變數前第一項準備工作,須針對該變數進行下列2項設定工作﹕
1. 指定變數的名稱
2. 指定變數的型態
第一點的意思說,為了使用變數,必須為該變數取一名字 。如取一變數名稱叫num,或叫其他文字的排列組合都可做為變數名稱。 只要是合法的字元或數字,最後組合成一個變數名稱即可。這種變數名稱被稱為識別字,如前述之 num。
識別字的規則如下﹕
1. 使用英文字母、阿拉伯數字、底線連接(_)、$等符號作為識別字名稱,無法包含特殊記號 。
2. 最長不超過31個字元。
3. C語言已保留起來的關鍵字(Keyword)不能做為識別字名稱。常見如return。
4. 識別字名稱不能用阿拉伯數字做為開頭。
5. 英文字大小寫有區別。
變數可用來存放特定文字或數值,這些值有許多種類,一般稱為資料型態(data type)。
表﹕C語言的變數可以使用的基本型態
種類 | 名稱 | 檔案大小 | 資料的範圍 |
文字型 | Char | 1byte | 1 個英文數字 -128~127 |
Unsigned char | 1byte | 1個英文數字(無符號 ) 0~255 | |
整數型 | Short | 2 byte | 整數 -32768~32767 |
int | 4 byte | 整數 | |
long | 4 byte | 長整數 | |
浮點變數 | Float | 4 byte | 單精度浮點數 |
Double | 8 byte | 雙精度浮點數 | |
Long double | 8 byte | 四倍精度浮點數 | |
使用變數時首先 要宣告變數
語法﹕
變數的資料型態 識別字;
如下﹕
Int num;
Char e;
Double db,dd;
變數一經宣告後,就可以指定特定內容給變數,也就是讓變數真正記住指定內容。
變數的初始化﹕
如下例
Int num ;
Num=3;
上兩行可合併為
Int num=3;
寫程式時,請儘量參照這種模式。亦可在程式中段改變變數數值。
從鍵盤輸入變數值﹕
{
宣告變數;
scanf(“轉換規格”,&變數);
}
Scanf()與printf()的資料型態非常相似,當輸入整數時要和printf()一樣; 使用%d這個轉換規格。
Scanf(“%d”,&num);
輸入小數﹕
Scanf(“”,&num);
輸入文字﹕
Ch=getchar();
Printf(“輸入的是%c\n”,ch);
1.計算體脂肪BMI值的公式是(w/H*H),H 是身高(公尺),W 是體重(公斤),請建立程式輸入身高和體重後,計算和顯示BMI值。
1. 變數就像一個盒子,可以容納特定的值。
2. 宣告變數的時候,必須清楚的指定變數的名稱及資料型態。
3. 將某個值指定給變數時,必須使用”=”。
4. 宣告變數時可直接完成變數的初始工作,也就是直接把值指定給變數。
5. 指定新的值給變數時,變數舊的值會被新的值取代。
6. 從鍵盤輸入數值時使用scanf()等。
7. 從鍵盤輸入文字時使用getchar()等。
運算式﹕
如 1+15
上述中1及15稱為運算元。
上述中”+”稱為運算子。
而1+15稱為運算式。
運算元(operand)﹕計算執行的對象(通常是數字或文字)
運算子(operator)﹕負責演算的加減乘除等符號
運算子的種類﹕
運算子 | 說明 | 運算子 | 說明 |
+ | 加法運算子 | >= | 關係運算子 |
- | 減法運算子 | < | 關係運算子 |
* | 乘法運算子 | <= | 關係運算子 |
/ | 除法運算子 | == | 相等運算子 |
% | 餘數運算子 | != | 不相等運算子 |
+ | 正號(單獨使用) | ! | 邏輯NOT運算子 |
- | 負號(單獨使用) | && | 邏輯AND運算子 |
~ | 位元補數運算子 | || | 邏輯OR運算子 |
& | 位元AND運算子 | , | 逗號運算子 |
| | 位元OR運算子 | () | 呼叫函數 |
︿ | 位元XOR運算子 | [] | 陣列註標 |
= | 指定 | ?: | 條件運算子 |
<< | 位元左移運算子 | sizeof | 型別size運算子 |
>> | 位元右移運算子 | ++ | 前置遞增運算子 |
-- | 前置遞減運算子 | ||
> | 關係運算子 |
運算子(operator)與運算元(operand)相結合,形成所謂的運算式(expression)。
使用遞增運算子和遞減運算子,可以讓變數的值加1或減1。
使用複合運算子,可以一次完成四則運算和指霆算的工作。
數值在轉換成較小數值時,可能會流失一部分數值。
將數值或任何資料指定給變數時,必須注意資料型態是否需要轉換。
Cast運算子可以強制變更原本數值的資料型態。
條件敘述﹕
If 敘述
語法﹕
If (條件式){
敘述句;
}
在使用敘述句中,唯有當條件為true 時,才會執行被指定的敘述;如果條件式為false,就會跳過if內部的程式敘述,直接往下繼續執行。
If ~ else 敘述﹕
If (條件式){
程式敘述1;
Else
程式敘述2;
}
題目 一:鍵盤輸入兩數a及b
若a>b則輸出1
若a則輸出0
題目 二:請寫一程式,讓使用者可以由鍵盤輸入整數值,執行時請輸出下列訊息。
輸入xx是偶數時……………………….輸出 “xx是偶數”
輸入xx是奇數時……………………….輸出 “xx是奇數”
輸入xx<0時………………………. 輸出 “xx是負數”
#include
main()
{
int a,b;
scanf("%d",&a);
b=a%2;
if (a>0) {
if(b==0) {
printf("%d是偶數\n",a);
}
else{
printf("%d是奇數\n",a) ;
}
}
else {
printf("%d是負數\n",a) ;
}
system("pause") ;
return 0;
}
Switch 敘述
Switch (運算式){
Case 常數1 :
程式敘1;
…….
Break ;
Case 常數2 :
程式敘2;
…….
Break ;
Case 常數3 :
程式敘3;
…….
Break ;
default;
程式敘1;
…….
Break ;
}
Break 是中止switch程式的執行流程,沒break則程式執行將沒選擇而全部執行。
條件判斷方式有if 及switch外,還有邏輯運算子的判斷式,在互相配合運用下的組合,可以設定非常複雜的條件狀況。
題目; 使用switch解下列問題
當輸入1時,可顯示”學校”
當輸入2時,可顯示” 學校+班級”
當輸入3時,可顯示” 學校+班級+姓名”
當輸入4時,可顯示” 學校+班級+姓名+座號”
當輸入5時,可顯示”重新執行”
For 敘述
For (起始條件;判斷是否要重複執行的條件;遞增或遞減運算){
程式敘述句1;
程式敘述句2;
}
While 敘述(當條件式符合時,迴圈結束)
While (條件式){
程式敘述句;
}
Do while 敘述(只要條件式為true時就繼續進行迴圈)
Do {
程式敘述句;
……
}while (條件式);
Break 指令的主要用意是強制結束程式並跳出迴圈。
Continue指令是讓目前執行中的迴圈暫停執行,而回到迴圈的開始位置繼續下一個處理。
迴圈中若還有迴圈稱為巢狀迴圈。
題目 ﹕
試用雙迴圈寫出下列輸出之程式﹕
1. * * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
* * * * * *
2. 1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
6 6 6 6 6 6
5 5 5 5 5 5
4 4 4 4 4 4
3 3 3 3 3 3
2 2 2 2 2 2
1 1 1 1 1 1
6 5 4 3 2 1
6 5 4 3 2 1
6 5 4 3 2 1
6 5 4 3 2 1
6 5 4 3 2 1
6 5 4 3 2 1
1 1 1 1 1
0 1 1 1 1
0 0 1 1 1
0 0 0 1 1
0 0 0 0 1
1. 1 2 3 4 5 6
2 3 4 5 6
3 4 5 6
4 5 6
5 6
6
2. 由鍵盤輸入數值
(1).若輸入2 ,則輸出
1 0
0 1
(2). 若輸入3,則輸出
1 0 0
0 1 0
0 0 1
i,j j>i
1,1 | 1,2 | |||
2,2 | ||||
3,3 | ||||
4,1 | 4,3 | 4,4 | ||
5,5 |
I
函數
在C語言中,當寫到複雜的程式時,有時要重複執行某些必要的處理。這些重複的處理,有一種功能叫做函數(function),它可以將某些特定的處理整合起來寫成敘述。藉由建立函數,就可以很輕鬆地把整理好的處理呼叫出來。
在C語言中要利用函數的時候,必須要包括以下2項步驟﹕
1.建立函數(定義函數)
2.利用函數(呼叫函數)
例﹕在已寫過程式裡,C語言的整體程式也可以算是一個函數。這個函數的名稱,就是main()函數
函數的定義與呼叫﹕
函數的定義﹕函數的定義是集中寫到程式區塊中,名下寫法
1 傳回值的型態 函數的名稱(引數列表) |
2 { |
3 敘述; |
4 ……… (3,4列是將處理整合起來) |
5 return 運算式; |
6 } |
呼叫函數﹕如果定義好函數,就可利用已整合好的處理,利用函數稱之為
函數的呼叫(function call)
在利用函數時,需進行下列流程﹕
1. 呼叫函數
2. 執行函數內部的處理
3. 當函數區域內的處理結束後,處理則回到呼叫處。
函數功能﹕使用函數可以使複雜的程式寫更容易。
陣列
C語言陣列類型有如下特點﹕
1. 陣列中每一元素都是一個單獨的變數,具有變數的所有特性。
2. 陣列元素的個數在定義陣列時必須確定,不允許變動。
3. 陣列元素類型必須相同,它們在儲存中佔據連續的位走空間,如80個陣列元素,即包含80個同類型的數值或文字。
陣列元素可以是任一種數值類型,按陣列元素類型不同可分為數值陣列,字元陣列,指標陣列,Struct陣列等各種類型。
一維陣列
一維陣列通常是由一個陣列元素所組成的陣列,定義如下﹕
儲存類型 數值類型 陣列名稱路[常數表達式]={初始值};
如static float score[80];
說明﹕
1. 儲存類型是任意選擇,用法與前面介紹過的變數儲存類型相同,說明其所佔的儲存區域和作用域。
2. 數值類型指明陣列中每個元素的類型,有int,char,float 等類型。
3. 陣列名稱符合識別字,但應注意不能與其他變數同名。例int a,[a]是錯的。
4. 常數表達式指明陣列中包含元素的個數,可以包含常數,符號常數,但不能包含變數,即不允許對動態陣列定義大小。
5. 初始值是任選,它為每個元素指派初始值。
C語言規定,不能參照整個陣列,只能參照元素,用陣列名加上方括號[ ]中該元素的位置號來參照該元素,一般形式是﹕
陣列名稱[索引][值]
其中索引值表示該元素位置號,可以是整數常數,整數表元式,並且達式中可以包含數。應注意﹕
1. 索引值固定從0開始,即下限為0,上限為陣列長度減1。
2. C語言編譯系統不進行陣列邊界檢查,保證陣列元素參照不過界是編寫人員的職責。
一維陣列二素的儲存﹕
陣列元素佔連續的儲存空間,陣列名稱表示陣列儲存的首要位址,元素值就是儲存的內空。
一維陣列的初始化﹕
初始化是指在定義時指定初始值,編譯器把初始值指派給陣列變數。指派是指使用指派語法。
有下列幾種方式﹕
陣列全部元素指派初值。
對部分指派初值。
全部元素初始化可以為0。
多維陣列﹕
C語言中允許使用多維陣列。索引值個數為兩個或兩個以上的陣列稱為多維陣列。
二維陣列的定義型式為﹕
儲存類型 數值類型 陣列名稱[常數表達式1][常數表達式2];
1.常數表達式可以包含常數與字元常數,但不能包含變數。
2.二維陣列可以看作是一種特殊的一維陣列,它的每個元素又是一個一維陣列。
#include
int main()
{
int a[12]={2,45,62,78,3,8,55,94,15,6,78,80},i,j,k;
for(k=0;k<12;k++){
for(i=k;i<12;i++){
if(a[i]>a[k]){
j=a[i];
a[i]=a[k];
a[k]=j;
}
printf("M",a[i]);
}
printf("\n");
}
for(i=0;i<12;i++);
printf("M",a[i]);
printf("\n");
return 0;
}