版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第1章C語言概述本章主要介紹C語言程序的結(jié)構(gòu)和書寫規(guī)則,以及VC6.0V2.0的基本操作。1.1程序設(shè)計語言
1.2算法的概念1.3C語言概述1.3C語言的語句和關(guān)鍵字1.4C程序的設(shè)計步驟與運行環(huán)境
[Return]1.1計算機語言和程序設(shè)計1.C語言的誕生與發(fā)展(1)在C語言誕生以前,系統(tǒng)軟件主要是用匯編語言編寫的。由于匯編語言程序依賴于計算機硬件,其可讀性和可移植性都很差;但一般的高級語言又難以實現(xiàn)對計算機硬件的直接操作(這正是匯編語言的優(yōu)勢),于是人們盼望有一種兼有匯編語言和高級語言特性的新語言。(2)C語言是貝爾實驗室于70年代初研制出來的,后來又被多次改進,并出現(xiàn)了多種版本。80年代初,美國國家標準化協(xié)會(ANSI),根據(jù)C語言問世以來各種版本對C語言的發(fā)展和擴充,制定了ANSIC標準(1989年再次做了修訂)。本書以ANSIC新標準來介紹。(3)目前,在微機上廣泛使用的C語言編譯系統(tǒng)有visualstudioC、BorlandC等。雖然它們的基本部分都是相同的,但還是有一些差異,所以請大家注意自己所使用的C編譯系統(tǒng)的特點和規(guī)定(參閱相應的手冊)。本書選定的上機環(huán)境是VC6.0(windows操作系統(tǒng))
2.C語言的特點
C語言同時具有匯編語言和高級語言的優(yōu)勢。(1)語言簡潔、緊湊,使用方便、靈活。
(2)運算符極其豐富。(3)生成的目標代碼質(zhì)量高,程序執(zhí)行效率高。(4)可移植性好(較之匯編語言)。(5)可以直接操縱硬件。
3.在C語言中,除實現(xiàn)順序、選擇和循環(huán)三種基本結(jié)構(gòu)等的9條控制語句外,輸入輸出操作均由標準庫函數(shù)(不是C語言的組成部分)來實現(xiàn)。所以學習C語言,不僅要學習這9條控制語句和各種運算符,而且要學習并掌握常用標準庫函數(shù)的使用。[Return]
1.2算法的概念與表示方法
算法就是解決問題的方法(或思路)。對于同一個問題可以有不同的解題方法,也就是有不同的算法,一般應當選擇方法簡單、運算步驟少、運算快且占用內(nèi)存小的算法。算法應具有以下幾個特征:(1)可行性。指算法中的每一步都是計算機可以執(zhí)行的,并能得到有效的結(jié)果。(2)確定性。指算法中的每一步必須有明確定義,不能有任何歧義。(3)有窮性。指算法必須在執(zhí)行有限步后結(jié)束,而不能是無限的步驟,也不能陷入死循環(huán)。(4)可輸入/輸出信息。常用算法的流程圖表示
(1)起止框:表示算法的開始或結(jié)束。(2)輸入輸出框:表示算法請求輸入需要的數(shù)據(jù)或算法將某些結(jié)果輸出。(3)處理框:表示算法的某個處理步驟。(4)判斷框:對一個給定條件進行判斷,根據(jù)判斷結(jié)果決定如何執(zhí)行其后的操作。判斷框有一個入口,兩個出口。(5)流程線:指出了算法的執(zhí)行方向。(6)連接點:用于將畫在不同地方的流程線連接起來。(7)注釋框:對流程圖中某些框的操作做必要的補充說明,1.3C語言概述1.2.1C語言程序的總體結(jié)構(gòu)
一個完整的C語言程序,是由一個main()函數(shù)(又稱主函數(shù))和若干個其它函數(shù)結(jié)合而成的,或僅由一個main()函數(shù)構(gòu)成。[案例1.1]僅由main()函數(shù)構(gòu)成的C語言程序。/*案例代碼文件名:AL1_1.C*//*功能:僅由main()函數(shù)構(gòu)成的C語言程序示例*/main(){printf(“ThisisaCprogram.\n”);}程序運行結(jié)果:
ThisisaCprogram.[程序演示][案例1.2]由main()函數(shù)和1個其它函數(shù)max()構(gòu)成的C語言程序。/*案例代碼文件名:AL1_2.C*//*功能:由main()函數(shù)和1個其它函數(shù)max()構(gòu)成的C語言程序示例*/intmax(intx,inty){return(x>y?x:y);}main(){intnum1,num2;printf(“Inputthefirstintegernumber:”);scanf(“%d”,&num1);printf(“Inputthesecondintegernumber:”);scanf(“%d”,&num2);printf(“max=%d\n”,max(num1,num2));}程序運行情況:
Inputthefirstintegernumber:6←┘Inputthesecondintegernumber:9←┘max=9[程序演示][案例1.3]改寫[案例1.2],交換main()函數(shù)和max()函數(shù)的前后位置。源程序略。程序運行情況:
Inputthefirstintegernumber:6←┘Inputthesecondintegernumber:9←┘max=91.函數(shù)是C語言程序的基本單位。main()函數(shù)的作用,相當于其它高級語言中的主程序;其它函數(shù)的作用,相當于子程序。2.C語言程序總是從main()函數(shù)開始執(zhí)行。一個C語言程序,總是從main()函數(shù)開始執(zhí)行,而不論其在程序中的位置。當主函數(shù)執(zhí)行完畢時,亦即程序執(zhí)行完畢。習慣上,將主函數(shù)main()放在最前頭。
1.2.2函數(shù)的一般結(jié)構(gòu)
任何函數(shù)(包括主函數(shù)main())都是由函數(shù)說明和函數(shù)體兩部分組成。其一般結(jié)構(gòu)如下:
[函數(shù)類型]函數(shù)名(函數(shù)參數(shù)表)函數(shù)說明部分
{說明語句部分;執(zhí)行語句部分;函數(shù)體部分
}
1.使用的語法符號約定
[...]──方括號表示可選(即可以指定,也可以缺?。?/p>
……──省略號表示前面的項可以重復
|──多(含2)中選1
2.函數(shù)說明由函數(shù)類型(可缺?。?、函數(shù)名和函數(shù)參數(shù)表三部分組成,其中函數(shù)參數(shù)表的格式為:數(shù)據(jù)類型形參[,數(shù)據(jù)類型形參2……]例如,[案例1.2]中的函數(shù)max(),其函數(shù)說明各部分如圖1-1所示。函數(shù)類型函數(shù)名函數(shù)參數(shù)表↓↓↓
intmax(intx,inty)
圖1-1函數(shù)說明部分結(jié)構(gòu)圖注意:在舊標準中,函數(shù)可以缺省參數(shù)表。3.函數(shù)體在函數(shù)說明部分的下面、大括號(必須配對使用)內(nèi)的部分。函數(shù)體一般由說明語句和可執(zhí)行語句兩部分構(gòu)成:(1)說明語句部分說明語句部分由變量定義、自定義類型定義、自定義函數(shù)說明、外部變量說明等組成。
(2)可執(zhí)行語句一般由若干條可執(zhí)行語句構(gòu)成。圖1-2是[案例1.2]的main()函數(shù)體的示意圖。/*主函數(shù)main()*/main(){intnum1,num2;變量定義部分
printf(“Inputthefirstintegernumber:”);scanf(“%d”,&num1);printf(“Inputthesecondintegernumber:”);可執(zhí)行語句部分函數(shù)體
scanf(“%d”,&num2);printf(“max=%d\n”,max(num1,num2));}
圖1-2函數(shù)體結(jié)構(gòu)示意圖
4.說明(1)函數(shù)體中的變量定義語句,必須在所有可執(zhí)行語句之前。下面程序中變量定義語句“intmax;”的位置是非法的:main(){intx,y; /*變量定義語句:定義2個整型變量x、y*/x=3; /*可執(zhí)行的賦值語句:將3賦值給變量x*/y=6; /*可執(zhí)行的賦值語句:將6賦值給變量y*/intmax; /*變量定義語句:出現(xiàn)在可執(zhí)行的賦值語句“x=3;”和“y=6;”之后,非法!*/max=x>y?x:y;printf(“max=%d\n”,max);}解決辦法很簡單,請讀者自己思考。(2)如果不需要,也可以缺省變量定義語句。1.2.3源程序書寫格式1.所有語句都必須以分號“;”結(jié)束,函數(shù)的最后一個語句也不例外。2.程序行的書寫格式自由,既允許1行內(nèi)寫幾條語句,也允許1條語句分寫在幾行上。例如,[案例1.2]的主函數(shù)main(),也可改寫成如下所示的格式:……main(){intnum1,num2;printf(“Inputthefirstintegernumber:”);scanf(“%d”,&num1);printf(“Inputthesecondintegernumber:”);scanf(“%d”,&num2);printf(“max=%d\n”,max(num1,num2));}如果某條語句很長,一般需要將其分寫在幾行上。3.允許使用注釋。C語言的注釋格式為:/*……*/例如,在[案例1.1]和[案例1.2]中,以及本節(jié)其它部分給出的源程序中,凡是用“/*”和“*/”括起來的文字,都是注釋。(1)“/*”和“*/”必須成對使用,且“/”和“*”、以及“*”和“/”之間不能有空格,否則都出錯。
技巧:為避免遺漏必須配對使用的符號,例如注釋符號、函數(shù)體的起止標識符(花括號)、圓括號等等,在輸入時,可連續(xù)輸入這些起止標識符,然后再在其中進行插入來完成內(nèi)容的編輯。在起止標識符嵌套時,以及相距較遠時,這樣做更有必要。
(2)注釋的位置,可以單占1行,也可以跟在語句的后面。(3)如果1行寫不下,可另起1行繼續(xù)寫。(4)注釋中允許使用漢字。在非中文操作系統(tǒng)下,看到的是一串亂碼,但不影響程序運行。
[Return]1.4C程序的設(shè)計步驟與運行環(huán)境
1.運行一個C語言程序的一般過程2.VC的啟動、退出與命令菜單3.編輯并保存一個C語言源程序4.編譯、連接──單個源程序文件5.運行與查看結(jié)果6.編輯下一個新的源程序[Return]1.運行一個C語言程序的一般過程
VC6.0是一個集源程序編輯、編譯、連接、運行與調(diào)試于一體、用菜單驅(qū)動的集成軟件環(huán)境。運行一個C語言程序的一般過程:(1)啟動VC,進入VC集成環(huán)境。(2)編輯(或修改)源程序。(3)編譯。如果編譯成功,則可進行下一步操作;否則,返回(2)修改源程序,再重新編譯,直至編譯成功。(4)連接。如果連接成功,則可進行下一步操作;否則,根據(jù)系統(tǒng)的錯誤提示,進行相應修改,再重新連接,直至連接成功。(5)運行。通過觀察程序運行結(jié)果,驗證程序的正確性。如果出現(xiàn)邏輯錯誤,則必須返回(2)修改源程序,再重新編譯、連接和運行,直至程序正確。(6)退出VC集成環(huán)境,結(jié)束本次程序運行。[Return]2.VC的啟動、退出與命令菜單
(1)啟動VC6.0:啟動VC6.0后,進入如下環(huán)境
(2)菜單欄的使用2.建立新的源程序文件
從菜單欄中選擇“文件”|“新建”命令,新建C++SourceFile3.編輯源程序在下圖所示窗口中輸入源程序
4.編譯源程序文件
源程序編輯完成后,點擊“組建”按鈕,源程序經(jīng)過編譯、連接后產(chǎn)生可執(zhí)行程序sample1.exe。程序正確編譯后的窗口見下圖。
5.運行與查看結(jié)果
(1)運行當前正在編輯的源程序文件選擇并執(zhí)行Run|Run項(快捷鍵:^F9),程序運行結(jié)束后,仍返回到編輯窗口。當你認為自己的源程序不會有編譯、連接錯誤時,也可直接運行(即跳過對源程序的編譯、連接步驟)。這時,VC將一次完成從編譯、連接到運行的全過程。(2)查看運行結(jié)果選擇并執(zhí)行Run|UserScreen項(快捷鍵:Alt+F5)。查看完畢后,按任一鍵返回編輯窗口。如果發(fā)現(xiàn)邏輯錯誤,則可在返回編輯窗口后,進行修改;然后再重新編譯、連接、運行,直至正確為止。[Return]
5.運行程序編譯連接正確后,單擊圖1-11編譯工具欄中的“運行”按鈕,運行可執(zhí)行程序。通過鍵盤輸入半徑值2.5以及回車鍵后,出現(xiàn)如下運行結(jié)果:
第2章數(shù)據(jù)類型與表達式2.1C語言基本字符集和詞匯2.2C語言數(shù)據(jù)類型
2.3常量
2.4變量
2.5運算符和表達式
*2.6指針類型
*2.7位運算符
*2.8類型轉(zhuǎn)換
[Return]2.1C語言基本字符集和詞匯2.1.1C語言基本字符集C語言基本字符集是ASCII碼的子集,包括以下幾類:(1)英文字母:26個小寫英文字母a~z和26個大寫英文字母A~Z共52個字符;(2)數(shù)字:分別為0~9共10個字符。(3)空白符:包括空格符、制表符、回車符等??瞻追辉谧址A亢妥址A恐衅鹱饔?。在其他地方出現(xiàn)時,只起間隔作用,編譯程序?qū)λ鼈兒雎圆挥?。因此在程序中使用空白符與否,對程序的編譯不發(fā)生影響,但在程序中適當?shù)牡胤绞褂每瞻追麑⒃黾映绦虻那逦院涂勺x性。(4)特殊字符:包括29個特殊字符。
2.1C語言基本字符集和詞匯2.1.2詞匯C語言的詞匯包括關(guān)鍵字、標識符、運算符和分隔符等。1.關(guān)鍵字關(guān)鍵字又稱為保留字,是C語言預先聲明的具有特定意義的單詞。用戶不能將這些關(guān)鍵字用作自定義的標識符。C語言常用關(guān)鍵字可分為以下幾類。數(shù)據(jù)類型關(guān)鍵字,包括char、double、float、int、long、short、unsigned、union、void、enum、signed、struct等;控制語句關(guān)鍵字,包括do、break、case、continue、for、goto、return、else、default、if、while、switch、extern等;存儲類型關(guān)鍵字,包括auto、register、static;其他關(guān)鍵字,有const、sizeof、typedef、volatile、inline。
2.1C語言基本字符集和詞匯2.標識符標識符是編程人員聲明的單詞,用來表示各種程序?qū)ο螅ㄈ缱兞?、類型、函?shù)、文件等)的名字。在C語言中標識符的構(gòu)成規(guī)則如下:(1)以字母或下劃線“_”開頭,后接字母、數(shù)字、下劃線組成的字符序列。(2)大小寫字母含義不同。例如,Name和name是兩個不同的標識符。習慣上,一般用小寫字母表示變量名,所有字母大寫表示符號常量名,雖然這不是必須的,但它可以增加程序的可讀性。(3)標準C不限制標識符的長度,可由1個字符構(gòu)成,也可由若干個字符構(gòu)成,但其最大長度受各種版本的C語言編譯系統(tǒng)限制。我們在編寫程序時可不考慮這一限制,因一般的編譯系統(tǒng)都支持長標識符。
2.1C語言基本字符集和詞匯2.標識符依照上述規(guī)則,下列標識符是合法的。sum,area,Number_of_moves,number_of_moves,j3_1,count1下列標識符是不合法的。3xy (以數(shù)字開頭)x2+y3(出現(xiàn)非法字符“+”)@Mn3 (出現(xiàn)非法字符“@”) max–b2(出現(xiàn)非法字符“–”)$xz_1238(出現(xiàn)非法字符“$”)M.J.ttY(出現(xiàn)非法字符“.”)
2.1C語言基本字符集和詞匯2.標識符標識符命名時需要注意:(1)標識符命名時做到“見名知義”,如PI、name、count、max等,以便于閱讀和理解。(2)盡量避免使用會引起混淆的字符。如字母“O”和數(shù)字“0”,字母“I”、“l(fā)”和數(shù)字“1”,字母“z”和數(shù)字“2”等都易混淆。(3)不能把關(guān)鍵字用作標識符。(4)在C語言中,還有一類具有特定含義的標識符,它們主要用作C語言的預處理命令,因此,人們習慣上也把它們看成關(guān)鍵字,不作一般標識符使用,它們是:define、include、undef、ifdef、ifndef、endif。(5)C語言提供了大量的標準庫函數(shù),每一個函數(shù)都對應一個函數(shù)名,例如庫函數(shù)sin、printf、scanf等。不應將這些函數(shù)名定義為一般標識符來使用。
2.1C語言基本字符集和詞匯3.運算符運算符是用來表示某種運算的符號,多數(shù)運算符由一個字符組成,也有的由多個字符組成。C語言中有44個運算符,分為15種優(yōu)先級和兩種結(jié)合性,詳見附錄B。4.分隔符分隔符是用于分隔單詞或程序正文,一般不表示任何實際的操作,僅用于構(gòu)造程序。C語言中常用的分隔符是空格、制表符、逗號和換行符等。
[Return]2.2C語言數(shù)據(jù)類型在C語言中,凡是數(shù)據(jù)都必須有類型,必須在使用前進行類型說明。[Return]
2.3常量
在程序運行過程中,其值不能被改變的量稱為常量。
常量的分類
(1)整型常量(2)實型常量(3)字符常量。(4)符號常量。2.3.1整型常量C語言中的常量有三類:數(shù)、字符和字符串。由于它們本身已經(jīng)隱含了數(shù)據(jù)類型,所以使用時不必事先進行類型說明就可以直接使用。整型常量簡稱整數(shù),C語言中整型常量可以用三種數(shù)制來表示:(1)十進制整數(shù):以日常所用的十進制整數(shù)形式給出,數(shù)碼取值為0~9。如154、-65、523。(2)八進制整數(shù):以數(shù)字0開頭的數(shù)是八進制數(shù),數(shù)碼取值為0~7。如十進制數(shù)39,用八進制表示為047。(3)十六進制整數(shù):以0x(數(shù)字0和字母x)或0X開頭的數(shù)是十六進制數(shù),其數(shù)碼取值為0~9、A~F或a~f。如0x1A23、0X2b。2.3.2實型常量通常,在計算機科學中,把帶小數(shù)的數(shù)稱為實數(shù)。C語言中的實數(shù)有float(單精度)實數(shù)和double(雙精度)實數(shù),它們在計算機內(nèi)存中是以浮點數(shù)形式存放的,故又稱為浮點數(shù)。實型常量只能用十進制形式表示,不能用八進制和十六進制形式表示。實型常量有兩種表示方法:(1)十進制數(shù)形式:由數(shù)碼0~9、小數(shù)點及正負號組成,如3.1415926,-0.12等都是合法的實數(shù)。(2)指數(shù)形式:由十進制數(shù)a,加階碼標識“e”或“E”以及階碼n組成。一般形式為:aEn或aen其中,a為實數(shù),n為階碼,“e”或“E”兩邊必須有數(shù)字。2.3.3字符型常量字符型常量是用一對單引號括起來的單個字符構(gòu)成,例如,'a','b','1'等都是有效的字符型常量。在C語言中,字符是用其對應的ASCII碼值來表示,一個字符占一個字節(jié)。例如,字符常量'0'、'A'、'a'的ASCII碼值分別是48、65、97,它們對應的存儲單元的內(nèi)容分別為48、65、97。C語言還使用一種特殊形式的字符型常量,這就是以反斜杠'\'開頭,后跟一個或幾個字符,它們不再具有字符原有的意義,而具有特定含義,故將其稱為“轉(zhuǎn)義”字符。轉(zhuǎn)義字符常用來表示那些用一般方式無法表示的控制字符。例如,用'\n'表示換行字符,它的ASCII碼值為10。常見的轉(zhuǎn)義字符如表2-2所示。在字符常量中要使用單引號和反斜杠時,必須用轉(zhuǎn)義字符表示,即在這些字符前加上反斜杠,例如'\\'、'\''。2.3.4字符串常量C語言中,除了允許使用字符常量以外,還允許使用字符串常量。在編寫程序時使用一對雙引號括起來的字符串序列就是字符串常量,注意,這里的雙引號僅起定界符的作用,并不是字符串中的字符。以下均是字符串常量:"Iamastudent."、"CHINA"、"a"、"123.4"等。字符串常量在內(nèi)存中存儲時,除了一個字符占用一個字節(jié)外,還會自動在其尾部增加一個轉(zhuǎn)義字符'\0',用這個特殊的字符作為字符串結(jié)束的標識?;蛘哒f,若干個字符后有了結(jié)束標識'\0',才稱為C語言的字符串。例如,字符串"computer"包含8個字符,但其在內(nèi)存中占用9個字節(jié),最后一個字節(jié)就是存放字符串結(jié)束標識符'\0'。用它來表示本字符串到此為止,之后的內(nèi)容不屬于本字符串。computer\0圖2-2字符串常量在內(nèi)存中的表示2.3.5符號常量以上幾種常量一般從字面上即可判別,所以又統(tǒng)稱為字面常量或直接常量。在C語言中還可以用一個標識符來代表一個常量,稱之為符號常量。符號常量在使用之前必須先定義。在C語言中,使用宏定義命令#define定義符號常量。其一般形式為:#define標識符常量表達式#definePI3.14[Return]2.4變量所謂變量是指在程序運行過程中其值可以發(fā)生變化的一種數(shù)據(jù)對象。每一個變量都用一個標識符來表示,該標識符稱為變量名。每個變量都屬于某個確定的數(shù)據(jù)類型,在內(nèi)存中占據(jù)一定的存儲單元,在該存儲單元中存放變量的值,因此,變量具有如下屬性:(1)地址(2)變量名(3)變量值(4)類型
2.4變量
在C語言中,變量一定要先定義后使用。定義變量的一般形式如下。類型變量名表;這里,類型必須是C語言的有效數(shù)據(jù)類型。變量名表是一個或多個標識符,中間用逗號隔開,最后用分號表示變量定義結(jié)束。以下是定義變量的例子:inti,j,num; //說明i、j、num為整型變量floata,b,sum; //說明a、b、sum為實型變量charc,ch; //說明c、ch為字符型變量2.4.1整型變量1.整型變量在內(nèi)存中的存放形式數(shù)據(jù)在內(nèi)存中是以二進制形式存放的。例如,定義了一個整型變量i:inti;將十進制數(shù)9賦值給變量i:i=9;2.整型變量的分類整型變量的基本類型符為int,可以根據(jù)數(shù)值的范圍將變量定義為基本整型、短整型或長整型。在int之前可以根據(jù)需要加上修飾符:short(短型)或long(長型)。對這三種類型都可以加上修飾符unsigned以指定其為“無符號數(shù)”。如果加上修飾符signed,則表示“有符號數(shù)”。默認為有符號數(shù)(signed)。有符號基本整型 [signed]int有符號短整型 [signed]short[int]有符號長整型 [signed]long[int]無符號基本整型 unsignedint無符號短整型 unsignedshort[int]無符號長整型 unsignedlong[int]3.整型變量的定義與使用 C語言規(guī)定在程序中要用到的變量必須先定義后使用?!纠?-3】整型變量的定義與使用。#include<stdio.h>intmain(){inta,b; //定義有符號整型變量a和b longc; //定義有符號長整型變量c unsignede; //定義無符號整型變量ea=-1;b=523;c=623789;e=89;printf("a=%d,b=%d,c=%ld,e=%u\n",a,b,c,e); return0;}4.整型變量的初始化程序中常需要對一些變量預先設(shè)置初值,稱為變量初始化。C語言允許在定義變量的同時對變量初始化。如:inta=3; //相當于inta;a=3;inta,b,c=5;//可以部分初始化變量,它相當于inta,b,c;c=5;inta=3,b=3,c=3; //它相當于inta,b,c;a=b=c=3;//但不能寫成inta=b=c=3;它相當于inta;a=(b=(c=3));而b和c未定義2.4.2實型變量實型變量分為單精度型(float)、雙精度型(double)和長雙精度型(longdouble)三類。ANSIC并未規(guī)定每一種數(shù)據(jù)類型的長度、精度和數(shù)值范圍。表2-4列出了TC3.0和VC++6.0定義的實數(shù)類型和取值范圍。2.4.2實型變量對每一個實型變量應在使用之前加以定義和初始化。如:floatx,y;floatm=12.8;doublemin;longdoublet;2.4.3字符型變量字符型變量用來存放字符常量,一個字符變量只能存放一個字符。表2-5列出了TC3.0和VC++6.0定義的字符類型和取值范圍。字符變量定義形式如下:charc1,c2;定義c1、c2為字符型變量,在內(nèi)存中各占一個字節(jié),可以分別存放一個字符。下面是對c1、c2賦值:c1='a';c2='b';也可以在定義字符變量的同時為其賦值,如:charc1='a',c2='b';[Return]2.5運算符和表達式2.5.1C語言運算符與表達式簡介
1.運算符在程序中對變量或常量進行處理的符號稱之為運算符。2.表達式表達式是用運算符和括號把操作數(shù)連接起來所形成的式子。操作數(shù)可以是常量、變量和函數(shù)。每個表達式不管多么復雜,都能依據(jù)運算符的優(yōu)先級、結(jié)合性以及數(shù)據(jù)類型轉(zhuǎn)換規(guī)則計算出唯一的值。該值的類型就是表達式的類型。C語言表達式依據(jù)其的可分為:算術(shù)表達式、賦值表達式、關(guān)系表達式、邏輯表達式、條件表達式和逗號表達式等。其中關(guān)系表達式、邏輯表達式將在第4章介紹。2.5運算符和表達式2.5.2算術(shù)運算符和算術(shù)表達式
1.算術(shù)運算符2.5運算符和表達式2.5.2算術(shù)運算符和算術(shù)表達式
2.算術(shù)表達式和運算符的優(yōu)先級與結(jié)合性2.5運算符和表達式2.5.2算術(shù)運算符和算術(shù)表達式
3.自增、自減運算符2.5運算符和表達式2.5.2算術(shù)運算符和算術(shù)表達式
4.sizeof運算符sizeof運算符可操作的數(shù)據(jù)對象可以是表達式,也可以是類型名,其形式如下:sizeof(數(shù)據(jù)類型標識)sizeof表達式2.5運算符和表達式2.5.3賦值運算符和賦值表達式1.賦值運算符賦值運算符(=)的作用是將其右邊表達式的值賦給左邊的變量。賦值號左邊一定是變量,右邊是表達式。如:a=3;r=x%y;2.5運算符和表達式2.5.3賦值運算符和賦值表達式2.復合賦值運算符在C語言中,可以在賦值運算符之前加上其他運算符,構(gòu)成復合賦值運算符。復合賦值運算符共有10種,分別是:+=-=*=/=%=<<=>>=&=^=|=前5個運算符是由算術(shù)運算符和賦值運算符結(jié)合在一起構(gòu)成的復合賦值運算符;后5個運算符是由位運算符和賦值運算符結(jié)合在一起構(gòu)成復合賦值運算符。(1)x+=3; 等價于x=x+3;(2)y*=y+z;等價于y=y*(y+z);(3)x%=3; 等價于x=x%3;(4)i<<=3; 等價于i=i<<3;2.5運算符和表達式2.5.3賦值運算符和賦值表達式3.賦值表達式由賦值運算符將一個變量和一個表達式連接起來的式子稱為賦值表達式,其一般形式為:變量=表達式賦值表達式的作用是將賦值運算符右邊的表達式的值賦給左邊的變量。C語言規(guī)定,賦值運算是右結(jié)合性,即從右至左進行運算,因此表達式x=(y=8)中的括號可以省略,寫成:x=y=8。2.5運算符和表達式2.5.4逗號運算符和逗號表達式逗號運算符“,”是C語言中一個比較特殊的運算符,它的作用是將若干個表達式連接起來。其基本信息如表2-10所示。逗號表達式的一般形式為:表達式1,表達式2,表達式3,…,表達式n例如:a=3,b=5,c=a*b它是由三個獨立的表達式結(jié)合而成的。整個逗號表達式的值是15,a的值是3,b的值是5,c的值是15。2.5運算符和表達式2.5.5條件運算符和條件表達式條件運算符“?:”是C語言中唯一的三目運算符,即有三個操作數(shù)參與運算。其基本信息如表2-11所示。由條件運算符組成條件表達式的一般形式為:表達式1?表達式2:表達式3其求值規(guī)則為:如果表達式1的值為真,則以表達式2的值作為條件表達式的值,否則以表達式3的值作為條件表達式的值。條件表達式通常用于賦值語句之中,例如一個條件表達式如下:max=(a>b)?a:b;[Return]2.6指針類型2.6.1字符常量指針是C語言中一個非常重要的概念,也是C語言的一個重要特色。指針是一種很特殊的數(shù)據(jù)類型,其實它既不是簡單類型也不是構(gòu)造類型。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu);可以方便地使用數(shù)組和字符串;并能象匯編語言一樣處理內(nèi)存地址,使得程序員能編寫出精練而高效的程序。指針的這些特點和用途對于設(shè)計系統(tǒng)軟件和應用程序是非常必要的。正確地使用指針,可以編寫出簡潔、緊湊、高效的程序。[Return]2.7位運算符在很多應用中,常常要求在二進制位(bit)一級進行運算。位運算是指對操作數(shù)的各二進制位進行運算,C語言提供了六種位運算符,它們是:
(1)&:按位與;(2)|:按位或;(3)^:按位異或;(4)~:按位非;(5)<<:左移;(6)>>:右移。[Return]2.8類型轉(zhuǎn)換2.8.1自動類型轉(zhuǎn)換1.賦值運算中的類型轉(zhuǎn)換2.混合運算中的類型轉(zhuǎn)換2.8.2強制類型轉(zhuǎn)換【例2-12】強制類型轉(zhuǎn)換示例。#include<stdio.h>intmain(){floatx; inti; x=13.62; i=(int)x; printf("x=%f,i=%d\n",x,i); return0;}【例2-13】已知變量x和y的類型為float,變量a和z的類型為整型,x、y、a的值分別是3.2、3.9、10,求表達式z=x+a%3*(int)(x+y)%2/4的值。解:(1)求a%3,其值為1,表達式變?yōu)閤+1*(int)(x+y)%2/4;(2)求(x+y),其值為7.1,表達式變?yōu)閤+1*(int)(7.1)%2/4;(3)求(int)(7.1),其值為7,表達式變?yōu)閤+1*7%2/4;(4)求1*7,其值為7,表達式變?yōu)閤+7%2/4;(5)求7%2,其值為1,表達式變?yōu)閤+1/4;(6)求1/4,其值為0,表達式變?yōu)閤;(7)x值為3.2,因此,表達式x+a%3*(int)(x+y)%2/4的值為3.2;(8)z=x+a%3*(int)(x+y)%2/4,z的類型為int,自動將x+a%3*(int)(x+y)%2/4的類型轉(zhuǎn)換為整型,因此,變量z的值是3。[Return]第3章基本語句與順序結(jié)構(gòu)程序設(shè)計3.1語句3.2數(shù)據(jù)輸入與輸出3.3順序結(jié)構(gòu)程序設(shè)計3.4順序結(jié)構(gòu)程序設(shè)計舉例[Return]3.1語句語句是構(gòu)成高級語言源程序的基本單位。C語言中的語句是以分號結(jié)束的一段字符構(gòu)成,例如:printf(“Goodmorning!\n”);C語言中語句分為簡單語句和結(jié)構(gòu)語句,如圖3-1所示。
1.簡單語句(1)空語句。只有一個分號的語句就是空語句,它什么也不做。寫法如下:;(2)表達式語句。在任何一個表達式后面加上一個分號就構(gòu)成一條表達式語句,它是C語言程序中最常用的語句。例如:
a=3+x; (賦值表達式語句) ++i; (算術(shù)表達式語句)(3)return語句。return語句用于函數(shù)的返回。(4)break語句。break語句用于退出循環(huán)結(jié)構(gòu)或switch結(jié)構(gòu)。(5)continue語句。continue語句用于循環(huán)結(jié)構(gòu)中,其作用是結(jié)束本次循環(huán)。(6)goto語句。盡管在編寫程序時不提倡使用goto語句。(7)函數(shù)調(diào)用語句。由函數(shù)調(diào)用加一個分號構(gòu)成一條語句。2.結(jié)構(gòu)語句(1)復合語句。復合語句是用符號“{”和“}”把若干有序的語句組合在一起而構(gòu)成的。例如:{ intt; t=a; a=b;
b=t;}
在邏輯上將復合語句看成是一條語句。要注意的是,在復合語句括號“}”外不需要再加分號。(2)選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)語句----程序的流程控制語句。[Return]3.2數(shù)據(jù)輸入與輸出3.2.1數(shù)據(jù)輸入輸出的概念在計算機中,輸入輸出(I/O)是以計算機主機為主體而言的。若從主機向輸出設(shè)備(如:顯示器、打印機等)輸出數(shù)據(jù),稱為“輸出(Output)”。而從輸入設(shè)備(如鍵盤、鼠標等)向計算機傳輸數(shù)據(jù),則稱為“輸入(Input)”。C語言中沒有定義任何處理輸入輸出的關(guān)鍵字,程序的輸入輸出都是使用系統(tǒng)庫函數(shù)完成。C語言的輸入輸出系統(tǒng)包括了許多函數(shù),這些函數(shù)的有關(guān)信息在文件stdio.h(標準輸入輸出庫,文件名后綴中的“h”是header的縮寫)中說明。在使用系統(tǒng)庫函數(shù)時,要在程序文件的開頭用預處理命令“#include”把有關(guān)文件包含在本程序中。形式如下:#include"頭文件"
或#include<頭文件>
區(qū)別:用尖括號形式時,編譯系統(tǒng)在存放C庫函數(shù)頭文件的目錄中尋找要包含的文件,這稱為標準方式。用雙引號形式時,系統(tǒng)在用戶當前目錄中尋找要包含的文件,若找不到,再按標準方式查找(即再按尖括號的方式查找)。3.2.2字符數(shù)據(jù)的輸入輸出函數(shù)單個字符的輸入──getchar()函數(shù)[例]說明getchar()函數(shù)的格式和作用。/*功能:說明getchar()函數(shù)的格式和作用。*/#include"stdio.h" /*文件包含*/main(){charch;printf("Pleaseinputtwocharacter:");ch=getchar(); /*輸入1個字符并賦給ch*/putchar(ch);putchar('\n');putchar(getchar()); /*輸入一個字符并輸出*/putchar('\n');}
程序運行情況如下:
Pleaseinputtwocharacters:ab↙ab1.getchar()函數(shù)的格式:getchar();2.getchar()函數(shù)的作用:從系統(tǒng)隱含的輸入設(shè)備(如鍵盤)輸入一個字符。另外,從功能角度來看,scanf()函數(shù)可以完全代替getchar()函數(shù)。(1)getchar()函數(shù)只能用于單個字符的輸入,一次輸入一個字符。(2)程序中要使用getchar()函數(shù),必須在程序(或文件)的開頭加上編譯預處理命令:
#include"stdio.h“3.2.2字符數(shù)據(jù)的輸入輸出函數(shù)單個字符的輸出──putchar()函數(shù)[例1]putchar()函數(shù)的格式和使用方法。/*功能:說明putchar()函數(shù)的格式和使用方法。*/#include"stdio.h" /*編譯預處理命令:文件包含*/main(){charch1='N',ch2='E',ch3='W';putchar(ch1);putchar(ch2);putchar(ch3); /*輸出*/
putchar('\n');putchar(ch1);putchar('\n'); /*輸出ch1的值,并換行*/
putchar('E');putchar('\n'); /*輸出字符'E',并換行*/
putchar(ch3);putchar('\n');}
程序運行結(jié)果如下:
NEWNEW1.putchar()函數(shù)的格式:
putchar(ch);
其中ch可以是一個字符變量或常量,也可以是一個轉(zhuǎn)義字符。
2.putchar()函數(shù)的作用:向終端輸出一個字符。(1)putchar()函數(shù)只能用于單個字符的輸出,且一次只能輸出一個字符。另外,從功能角度來看,printf()函數(shù)可以完全代替putchar()函數(shù)。(2)在程序中使用putchar()函數(shù),務必牢記:在程序(或文件)的開頭加上編譯預處理命令(也稱包含命令),即:
#include"stdio.h"
表示要使用的函數(shù),包含在標準輸入輸出(stdio)頭文件(.h)中。3.2.3格式化輸入與輸出函數(shù)printf()和scanf()是最常用的輸入輸出函數(shù),它們可以在程序設(shè)計者的控制下以各種格式分別實現(xiàn)數(shù)據(jù)的輸出和輸入操作。1.printf()函數(shù)[例2]已知圓半徑radius=1.5,求圓周長和圓面積。
main()
{floatradius,length,area,pi=3.1415926;
radius=1.5;
length=2*pi*radius; /*求圓周長*/
area=pi*radius*radius; /*求圓面積*/
printf(“radius=%f\n”,radius); /*輸出圓半徑*/
printf(“l(fā)ength=%7.2f,area=%7.2f\n”,length,area); /*輸出圓周長、面積*/
}
程序運行結(jié)果如下:
radius=1.500000length=9.42,area=7.07 printf()函數(shù)的一般格式如下:printf("格式字符串"[,輸出項表]);
1.格式字符串?!案袷阶址币卜Q“轉(zhuǎn)換控制字符串”,可以包含三種字符:(1)格式指示符。格式指示符的一般形式如下:%[標志][寬度][.精度][F|N|h|L][類型]
常用的標志字符如表3-1所示,常用的寬度指示符如表3-2所示,常用的精度指示符如表3-3所示,長度修飾符如表3-4所示,類型轉(zhuǎn)換字符如表3-5所示。
(2)轉(zhuǎn)義字符例如,[例1]中printf()函數(shù)中的'\n'就是轉(zhuǎn)義字符,輸出時產(chǎn)生一個“換行”操作。(3)普通字符──除格式指示符和轉(zhuǎn)義字符之外的其它字符。格式字符串中的普通字符,原樣輸出。例如,[例2]中“printf("radius=%f\n",radius);”語句中的“radius=”,“printf("length=%7.2f,area=%7.2f\n",length,area);”語句中的“l(fā)ength=”、“area=”等都是普通字符。
2.輸出項表輸出項表是可選的。如果要輸出的數(shù)據(jù)不止1個,相鄰2個之間用逗號分開。下面的printf()函數(shù)都是合法的:(1)printf("Iamastudent.\n");
(2)printf("%d",3+2);
(3)printf("a=%fb=%5d\n",a,a+3); 必須強調(diào):“格式字符串”中的格式指示符,必須與“輸出項表”中、輸出項的數(shù)據(jù)類型一致,否則會引起輸出錯誤。格式指示符
輸出不同類型的數(shù)據(jù),要使用不同的類型轉(zhuǎn)換字符。
1)類型轉(zhuǎn)換字符d──以帶符號的十進制整數(shù)形式輸出。
[例3]類型轉(zhuǎn)換字符d的使用。main(){intnum1=123;longnum2=123456;/*用3種不同格式,輸出int型數(shù)據(jù)num1的值*/printf("num1=%d,num1=%5d,num1=%-5d,num1=%2d\n",num1,num1,num1,num1);/*用3種不同格式,輸出long型數(shù)據(jù)num2的值*/printf("num2=%ld,num2=%8ld,num2=%5ld\n",num2,num2,num2);printf("num1=%ld\n",num1);} [程序演示]程序運行結(jié)果如下:num1=123,num1=□□123,num1=123□□,num1=123num2=123456,num2=□□123456,num2=123456num1=16908411 對于整數(shù),還可用八進制、無符號形式(%o(小寫字母o))和十六進制、無符號形式(%x)輸出。對于unsigned型數(shù)據(jù),也可用%u格式符,以十進制、無符號形式輸出。所謂無符號形式是指,不論正數(shù)還是負數(shù),系統(tǒng)一律當作無符號整數(shù)來輸出。例如,printf("%d,%o,%x\n",-1,-1,-1);2)類型轉(zhuǎn)換字符f──以小數(shù)形式、按系統(tǒng)默認的寬度,輸出單精度和雙精度實數(shù)。[例4]類型轉(zhuǎn)換字符f的使用。main(){floatf=123.456;doubled1,d2;d1=1111111111111.111111111;d2=2222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n",f,f,f,f,f);printf("d1+d2=%f\n",d1+d2);} [程序演示]
程序運行結(jié)果如下:
123.456001,□□123.456001,□□□□□□123.46,123.46□□□□□□,123.46d1+d2=3333333333333.333010
本例程序的輸出結(jié)果中,數(shù)據(jù)123.456001和3333333333333.333010中的001和010都是無意義的,因為它們超出了有效數(shù)字的范圍。對于實數(shù),也可使用格式符%e,以標準指數(shù)形式輸出:尾數(shù)中的整數(shù)部分大于等于1、小于10,小數(shù)點占一位,尾數(shù)中的小數(shù)部分占5位;指數(shù)部分占4位(如e-03),其中e占一位,指數(shù)符號占一位,指數(shù)占2位,共計11位。也可使用格式符%g,讓系統(tǒng)根據(jù)數(shù)值的大小,自動選擇%f或%e格式、且不輸出無意義的零。3)類型轉(zhuǎn)換字符c──輸出一個字符(只占一列寬度)。[例5]類型轉(zhuǎn)換字符c的使用。main(){charc='A';inti=65;printf("c=%c,%5c,%d\n",c,c,c);printf("i=%d,%c",i,i);}程序運行結(jié)果如下:
c=A,□□□□A,65i=65,A [程序演示]
需要強調(diào)的是:在C語言中,整數(shù)可以用字符形式輸出,字符數(shù)據(jù)也可以用整數(shù)形式輸出。將整數(shù)用字符形式輸出時,系統(tǒng)首先求該數(shù)與256的余數(shù),然后將余數(shù)作為ASCII碼,轉(zhuǎn)換成相應的字符輸出。4)類型轉(zhuǎn)換字符s──輸出一個字符串。[例6]類型轉(zhuǎn)換字符s的使用。main(){printf("%s,%5s,%-10s","Internet","Internet","Internet");printf("%10.5s,%-10.5s,%4.5s\n","Internet","Internet","Internet");} [程序演示]程序運行結(jié)果如下:Internet,Internet,Internet□□,□□□□□Inter,Inter□□□□□,Inter注意:系統(tǒng)輸出字符和字符串時,不輸出單引號和雙引號。使用說明(1)printf()可以輸出常量、變量和表達式的值。但格式控制中的格式說明符,必須按從左到右的順序,與輸出項表中的每個數(shù)據(jù)一一對應,否則出錯。例如,printf("str=%s,f=%d,i=%f\n","Internet",1.0/2.0,3+5,"CHINA");是錯誤的。(2)格式字符x、e、g可以用小寫字母,也可以用大寫字母。使用大寫字母時,輸出數(shù)據(jù)中包含的字母也大寫。除了x、e、g格式字符外,其它格式字符必須用小寫字母。例如,%f不能寫成%F。(3)格式字符緊跟在“%”后面就作為格式字符,否則將作為普通字符使用(原樣輸出)。例如,“printf(”c=%c,f=%f\n“,c,f);”中的第一個c和f,都是普通字符。2.scanf()函數(shù)scanf()函數(shù)是用來從外部輸入設(shè)備向計算機主機輸入數(shù)據(jù)的。
scanf()函數(shù)的一般格式
[例7]已知圓柱體的底半徑radius=1.5,高high=2.0,求其體積。
main()
{floatradius=1.5,high=2.0,pi=3.14159,vol;
vol=pi*radius*radius*high;/*求體積*/
printf(“vol=%7.2f\n”,vol); /*輸出求出的體積*/
} [程序演示][例8]已知圓柱體的底半徑為radius,高為high,求其體積。/*功能:說明函數(shù)scanf()的格式及作用。*/main(){floatradius,high,vol,pi=3.1415926;printf("Pleaseinputradius&high:");scanf("%f%f",&radius,&high); /*從鍵盤輸入兩個實數(shù)賦給變量r,h*/vol=pi*radius*radius*high;printf("radius=%7.2f,high=%7.2f,vol=%7.2f\n",radius,high,vol);} [程序演示]程序運行結(jié)果如下:
Pleaseinputradius&high:1.5□2.0↙radius=□□□1.50,high=□□□2.00,vol=□□14.14
在程序中給計算機提供數(shù)據(jù),可以用賦值語句,也可以用輸入函數(shù)。在C語言中,可使用scanf()函數(shù),通過鍵盤輸入,給計算機同時提供多個、任意的數(shù)據(jù)。scanf()函數(shù)的一般格式scanf("格式字符串",輸入項首地址表);(1)格式字符串。格式字符串可以包含3種類型的字符:格式指示符、空白字符(空格、Tab鍵和回車鍵)和非空白字符(又稱普通字符)。格式指示符與printf()函數(shù)的相似,空白字符作為相鄰2個輸入數(shù)據(jù)的缺省分隔符,非空白字符在輸入有效數(shù)據(jù)時,必須原樣一起輸入。(2)輸入項首地址表──由若干個輸入項首地址組成,相鄰2個輸入項首地址之間,用逗號分開。輸入項首地址表中的地址,可以是變量的首地址,也可以是字符數(shù)組名或指針變量。變量首地址的表示方法:&變量名其中“&”是地址運算符。例如,[案例3.7]中的“&radius”是指變量radius在內(nèi)存中的首地址。
2.scanf()函數(shù)的功能:從鍵盤上接收格式化輸入。運行[案例8]的程序時,從鍵盤上輸入2個實數(shù),分別存入&radius、&high起始的存儲單元中,即輸入兩個實數(shù)分別賦給radius和high。格式指示符格式指示符的一般形式為:%[*][寬度][F|N][h|l]類型字符
1)類型字符類型字符如表3-6所示。例如,在[例8]的scanf()函數(shù)語句中,格式字符串“%f%f”。
2)寬度n
指定該項輸入數(shù)據(jù)所占列數(shù)為n。換句話說,讀取輸入數(shù)據(jù)中相應的n位,但按需要的位數(shù)賦給相應的變量,多余部分被舍棄。例如,scanf("%3c%3c",&ch1,&ch2);printf("ch1=%c,ch2=%c\n",ch1,ch2);
假設(shè)輸入“abcdefg”,則系統(tǒng)將讀取的“abc”中的“a”賦給變量ch1;將讀取的“def”中的“d”賦給變量ch2,所以printf()函數(shù)的輸出結(jié)果為:ch1=a,ch2=d。3)賦值抑制字符*表示本輸入項對應的數(shù)據(jù)讀入后,不賦給相應的變量(該變量由下一個格式指示符輸入)。例如,scanf("%2d%*2d%3d",&num1,&num2);printf("num1=%d,num2=%d\n",num1,num2);
假設(shè)輸入“123456789”,則系統(tǒng)將讀取“12”并賦值給num1;讀取“34”、但舍棄掉(“*”的作用);讀取“567”并賦值給num2。所以,printf()函數(shù)的輸出結(jié)果為:num1=12,num2=567。
4)類型修飾符──F、N、h、l。其含義與printf()中的一樣,分別為遠指針、近指針、短整型和長整型。數(shù)據(jù)輸入操作
1)如果相鄰2個格式指示符之間,不指定數(shù)據(jù)分隔符(如逗號、冒號等),則相應的2個輸入數(shù)據(jù)之間,至少用一個空格分開,或者用Tab鍵分開,或者輸入1個數(shù)據(jù)后,按回車,然后再輸入下1個數(shù)據(jù)。例如,scanf("%d%d",&num1,&num2);
假設(shè)給num1輸入12,給num2輸入36,則正確的輸入操作為:12□36↙
或者:12↙36↙
注:使用“↙”符號表示按回車鍵操作,在輸入數(shù)據(jù)操作中的作用是,通知系統(tǒng)輸入操作結(jié)束。2)“格式字符串”中出現(xiàn)的普通字符(包括轉(zhuǎn)義字符形式的字符),務必原樣輸入。例如,scanf("%d,%d",&num1,&num2);
假設(shè)給num1輸入12,給num2輸入36,正確的輸入操作為:12,36↙
另外,scanf()函數(shù)中、格式字符串內(nèi)的轉(zhuǎn)義字符(如\n),系統(tǒng)并不把它當轉(zhuǎn)義字符來解釋,從而產(chǎn)生一個控制操作,而是將其視為普通字符,所以也要原樣輸入。例如:scanf("num1=%d,num2=%d\n",&num1,&num2);
假設(shè)給num1輸入12,給num2輸入36,正確的輸入操作為:
num1=12,num2=36\n↙
提高人機交互性建議:為改善人機交互性,同時簡化輸入操作,在設(shè)計輸入操作時,一般先用printf()函數(shù)輸出一個提示信息,再用scanf()函數(shù)進行數(shù)據(jù)輸入。例如,將scanf("num1=%d,num2=%d\n",&num1,&num2);改為:
printf("num1=");scanf("%d",&num1);printf("num2=");scanf("%d",&num2);3)輸入數(shù)據(jù)時,遇到以下情況,系統(tǒng)認為該數(shù)據(jù)結(jié)束:(1)遇到空格,或者回車鍵,或者Tab鍵。(2)遇到輸入域?qū)挾冉Y(jié)束。例如“%3d”,只取3列。(3)遇到非法輸入。例如,在輸入數(shù)值數(shù)據(jù)時,遇到字母等非數(shù)值符號(數(shù)值符號僅由數(shù)字字符0-9、小數(shù)點和正負號構(gòu)成)。4)使用格式說明符“%c”輸入單個字符時,空格和轉(zhuǎn)義字符均作為有效字符被輸入。例如,scanf("%c%c%c",&ch1,&ch2,&ch3);printf("ch1=%c,ch2=%c,ch3=%c\n",ch1,ch2,ch3);
假設(shè)輸入:A□B□C↙,則系統(tǒng)將字母'A'賦值給ch1,空格'□'賦值給ch2,字母'B'賦值給ch3。
[Return]3.3順序結(jié)構(gòu)程序設(shè)計在順序結(jié)構(gòu)程序中,各語句(或命令)是按照位置的先后次序,順序執(zhí)行的,且每個語句都會被執(zhí)行到。
[例1]輸入任意三個整數(shù),求它們的和及平均值。
/*功能:設(shè)計一個順序結(jié)構(gòu)程序,求三個整數(shù)的和及平均值。*/
main()
{intnum1,num2,num3,sum;
floataver;
printf("Pleaseinputthreenumbers:");
scanf("%d,%d,%d",&num1,&num2,&num3);/*輸入三個整數(shù)*/
sum=num1+num2+num3; /*求累計和*/
aver=sum/3.0; /*求平均值*/
printf("num1=%d,num2=%d,num3=%d\n",num1,num2,num3);
printf("sum=%d,aver=%7.2f\n",sum,aver);
} 思考題:能否將“aver=sum/3.0;”中“3.0”改為“3”?[例2]求方程ax2+bx+c=0的實數(shù)根。a,b,c由鍵盤輸入,a≠0且b2-4ac>0。/*功能:設(shè)計一個順序結(jié)構(gòu)程序,求方程的根。*/#include"math.h" /*為使用求平方根函數(shù)sqrt(),包含math.h頭文件*/main(){floata,b,c,disc,x1,x2;printf("Inputa,b,c:");scanf("%f,%f,%f",&a,&b,&c); /*輸入方程的三個系數(shù)的值*/disc=b*b-4*a*c; /*求判別式的值賦給disc*/x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("\nx1=%6.2f\nx2=%6.2f\n",x1,x2);} [程序演示][例3]從鍵盤輸入一個小寫字母,要求用大小寫字母形式輸出該字母及對應的ASCII碼值。
#include"stdio.h"main(){charc1,c2;printf("Inputalowercaseletter:");c1=getchar();putchar(c1);printf(",%d\n",c1);c2=c1-32; /*將大寫字母轉(zhuǎn)換成對應的小寫字母*/printf("%c,%d\n",c2,c2);} [程序演示]程序運行情況如下:
Inputalowercaseletter:a↙a,97A,65
在順序結(jié)構(gòu)程序中,一般包括以下幾個部分:
1.程序開頭的編譯預處理命令。在程序中要使用標準函數(shù)(又稱庫函數(shù)),除printf()和scanf()外,其它的都必須使用編譯預處理命令,將相應的頭文件包含進來。。
2.順序結(jié)構(gòu)程序的函數(shù)體中,是完成具體功能的各個語句和運算,主要包括:(1)變量類型的說明。(2)提供數(shù)據(jù)語句。(3)運算部分。(4)輸出部分[Return]3.4順序結(jié)構(gòu)程序應用舉例【例1】寫出下面程序的輸出結(jié)果#include<stdio.h>intmain(){ inta=4,b=7,c=-5;floatx=12.3456,y=-246.135; charch='B'; longn=7654321;unsignedu=65535; printf("%d\t%d\t%d\n",a,b,c);//A printf("%3d%3d%3d\n",a,b,c);//B printf("%f,%f\n",x,y);//C printf("%8.2f,%8.2f,%4f,%4f\n,%3f,%3f\n",x,y,x,y,x,y);//D printf("%e,%10.2e\n",x,y);//E printf("%c,%d,%o,%x\n",ch,ch,ch,ch);//F printf("%ld,%lo,%lx\n",n,n,n);//G printf("%u,%o,%x,%d\n",u,u,u,u);//H printf("%s,%7s\n","Over!","Thanks");//I return0;}【例2】分析下列程序中運行結(jié)果。#include<stdio.h>intmain(){ inta=2,b=4,c=6; a+=b+=c;//A行
printf("%d\n",a<b?b:a);//B行
printf("%d\n",a<b?a++:b++); //C行
printf("%d,%d\n",a,b); //D行
printf("%d\n",c+=a>b?a++:b++); //
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 超市加工區(qū)安全制度
- 請?zhí)峁┮环輥砹蠙z驗獎罰制度
- 計算機教室管理人員崗位職責制度
- 行政事業(yè)單位職責分離制度
- 【疾控科普】尼帕病毒綜合防治知識
- 住院病歷質(zhì)量評分標準
- 用電安全與維護課件
- 養(yǎng)老機構(gòu)生活護理制度
- Unit 2 Go for it 知識清單 新教材外研版七年級英語下冊
- 2026青海海南州貴南縣自然資源和林業(yè)草原局招聘臨聘人員1人備考考試題庫附答案解析
- 語文-安徽省皖南八校2025屆高三上學期12月第二次大聯(lián)考試題和答案
- 制造業(yè)工業(yè)自動化生產(chǎn)線方案
- 《傳播學概論(第四版)》全套教學課件
- (正式版)JB∕T 7052-2024 六氟化硫高壓電氣設(shè)備用橡膠密封件 技術(shù)規(guī)范
- 單位車輛委托處理協(xié)議書
- 2024工傷免責承諾書
- 企業(yè)人才發(fā)展方案
- 《上樞密韓太尉書》教學課件
- 數(shù)字化與碳中和園區(qū)篇
- 八年級歷史上冊期末測試題帶答案
- 花城版音樂七年級下冊53康定情歌教案設(shè)計
評論
0/150
提交評論