版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第2章示例驅動的C語言語法元素概覽
本章對C語言的基本語法元素做簡要概覽,包括變量與表達式、算術運算、控制流、數組、函數、基本輸入/輸出等,讓讀者對C語言有一個整體的感性認識,能模仿編寫簡單的小程序。但是,本章我們并不想完整地或很精確地對C語言進行介紹。2.1變量與表達式[例2-1]#include<stdio.h>#include<math.h>/*打印一個周期內,三角函數的離散值表*/intmain(){ intx; doubley; intstart,end,step; start=0;/*角度下限*/ end=360;/*角度上限*/ step=30;/*步長*/ x=start; while(x<=end){ y=cos(x*3.1415926/180); printf("%3d\t%9.6f\n",x,y); printf("\n"); x=x+step; } return0;}函數的離散值表圖2-1
[例2-1]的功能是打印出常見三角函數
在一個周期(0?-360?)內變化,其對應的函數離散值表,如圖2-1所示。我們可以根據該表擬合出三角函數的三角曲線。分析:上述程序的第一、二行:
#include<stdio.h>#include<math.h>
叫做編譯預處理命令,用于告訴編譯器在本程序中包含標準輸入/輸出庫以及其他庫函數的有關信息。許多C源程序的開始處都包含相似的行。
注釋行的下面是main函數,在所有C語言的程序中,必須有且僅有一個main函數,所有程序的運行都是從main函數開始,到main結束,其中“main”是函數的名稱,稱為主函數。
為了實現程序的功能,我們必須定義一些變量來存儲數據,在C語言中,所有變量都必須先定義后使用,定義用于聲明變量的屬性,它由一個類型名與若干所要定義的變量名組成,例如:
intx; doubley;intstart,end,step;
其中,“int”,“double”是系統已經定義好的關鍵字。所謂關鍵字是指系統事先定義好的代表一些特殊含義的名稱。“int”代表整數的類型,“double”代表浮點數類型。
接下來要賦予這些變量具體的數據,在程序[2-1]中,以4個賦值語句(也可稱為賦值表達式)開始,為變量設置初值。
start=0;end=360;step=30;x=start;
總體來看,C語言中的表達式事實上就是常量和變量通過各種C語言允許的運算符號進行連接。由例子程序可見,C語言的語句必須以“;”結束。
2.2分支語句2.2.1if語句[例2-2](程序見課本P9)程序的功能是統計C語言程序設計課程期末考試各成績段的人數,統計分成下述幾檔:90~100 A80~89 B70~79 C60~69 D0~59 E要求輸出各成績段的具體人數。
在C語言程序中經常會采用如下模式來表示多路判定:
if(條件1)
語句1;elseif(條件2)
語句2;??else
語句n;
這就是C語言中的if語句。在if語句中,各個條件從前往后依次求值,直到滿足某個條件,這時執(zhí)行對應的語句部分,語句執(zhí)行完成后,整個if結構結束。
注意,其中語句1~n中的任何語句都可以是括在花括號中的若干個語句。如果其中沒有一個條件滿足,那么就執(zhí)行位于最后一個else之后的語句。如果沒有最后一個else及對應的語句,那么這個if構造就不執(zhí)行任何動作。在第一個if與最后一個else之間可以有0個或多個
elseif(條件語句)2.2.2switch語句
C語言中的多路分支,也可以用switch語句完成(參閱課本P11例2-3)。
switch語句的通用用法如下:
switch(表達式){
case表達式1:語句1;case表達式2:語句2;….case表達式n:語句n;default:語句n+1;
}2.3循環(huán)語句2.3.1while循環(huán)語句
以[例2-1]中的以下語句為例:
while(x<=end)
{ ...} while循環(huán)語句的執(zhí)行步驟如下:首先測試圓括號中的條件。如果條件為真(x小于等于end),則執(zhí)行循環(huán)體(括在花括號中的三個語句)。然后再重新測試該條件,如果為真(條件仍然成立),則再次執(zhí)行該循環(huán)體。當該條件測試為假(x大于end)時,循環(huán)結束,繼續(xù)執(zhí)行跟在該循環(huán)語句之后的下一個語句。
while語句的循環(huán)體可以是用花括號括住的一個或多個語句,也可以是不用花括號括住的單個語句,例如:
在這兩種情況下,我們總是把由while控制的語句向里縮入一個制表位(在書中以四個空格表示),這樣就可以很容易地看出循環(huán)語句中包含哪些語句。while(i<j)i=2*i;2.3.2for循環(huán)語句
C語言提供了多種循環(huán)控制語句,除了上一小節(jié)提到的while循環(huán)外,用得比較多的還有for循環(huán)。我們將[例2-1](打印一個周期內三角函數離散值表)中的循環(huán)控制用for語句來實現,改寫為[例2-4],描述如下:[例2-4]#include<stdio.h>#include<math.h>/*打印一個周期內,三角函數的離散值表*/intmain(){ intx; doubley; for(x=0;x<=360;x=x+30) { y=cos(x*3.1415926/180); printf("%3d\t%9.6f\n",x,y); } return0;}例子程序中的for語句也是一種循環(huán)語句,是while語句的推廣。如果將其與前面介紹的while語句比較,就會發(fā)現其操作要更清楚一些。for循環(huán)的通用語法如下:
在圓括號內共包含三個部分,它們之間用分號隔開。for(表達式1;表達式2;表達式3)
循環(huán)體語句;
示例程序中的表達式1為x=0是初始化部分,僅在進入循環(huán)前執(zhí)行一次。
然后計算表示式2,這里表達式2為x<=360,用于控制循環(huán)的條件測試部分:這個條件要進行求值,如果所求得的值為真,那么就執(zhí)行循環(huán)體。循環(huán)體執(zhí)行完,再執(zhí)行表達式3:x=x+30加步長,并再次對條件表達式2求值。
如果求得的表達式為真,繼續(xù)執(zhí)行循環(huán)體,一旦求得的條件值為假,那么就終止循環(huán)的執(zhí)行。像while語句一樣,for循環(huán)語句的循環(huán)體可以是單個語句,也可以是用花括號括住的一組語句。
初始化部分(表達式1)、條件部分(表達式2)與加步長部分(表達式3)均可以是任何表達式。
[例2-4]中的程序把3.1415926、360、30等常數直接寫在了程序中,這并不是一種好的習慣,原因有:
1)這些純粹的數沒有任何的表征意義,幾乎不能給以后可能要閱讀該程序的人提供什么信息;
2)使程序的修改變得困難,因為如果要將終止溫度和步長修改的話,必須修改程序中的所有的360和30。2.4符號常量
解決上述問題的一種方法是賦予它們有意義的名字。#define指令就用于把符號名字(或稱為符號常量)定義為一特定的字符串:
此后,所有在程序中出現的在#define中定義的名字,如果該名字既沒有用引號括起來,也不是其他名字的一部分,都用所對應的替換文本替換。這里的名字與普通變量名有相同的形式:它們都是以字母或者下劃線打頭的字母或數字序列。替換文本可以是任何字符序列,而不僅限于數字。#define名字替換文本[例2-5]#include<stdio.h>#include<math.h>/*打印一個周期內,余弦函數的離散值表*/#definePI3.1415926#defineSTART0#defineEND360#defineSTEP30intmain(){ intx; doubley; for(x=START;x<=END;x=x+STEP) { y=cos(x*PI/180);/*調用cos函數計算余弦值*/ printf("%3d\t%9.6f\n",x,y);/*調用printf函數輸出結果*/ } return0;}
上例是用符號常量打印三角函數的離散值表。這里,START、END、PI與STEP稱為符號常量,而不是變量,故不需要出現在定義中。這樣,如果需要提高函數曲線的擬合精度,就只需要縮小STEP并給定更精確的PI值即可。符號常量名通常用大寫字母拼寫,這樣就可以很容易與用小寫字母拼寫的變量名相區(qū)別。注意:#define也是一條編譯預處理的命令,因此該行的末尾是沒有分號的。
2.5輸入輸出[例2-6]用scanf函數實現的三角函數離散值表#include<stdio.h>#include<math.h>/*打印一個周期內,余弦函數的離散值表*/#definePI3.1415926intmain(){ intx; doubley; intstart,end,step; printf("請輸入角度的下限、上限和步長:\n"); scanf("%d%d%d",&start,&end,&step); for(x=start;x<=end;x=x+step) { y=cos(x*PI/180); /*調用cos函數計算余弦值*/ printf("%3d\t%9.6f\n",x,y); /*調用printf函數輸出結果*/ }}
其中行
就是負責從鍵盤輸入數據的函數,其使用方法與printf函數基本相同,不同點主要體現在第二個參數以后的參數,其前面都有符號
“&”,表示取這些變量的地址。scanf("%d%d%d",&start,&end,&step);
在C語言中,當我們要定義一組類型相同的數據的時候,可以通過定義數組的方式來定義這些元素,通過數組名和下標來引用某一個元素,數組的下標總是從0開始,在[例2-2]中,這個數組的6個元素分別是grade[0]、grade[1]、?、grade[5]。這一點在分別用于初始化和打印數組的兩個for循環(huán)語句中得到了反映。
C語言中數組不能當作一個整體來訪問,必須通過下標依次訪問,每個元素基本等價于一個同類型的普通變量。下標可以是任何整數表達式,包括整數變量(如i)與整數常量。2.6數組
C語言的程序是由一個個的函數構成的,除了有且必須有的main主函數以外,用戶也可以自己定義函數。此外,C語言的編譯系統還提供了一些庫函數。在上述的例子中,我們所使用的函數(如cos、printf與scanf等)都是函數庫為我們提供的。接下來,我們看看怎樣編寫自己的函數。2.7函數
我們通過編寫一個求階乘的函數factorial(n)來說明定義函數的方法。
函數定義的一般形式為:返回值類型函數名(可能有的參數定義){
申明和定義序列 語句序列}例[2-7]計算整數0~9的階乘。#include<stdio.h>intfactorial(intn); /*聲明factorial函數*/intmain(){ inti; for(i=0;i<10;++i) printf("%d的階乘是:%d\n",i,factorial(i)); /*調用factorial函數計算i的階乘*/ return0;}/*factorial:n的階乘,n>=0*/intfactorial(intn){ inti,p; p=1; for(i=1;i<=n;++i) p=p*i; returnp;}
在我們的例子中,factorial函數定義的第一行:intfactorial(intn),申明參數的類型與名字以及該函數返回的結果的類型。factorial的參數名只能在factorial內部使用,在其他函數中不可見:因此在其他函數中可以使用與之相同的參數名而不會發(fā)生沖突。一般而言,把在函數定義中用圓括號括住的表中命名的變量叫做形式參數。
factorial函數計算得到的值由return語句返回給main函數。關鍵詞return可以后跟任何表達式:
函數不一定都返回一個值。return表達式;對函數的使用,叫函數調用。main主程序在如下命令行中對factorial函數進行了調用:
printf("%d的階乘是:%d\n",i,factorial(i));
調用factorial函數時,傳送了一個變量i給它,一般把函數調用中與參數對應的值或變量叫做實際參數,如變量i,由實際參數傳遞值給形式參數。而factorial函數則在調用執(zhí)行完時返回一個要按一定格式打印的整數。在表達式中,factorial(i)就像i一樣是一個整數。注意:這個函數不是一個實用的階乘函數,它只能用于處理比較小的整數的階乘,因為如果要求階乘的整數比較大,使用該方法很容易越界,導致程序沒辦法獲得正確的結果。希望讀者讀完整本書以后能為該問題找到正確的解決方法。2.8算法2.8.1算法概念程序設計的關鍵之一,是解題的方法與步驟,是算法。學習高級語言的重點和難點之一就是掌握分析問題、解決問題的方法,鍛煉分析、分解,最終歸納整理出算法的能力。
與之相對應,具體語言,如C語言的語法是工具,是算法的一個具體實現。所以在高級語言的學習中,一方面應熟練掌握該語言的語法,因為它是算法實現的基礎,另一方面必須認識到算法的重要性,加強思維訓練,尋找問題的最優(yōu)解決方法,以寫出高質量的程序。算法及其描述—算法
著名計算機科學家沃思提出一個公式:
數據結構+算法=程序
數據的組織及存儲方式對數據運算的描述計算機解決問題的方法和步驟,就是計算機解題的算法
[例2-8]
設有一物體從高空墜下,每次落地后都反彈到原高度2/3差一米的地方,現在測得第9次反
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年版貨車司機雇傭勞動合同
- 2024汽車制造商關于新型汽車零部件采購的合同
- 夜間交通指示照明合同(2篇)
- 2024橋梁工程橋梁檢測與評估承包合同樣本2篇
- 2024年雞蛋供貨商協議
- 數字健康服務推廣協議
- 土地居間合同1
- 16-2《登泰山記》(說課稿)高一語文同步高效課堂(統編版 必修上冊)
- 2《觀察蝸牛的反應》說課稿-2023-2024學年科學二年級上冊湘科版
- 能源行業(yè)設備采購合同
- 2023-2024學年《Web開發(fā)基礎》試卷及答案解析
- 標準化考場方案
- 遙感技術在地表水源地水體監(jiān)測中的應用研究
- 鐵路職業(yè)病防治工作課件
- 核電經驗反饋培訓課件
- 環(huán)境影響評價技術方案
- 部隊預防醉駕
- 皖醫(yī)大兒科學習題及答案
- 急診科護士的病人投訴處理與糾紛解決
- 幼兒園建筑設計與建筑信息模型應用
- 中外設計史授課教案
評論
0/150
提交評論