版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C語言程式設(shè)計(jì)教程第一講C語言概述1.1C語言發(fā)展概述1.2C語言的特點(diǎn)1.3簡單的C語言程式1.4C程式上機(jī)步驟2.1常量和變數(shù)1.1C語言發(fā)展概述C語言是在1972年至1973年間由美國的貝爾實(shí)驗(yàn)室的M.D.Ritchie和K.Thompson以及英國劍橋大學(xué)的M.Richards等為描述和實(shí)現(xiàn)UNIX操作系統(tǒng)而設(shè)計(jì)的。最初的C語言是附屬於UNIX的操作系統(tǒng)環(huán)境,而它的產(chǎn)生卻可以更好地描述UNIX操作系統(tǒng)。時(shí)至今日,C語言已獨(dú)立於UNIX操作系統(tǒng)。它已成為微型、小型、中型、大型和超大型(巨型)電腦通用的一種程式設(shè)計(jì)語言。隨著C語言的不斷發(fā)展、應(yīng)用和普及,目前,C語言已經(jīng)能夠在多種操作系統(tǒng)下運(yùn)行,實(shí)用的C語言編譯系統(tǒng)種類繁多,如MicrosoftC、TurboC等。1.2C語言的特點(diǎn)C語言能夠成為目前廣泛的高級(jí)設(shè)計(jì)語言之一,完全是由其語言特點(diǎn)決定的。(1)語言基本組成部分緊湊簡潔。(2)C語言運(yùn)算符豐富,表達(dá)能力強(qiáng)。(3)C語言數(shù)據(jù)結(jié)構(gòu)豐富,結(jié)構(gòu)化好。(4)具有結(jié)構(gòu)化的控制語句。(5)C語言提供了某些接近組合語言的功能。(6)C語言程式所生成的目標(biāo)代碼品質(zhì)高。(7)C語言程式可移植性好。C語言的弱點(diǎn):(1)運(yùn)算符的優(yōu)先順序較複雜,不容易記憶(2)C語言的語法限制不太嚴(yán)格,一定程度上降低了某些安全性。例1.3編寫計(jì)算長為a,寬為b的長方形面積s的C程式。/*filenamea3.c*/#include“stdio.h”main(){inta,b,s;/*定義a,b,s三個(gè)整形變數(shù)*/printf(“a,b=?”);scanf(“%d,%d”,&a,&b);/*讀入兩個(gè)整數(shù),存入變數(shù)a和b中*/s=a*b;/*計(jì)算長方形的面積s的值*/printf(“s=%d\n”,s);/*輸出面積s的值*/}編譯a3.c程式,並執(zhí)行檔案名為a3.exe,執(zhí)行結(jié)果為:C:\>a3a,b=?20,10S=2001.3簡單的C語言程式。1.3.1C語言程式的構(gòu)成例1.1編寫一個(gè)C語言程式,顯示一個(gè)字串“goodmorning,class!”。/*filenamea1.c*/main(){printf(“goodmorning,class!\n”);}編譯a1.c程式,並執(zhí)行檔a1.exe,執(zhí)行結(jié)果為C:>a1Goodmorning,class!(加下劃線部分為需輸入內(nèi)容,下同)例1.2將兩個(gè)整數(shù)之和顯示出來。/*filenamea2.c*/main(){inta,b,sum;/*定義a,b,sum三個(gè)整形變數(shù)*/a=100;b=200;/*給變數(shù)a和b賦值*/sum=a+b;/*計(jì)算a和b和,存入變數(shù)sum中*/printf(“sum=%d\n”,sum);/*輸出sum的值*/}編譯a2.c程式,並執(zhí)行檔a2.exe,執(zhí)行結(jié)果為C:\>a2Sum=3001.3.2C語言程式的特點(diǎn)(1)C程式是由函數(shù)構(gòu)成的,其中至少包括一個(gè)函數(shù)main()。(2)函數(shù)體是由左右花括弧{}括起來的部分。(3)C語言中的每個(gè)基本語句都以“;”結(jié)束。(4)C語言書寫格式自由,一行內(nèi)可以寫一個(gè)語句,也可以寫多個(gè)語句。(5)#include語句是編譯預(yù)處理語句,其作用是將由雙引號(hào)或尖括弧括起來的檔內(nèi)容讀入該語句位置處。對(duì)程式說明:(1)可用/*…*/對(duì)C程式中的任何部分作注釋。(2)C語言中所有變數(shù)都必須先定義類型,然後再使用。(3)一個(gè)C語言程式通過函數(shù)之間的相互調(diào)用來實(shí)現(xiàn)相應(yīng)的功能。即可以是系統(tǒng)提供的庫函數(shù),也可以是根據(jù)需要自己定義的函數(shù)。1.4C語言上機(jī)步驟運(yùn)行環(huán)境:DOC操作系統(tǒng)下的TurboC編輯編譯連接執(zhí)行開始結(jié)束有錯(cuò)?有錯(cuò)?.C原始檔案.OBJ目標(biāo)檔.EXE可執(zhí)行檔是是否否1.4.1C程式上機(jī)步驟1.編輯:在TurboC環(huán)境下。將C語言根源程式通過鍵盤輸入到電腦中,並以檔形式存盤,根源程式都是以.C為擴(kuò)展名。2.編譯:通過編輯程式將根源程式輸入到電腦後,需要經(jīng)過C語言編譯器將其生成目標(biāo)程式。得到的目標(biāo)檔都是以.OBJ為檔擴(kuò)展名。3.連接:經(jīng)過編譯後生成的目標(biāo)檔需經(jīng)過連接後才能生成可執(zhí)行代碼。其擴(kuò)展名是.EXE。所謂連接,是將目標(biāo)檔和庫函數(shù)或其他目標(biāo)程式連接成可執(zhí)行的目標(biāo)程式。4.執(zhí)行:連接後根源程式的目標(biāo)程式就是可執(zhí)行檔了。在DOC系統(tǒng)下,只要鍵入可執(zhí)行檔案名,按回車鍵就可以了。1.4.2TurboC系統(tǒng)菜單主菜單資訊窗編輯窗快速參考行檔操作編輯運(yùn)行編譯專案檔選項(xiàng)調(diào)試中斷/觀察1.TurboC的主螢?zāi)缓椭鞑藛喂δ?.檔菜單及功能裝入一個(gè)新檔裝入檔列表中的檔新建存盤另存為顯示檔列表顯示目錄暫時(shí)退出退出2.1常量和變數(shù)2.1.1常量:在程式運(yùn)行過程中其值不能被改變的量。2.1.2變數(shù):在程式運(yùn)行過程中其值可以被改變的量。識(shí)別字:用來標(biāo)識(shí)變數(shù)名、符號(hào)常量名、函數(shù)名、數(shù)組名、類型名、檔案名的有效字元序列。1.識(shí)別字的有關(guān)規(guī)定:(1)由英文字母、數(shù)字、下劃線組成,且第一個(gè)字元必須是字母或下劃線,一般不超過8個(gè)字元;(2)大小寫字母的含義不同。(3)不能使用C語言中的關(guān)鍵字做識(shí)別字,(4)用戶取名時(shí),應(yīng)當(dāng)儘量遵循“簡潔明瞭”和見名知意的原則。2.變數(shù)名的有關(guān)規(guī)定:(1)使用變數(shù)名前,一定先定認(rèn),後使用,否則不能做為變數(shù)名。(2)每一個(gè)變數(shù)屬於一種類型,便於在編譯時(shí)據(jù)此檢查該變數(shù)所進(jìn)行的運(yùn)算是否合法。(3)變數(shù)名的定義:存儲(chǔ)屬性、數(shù)據(jù)類型、變數(shù)名表3.數(shù)據(jù)類型2.2整型數(shù)據(jù)2.2.1整型常量(1)十進(jìn)位整數(shù):數(shù)碼直接開頭的十進(jìn)位數(shù)。如1234,-234。(2)八進(jìn)制整數(shù):以0開頭的常量是八進(jìn)制數(shù)。如011=(11)8(3)十六進(jìn)制整數(shù):以0x開頭的數(shù)是十六進(jìn)制。如0x123即(123)16例2.1三種進(jìn)製錶示方法的轉(zhuǎn)換根源程式a1.cmain(){Intx=1246,y=01246,z=0x1246;Printf(“%d,%d,%d\n”,x,y,z);Printf(“%o,%o,%o\n”,x,y,z);Printf(“%x,%x,%x\n”,x,y,z);}C:\>a11246,678,46782336,1246,111064de,2a6,12462.2.2整型變數(shù)原則:使用變數(shù)前,先定義,後使用。(1)基本型:用int表示;(2)短整型:用shortint或short表示;(3)長整型:用longint或long表示;(4)無符號(hào)型:無符號(hào)整型:用unsignedint或unsigned表示;無符號(hào)短整型:用unsignedshortint或unsignedshort表示;無符號(hào)長整型:用unsignedlongint或unsignedlong表示;2.2.3整型變數(shù)使用
不同的整型數(shù)據(jù),應(yīng)根據(jù)其特性和取值範(fàn)圍,將其定義成不同類型的整型變數(shù)。例2.2不同類型的數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算。根源程式a2.cMain(){Inta,b,s1,s2;Unsignedx;a=10;b=-30;x=20;S1=a+x;s2=b+x;Printf(“a+x=%d,b+x=%d\n”,s1,s2);}C:\>a2運(yùn)行結(jié)果為a+x=30,b+x=-102.2.3整型變數(shù)使用
不同的整型數(shù)據(jù),應(yīng)根據(jù)其特性和取值範(fàn)圍,將其定義成不同類型的整型變數(shù)。例2.3整型數(shù)據(jù)各類型所能表示的範(fàn)圍根源程式a3.cmain(){inta,b;longc,d;unsignede,f;a=32767;b=1;c=2147483647;d=1;e=65535;f=1;Printf(“int:%d,%d,\n”,a,a+b);Printf(“l(fā)ong:%d,%ld\n”,c,c+d);Printf(“unsigned:%u,%u\n”,e,e+f);}C:\>a3運(yùn)行結(jié)果為Int:372767,-32768Long:2147483647,-2147483648Unsigned:65535,02.3字元型數(shù)據(jù)2.3.1字元型常量字元常量是由一對(duì)單引號(hào)括起來的單個(gè)字元構(gòu)成,例如:‘A’,‘b’,’2’,’%’’;’等。一個(gè)字元型常量是該字元集中對(duì)應(yīng)的編碼值:‘0’~‘9’的ASCⅡ編碼值是48~57。顯然‘0’與數(shù)字0是不同的。2.3.2字元型變數(shù)字元型數(shù)據(jù)分為兩類:一般字元類型(char)和無符號(hào)字元類型(unsignedchar)。例2.4字元型數(shù)據(jù)與整型數(shù)據(jù)可以通用根源程式a3.cMain(){charc1,c2;Printf(“%c,%c\n”,c1,c2);Printf(“%d,%d\n”,c1,c2);}C:\>a4運(yùn)行結(jié)果為A,B65,662.3.3字串常量
字串常量是由一對(duì)雙引號(hào)括起來的字元序列,例:“fsdf”,”A”等。字串常量中不能直接包括單引號(hào)、雙引號(hào)和反斜杠“\“。字串常量與字元常量的區(qū)別:(1)字串常量是用雙引號(hào)括起來的字元序列。(2)字串常量有串尾標(biāo)記”\0”;(3)字串常量允許擴(kuò)展表示法;(4)C語言中沒有專門的字串變數(shù)。字串如果需要存放在變數(shù)中,需要用字符型數(shù)組來存放。注意:不要將單個(gè)字元組成的字串常量與字元常量混淆?!產(chǎn)’為字串常量,不能把一個(gè)字串常量賦給一個(gè)字元變數(shù)。例如:下麵的用法都是錯(cuò)誤的:Charc1,c2;C1=“a”C2=“CHINA”;字元‘\0’由系統(tǒng)自動(dòng)加入到每個(gè)字串的結(jié)束處,不必由編程人員加入。字串“CHINA”在內(nèi)存中的存放形式如下圖,其長度是六個(gè)位元組,而不是5個(gè)位元組。字元‘\0’所對(duì)應(yīng)的ASCⅡ值為0,即“空”字元。2.4浮點(diǎn)型數(shù)據(jù)2.4.1浮點(diǎn)型常量浮點(diǎn)型常量有兩種表示形式。十進(jìn)位數(shù)形式它是由數(shù)字和小數(shù)組成,如:3.14159,-7.2,8.9指數(shù)法形式如:180000.0用指數(shù)法可表示為1.8e5,1.8稱為尾數(shù),5稱為指數(shù)。
0.00123用指數(shù)法可表示為1.23e-3注意:(1)字母e或E之前(即尾數(shù)部分)必須是有數(shù)字的。(2)e或E後面的指數(shù)部分必須是整數(shù)。如:e-3,9.8e3.1,e5都是不合法的。2.4.2浮點(diǎn)型變數(shù)(實(shí)型變數(shù))
把帶有小數(shù)點(diǎn)的數(shù)稱為浮點(diǎn)數(shù),或?qū)嵭蛿?shù)。浮點(diǎn)型變數(shù)又稱為實(shí)型變數(shù),按能表示數(shù)的精度,分為:單精確度浮點(diǎn)型變數(shù)和雙精度浮點(diǎn)型變數(shù),其定認(rèn)方法如下:floata,b;/*單精確度變數(shù)的定義*/doublec,d;/*雙精度變數(shù)的定義*/單精確度:占4個(gè)位元組,有效位為7位,數(shù)值範(fàn)圍為10-37~1038雙精度:占8個(gè)位元組,有效位為15~16位,數(shù)值範(fàn)圍約為10-307~10308浮點(diǎn)型常量不存在單精確度型和雙精度型之分。2.6運(yùn)算符及運(yùn)算式C語言運(yùn)算符可以分為:算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)係運(yùn)算符、位運(yùn)算符、賦值運(yùn)算符。2.6.1算術(shù)運(yùn)算符和算術(shù)運(yùn)算式1.算術(shù)運(yùn)算符:加、減、乘、除及取模即:+,-,*,/,%來表示。C語言規(guī)定:(1)模運(yùn)算符%,僅用於整型變數(shù)或整型常量。(2)優(yōu)先順序:一個(gè)運(yùn)算式中如有多個(gè)運(yùn)算符,則計(jì)算先後次序?yàn)橄鄳?yīng)運(yùn)算符的優(yōu)先順序高的優(yōu)先。乘、除、模優(yōu)先順序高於加、減的優(yōu)先順序。(3)結(jié)合方向:是一個(gè)運(yùn)算對(duì)象兩側(cè)的運(yùn)算符的優(yōu)先順序別相同時(shí),應(yīng)遵循的處理規(guī)則。算術(shù)運(yùn)算符的結(jié)合方向是從左至右;賦值運(yùn)算符的結(jié)合方向是從右至左。算術(shù)運(yùn)算式:由算術(shù)運(yùn)算符、括弧以及操作對(duì)象組成的符號(hào)C語言語法規(guī)則的運(yùn)算式稱為算術(shù)運(yùn)算式。2.6.2賦值語句1.賦值運(yùn)算符語言的賦值運(yùn)算符是“=”,它的作用是賦值運(yùn)算符右邊運(yùn)算式的值賦給其左邊的變數(shù)。例如:a=10,x=a+5,前者是把常量10賦給變數(shù)a,後者是將運(yùn)算式a+5的值賦給變數(shù)x.注意:如果“=”兩側(cè)的類型不一致,在賦值時(shí)要進(jìn)行類型轉(zhuǎn)換。例如a=b,執(zhí)行該語句時(shí),b的結(jié)果轉(zhuǎn)換為a的類型後才能進(jìn)行賦值運(yùn)算。2.複合賦值運(yùn)算符C語言允許在賦值運(yùn)算符“=“之前加上其他運(yùn)算符,以構(gòu)成其複合運(yùn)算符。複合運(yùn)算符多數(shù)為雙目。複合運(yùn)算符有:+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=例:a+=2等價(jià)於a=a+2x*=y+5等價(jià)於x=x*(y+5)x%=8等價(jià)於x=x%8賦值運(yùn)算符都是自右向左執(zhí)行。3.賦值語句與賦值運(yùn)算式賦值語句最簡單的形式是:<變數(shù)>=<運(yùn)算式>;功能:是賦值運(yùn)算符右邊的“運(yùn)算式”的值賦給左邊的變數(shù)。賦值運(yùn)算式也可以包含複合的賦值運(yùn)算符,例:如果a=10,運(yùn)算式a+=a-=a*a的值為-180。其步驟為:(1)先進(jìn)行a-=a*a的計(jì)算,它相當(dāng)於a=a-a*a=10-10*10=-90.(2)再進(jìn)行a+=-90的計(jì)算,它相當(dāng)於a=a+(-90)=-90-90=-180.4.自增自減運(yùn)算符i++(或i--)表示在使用該運(yùn)算式值之後將i值加1(或減1)。++i(或--i)表示在使用該運(yùn)算式值之前將i值加1(或減1)。說明:(1)++和--僅適用於變數(shù),不能用於常量或運(yùn)算式。(2)++和--運(yùn)算符的結(jié)合方向是“至右向左”。Main(){inta=100;printf(“a++=%d\n”,a++);printf(“++a=%d\n”,++a);printf(“a--=%d\n”,a--);printf(“--a=%d\n”,--a);}輸出結(jié)果:a++=100++a=102a--=102--a=1002.6.3關(guān)係運(yùn)算符和關(guān)係運(yùn)算式1.關(guān)係運(yùn)算符關(guān)係運(yùn)算符均為兩目運(yùn)算符。共有六種:>大於<小於>=大於等於<=小於等於==
等於!=
不等於關(guān)係運(yùn)算符要求兩個(gè)運(yùn)算元是同一種數(shù)據(jù)類型,其結(jié)果為一邏輯值,即關(guān)係成立時(shí),其值為真(true),用非0值表示;關(guān)係不成立時(shí),其值為假(false),用0表示。關(guān)係運(yùn)算符的優(yōu)先順序借低於算術(shù)運(yùn)算符,關(guān)係運(yùn)算符==和!=低於前四種運(yùn)算符,並且結(jié)合方向均為自左至右。2.關(guān)係運(yùn)算式由關(guān)係運(yùn)算符將兩個(gè)運(yùn)算式連接起來的有意義的式子稱為關(guān)係運(yùn)算式。如:a+b<c-6先進(jìn)行a+b和c-6兩個(gè)算術(shù)運(yùn)算式的運(yùn)算,得到兩個(gè)值後再進(jìn)行比較,從現(xiàn)而求出關(guān)係運(yùn)算式的值。其值為0或非0。關(guān)係運(yùn)算式的值是一個(gè)邏輯值,即“真”或“假”。用1表示“真”,用0表示“假”。如:a=4,b=1,C=a>b;c的值為1,若a=1,b=8,x=a>b;x的值為0。2.6.4邏輯運(yùn)算符和邏輯運(yùn)算式1.邏輯運(yùn)算符邏輯運(yùn)算符有“&&“(邏輯與)、”||“(邏輯或)和”!“(邏輯非)三種。邏輯運(yùn)算符的操作對(duì)象為零或非零整數(shù)值,見表2.4.表2.4邏輯運(yùn)算規(guī)則數(shù)據(jù)a數(shù)據(jù)ba&&ba||b!a!bTTTTFFTFFTFTFTFTTFFFFFTT邏輯運(yùn)算式由邏輯運(yùn)算符和其操作對(duì)象組成運(yùn)算式稱為邏輯運(yùn)算式。2.6.5位運(yùn)算符位(bit)運(yùn)算是C語言的一大特色,可直接對(duì)構(gòu)成記憶體的基本單位“位元組”(byte)進(jìn)行按位操作。按位與(&)操作規(guī)則:參加運(yùn)算的兩個(gè)運(yùn)算量,如果兩個(gè)相應(yīng)的位均為1,則該位的結(jié)果為1,否則為0,見表2.5
表2.5接位與運(yùn)算量10101運(yùn)算量20011結(jié)果0001例如:(1)清零。(2)取一個(gè)數(shù)中的某些位。高位清零:
0010110110011100&00000000111111110000000010011100低位清零:
0010110110011100
&11111111000000000010110100000000按位或(|)操作規(guī)則:參加運(yùn)算的兩個(gè)運(yùn)算量,其相應(yīng)的位中只有一個(gè)為1,則該位的結(jié)果為1,否則為0。表2.6按位或運(yùn)算量10101運(yùn)算量20011結(jié)果0111例如:(1)01000001
|0010100101101001(2)01000001
|0000000001000001(3)01000011
|1111111111111111(4)01000001
|1011111011111111例如:將某一個(gè)數(shù)的某些位置為1。一個(gè)整數(shù)a,要將其低位元組全置為1,即低位元組為11111111,可將該數(shù)與255(十六進(jìn)制為FF,二進(jìn)位為11111111)按按位或即可。按位異或(^)操作規(guī)則:參加運(yùn)算的兩個(gè)運(yùn)算量,當(dāng)相應(yīng)位相同時(shí),其結(jié)果在該位為0,相應(yīng)位不同時(shí),其結(jié)果在該位為1,即按位相加,但不進(jìn)位。表2.7 按位異或運(yùn)算量10101運(yùn)算量20011結(jié)果0110(1)使指定位翻轉(zhuǎn)。即由1變?yōu)?,由0變?yōu)?。例:
01100110^0000111101101001
(2)不使用臨時(shí)變數(shù),交換兩個(gè)值。方法為:若有兩個(gè)數(shù)a和b,通過下麵的賦值語言可將a和b的值互換:a=a^b;b=b^a;b=a^b;4.按位求反(~)操作規(guī)則:運(yùn)算符~是一個(gè)單目運(yùn)算符,用來對(duì)一個(gè)數(shù)二進(jìn)位表示按位求反,即瘵0變成1,將1變成0。表2.8按位求反運(yùn)算量01結(jié)果10例:~0110100110010110將一個(gè)數(shù)的某些位變?yōu)?。方法是:瘵該數(shù)a與~b按位求與,此處的b為這樣的一個(gè)數(shù),即要求a中變?yōu)?的那些位均為1,其餘位均為0。如要將a的最低位變?yōu)?,則可使用下述運(yùn)算式實(shí)現(xiàn)。A=a&~15.左移(<<)操作規(guī)則:將一個(gè)數(shù)的各二進(jìn)位位全部左移若干位,左移後,右邊的這些位用0填補(bǔ),左邊移出的位捨棄不用。例:a=a<<2;若a=15,即二進(jìn)位00001111,左移兩位後變?yōu)?0111100。若再向左移4位,則變?yōu)?1000000。將一個(gè)數(shù)左移1位,相當(dāng)於該數(shù)乘以2,左移2位相當(dāng)於該數(shù)乘以4。如上例中a=15,則a=a<<2,此時(shí)a=15*4=60。但是這種情況僅指左移時(shí)沒有1被移出去的情況,左移運(yùn)算要比乘法運(yùn)算快得多。6.右移(>>)操作規(guī)則:將一個(gè)數(shù)的各二進(jìn)位位全部右移若干位,右移後,右邊移出的位被捨棄,而左邊的填補(bǔ)分兩種情況:(1)該數(shù)為無符號(hào)數(shù),則高位補(bǔ)0。例:a=a>>2;右a=15,二進(jìn)位為00001111,右移兩位後為00000011。(2)該數(shù)為有符號(hào)數(shù),若原來的符號(hào)位為0(最高位為0,即正數(shù))則高位補(bǔ)0,若原來的符號(hào)位為1(即表示該數(shù)為負(fù)數(shù)),高位補(bǔ)0或1,取決於所使用的電腦系統(tǒng)。有的系統(tǒng)補(bǔ)0,稱為邏輯右移,有的系統(tǒng)補(bǔ)1,稱為算術(shù)右移。例:a:1000110110000111a>>1:0100011011000011(邏輯右移)a>>1:1100011011000011(算術(shù)右移)2.6.6其他運(yùn)算符逗號(hào)運(yùn)算符逗號(hào)運(yùn)算符為“,“。逗號(hào)運(yùn)算式是用逗號(hào)運(yùn)算符把兩個(gè)運(yùn)算式組合成的一個(gè)運(yùn)算式。其一般形式為〈表達(dá)式1〉,〈運(yùn)算式2〉說明:(1)逗號(hào)運(yùn)算式的執(zhí)行過程是:先求運(yùn)算式1的值,再求運(yùn)算式2的值,運(yùn)算式2的值就是整個(gè)逗號(hào)運(yùn)算式的值。(2)一個(gè)逗號(hào)運(yùn)算式可以與另一個(gè)運(yùn)算式構(gòu)成一個(gè)新逗號(hào)運(yùn)算式。(3)逗號(hào)運(yùn)算符是所有運(yùn)算符中級(jí)別最低的。(4)逗號(hào)運(yùn)算式常用於for語句中,它可以表達(dá)多個(gè)初值或多個(gè)步長增量。逗號(hào)運(yùn)算式的一般形式可以擴(kuò)展為〈運(yùn)算式1〉,〈運(yùn)算式2〉,〈運(yùn)算式3〉,……〈運(yùn)算式N〉運(yùn)算式n的值是整個(gè)運(yùn)算式的值。條件運(yùn)算符條件運(yùn)算符是一個(gè)三目運(yùn)算符,把三運(yùn)算式組合成一個(gè)運(yùn)算式。其一般形式為〈運(yùn)算式1〉?〈運(yùn)算式2〉:〈運(yùn)算式3〉;功能:計(jì)算〈運(yùn)算式1〉的值,如果該值為真(非0值),則計(jì)算〈運(yùn)算式2〉的值,並且該值即為條件運(yùn)算式值。若〈運(yùn)算式1〉的值為假(0),則計(jì)算〈運(yùn)算式3〉的值,並將該值作為條件運(yùn)算式的值。說明:(1)條件運(yùn)算符優(yōu)先順序別高於賦值運(yùn)算符,低於關(guān)係運(yùn)算符和算術(shù)運(yùn)算符。(2)條件運(yùn)算符結(jié)合方向是“自右至左”。(3)〈運(yùn)算式1〉與〈運(yùn)算式2〉、〈運(yùn)算式3〉類型可以不同。3.Sizeof運(yùn)算符sizeof運(yùn)算符是測試變數(shù)、運(yùn)算式或類型名所佔(zhàn)用的位元組數(shù)。有兩種用法。sizeof〈運(yùn)算式〉:測試運(yùn)算式所佔(zhàn)用的位元組數(shù)。sizeof〈運(yùn)算式〉:測試類型名所佔(zhàn)用的位元組數(shù)。例如:sizeof(float)其值為4。sizeof運(yùn)算符可以出現(xiàn)的運(yùn)算式中。main(){inta=4;floadb=5.6;printf(“%d,%d\n”,sizeof(a),sizeof(b));}輸出結(jié)果:2,42.7數(shù)據(jù)類型轉(zhuǎn)換
在內(nèi)存中,字元是以系統(tǒng)中所使用字元的編碼值形式存儲(chǔ)的,C語言允許字元型數(shù)據(jù)和整型數(shù)據(jù)之間通用一個(gè)字元型數(shù)據(jù),即可以以字元形式輸出,也可以以整型形式輸出,同時(shí),字元型數(shù)據(jù)可能賦給整型變數(shù),整型數(shù)據(jù)也可以賦給字元型變數(shù),只是當(dāng)整型變數(shù)數(shù)據(jù)的大小超過字元型變數(shù)的表示範(fàn)圍時(shí),需要截取相應(yīng)的有效位。除字元型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用之外,不同類型的數(shù)據(jù)在進(jìn)行混合運(yùn)算時(shí),往往需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換。因此類型轉(zhuǎn)換有兩種方式:一種是自動(dòng)類型轉(zhuǎn)換;另一種是強(qiáng)制類型轉(zhuǎn)換。2.7.1自動(dòng)類型轉(zhuǎn)換在進(jìn)行計(jì)算時(shí),首先將不同類型的數(shù)據(jù)轉(zhuǎn)換成同一類型,然後進(jìn)行計(jì)算不同類型數(shù)值轉(zhuǎn)換規(guī)則:DoublefloatLongUnsignedIntchar,short2.7.2強(qiáng)制類型轉(zhuǎn)化強(qiáng)制類型轉(zhuǎn)化的一般形式如下所示:(強(qiáng)制的類型名)〈變數(shù)〉例如:(int)(a+b),將a+b的結(jié)果強(qiáng)制轉(zhuǎn)換成int型;
(float)a/b,將a的結(jié)果強(qiáng)制轉(zhuǎn)換成float型後,再進(jìn)行計(jì)算。注意:經(jīng)強(qiáng)制類型轉(zhuǎn)換後,得到的是一個(gè)所需類型的中間變數(shù),原來變數(shù)的類型並沒有發(fā)生任何變化。3.1數(shù)據(jù)的輸入3.1.1字元輸入函數(shù)getchar格式:getchar()功能:從鍵盤上接收輸入的一個(gè)字元。例如:
charc;┆c=getchar()其中c是字元型或整型變數(shù)。例1:從鍵盤輸入一個(gè)字元,並將其存入字元型變數(shù)c中。#include”stdio.h”Main(){charc;C=getchar();}3.1.2格式輸入函數(shù)scanf格式:scanf(格式控制,地址表);功能:用來輸入任何類型數(shù)據(jù),可同時(shí)輸入多個(gè)類型或不同類型數(shù)據(jù)。格式控制:是由雙括弧括起來字串,主要是由“%”和格式符組成表3.1Scanf函數(shù)格式字元格式字元功能d輸入十進(jìn)位整數(shù)o輸入八進(jìn)制整數(shù)x輸入十六進(jìn)制整數(shù)c輸入單個(gè)字元s輸入字串fe輸入浮點(diǎn)數(shù)(小數(shù)或指數(shù)形式)hd,ho,hx輸入短整型數(shù)據(jù)ld,lo,lx輸入長整型數(shù)據(jù)lf,le輸入長浮點(diǎn)型數(shù)據(jù)(雙精度)2.地址表Scanf函數(shù)中的“地址表”部分是由變數(shù)的地址組成的,如果有多個(gè)變數(shù),則各變數(shù)之間用逗號(hào)隔開。地址運(yùn)算符為“&“,如變數(shù)a的地址可以寫為&a。例3.2用scanf函數(shù),從鍵盤上輸入一個(gè)整型數(shù)、一個(gè)浮點(diǎn)數(shù)和一個(gè)字元,分別存入變數(shù)i、f和c中。#include”stdio.h”main(){inti;floatf;charc;scanf(“%d,%f,%c”,&I,&f,&c);printf(“i=%d,f=%f,c=%c”,i,f,c);}說明:(1)在scanf函數(shù)“格式控制”部分中的每個(gè)格式說明符都必須在“地址表列”中有一個(gè)變數(shù)與之對(duì)應(yīng)格式說明符必須要與相應(yīng)變數(shù)的類型一致。(2)當(dāng)格式說明符之間沒有任何字元時(shí),在輸入數(shù)據(jù)時(shí),兩個(gè)數(shù)據(jù)之間要使用“空格”、“Tab”或“回車”鍵做間隔;如果格式說明符之間包含其他字元,則輸入數(shù)據(jù)時(shí),應(yīng)輸入與這些字元相同的字元做間隔,如:
Scanf(“%d,%f,%c”,&i,&f,&c);
在輸入數(shù)據(jù)時(shí),應(yīng)採用如下形式:20,7.8,a(3)可以在格式說明符的前面指定輸入數(shù)據(jù)所占的列數(shù),系統(tǒng)將自動(dòng)按此列數(shù)來截取所需的數(shù)據(jù),如:
scanf(%2d%3d”,&x,&y);當(dāng)用戶輸入78985時(shí),系統(tǒng)將自動(dòng)地將78賦給變數(shù)x,將985賦給變數(shù)y。這種方式也可用於字元型數(shù)據(jù)的輸入。(4)應(yīng)該特別注意的是,scanf函數(shù)中的“地址表列”部分應(yīng)當(dāng)中變數(shù)的地址,而不是變數(shù)名。3.2數(shù)據(jù)的輸出3.2.1字元輸出函數(shù)putchar數(shù)據(jù)的輸出一般是以終端顯示器(螢?zāi)唬樘幚韺?duì)象。格式:向終端輸出一個(gè)字元。說明:變數(shù)c可以是字元型,也可以是整型。例3.3從鍵盤輸入一個(gè)字元,在螢?zāi)簧巷@示出來。#include”stdio.h”main(){charc;c=getchar();/*從鍵盤輸入一個(gè)字元*/putchar(c);/*在螢?zāi)簧巷@示一個(gè)字元*/}putchar函數(shù)也可以輸出一些特殊字元(控制字元),如:putchar(‘\n’)作用是輸出一個(gè)“換行”字元。3.2.2格式控制函數(shù)printf格式:printf(格式控制,輸出表);功能:輸出任何類型的數(shù)據(jù)。1.格式控制“格式控制”部分與scanf函數(shù)的相似,也是由雙引號(hào)括起來的字串,主要包括格式說明和需要原樣輸出的字元。“格式說明”:由“%”和格式符組成,如%c和%f等,作用是將要輸出的數(shù)據(jù)轉(zhuǎn)換為指定格式後輸出。printf函數(shù)中使用的格式字元見表3.2。表3.2printf函數(shù)格式字元格式字元功能d按十進(jìn)位形式輸出帶符號(hào)的整數(shù)(正數(shù)前無+號(hào))o按八進(jìn)制形式無符號(hào)輸出(無前導(dǎo)o)x按十六進(jìn)制形式無符號(hào)輸出(無前導(dǎo)ox)u按十進(jìn)無符號(hào)形式輸出c按字元形式輸出一個(gè)字元f按十進(jìn)形式輸出單、雙精度浮點(diǎn)數(shù)(默認(rèn)6位小數(shù))e按指數(shù)形式輸出單、雙精度浮點(diǎn)數(shù)s輸出以‘\o’結(jié)尾的字串ld長整型輸出lo長八進(jìn)制整型輸出lx長十六進(jìn)制整型輸出lu按無符號(hào)長整型輸出m格式字元按寬度m輸出,右對(duì)齊-m格式字元按寬度m輸出,左對(duì)齊m,n格式字元按寬度m,n位小,或裁取字串前n個(gè)字元輸出,右對(duì)齊-m,n格式字元按寬度m,n位小,或裁取字串前n個(gè)字元輸出,左對(duì)齊注意:格式字元必須小寫輸出表printf函數(shù)中的“輸出表”部分由運(yùn)算式組成,這些運(yùn)算式應(yīng)與“格式控制”字串中的格式說明符的類型一一對(duì)應(yīng),若“輸出表”中有多個(gè)運(yùn)算式,則每個(gè)運(yùn)算式之間應(yīng)由逗號(hào)隔開。例3.4從鍵盤輸入一個(gè)整數(shù)和一個(gè)浮點(diǎn)數(shù),並在螢?zāi)簧巷@示出來。#include”stdio.h”main(){inti;floatf;scanf(“%d,%f”,&i,&f);printf(“i=%d,f=%f”,I,f);}執(zhí)行此程式,按格式輸入數(shù)據(jù):50,8,9i=50,f=8.900000說明:(1)printf函數(shù)中的“格式控制”字串中的每一個(gè)格式說明符,都必須與“輸出表”中的某一個(gè)變數(shù)相對(duì)應(yīng),如上述程式中的“%”與i對(duì)應(yīng);“%f”與f對(duì)應(yīng),而且格式說明符應(yīng)當(dāng)與其所對(duì)應(yīng)變數(shù)的類型一致。若要顯示“%”字元,則應(yīng)在“格式控制”字串中連寫兩個(gè)“%”,如:Printf(“x=%d%%”,100/4);將顯示:x=25%。(2)對(duì)格式說明符c、d、s和f等,可以指定輸出字段的寬度。%md:m為指定的輸出字段的寬度。如果數(shù)據(jù)的位數(shù)大於m,則按實(shí)際位數(shù)輸出,否則輸出時(shí)向右對(duì)齊,左端補(bǔ)以“空格”符。%mc:m為指定的輸出字段的寬度。若m大於一個(gè)字元的寬度,則輸出時(shí)向右對(duì)齊,左端補(bǔ)以“空格”符。%mc:m為輸出時(shí)字串所占的列數(shù)。如果字串的長度(字元個(gè)數(shù))大於m,則按字串的本身長度輸出,否則,輸出時(shí)字串向右對(duì)齊,左端補(bǔ)以“空格”符。%-ms:mr的意義同上。如果字串的長度小於m,則輸出時(shí)字串向左對(duì)齊,右端補(bǔ)以“空格”符。%m.nf:m為浮點(diǎn)數(shù)據(jù)所占的總列數(shù)(包括小數(shù)點(diǎn)),n為小數(shù)點(diǎn)後面的位數(shù)。如果數(shù)據(jù)的長度小於m,則輸出時(shí)向右對(duì)齊,左端補(bǔ)以“空格”符。%-m.nf:m、n的意義同上。如果數(shù)據(jù)的長度小於m,則輸出向左對(duì)齊,右端補(bǔ)以“空格”符。(3)除了格式說明符及其輸出字段的寬度外,在“格式控制”字元中的其他字元,將按原樣輸出。(4)在顯示數(shù)據(jù)時(shí),可以不指定輸出字段的寬度,而直接利用系統(tǒng)隱含的輸出寬度。3.3應(yīng)用舉例例3.5分析下列程式,觀察運(yùn)行結(jié)果。main(){charch=‘a(chǎn)’;inta=98;unsignedb=1000;longc=123456789;floatx=3.14;doubley=1.2345678;pPrintf(“(1)a=%d,a=%c,ch=%d,ch=%c\n”,a,a,ch,ch);printf(“(2)b=%u\n”,b);printf(“(3)c=%ld\n”,c);printf(“(4)x=%f,y=%f\n”,x,y);printf(“(5)x=%e,y=%e\n”,x,y);printf(“(6)y=%e10.2f\n”,y);}運(yùn)行的結(jié)果為(1)a=98,a=b,ch=97,ch=ab=1000C=123456789X=3.140000,y=1.234567x=3.14000e+00,y=1.23456e+00Y=1.23例3.6從鍵盤上輸入一個(gè)大寫字母,把它轉(zhuǎn)換面小寫字母,然後顯示出來。#include”stdio.h”main(){charx1,x2;printf(“x1=?\n”);scanf(“%c”,&x1);x2=x1+32;printf(“%c,%c\n”,x1,x2);}運(yùn)行結(jié)果x1=?AA,a例3.7分別輸入一個(gè)浮點(diǎn)數(shù),一個(gè)整數(shù),一個(gè)字元型數(shù)。#include“stdio.h”main(){floatf;intI;charc;scanf(“%f%d%c”,&f,&I,&c);printf(“%f%d%c”,f,I,c);}第四章條件語句結(jié)構(gòu)化程式的三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇分支結(jié)構(gòu)和迴圈結(jié)構(gòu)。順序結(jié)構(gòu):是指每個(gè)程式都是按照語句的書寫順序依次執(zhí)行的。選擇分支結(jié)構(gòu):是指通過對(duì)特定條件的判斷,來選擇一個(gè)分支執(zhí)行。迴圈結(jié)構(gòu):迴圈是指在給定條件下,重複執(zhí)行某段程式,直到不滿足條件為止。4.1語句和複合語句運(yùn)算式語句:一個(gè)運(yùn)算式的後面跟隨一個(gè)分號(hào)構(gòu)成的語句。如:x=x+a;說明:分號(hào)“;”是語句的終結(jié)符,而不是語句的分隔符號(hào)即分號(hào)是語句的最末組成部分。複合語句:由左右花括弧括起來的語句;形式:{說明部分;語句部分}一個(gè)複合語句在語法上等同於一個(gè)語句,在程式中,凡是單個(gè)語句能夠出現(xiàn)的地方,都可以出現(xiàn)複合語句。一個(gè)複合語句又可以出現(xiàn)在其他複合語句內(nèi)部。在複合語句的後面必須有一個(gè)分號(hào),做為該語句的終結(jié)符。4.2if語句If語句是條件選擇語句,它是通過對(duì)給定條件的判斷,來決定所要執(zhí)行的操作。4.2.1if語句的三種形式If語句的第一種形式格式:if(運(yùn)算式)〈語句〉功能:首先計(jì)算運(yùn)算式的值,若運(yùn)算式的值為“真”(為非0),則執(zhí)行語句,若表達(dá)式的值為“假”(為0),不執(zhí)行語句。例如:If(x>y)printf(“%d”,x);運(yùn)算式語句假(0)真(非0)2.If語句的第二種形式格式:if(運(yùn)算式)〈語句1〉
else〈語句2〉功能:首先計(jì)算運(yùn)算式的值,若運(yùn)算式的值為“真”(為非0)。則執(zhí)行語句1,若運(yùn)算式的值為“假”(為0),則執(zhí)行語句2。例如:if(x>y)printf(“%d”,x);elseprintf(“%d”,y);語句1運(yùn)算式語句2真假3.If語句的第三種形式格式:if(運(yùn)算式1)〈語句1〉elseif(運(yùn)算式2)〈語句2〉elseif(運(yùn)算式3)〈語句3〉
┆elseif(運(yùn)算式n)〈語句n〉else〈語句n+1〉功能:首先計(jì)算運(yùn)算式的值,若第n個(gè)運(yùn)算式的值為“真”(為非0),則執(zhí)行語句n,若所有的運(yùn)算式的值都為“假”(為0),則執(zhí)行語句n+1。其流程圖如下:運(yùn)算式1運(yùn)算式2運(yùn)算式3運(yùn)算式4真真真真假假假假語句1語句2語句3語句4語句5例如:if(score>89)grade=‘5’;elseif(score>74)grade=‘4’;elseif(score>59)grade=‘3’;elsegrade=‘2’;說明:(1)if語句中的運(yùn)算式可以是C語言的合法運(yùn)算式。(2)第二種、第三種格式的if語句中,在每個(gè)else前面有一個(gè)分號(hào),整個(gè)語句結(jié)束處也有一個(gè)分號(hào)。這是由於分號(hào)是C語句中不可缺少的部分,這個(gè)分號(hào)是if語句中的內(nèi)嵌語句所要求的。(3)在if和else後面可以只含有一個(gè)內(nèi)嵌的操作語句,也可以含有多個(gè)操作語句,此時(shí)應(yīng)用花括弧“{}“將幾個(gè)語句括起來,構(gòu)成一個(gè)複合語句。例4.1將兩個(gè)數(shù)中較大者賦給s。main(){inta,b,s;a=10;b=20;if(a>b)s=a;elses=b;printf(“s=%d\n”,s);}執(zhí)行結(jié)果:s=20例4.2比較兩個(gè)數(shù),按由大到小輸出。main(){inta,b,x,y;a=10;b=20;if(a>b){x=a;y=b;}else{x=b;y=a;}printf(“x=%d,y=%d\n”,x,y);}執(zhí)行結(jié)果:x=20,y=104.2.2if語句的嵌套在if語句中又包含一個(gè)或多個(gè)if語句,稱為if語句的嵌套。一般形式如下:if()if()〈語句1〉
else〈語句2〉elseif()〈語句3〉
else〈語句4〉if()if()〈語句1〉elseif()〈語句2〉
else〈語句3〉說明:(1)if與else的配對(duì)關(guān)係,從最內(nèi)層開始,else總是與離它最近的未曾配對(duì)的if配對(duì)。(2)if與else的個(gè)數(shù)最好相同,從內(nèi)層到外層一一對(duì)應(yīng),以避免出錯(cuò)。(3)如果if與else的個(gè)數(shù)不相同,可以用花括弧來確定配對(duì)關(guān)係。例如:If(){if()〈語句1〉}else
〈語句2〉這時(shí){}限定了內(nèi)嵌if語句的範(fàn)圍,因此else與第一個(gè)if配對(duì)。內(nèi)嵌if內(nèi)嵌if內(nèi)嵌if例4.3有一函數(shù)-1(x<0)y=0(x=0)1(x>0)編一程式,輸入一個(gè)x值,輸出y值。main(){intx,y;scanf(“%d”,&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf(“x=%d,y=%d\n”,x,y);}4.2.3條件運(yùn)算符如果if語句的形式如下所示:if(運(yùn)算式1)
x=〈運(yùn)算式2〉;elsex=〈運(yùn)算式2〉;無論運(yùn)算式1為“真”還是為“假”,都只執(zhí)行一個(gè)賦值語句且給同一個(gè)變數(shù)賦值??梢岳脳l件運(yùn)算符,將這種語句簡單地用如下語句來表示。
x=〈運(yùn)算式1〉?〈運(yùn)算式2〉:〈運(yùn)算式3〉;說明:即當(dāng)運(yùn)算式1的值為“真”時(shí),將運(yùn)算式2的值賦給變數(shù)x;當(dāng)運(yùn)算式1的值為“假”時(shí),將運(yùn)算式3的值賦給變數(shù)x。如:a=5,b=10,c=20;x=a>b?c*b:c/b;因?yàn)閍>b為假,則x=c/b=2。例4.4輸入兩個(gè)數(shù),並將其中較大者顯示出來。#include“stdio.h”main(){inta,b,max;scanf(“%d%d”,&a,&b);max=(a>b)?a:b;printf(“max=%d”,max);}條件運(yùn)算符也可以嵌套使用,如:Grade=(score>=90)?’A’:(score<=70)?’C’:’B’;當(dāng)score>=90時(shí),將字元‘A’賦給變數(shù)grade;當(dāng)score<=70時(shí),將字元‘C’賦給變數(shù)grade;否則將字元‘B’賦給變數(shù)grade.4.3switch語句Switch語句是多分支選擇語句,其一般形式如下:Switch(運(yùn)算式)
{case〈常量運(yùn)算式1〉:〈語句1〉
case〈常量運(yùn)算式2〉:〈語句2〉
┆case〈常量運(yùn)算式n〉:〈語句n〉
default:〈語句n+1〉
}可同時(shí)省略switch語句的執(zhí)行過程是:首先計(jì)算switch後面圓括號(hào)內(nèi)運(yùn)算式的值,若此值等於某個(gè)case後面的常量運(yùn)算式的值,則轉(zhuǎn)向該case後面的語句去執(zhí)行;若運(yùn)算式的值不等於任何case後面的常量運(yùn)算式的值,則轉(zhuǎn)向default後面的語句去執(zhí)行,如果沒有default部分,則將不執(zhí)行switch語句中的任何語句,而直接轉(zhuǎn)到switch語句後面的語句去執(zhí)行。說明:(1)switch後面圓括號(hào)內(nèi)的運(yùn)算式的值和case後面的常量運(yùn)算式的值,都必須是整型的或字元型的,不允許是浮點(diǎn)型的。(2)同一個(gè)switch語句中的所有case後面的常量運(yùn)算式的值都必須互不相同。(3)switch語句中的case和default的出現(xiàn)次序是任意的,也就是說default也可以位於case的前面,且case的次序也不要求按常量運(yùn)算式的大小順序排列。(4)由於switch語句中的“case常量運(yùn)算式”部分只起標(biāo)號(hào)的作用,而不進(jìn)行條件判斷,所以,在執(zhí)行完某個(gè)case後的語句後,將自動(dòng)轉(zhuǎn)到該語句後面的語句去執(zhí)行,直到遇到switch語句的右花括弧或“break”語句為此,而不再進(jìn)行條件判斷。所以在執(zhí)行完一個(gè)case分支後,一般應(yīng)跳出switch語句,轉(zhuǎn)到下一條語句執(zhí)行,這樣可在一個(gè)case的結(jié)束後,下一個(gè)case開始前,插入一個(gè)break語句,一但執(zhí)行到braek語句,將立即跳出switch語句,如:如:Switch(n){case1:x=1;case2:x=2;}當(dāng)n=1時(shí),將連續(xù)執(zhí)行下麵兩個(gè)語句:X=1;X=2;如:Switch(n){case1;x=1;Braek;Case2;X=2Braek}(5)每個(gè)case的後面即可以是一個(gè)句號(hào),也可以是多個(gè)語句,當(dāng)是多個(gè)語句的時(shí)候,也不需要用花括弧括起來。(6)多個(gè)case的後面可以共用一組執(zhí)行語句,如:Switch(n);{Case1:Case2:x=10;braet
┆}它表示當(dāng)n=1或n=2時(shí),都執(zhí)行下列兩個(gè)語句:X=10;Braek;例4.5從鍵盤輸入一個(gè)月份(1~12),並顯示該月份的英文名稱#include”stdio.h”Main(){intmonth;scanf(“%d”,&month);switch(month){case1:printf(“January”);braek;case2:printf(“February”);braek;case3:printf(“March”);braek;case4:printf(“April”);braek;case5:printf(“May”);braek;case6:printf(“June”);braek;case7:printf(“July”);braek;case8:printf(“August”);braek;case9:printf(“September”);braek;case10:printf(“October”);braek;case11:printf(“November”);braek;case12:printf(“Decmeber”);braek;Default:printf(“DataError!”);Break;}}4.4應(yīng)用舉例例4.6輸入一個(gè)數(shù)值,求出它的平方根,若為負(fù)數(shù)時(shí),求出它的複數(shù)平方根。#include“stdio.h”#include“math.h”main(){intn;floatroot;printf(“enteranumber:\t”);scanf(“%d”,&n);if(n>=0);{root=sqrt(n);printf(“sqrt(%d)=%f”,n,root);}else{root=sqrt(abs(n));printf(“sqrt(%d)=%fi”,n,root);}}例4.7求兩個(gè)數(shù)中最小值。#include“stdio.h”main(){intx,y,min;printf(“entertwointegers:\n”);acanf(“%d,%d,&x,&y);min=x<y?x:y;printf(“Min=%d”,min);}例4.8從鍵盤輸入一個(gè)操作符並進(jìn)行相應(yīng)和操作。#include“stdio.h”main(){intx=10,y=5,z;charop;scanf(“%c”,&op);switch(op){case’+’:z=x+y;braek;case’-’:z=x-y;braek;case’*’:z=x*y;braek;case’/’:z=x/y;braek;default:printf(“OperaterError!”);}printf(%d%c%d=%d”,x,op,y,z);}5.2while迴圈語句用while語句來實(shí)現(xiàn)“當(dāng)型”迴圈結(jié)構(gòu)。格式:while(運(yùn)算式)〈語句〉/*循環(huán)體部分*/功能:當(dāng)運(yùn)算式的值為非0時(shí),執(zhí)行while語句中的循環(huán)體。結(jié)構(gòu)流程圖如圖所示。運(yùn)算式語句0非0說明:(1)循環(huán)體如果包含一個(gè)以上語句,應(yīng)該用花括弧括起來,以複合語句的形式出現(xiàn),否則while語句範(fàn)圍只到while後面第一個(gè)分號(hào)處。(2)在循環(huán)體中應(yīng)有使迴圈趨向於結(jié)束的語句,即設(shè)置修改迴圈條件的語句。(3)while語句的特點(diǎn)是先判斷運(yùn)算式的值,然後執(zhí)行循環(huán)體中的語句,如果運(yùn)算式的值一開始為假(值為0),退出迴圈,並轉(zhuǎn)入下一語句去執(zhí)行。例5.2求s=1+2+3+…100的值。結(jié)構(gòu)流程圖如右圖。main(){inti,s=0;i=1;While(i<=100);{s=s+1;i++;}printf(“s=%d”,s);}運(yùn)行結(jié)果s=5050i=1s=s+1i=i+1i≤100真假5.3do-while迴圈語句do-while迴圈語句,用來實(shí)現(xiàn)“直到型”迴圈結(jié)構(gòu)。格式:do<語句>while(運(yùn)算式)
功能:先執(zhí)行〈語句〉,後判斷運(yùn)算式的值。它的執(zhí)行過程是:先執(zhí)行一次指定的語句,然後判斷運(yùn)算式的值,當(dāng)運(yùn)算式的值為非零(”真“)時(shí),返回重新執(zhí)行該語句,如此反復(fù),直到運(yùn)算式的值等於0為此止,此時(shí)迴圈結(jié)束。0(假)語句運(yùn)算式非0(真)說明:(1)用while語句和用do-while語句處理同一問題時(shí),若二者的循環(huán)體部分一樣,其結(jié)果也一樣。但在while後面的運(yùn)算式一開始就為假(0值)時(shí),兩種迴圈的結(jié)果是不同的。(2)如果do-while語句的循環(huán)體部分是多個(gè)語句組成的話,則必須用左右花括弧括起來,使其形成複合語句。main(){inti,s=0;scanf(“%d”,&i);do{s=s+i;i++;}while(i<=10);Printf(“s=%d”,s);}運(yùn)行情況如下:1S=55Main(){intI,s=0;Scanf(“%d”,&i);While(i<=10);{s=s+I;i++;}Printf(“s=%d”,s);}運(yùn)行情況如下:1S=55例5.3while和do-while迴圈的比較課堂練習(xí)5.1main(){inti=1,s=1;while(i<=25){s=s+2*I;i++;}printf(“%d\n”,s);}5.4for迴圈語句格式:for(運(yùn)算式1;運(yùn)算式2;運(yùn)算式3)〈語句〉執(zhí)行過程:(1)先計(jì)算運(yùn)算式1的值;(2)然後計(jì)算運(yùn)算式2的值,若結(jié)果為真(非0),則執(zhí)行後面的循環(huán)體各語句,若假,則結(jié)束迴圈。(3)進(jìn)行運(yùn)算式3的計(jì)算,至此完成一次迴圈。(4)再次計(jì)算運(yùn)算式2的值,開始再次迴圈,直到計(jì)算運(yùn)算式2的值為0,中止迴圈。迴圈變數(shù)賦初值迴圈條件迴圈變數(shù)增量循環(huán)體部分求解運(yùn)算式1求解運(yùn)算式3for語句的下一語句語句運(yùn)算式2假真說明:(1)for語句中條件測試總是在迴圈開始時(shí)進(jìn)行;如果循環(huán)體部分是多個(gè)語句組成的,則必須用左、右花括弧括起來,使其成為一個(gè)複合語句。(2)for語句中的運(yùn)算式1和運(yùn)算式3即可以是一個(gè)簡單的運(yùn)算式,也可以是逗號(hào)連接的多個(gè)運(yùn)算式,此時(shí)的逗號(hào)作為運(yùn)算符使用。如:for(s=0,i=1;i<=100;i++)s=s+i;或:for(i=1,j=100;i<=j;i++,j--)k=i+j;
在逗號(hào)運(yùn)算式內(nèi)按自左至右順序求解,整個(gè)逗號(hào)運(yùn)算式的值為其中最右邊的運(yùn)算式的值。如:for(i=1;i<=100;i++,i++)s=s+i;相當(dāng)於:for(i=1;i<=100;i=i+2)s=s+i;(3)for語句的一般形式中的“運(yùn)算式1”可以省略,此時(shí)應(yīng)在for語句之前給迴圈變數(shù)同賦初值。注意省略運(yùn)算式1時(shí),其後的分號(hào)不能省略。如:for(;i<=100;i++)s=s+i;執(zhí)行時(shí),跳過“解運(yùn)算式1”這一步,其他不變。(4)如果運(yùn)算式2省略,即不判斷迴圈條件,迴圈無終止地進(jìn)行下去。也就是認(rèn)為運(yùn)算式2始終為真。例如:for(i=1;;i++)s=s+i;相當(dāng)於:i=1;while(1){s=s+I;i++;}(5)運(yùn)算式3也可以省略,但此時(shí)程式設(shè)計(jì)應(yīng)另外設(shè)法保證迴圈能正常結(jié)束。如:for(i=1;i<=100;){s=s+I;i++;}(6)可以省略運(yùn)算式1和運(yùn)算式3,只有運(yùn)算式2,即只給迴圈條件。例:for(;i<=100;){s=s+i;i++;}相當(dāng)於:while(i<=100){s=s+i;i++;}(7)3個(gè)運(yùn)算式都可以省略,如:for(;;)語句相當(dāng)於:while(1)語句即不設(shè)初值,不判斷條件(認(rèn)為運(yùn)算式2為真值),迴圈變數(shù)不增值,無終止地執(zhí)行循環(huán)體。(8)運(yùn)算式1可以是設(shè)置迴圈變數(shù)初值的賦值運(yùn)算式,也可以是與迴圈變數(shù)無關(guān)的其他運(yùn)算式。如:for(s=0;i<=100;i++)s=s+i;運(yùn)算式3也可以是與迴圈控制無關(guān)的任意運(yùn)算式。(9)運(yùn)算式2一般是關(guān)係運(yùn)算式(如i<=100)或邏輯運(yùn)算式(如a<b&&x<y),但也可以是數(shù)值運(yùn)算式或字元運(yùn)算式,只在其值為非0,就執(zhí)行循環(huán)體。分析下麵的例子:for(i=0;(c=getchar())!=‘\n’;i+=c);for(;(c=getchar()!=‘\n’;)printf(“%c”,c);例5.4用for語句,求s=1+2+3+…+100的值。main(){inti,s=0;for(i=1;i<=100;i=i+1)s=s+i;printf(“s=%d”,s);}運(yùn)行結(jié)果S=50505.5迴圈的嵌套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的迴圈結(jié)構(gòu),稱為迴圈的嵌套。三種迴圈:while迴圈、do-while迴圈和for迴圈可以互相嵌套。如下面的幾種形式都是合法的。(1)while(){…while(){…}}(2)do{…do{…}while();
}while();(3)for(;;){…for(;;){…}}(5)for(;;){…while(){…}}(4)while(){…do{…}while();…}(6)do{…for(;;){}…} while();5.6幾種迴圈的比較(1)4種迴圈可以用來處理同一問題,一般性況下它們可以互相代替。(2)while和do-while迴圈,只在while後面指定迴圈條件,在循環(huán)體中包含反復(fù)執(zhí)行的操作語句,包括使迴圈趨於結(jié)束的語句。(3)用while和do-while迴圈時(shí),迴圈變數(shù)初始化的操作應(yīng)在while和do-while語句之前完成。為了語句可以在運(yùn)算式1中實(shí)現(xiàn)迴圈的初始化。(4)while和for迴圈是先判斷運(yùn)算式的值,後執(zhí)行循環(huán)體各語句;而do-while迴圈是先執(zhí)行循環(huán)體各語句,後判斷運(yùn)算式的值。(5)對(duì)while迴圈、do-while迴圈和for迴圈,可以用break語句跳出迴圈,用continue語句結(jié)束本次迴圈,而對(duì)用if語句構(gòu)成的迴圈,不能用braek語句和繼續(xù)語句進(jìn)行控制。5.7break語句和continue語句5.7.1break語句格式:break;功能:該語句可以使程式運(yùn)行時(shí)中途退出一個(gè)循環(huán)體。說明:在幾種迴圈中,主要是在迴圈次數(shù)不能預(yù)先確定的情況下使用break語句,在循環(huán)體中增加一個(gè)分支結(jié)構(gòu)。當(dāng)某個(gè)條件成立時(shí),由break語句退出循環(huán)體,從而結(jié)束迴圈過程。
例5.6求圓的面積#definePI3.1415926main(){intr;floats;for(r=1;r<10;r++);{s=PI*r*r;if(s>100)break;}printf(“s=%f,s);}}說明:(1)braek語句不能用於迴圈語句和開關(guān)語句之外的任何其他語句。(2)在多重迴圈的情況下,使用break語句時(shí),僅僅退出包含break語句的那層循環(huán)體,即break語句不能使程式控制退出一層以上的迴圈。5.7.2continue語句格式:continue;功能:結(jié)束本次迴圈,即跳過循環(huán)體中下面尚未執(zhí)行的語句,繼續(xù)進(jìn)行下一次迴圈。說明:continue語句只結(jié)束本次迴圈,而不是終止整個(gè)迴圈的執(zhí)行。而break語句則是結(jié)束迴圈,不再進(jìn)行判斷。如下圖所示:運(yùn)算式1運(yùn)算式2語句語句While迴圈的下一個(gè)語句假假真真break運(yùn)算式1運(yùn)算式2語句語句While迴圈的下一個(gè)語句假假真真continue例5.7輸出100~200中不能被7整除的數(shù)。main(){intn;for(n=100;n<=200;n++){if(n%7==0)continue;printf(“%d”,n);}5.8應(yīng)用舉例例5.8輸出1~20中能被3整除的數(shù),並求出它們的和。main(){intn,s=0;for(n=1;n<=20;n++)if(n%3==0){s=s+n;printf(“%d,”,n);}printf(“\ns=%d”,s);}運(yùn)行結(jié)果:3,6,9,12,15,18S=63例5.9用公式π/4=1-1/3+1/5-1/7+…求π的近似值,直到最後一項(xiàng)的絕對(duì)值小於10-6為止。#include”mach.h”main(){ints;floatn,t,pi;t=1;p=0;n=1.0;s=1;while((fabs(t))>=1e-6){pi=pi+t;n=n+2;s=-s;t=s/n;}pi=pi*4;printf(“pi=%10.6f\n”,pi);}運(yùn)行結(jié)果pi=3.141397例5.10求Fibonacci數(shù)列:1,1,2,3,5,8,…前20個(gè)數(shù)。f1=1(n=1)f2=1(n=2)fn=fn-1+fn-2(n>=3)程式如下:main(){longintf1,f2;inti;f1=1;f2=1;for(i=1;i<=10;i++){printf(“%8ld%8ld“,f1,f2);if(i%2==0)printf(“\n”);f1=f1+f2;f2=f2+f1;}}運(yùn)行結(jié)果11235813213455891442333776109871597258441816765數(shù)組:是有序並具有相同性質(zhì)的數(shù)據(jù)的集合,它是某種類型的數(shù)據(jù),按照一定的順序組成的。數(shù)組屬於構(gòu)造類型。當(dāng)處理大量的、同類型的數(shù)據(jù)時(shí),利用數(shù)組很方便。6.1一維數(shù)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度安保人員職業(yè)健康管理與勞動(dòng)合同2篇
- 二零二五版二手房購房合同定金及家具家電安裝服務(wù)協(xié)議書3篇
- 二零二五版企業(yè)研發(fā)項(xiàng)目定金及借款合同3篇
- 二零二五版水上娛樂設(shè)施安全生產(chǎn)管理合同3篇
- 二零二五年度茶園承包經(jīng)營與茶葉市場調(diào)研合同3篇
- 展會(huì)現(xiàn)場廣告投放與媒體合作合同(二零二五年度)2篇
- 二零二五版國際貿(mào)易保險(xiǎn)合同主體欺詐識(shí)別與應(yīng)對(duì)措施合同3篇
- 右岸景苑S5幢0、30號(hào)商鋪2025年度租賃合同24篇
- 二零二五年度預(yù)制構(gòu)件鋼筋加工定制合同3篇
- 展會(huì)品牌推廣合同(2篇)
- 2023年保安公司副總經(jīng)理年終總結(jié) 保安公司分公司經(jīng)理年終總結(jié)(5篇)
- 中國華能集團(tuán)公司風(fēng)力發(fā)電場運(yùn)行導(dǎo)則(馬晉輝20231.1.13)
- 中考語文非連續(xù)性文本閱讀10篇專項(xiàng)練習(xí)及答案
- 2022-2023學(xué)年度六年級(jí)數(shù)學(xué)(上冊(cè))寒假作業(yè)【每日一練】
- 法人不承擔(dān)責(zé)任協(xié)議書(3篇)
- 電工工具報(bào)價(jià)單
- 反歧視程序文件
- 油氣藏類型、典型的相圖特征和識(shí)別實(shí)例
- 流體靜力學(xué)課件
- 顧客忠誠度論文
- 實(shí)驗(yàn)室安全檢查自查表
評(píng)論
0/150
提交評(píng)論