CSIM,PUCLanguageIntroductiontotheCProgrammingLanguageCSIM,PUCLanguage2程式碼的編譯一般來說,程式碼編輯完成後,必須轉換成機器所能理解的語言(即機器碼,machinecode)後,才能正確的執行。所有的程式語言中,都附有這種轉換的程式,而轉換程式可概分成兩種,即直譯器(interpreter)與編譯器(compiler)。C語言是屬於編譯器的一種。CSIM,PUCLanguage3C語言的編譯及連結過程原始程式(xxx.c)編譯器(Compiler)撰寫程式目的檔(xxx.obj)函數庫(Library)連結程式(Linker)執行檔(xxx.exe)CSIM,PUCLanguage4簡單的C程式範例/*prog1_1,第一個C程式碼*/#includestdio.h#includestdlib.hintmain(void){printf(FirstCprogram!\n);/*在螢幕上印出””內的字串*/printf(享受C的樂趣\n!);system(pause);/*暫停程式的執行*/return0;}原始的程式碼CSIM,PUCLanguage5程式碼的編輯、撰寫下面視窗為鍵入程式碼之後的情形:CSIM,PUCLanguage6程式碼的編輯、撰寫選擇『檔案』功能表裡的『儲存』即可儲存檔案。存檔類型需存成.c檔CSIM,PUCLanguage7程式碼的編譯、執行程式碼寫完後,接下來就是要將原始程式碼變成可執行的程式碼。以DevC++為例,有下列幾種方式進行編譯與執行:1.選擇『執行』功能表中的『編譯』來編譯程式,然後選擇『執行』功能表裡的『執行』來執行它。2.選擇『執行』功能表裡的『編譯並執行』,此時DevC++在編譯完程式之後,會自動執行程式。CSIM,PUCLanguage8簡單的C程式範例/*將stdio.h這個檔案含括(include)進來*//*將stdlib.h這個檔案含括(include)進來*/定義了main函數,{}內為main的主體C語言的註解。C是以/*及*/“記號來包圍註解文字.#includestdio.h#includestdlib.hintmain(void){intnum;/*宣告一個名為num的整數型態變數*/num=2;/*把num的值設為2*/printf(Ihave%ddogs\n,num);/*呼叫printf()函數*/printf(Youhave%ddogs,too\n,num);system(pause);return0;}printf函數會先把『%d』這個符號以num的值來取代。再將雙引號內的文字輸出到螢幕上。CSIM,PUCLanguage9解析C語言include指令與標頭檔:在C語言裡,性質相近的格式定義會放在同一個標頭檔裡。我們可以使用include指令將這些標頭檔含括進程式裡。main()函數:每ㄧ個C程式都必有一個main()函數,而且只能有一個。所有C程式都是由main()函數開始執行,所執行的是{}內的內容。大括號、本體以main()函數而言,左大括號({)與右大括號(})之間的程式碼就是main()函數的本體(body)。本體內的每個指令敘述需以分號『;』做結尾。CSIM,PUCLanguage10變數與常數變數(variables):是一個記憶體空間,主要用途是讓程式設計者,暫時存放一個數值,並於需要時可以隨時取用它或改變它.變數一定要宣告過才能使用,否則將產生錯誤.當我們宣告一個變數(variable)時,compiler會在記憶體內配置一個空間給此變數。常數(constant)不同於變數,它的值是固定的。例如:整數常數12400、浮點常數5.1CSIM,PUCLanguage11變數與常數變數可用來存放資料。不同類型的資料需要不同型態的變數來儲存。使用變數前必須先宣告此變數所欲儲存的資料型態。例如:班級的人數ㄧ定是整數,因此可利用整數型態的變數來儲存班級的人數。例如:intnum;num=54;宣告ㄧ個變數num為整數資料型態num的值設為54CSIM,PUCLanguage12基本資料型態C語言常用的四種資料型態:char(字元)characterint(整數)integerfloat(浮點數)single-precisionfloatingpointdouble(倍精度浮點數)double-precisionfloatingpoint例如:charname;/*宣告一個變數name為字元資料型態*/intnum;/*宣告一個變數num為整數資料型態*/floatgrade;/*宣告一個變數grade為浮點資料型態*/CSIM,PUCLanguage13基本資料型態下表列出了C語言中各種基本資料型態所佔的記憶體空間及範圍資料型態型態說明位元組表示範圍整數類型longint長整數4-2147483648~2147483647int整數4-2147483648~2147483647shortint短整數2-32768~32767char字元10~255(256個字元)浮點數類型float浮點數41.2E-38~3.E38double倍精度浮點數82.2E-308~1.8E308不同的編譯程式裡,整數類的變數所佔的位元組可能會有所不同CSIM,PUCLanguage14整數資料型態在DevC++中,int與longint都佔了4個位元組.在其它編譯器裡(如:TurboC),int可能只佔了2個位元組.在宣告長整數或短整數變數時,可以省略int.shortinta=1000;可寫成shorta=1000;longintb=2000;可寫成longb=2000;若儲存的資料絕對不會出現負數的時候,可以使用無號整數來儲存資料型態型態說明位元組表示範圍unsignedlongint無號長整數40~4294967295unsignedint無號整數40~4294967295unsignedshortint無號短整數20~65535CSIM,PUCLanguage15字元資料型態字元型態在記憶體中佔有1個位元組,可用來儲存字元.通常字元會被編碼,亦即替每一個字元編上一個整數碼,以方便處理這些字元.ASCII是較為人知的編碼系統(請參閱附A).在ASCII編碼系統中,數字0到127分別代表不同的常用符號。例如:英文大寫A的ASCII碼是65英文小寫a的ASCII碼是97符號%的ASCII碼是37附錄ACSIM,PUCLanguage16字元常數(CharacterConstants)字元常數必須放在單引號裡面.例如:’A’,’a’,‘7’,‘*’也可以使用ASCIIcode來表示字元常數範例:charch=‘A’;同等於charch=65;charch=‘7’;同等於charch=55;charch=‘%’同等於charch=37;CSIM,PUCLanguage17字串常數(StringConstants)字串常數是以ㄧ對雙引號包圍.例如:“holiday”,“Hello”,”JaneWang”…等“a”會被視為包含了一個字元的字串.在C語言中處理字元和字串的方式是不ㄧ樣的.CSIM,PUCLanguage18變數宣告(Declarations)宣告的語法如下:資料型態變數名稱;變數命名原則:1.第一個字元必須是英文字母或底線2.大小寫代表不同的變數(如:SUM,Sum,sum).3.可由字母,底線,阿拉伯數字所組成.4.不可為關鍵字(Keyword)或保留字(Reserveword).Ex:不合法的識別字:2A,good!,$money,case例如:intnum1;/*把變數num1宣告為int型態*/chara;/*把變數a宣告為char型態*/floatf;/*把變數f宣告為float型態*/CSIM,PUCLanguage19變數宣告(Declarations)inta,b,c;inta;intb;intc;若想同時宣告一個以上相同型態的變數,則可用逗號(,)隔開.例如:可寫成在變數宣告完成後,可使用等號運算子(=)替變數設值。例如:inta;/*把變數a宣告為int型態*/a=3;指定整數變數a的初值為3也可以在宣告的時候,替變數設值。例如:intnum=3;指定整數變數num的初值為3aMemorynum33CSIM,PUCLanguage20溢位當數值的大小超過變數可以表示的範圍時,溢位(overflow)便會發生。例如:intnum=2147483647;num=num+1;解說:設定num的初值為整數(integer)所容許的最大值(2147483647)。當num的值加上1後,會發生溢位的現象。此時num的值會變成-2147483648。CSIM,PUCLanguage21簡單的C程式範例將a與b的值相加,放到sum中#includestdio.h#includestdlib.hintmain(void){intsum;/*宣告整數變數sum*/inta=5,b=9;/*a的值為5,b的值為9*/floatavg;/*宣告浮點變數avg*/sum=a+b;avg=sum/2;printf(“Theaverage=%f\n”,avg);system(pause);return0;}將sum的值除以2,放到avg中CSIM,PUCLanguage22運算子(Operator)運算式是C語言的其中一種敘述,運算式是由運算元(Operand)與運算子(Operator)所組成.運算元可以是常數,變數,甚至是函數;而運算子就是數學上的算數符號,如+,-,*,/等.以運算式(num=a+10)為例,num、a與10都是運算元,『=』與『+』則為運算子:num=10運算元運算子運算元運算式a+運算元運算子CSIM,PUCLanguage23一元運算子與二元運算子一元運算子:一個運算子若在計算時,只操作一個運算元,將稱為一元運算子.如負號“-”,當數字前加上“-”,其值將變為負值,例如:-10.二元運算子:一個運算子若在計算時,操作兩個運算元,將被稱為二元運算子.例如:加號“+”在運算式“x+2”,操作左右兩邊的運算元,執行x與2的相加.CSIM,PUCLanguage24指派運算子(assignmentoperator)運算子符號:=範例1:i=14;意義:將整數14指定給i這個變數.範例2:i=i+2;意義:將i內存放的數值,從記憶體取出,加2以後,再指派回原來的記憶空間裡.CSIM,PUCLanguage25算術運算子運算子符號名稱結合規則使用語法範例當a=6,b=2時前述範例的運算結果+加法由左而右a+b6+2=8-減法由左而右a–b6–2=4*乘法由左而右a*b6*2=12/除法由左而右a/b6/2=3%取餘數由左而右a%b6%2=0CSIM,PUCLanguage26算術運算子算數算子的運算規則:1.運算子的優先順序2.運算子的結合規則優先順序運算子符號結合規則1*(乘),/(除),%(取餘數)由左而右2+(加),-(減)由左而右範例:6–32%5+28/4*26–2+28/4*26–2+7*26-2+144+1418CSIM,PUCLanguage27算術指定運算子運算子符號結合規則原式簡化寫法當a=6時前述範例的運算結果+=由右而左a=a+2a+=28-=由右而左a=a–2a-=24*=由右而左a=a*2a*=212/=由右而左a=a/2a/=23%=由右而左a=a%ba%=20CSIM,PUCLanguage28比較運算子運算子符號名稱結合規則使用語法範例當a=6,b=2時前述範例的比較結果==等於由左而右a==b6==2,0(假)大於由左而右ab62,1(真)小於由左而右ab62,0(