版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第2章示例驅(qū)動(dòng)的C語言語法元素概覽
本章對(duì)C語言的基本語法元素做簡要概覽,包括變量與表達(dá)式、算術(shù)運(yùn)算、控制流、數(shù)組、函數(shù)、基本輸入/輸出等,讓讀者對(duì)C語言有一個(gè)整體的感性認(rèn)識(shí),能模仿編寫簡單的小程序。但是,本章我們并不想完整地或很精確地對(duì)C語言進(jìn)行介紹。2.1變量與表達(dá)式[例2-1]#include<stdio.h>#include<math.h>/*打印一個(gè)周期內(nèi),三角函數(shù)的離散值表*/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;}函數(shù)的離散值表圖2-1
[例2-1]的功能是打印出常見三角函數(shù)
在一個(gè)周期(0?-360?)內(nèi)變化,其對(duì)應(yīng)的函數(shù)離散值表,如圖2-1所示。我們可以根據(jù)該表擬合出三角函數(shù)的三角曲線。分析:上述程序的第一、二行:
#include<stdio.h>#include<math.h>
叫做編譯預(yù)處理命令,用于告訴編譯器在本程序中包含標(biāo)準(zhǔn)輸入/輸出庫以及其他庫函數(shù)的有關(guān)信息。許多C源程序的開始處都包含相似的行。
注釋行的下面是main函數(shù),在所有C語言的程序中,必須有且僅有一個(gè)main函數(shù),所有程序的運(yùn)行都是從main函數(shù)開始,到main結(jié)束,其中“main”是函數(shù)的名稱,稱為主函數(shù)。
為了實(shí)現(xiàn)程序的功能,我們必須定義一些變量來存儲(chǔ)數(shù)據(jù),在C語言中,所有變量都必須先定義后使用,定義用于聲明變量的屬性,它由一個(gè)類型名與若干所要定義的變量名組成,例如:
intx; doubley;intstart,end,step;
其中,“int”,“double”是系統(tǒng)已經(jīng)定義好的關(guān)鍵字。所謂關(guān)鍵字是指系統(tǒng)事先定義好的代表一些特殊含義的名稱?!癷nt”代表整數(shù)的類型,“double”代表浮點(diǎn)數(shù)類型。
接下來要賦予這些變量具體的數(shù)據(jù),在程序[2-1]中,以4個(gè)賦值語句(也可稱為賦值表達(dá)式)開始,為變量設(shè)置初值。
start=0;end=360;step=30;x=start;
總體來看,C語言中的表達(dá)式事實(shí)上就是常量和變量通過各種C語言允許的運(yùn)算符號(hào)進(jìn)行連接。由例子程序可見,C語言的語句必須以“;”結(jié)束。
2.2分支語句2.2.1if語句[例2-2](程序見課本P9)程序的功能是統(tǒng)計(jì)C語言程序設(shè)計(jì)課程期末考試各成績段的人數(shù),統(tǒng)計(jì)分成下述幾檔:90~100 A80~89 B70~79 C60~69 D0~59 E要求輸出各成績段的具體人數(shù)。
在C語言程序中經(jīng)常會(huì)采用如下模式來表示多路判定:
if(條件1)
語句1;elseif(條件2)
語句2;??else
語句n;
這就是C語言中的if語句。在if語句中,各個(gè)條件從前往后依次求值,直到滿足某個(gè)條件,這時(shí)執(zhí)行對(duì)應(yīng)的語句部分,語句執(zhí)行完成后,整個(gè)if結(jié)構(gòu)結(jié)束。
注意,其中語句1~n中的任何語句都可以是括在花括號(hào)中的若干個(gè)語句。如果其中沒有一個(gè)條件滿足,那么就執(zhí)行位于最后一個(gè)else之后的語句。如果沒有最后一個(gè)else及對(duì)應(yīng)的語句,那么這個(gè)if構(gòu)造就不執(zhí)行任何動(dòng)作。在第一個(gè)if與最后一個(gè)else之間可以有0個(gè)或多個(gè)
elseif(條件語句)2.2.2switch語句
C語言中的多路分支,也可以用switch語句完成(參閱課本P11例2-3)。
switch語句的通用用法如下:
switch(表達(dá)式){
case表達(dá)式1:語句1;case表達(dá)式2:語句2;….case表達(dá)式n:語句n;default:語句n+1;
}2.3循環(huán)語句2.3.1while循環(huán)語句
以[例2-1]中的以下語句為例:
while(x<=end)
{ ...} while循環(huán)語句的執(zhí)行步驟如下:首先測試圓括號(hào)中的條件。如果條件為真(x小于等于end),則執(zhí)行循環(huán)體(括在花括號(hào)中的三個(gè)語句)。然后再重新測試該條件,如果為真(條件仍然成立),則再次執(zhí)行該循環(huán)體。當(dāng)該條件測試為假(x大于end)時(shí),循環(huán)結(jié)束,繼續(xù)執(zhí)行跟在該循環(huán)語句之后的下一個(gè)語句。
while語句的循環(huán)體可以是用花括號(hào)括住的一個(gè)或多個(gè)語句,也可以是不用花括號(hào)括住的單個(gè)語句,例如:
在這兩種情況下,我們總是把由while控制的語句向里縮入一個(gè)制表位(在書中以四個(gè)空格表示),這樣就可以很容易地看出循環(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](打印一個(gè)周期內(nèi)三角函數(shù)離散值表)中的循環(huán)控制用for語句來實(shí)現(xiàn),改寫為[例2-4],描述如下:[例2-4]#include<stdio.h>#include<math.h>/*打印一個(gè)周期內(nèi),三角函數(shù)的離散值表*/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語句比較,就會(huì)發(fā)現(xiàn)其操作要更清楚一些。for循環(huán)的通用語法如下:
在圓括號(hào)內(nèi)共包含三個(gè)部分,它們之間用分號(hào)隔開。for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
循環(huán)體語句;
示例程序中的表達(dá)式1為x=0是初始化部分,僅在進(jìn)入循環(huán)前執(zhí)行一次。
然后計(jì)算表示式2,這里表達(dá)式2為x<=360,用于控制循環(huán)的條件測試部分:這個(gè)條件要進(jìn)行求值,如果所求得的值為真,那么就執(zhí)行循環(huán)體。循環(huán)體執(zhí)行完,再執(zhí)行表達(dá)式3:x=x+30加步長,并再次對(duì)條件表達(dá)式2求值。
如果求得的表達(dá)式為真,繼續(xù)執(zhí)行循環(huán)體,一旦求得的條件值為假,那么就終止循環(huán)的執(zhí)行。像while語句一樣,for循環(huán)語句的循環(huán)體可以是單個(gè)語句,也可以是用花括號(hào)括住的一組語句。
初始化部分(表達(dá)式1)、條件部分(表達(dá)式2)與加步長部分(表達(dá)式3)均可以是任何表達(dá)式。
[例2-4]中的程序把3.1415926、360、30等常數(shù)直接寫在了程序中,這并不是一種好的習(xí)慣,原因有:
1)這些純粹的數(shù)沒有任何的表征意義,幾乎不能給以后可能要閱讀該程序的人提供什么信息;
2)使程序的修改變得困難,因?yàn)槿绻獙⒔K止溫度和步長修改的話,必須修改程序中的所有的360和30。2.4符號(hào)常量
解決上述問題的一種方法是賦予它們有意義的名字。#define指令就用于把符號(hào)名字(或稱為符號(hào)常量)定義為一特定的字符串:
此后,所有在程序中出現(xiàn)的在#define中定義的名字,如果該名字既沒有用引號(hào)括起來,也不是其他名字的一部分,都用所對(duì)應(yīng)的替換文本替換。這里的名字與普通變量名有相同的形式:它們都是以字母或者下劃線打頭的字母或數(shù)字序列。替換文本可以是任何字符序列,而不僅限于數(shù)字。#define名字替換文本[例2-5]#include<stdio.h>#include<math.h>/*打印一個(gè)周期內(nèi),余弦函數(shù)的離散值表*/#definePI3.1415926#defineSTART0#defineEND360#defineSTEP30intmain(){ intx; doubley; for(x=START;x<=END;x=x+STEP) { y=cos(x*PI/180);/*調(diào)用cos函數(shù)計(jì)算余弦值*/ printf("%3d\t%9.6f\n",x,y);/*調(diào)用printf函數(shù)輸出結(jié)果*/ } return0;}
上例是用符號(hào)常量打印三角函數(shù)的離散值表。這里,START、END、PI與STEP稱為符號(hào)常量,而不是變量,故不需要出現(xiàn)在定義中。這樣,如果需要提高函數(shù)曲線的擬合精度,就只需要縮小STEP并給定更精確的PI值即可。符號(hào)常量名通常用大寫字母拼寫,這樣就可以很容易與用小寫字母拼寫的變量名相區(qū)別。注意:#define也是一條編譯預(yù)處理的命令,因此該行的末尾是沒有分號(hào)的。
2.5輸入輸出[例2-6]用scanf函數(shù)實(shí)現(xiàn)的三角函數(shù)離散值表#include<stdio.h>#include<math.h>/*打印一個(gè)周期內(nèi),余弦函數(shù)的離散值表*/#definePI3.1415926intmain(){ intx; doubley; intstart,end,step; printf("請(qǐng)輸入角度的下限、上限和步長:\n"); scanf("%d%d%d",&start,&end,&step); for(x=start;x<=end;x=x+step) { y=cos(x*PI/180); /*調(diào)用cos函數(shù)計(jì)算余弦值*/ printf("%3d\t%9.6f\n",x,y); /*調(diào)用printf函數(shù)輸出結(jié)果*/ }}
其中行
就是負(fù)責(zé)從鍵盤輸入數(shù)據(jù)的函數(shù),其使用方法與printf函數(shù)基本相同,不同點(diǎn)主要體現(xiàn)在第二個(gè)參數(shù)以后的參數(shù),其前面都有符號(hào)
“&”,表示取這些變量的地址。scanf("%d%d%d",&start,&end,&step);
在C語言中,當(dāng)我們要定義一組類型相同的數(shù)據(jù)的時(shí)候,可以通過定義數(shù)組的方式來定義這些元素,通過數(shù)組名和下標(biāo)來引用某一個(gè)元素,數(shù)組的下標(biāo)總是從0開始,在[例2-2]中,這個(gè)數(shù)組的6個(gè)元素分別是grade[0]、grade[1]、?、grade[5]。這一點(diǎn)在分別用于初始化和打印數(shù)組的兩個(gè)for循環(huán)語句中得到了反映。
C語言中數(shù)組不能當(dāng)作一個(gè)整體來訪問,必須通過下標(biāo)依次訪問,每個(gè)元素基本等價(jià)于一個(gè)同類型的普通變量。下標(biāo)可以是任何整數(shù)表達(dá)式,包括整數(shù)變量(如i)與整數(shù)常量。2.6數(shù)組
C語言的程序是由一個(gè)個(gè)的函數(shù)構(gòu)成的,除了有且必須有的main主函數(shù)以外,用戶也可以自己定義函數(shù)。此外,C語言的編譯系統(tǒng)還提供了一些庫函數(shù)。在上述的例子中,我們所使用的函數(shù)(如cos、printf與scanf等)都是函數(shù)庫為我們提供的。接下來,我們看看怎樣編寫自己的函數(shù)。2.7函數(shù)
我們通過編寫一個(gè)求階乘的函數(shù)factorial(n)來說明定義函數(shù)的方法。
函數(shù)定義的一般形式為:返回值類型函數(shù)名(可能有的參數(shù)定義){
申明和定義序列 語句序列}例[2-7]計(jì)算整數(shù)0~9的階乘。#include<stdio.h>intfactorial(intn); /*聲明factorial函數(shù)*/intmain(){ inti; for(i=0;i<10;++i) printf("%d的階乘是:%d\n",i,factorial(i)); /*調(diào)用factorial函數(shù)計(jì)算i的階乘*/ return0;}/*factorial:n的階乘,n>=0*/intfactorial(intn){ inti,p; p=1; for(i=1;i<=n;++i) p=p*i; returnp;}
在我們的例子中,factorial函數(shù)定義的第一行:intfactorial(intn),申明參數(shù)的類型與名字以及該函數(shù)返回的結(jié)果的類型。factorial的參數(shù)名只能在factorial內(nèi)部使用,在其他函數(shù)中不可見:因此在其他函數(shù)中可以使用與之相同的參數(shù)名而不會(huì)發(fā)生沖突。一般而言,把在函數(shù)定義中用圓括號(hào)括住的表中命名的變量叫做形式參數(shù)。
factorial函數(shù)計(jì)算得到的值由return語句返回給main函數(shù)。關(guān)鍵詞return可以后跟任何表達(dá)式:
函數(shù)不一定都返回一個(gè)值。return表達(dá)式;對(duì)函數(shù)的使用,叫函數(shù)調(diào)用。main主程序在如下命令行中對(duì)factorial函數(shù)進(jìn)行了調(diào)用:
printf("%d的階乘是:%d\n",i,factorial(i));
調(diào)用factorial函數(shù)時(shí),傳送了一個(gè)變量i給它,一般把函數(shù)調(diào)用中與參數(shù)對(duì)應(yīng)的值或變量叫做實(shí)際參數(shù),如變量i,由實(shí)際參數(shù)傳遞值給形式參數(shù)。而factorial函數(shù)則在調(diào)用執(zhí)行完時(shí)返回一個(gè)要按一定格式打印的整數(shù)。在表達(dá)式中,factorial(i)就像i一樣是一個(gè)整數(shù)。注意:這個(gè)函數(shù)不是一個(gè)實(shí)用的階乘函數(shù),它只能用于處理比較小的整數(shù)的階乘,因?yàn)槿绻箅A乘的整數(shù)比較大,使用該方法很容易越界,導(dǎo)致程序沒辦法獲得正確的結(jié)果。希望讀者讀完整本書以后能為該問題找到正確的解決方法。2.8算法2.8.1算法概念程序設(shè)計(jì)的關(guān)鍵之一,是解題的方法與步驟,是算法。學(xué)習(xí)高級(jí)語言的重點(diǎn)和難點(diǎn)之一就是掌握分析問題、解決問題的方法,鍛煉分析、分解,最終歸納整理出算法的能力。
與之相對(duì)應(yīng),具體語言,如C語言的語法是工具,是算法的一個(gè)具體實(shí)現(xiàn)。所以在高級(jí)語言的學(xué)習(xí)中,一方面應(yīng)熟練掌握該語言的語法,因?yàn)樗撬惴▽?shí)現(xiàn)的基礎(chǔ),另一方面必須認(rèn)識(shí)到算法的重要性,加強(qiáng)思維訓(xùn)練,尋找問題的最優(yōu)解決方法,以寫出高質(zhì)量的程序。算法及其描述—算法
著名計(jì)算機(jī)科學(xué)家沃思提出一個(gè)公式:
數(shù)據(jù)結(jié)構(gòu)+算法=程序
數(shù)據(jù)的組織及存儲(chǔ)方式對(duì)數(shù)據(jù)運(yùn)算的描述計(jì)算機(jī)解決問題的方法和步驟,就是計(jì)算機(jī)解題的算法
[例2-8]
設(shè)有一物體從高空墜下,每次落地后都反彈到原高度2/3差一米的地方,現(xiàn)在測得第9次反
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025下半年四川綿陽市游仙區(qū)人力資源和社會(huì)保障局事業(yè)單位招聘工作人員歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年江蘇省無錫宜興事業(yè)單位招聘91人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川省廣元市昭化區(qū)部分事業(yè)單位考試招聘15人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 金融服務(wù)解決方案招投標(biāo)模板
- 棚戶區(qū)管網(wǎng)改造工程合同
- 寵物行業(yè)招投標(biāo)管理規(guī)定
- 大數(shù)據(jù)平臺(tái)建設(shè)項(xiàng)目招投標(biāo)協(xié)議
- 高速公路服務(wù)區(qū)停電應(yīng)急預(yù)案
- 2024南坊公務(wù)員樓房買賣合同含附屬設(shè)施裝修及車位購買優(yōu)惠3篇
- 2024年度二零二四年創(chuàng)業(yè)投資輔導(dǎo)與融資服務(wù)合同3篇
- 期末試題-2024-2025學(xué)年人教PEP版英語六年級(jí)上冊 (含答案)
- 2020年甘肅公務(wù)員考試申論試題(省級(jí)卷)
- 海南省??谑邪四昙?jí)物理上學(xué)期期末考試試題
- 2024年煙草知識(shí)考試題庫
- 病例報(bào)告表(樣板)
- 常州大學(xué)《數(shù)據(jù)采集與清洗》2021-2022學(xué)年期末試卷
- 餐飲服務(wù)電子教案 學(xué)習(xí)任務(wù)4 雞尾酒調(diào)制
- 定金協(xié)議書范文范本簡單一點(diǎn)
- 幼兒園教育活動(dòng)設(shè)計(jì)與指導(dǎo)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2024秋期國家開放大學(xué)《政治學(xué)原理》一平臺(tái)在線形考(形考任務(wù)四)試題及答案
- TSG51-2023起重機(jī)械安全技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論