版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第一章程序設計基本概念1.1程序和程序設計1.1.1C程序當今,計算機已廣泛應用于社會生活的各個領(lǐng)域,成為大眾化的現(xiàn)代工具。但是,不熟悉計算機的人仍然把它想象得十分神秘。其實,計算機不過是一種具有內(nèi)部存儲能力、由程序自動控制的電子設備。人們將需要計算機做的工作寫成一定形式的指令,并把它們存儲在計算機的內(nèi)部存儲器中,當人們給出命令之后,它就按指令操作順序就自動進行。人們把這種可以連續(xù)執(zhí)行的一條條指令的集合稱為“程序二可以說,程序就是人與機器進行“對話”的語言,也就是我們常說的“程序設計語言”。目前,在社會上使用的程序設計語言有上百種,它們都被稱為計算機的“高級語言”,如BASIC,PASCAL以及本書將介紹的C語言等。這些語言都是用接近人們習慣的自然語言和數(shù)學語言做為語言的表達形式,人們學習和操作起來感到十分方便。但是,對于計算機本身來說,它并不能直接識別由高級語言編寫的程序,它只能接受和處理由0和1的代碼構(gòu)成的二進制指令或數(shù)據(jù)。由于這種形式的指令是面向機器的,因此也稱為“機器語言”。我們把由高級語言編寫的程序稱為“源程序”,把由二進制代碼表示的程序稱為“目標程序”。如何把源程序轉(zhuǎn)換成機器能夠接受的目標程序,軟件工作者編制了一系列軟件,通過這些軟件可以把用戶按規(guī)定語法寫出的語句一一翻譯成二進制的機器指令。這種具有翻譯功能的軟件稱為“編譯程序”。每一種高級語言都有與它對應的編譯程序。例如,C語言編譯程序就是這樣的?種軟件,C語言編譯程序的功能如圖1.1所示。圖1.1我們所寫的每條C語句,經(jīng)過編譯(Compile)最終都將轉(zhuǎn)換成二進制的機器指令。由C語言構(gòu)成的指令序列稱C源程序,按C語言的語法編寫C程序的過程,稱C語言的代碼編寫。C語言源程序經(jīng)過C語言編譯程序編譯之后生成一個后綴為.OBJ的二進制文件(稱為目標文件夾)。最后還要由稱為“連接程序”(Link)的軟件,把此.OBJ文件與C語言提供的各種庫函數(shù)連接起來生成一個后綴為.EXE的可執(zhí)行文件。在DOS狀態(tài)下,只須打入此文件的名字(而不必打入后綴.EXE),該執(zhí)行文件就可運行。1.1.2程序設計簡單的程序設計一般包括以下幾個部分。.確定數(shù)據(jù)結(jié)構(gòu)。根據(jù)任務書提出要求、指定的輸入數(shù)據(jù)和輸出的結(jié)果,確定存放數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。.確定算法。針對存放數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)來確定解決問題、完成任務的一步一步的步驟。有關(guān)算法的概念將在下一節(jié)中介紹。.編碼。根據(jù)確定的數(shù)據(jù)結(jié)構(gòu)和算法,使用選定的計算機語言編寫程序代碼,輸入到計算機并保存在磁盤上,簡稱編程。.在計算機上調(diào)試程序。消除山于疏忽而引起的語法錯誤或邏輯錯誤;用各種可能的輸入數(shù)據(jù)對程序進行測試,使之對各種合理的數(shù)據(jù)都能得到正確的結(jié)果,對不合理的數(shù)據(jù)能進行適當?shù)奶幚怼?整理并寫出文檔資料。2算法學習計算機程序設計語言的目的,是要用語言作為工具,設計出可供計算機運行的程序。在拿到一個需要求解的問題之后,怎樣才能編寫出程序呢?除了選定合理的數(shù)據(jù)結(jié)構(gòu)外,一般來說,十分關(guān)鍵的一步是設計算法,有了一個好的算法,就可以用任何?種計算機高級語言把算法轉(zhuǎn)換為程序(編寫程序)。算法是指為解決某個特定問題而采取的確定且有限的步驟。一個算法應當具有以下五個特性:.有窮性。一個算法應包含有限個操作步驟。也就是說,在執(zhí)行若干個操作步驟之后,算法將結(jié)束,而且每一步都在合理的時間內(nèi)完成。.確定性。算法中每一條指令必須有確切的含義,不能有二義性,對于相同的輸入必能得出相同的執(zhí)行結(jié)果。.可行性。算法中指定的操作,都可以通過已經(jīng)實現(xiàn)的基本運算執(zhí)行有限次后實現(xiàn)。.有零個或多個輸入。在計算機上實現(xiàn)的算法,是用來處理數(shù)據(jù)對象的,在大多數(shù)情況下這些數(shù)據(jù)對象需要通過輸入來得到。.有一個或多個輸出。算法的目的是為了求“解”,這些“解”只有通過輸出才能得到。算法可以用各種描述方法來進行描述,最常用的是偽代碼和流程圖。偽代碼是?種近似高級語言但又不受語法約束的?種語言描述方式,這在英語國家中使用起來更方便。流程圖也是描述算法的很好的工具,傳統(tǒng)的流程圖由圖1.2中所示的兒中基本框組成。開始或終止處理框 輸入輸出框 判斷框流程線連接點圖1.2由這些框和流程線組成的流程圖來表示算法,形象直觀,簡單方便,但是這種流程圖對于流程線的走向沒有任何限制,可以任意轉(zhuǎn)向,在描述復雜的算法時所占篇幅較多,費時費力且不易閱讀。隨著結(jié)構(gòu)化程序設計方法的出現(xiàn),1973年美國學者LNassi和B.Shneiderman提出了一種新的流程圖形式。這種流程圖完全去掉了流程線,算法的每一步都用一個矩形框來描述,把一個個矩形框按執(zhí)行的次序連接起來就是一個完整的算法描述。這種流程圖用兩位學者名字的第一個英文字母命名,稱為N-S流程圖。我們將在下一節(jié)中結(jié)合結(jié)構(gòu)化程序設計中的一種基本結(jié)構(gòu)來介紹這種流程圖的基本結(jié)構(gòu)。本書中的例題,由于比較簡單,因此大都采用文字來進行描述,但要求讀者讀懂這兩種流程圖。.3結(jié)構(gòu)化程序設計和模塊化結(jié)構(gòu)3.1結(jié)構(gòu)化程序結(jié)構(gòu)化程序由二種基本結(jié)構(gòu)組成。.順序結(jié)構(gòu)。在本書第三章中將要介紹的如賦值語句,輸入、輸出語句都可構(gòu)成順序結(jié)構(gòu)。當執(zhí)行由這些語句構(gòu)成的程序時,將按這些語句在程序中的先后順序逐條執(zhí)行,沒有分支,沒有轉(zhuǎn)移。順序結(jié)構(gòu)可用圖1.3所示的流程圖表示,(a)是一般的流程圖,(b)是N-S流程圖。語句1語句1語句2 語句2(a) (b)圖1.3.選擇結(jié)構(gòu)。在本書第四章中將要介紹的if語句、switch語句都可構(gòu)成選擇結(jié)構(gòu)。當執(zhí)行到這些語句時,將根據(jù)不同的條件去選擇執(zhí)行不同分支中的語句。選擇結(jié)構(gòu)可用圖1.4所示的流程圖表示,(a)是一般的流程圖,(b)是N-S流程圖。圖1.4圖1.4.循環(huán)結(jié)構(gòu)。在本書第五章中將介紹不同形式的循環(huán)結(jié)構(gòu)。它們將根據(jù)各自的條件,使同一組語句重復執(zhí)行多次或一次也不執(zhí)行。循環(huán)結(jié)構(gòu)的流程圖如圖1.5和圖1.6所示,其中(a)是一般流程圖,(b)是N-S流程圖。圖1.5是當型循環(huán)。當型循環(huán)的特點是:當指定的條件滿足(成立)時,就執(zhí)行循環(huán)體,否則就不執(zhí)行。圖1.6是直到型循環(huán),該循環(huán)的特點是:執(zhí)行循環(huán)體直到指定的條件滿足(成立),就不再執(zhí)行循環(huán)。斷表達式二>= 斷表達式二>= 循環(huán)體V(a)圖1.5當型循環(huán)當判斷表達式滿足循環(huán)體(b)已經(jīng)證明,由二種基本結(jié)構(gòu)組成的算法結(jié)構(gòu)可以解決任何復雜的問題。由二種基本結(jié)構(gòu)成的算法稱為結(jié)構(gòu)化算法;由三種基本結(jié)構(gòu)所構(gòu)成的程序稱為結(jié)構(gòu)化程序。(a) (b)圖1.6直到型循環(huán)例1」先后輸入若干個整數(shù),要求打印出其中最大的數(shù),當輸入的數(shù)小于0時結(jié)束。用N-S流程圖表示算法。解題思路是:先輸入一個數(shù),在沒有其它數(shù)參加比較之前,它顯然是當前最大的數(shù),把它放到變量max中。讓max始終存放當前已比較過的數(shù)中的最大值。然后輸入第二個數(shù),并與max比較。如果第二個數(shù)大于max,則將第二個數(shù)取代max中原來的值。如此先后輸入和比較,每次比較后都將大者放在max中,當輸入的數(shù)小于。時結(jié)束。最后max中的值就是輸入的數(shù)中的最大者。根據(jù)此思路,畫圖N-S流程圖(見圖1.7)。變量x用來控制循環(huán)次數(shù),當x>0時,執(zhí)行循環(huán)體;在循環(huán)體內(nèi)進行兩個數(shù)比較和輸入x值。從圖1.7可見,在循環(huán)體的矩形框內(nèi)包含一個選擇結(jié)構(gòu)。1.3.2模塊化結(jié)構(gòu)當計算機在處理較大的復雜任務時,所編寫的應用程序經(jīng)常山上萬條語句所組成,需要由許多人共同完成。這時常常把這個復雜的任務分解成若干下子任務,每個子任務又分成很多小子任務,每個小子任務只完成一項簡單的功能。在程序設計時,用一個個小模塊來實現(xiàn)這些功能。程序設計人員分別完成一個或多個小模塊。我們稱這樣的程序設計方法為“模塊化”的方法,由一個個功能模塊構(gòu)成的程序結(jié)構(gòu)為模塊化結(jié)構(gòu)。由于已把一個大程序分解成若干相對獨立的子程序,每個子程序的代碼一般不超過一頁紙,因此對程序設計人員來說,編寫程序代碼已變得不再困難。這時只須對程序之間的數(shù)據(jù)傳遞作出統(tǒng)一規(guī)范,同?軟件可由一組人員同時進行編寫,分別時行調(diào)試,這就大大提高了程序編制的效率。軟件編制人員在進行程序設計的時候,首先應當集中考慮主程序中的算法,寫出主程序后再動手逐步子程序的調(diào)用。對于這些“子”程序也可用調(diào)試主程序的同樣方法逐步完成其下一層子程序的調(diào)用。這就是自頂向下、逐步細化、模塊化的程序設計。C語言是一種結(jié)構(gòu)化程序設計語言。它直接提供了三種基本結(jié)構(gòu)的語句;提供了定義“函數(shù)”的功能,在c語言中沒有子程序的概念,它提供的函數(shù)可以完成子程序的所有功能;C語言允許對函數(shù)單獨進行編譯,從而可以實現(xiàn)模塊化;另外還提供了豐富的數(shù)據(jù)類型。這些都為結(jié)構(gòu)化程序設計提供了有力的工具。習題在TURBOC環(huán)境中用RUN命令運行一個C程序時,所運行的程序的后綴是.C語言源程序文件名的后綴是,經(jīng)過編譯后,生成的后綴是,經(jīng)過連接后,生成文件的后綴是。結(jié)構(gòu)化程序由 、、 三種基本結(jié)構(gòu)組成。第二章C程序設計的初步知識C語言語法簡潔,緊湊;使用方便,靈活;具有豐富的運算符和數(shù)據(jù)結(jié)構(gòu);并且能夠通過函數(shù)實現(xiàn)程序的模塊化。它既具有高級語言的一切功能,也具有低級語言的一些功能。因此它既可以用來編寫系統(tǒng)軟件,也可以用來編寫應用軟件。它是當前國際上廣泛流行的一種計算機高級語言。簡單C語言程序的結(jié)構(gòu)和格式本節(jié)將通過一個簡單的程序例子,介紹C程序的一些基本構(gòu)成和格式,使讀者對C語言程序有一個初步了解。例2.1輸入矩形的兩條邊長,求矩形的面積。程序如下:#include"stdio.h"main()(floata,b,area;a=1.2; /*給矩形的兩條邊賦值*/b=3.6;area=a*b; /*f求出矩形的面積放入變量area*/printf("a=%f,b=%f,area=%f\n”,a,b,area); /*輸出矩形的兩條邊長和面積*/)以上程序的運行結(jié)果如下:a=1.200000,b=3.600000,area=4.320000以上程序中,main是主函數(shù)名,C語言規(guī)定必須用main作為主函數(shù)名。其后的一對圓括號中間可以是空的,但這一對圓括號不能省略。程序中的第2行:main()是主函數(shù)的起始行。一個C程序可以包含任意多個不同名的函數(shù),但必須有一個而且只能有一個主函數(shù)。一個C程序總是從主函數(shù)開始執(zhí)行。在函數(shù)的起始行后面是函數(shù)體。函數(shù)體用左花括號開始,用右花括號“}”結(jié)束。其間可以有定義(說明)部分和執(zhí)行語句部分。以上程序中的第4行就是程序的定義部分;第5行到第8行是程序的執(zhí)行部分,執(zhí)行部分語句稱為可執(zhí)行語句,必須放在說明部分之后,語句的數(shù)量不限,程序中由這些語句向計算機系統(tǒng)發(fā)出操作指令。定義語句用分號“;”結(jié)束,在以上程序中只有一個定義語句,對程序中所用到的每一個變量a、b、area進行定義并且說明它們?yōu)閒loat類型。程序的第5、6行用兩條語句分別給兩條國賦值,第7行計算出矩形面積并賦給變量area,第8行按設計的格式把a、b、area的值輸出到終端屏幕。C程序中的每一條執(zhí)行語句都必須用分號結(jié)束,分號是C語句的一部分,不是語句之間的分隔符。C語言程序有比較自由的書寫格式,但是過于“自由”的程序書寫格式,往往使人們很難讀懂程序,初學者應該從一開始就養(yǎng)成良好的習慣,使編寫的程序便于閱讀。在程序中可以對程序進行注釋,注釋部分必須用符號“/*”和“*/”括起來?!?*”和“*/”必須成對地出現(xiàn),“/*”和“*/”之間不可以有空格。注釋可以用西文,也可以用中文。注釋可以出現(xiàn)在程序中任意合適的地方。注釋部分對程序的運行不起作用。在注釋中可以說明變量的含義、程序段的功能,以便幫助人們閱讀程序。因此一個好的程序應該有詳細的注釋。程序中的第1行:include“stdio.h”通常稱為命令行,命令行必須用號開關(guān),最后不能加“;”,因為它不是C程序中的語句。一對雙引號中的stdio.h是系統(tǒng)提供的文件名,該文件中包含著有關(guān)輸入輸出函數(shù)的信息;調(diào)用不同的標準庫函數(shù),應當包含不同的文件,以便能包含有關(guān)庫函數(shù)的信息;應該調(diào)用哪個文件,將在以后章節(jié)中陸續(xù)介紹。常量、變量和標識符標識符在C語言中,標識符可用作變量名、符號名、函數(shù)名和后面將要學到的數(shù)組名、文件名以及一些具有專門含義的名字。合法的標識符山字母、數(shù)字或下劃線組成,并且第一個字符必須為字母或下劃線。下面的標識符都是合法的:area、PR_ini、a_array、si234、PlOlp以下都是非法的標識符:456P>cade-y、w.w、a&b在C語言的標識符中,大寫字母和小寫字母被認為是兩個不同的字符,因此page和Page是兩個不同的標識符。對于標識符的長度(即一個標識符允許的字符個數(shù)),一般的計算機系統(tǒng)規(guī)定取前8個字符有效,如果長于8個字符,多作的字符將不被識別。如number101和number102在計算機系統(tǒng)內(nèi)則被認為是具有相同的標識符numberlOo有些系統(tǒng)允許取較長名字,讀者在取名時應當了解所用系統(tǒng)的具體規(guī)定。C語言的標識符可分為以下三類。一.關(guān)鍵字C語言規(guī)定了一批標識符,它們在程序中都代表著固定的含義,不能另作它用。例如,用來說明變量類型的標識符int、float以及if語句中的if、else等都已有專門的用途,它們不能再用作變量名或函數(shù)名。C語言中的關(guān)鍵字請參考附錄一。二.預定義標識符這些標識符在C語言中也都有特定的含義,如C語言提供的庫函數(shù)的名字(如printf)和預編譯處理命令(如define)等。C語言語法允許用戶把這類標識符另作它用,但這將使這些標識符失去系統(tǒng)規(guī)定的愿意.鑒于目前各種計算機系統(tǒng)的C語言都一致把這類標識符作為固定的函數(shù)名或預編譯處理中的專門命令使用,因此為了避免誤解,建議用戶不要把這些預定義標識符另作它用。三.用戶標識符由用戶根據(jù)需要定義的標識符稱為用戶標識符。一般用來給變量、函數(shù)、數(shù)組或文件等命名。程序中使用的用戶標識符除要遵循起名規(guī)則外,還應注意做到“見名知義”,即選具有相關(guān)含義的英文單詞或漢語拼音,如number1>red^yellow>green>work,以增加程序的可讀性。如果用戶標識符與關(guān)健字相同,程序在編譯時將給出出錯信息:如果與預定義標識符相同,系統(tǒng)并不報錯,只是該預定義標識符將失去原定含義,代之以用戶確認的含義;或者會引發(fā)一些運行時錯誤。常量在程序運行過程中,其值不能改變的量,稱為常量。在C語言中,常量有不同的類型,有整型常量,實型常量,字符常量和字符串常量;即使是整型常量也還有短整型、長整型…….整型常量和實型常量也稱數(shù)值型常量,它們有正值和負值區(qū)分?;菊统A恐挥脭?shù)字表示,必須不帶小數(shù)點;如:12、-1、0等。實型常量通常用帶小數(shù)點的數(shù)表示,如:3.14159、217828、0.0等?!瓵','d'則是字符型常量。由此可見,常量的類型從字面形式即可區(qū)分,C編譯程序就是以此來確定數(shù)值常量的類型的。用定義一個符號名的方法來代表一個常量可以用一個符號名來代表一個常量,但是這個符號名必須在程序中進行特別的“指定”。例2.2計算圓面積。#include"stdio.h"#definePI3.14159 /*定義符號名PI為3.14159*/main(){floatr,s;r=5.0;s=PI*r*r;printf("s=%f\n”,s);)程序運行結(jié)果如下:s=78.539749程序中用#define命令行(注意:不是語句)定義PI代表一串字符3.14159,在對程序進行編譯時,凡本程序中出現(xiàn)PI的地方,編譯程序均用3.14159這一串字符來替換,在這里,PI是一個用戶自己選擇的符號名,本程序中,可以把PI視為3.14159的替身。為了使之比較醒目,這種符號通常采用大寫字母。用define進行定義時,必須用#號作為一行的開頭,在#define命令行的最后不得加分號結(jié)束。有關(guān)#define命令行的作用,將在后續(xù)篇章中介紹,讀者可以先按上述方法簡單地使用。在很多C語言書中把#define命令行中定義的符號名也稱為符號常量。變量其值可以改變的量稱為變量。程序中所用到的每一個變量都應該有一個名字作為標識,它是屬用戶標識符。如例2」中的a、b和area就是由用戶定義的變量名。變量名的命名規(guī)則應遵守標識符命名規(guī)則。一個變量實質(zhì)上是代表了內(nèi)存中的某個存儲單元。程序中的變量a,就是指用a命名的某個存儲單元,用戶對變量a進行的操作就是對該存儲單元進行操作;給變量a賦值,實質(zhì)上就是把數(shù)據(jù)存入該變量所代表的內(nèi)存單元中。C語言規(guī)定,程序中所要用到的變量應該先定義后使用。通常,對變量的定義放在函數(shù)的開頭部分,但也可以放在函數(shù)的外部或復合語句的開頭。象常量一樣,變量也有類型的區(qū)分,如整型變量、實型變量、字符型變量等。C語言在定義變量的同時說明該變量的類型,系統(tǒng)在編譯時就能根據(jù)定義及其類型為它分配相應數(shù)量的存儲空間。整型數(shù)據(jù)整型常量在C語言中,整型常量可以用十進制、八進制和十六進制形式來表示。十進制基本常量用一串連續(xù)的數(shù)字來表示,如:32767、-32768、0等。八進制數(shù)用數(shù)字0開頭(注意:不是字母。)。例如:010、011、016都是八進制數(shù),它們分別代表十進制數(shù)8、9、14。因此,在C程序中不能在一個十進制整數(shù)前面加前導零。例如,不能把十進制數(shù)11寫作011.注意:八進制數(shù)只能用合法的八進制數(shù)字表示,如,不能寫成018,因為數(shù)字8不是八進制數(shù)字,但C編譯程序?qū)Υ瞬⒉粓箦e,只是得不到正確的結(jié)果。十六進制數(shù)用數(shù)字0和字母x(或大寫字母X)開頭。例如:0x10、OXde、Oxf都是十六進制數(shù),它們分別代表十進制數(shù)16、222、15。注意:十六制數(shù)只能用合法的十六進制數(shù)字表示,字母a、b、c、d、e、f,既可用大寫也可用小寫。整型常量又有短整型(shortint)、基本整型(int)、長整型(longint)和無符號型(unsigned)的區(qū)分。整型變量整型變量可以分為基本型、短整型、長整型和無符號型四種。本節(jié)只介紹基本類型的整型變量?;拘偷恼妥兞坑妙愋兔P(guān)鍵字int進行定義,定義形式如下:intk; /*定義變量k為整型*/一個定義語句必須以一個";”號結(jié)束。在一個定義語句中也可以同時定義多個變量,變量之間用逗號隔開。如:inti,j,k; /*定義變量i、j、k為整型*/一般微機為基本型變量開辟2個字節(jié)(16個二進制位)的內(nèi)存單元,并按整型數(shù)的存儲方式存放數(shù)據(jù)。整型的變量只能存放整型數(shù)值。基本型整型變量中允許存放的數(shù)值范圍是:-32768?32767(B|J-2,5-(2,5-1))?當在程序中用以上方式定義變量i、j和k時,編譯程序為變量i,j和k都開辟存儲單元,但是并沒有在存儲單元中放置任何初值,因此在這些存儲單元中,原有的信息(垃圾)并沒有被清除,這時變量中的值是無意義的,稱變量值“無定義”。C語言規(guī)定,可以在定義變量的同時給變量賦初值,也稱變量初始化。如:main(){inti=l,j=0,k=2; /*定義i、j,k為整型變量,它們的初值分別為1、。和2*/}整型數(shù)據(jù)的分類在前兩節(jié)中已經(jīng)介紹過int類型的整型常量和整型變量。通常稱int類型為基本整型。除此以外,C語言中還包括其它三種整數(shù)類型,它們是短整型(shortint)\、長整型(longint)、無符號型(unsigned),若不指定為無符號型,隱含的即為有符號型(signed)。不同的計算機系統(tǒng)對這幾類整型所占用的字節(jié)數(shù)和數(shù)值范圍有不同規(guī)定,表2.1列出了微型機(IBMPC機)中這些類型的整型數(shù)所占用的字節(jié)數(shù)和數(shù)值范圍,表中方括號內(nèi)的單詞可寫也可不寫,各單詞的先后次序無關(guān)緊要。signed用來說明“有符號”,不寫signed也隱含為有符號。表2.1類型名稱占用的字節(jié)數(shù)數(shù)值范圍[signed]int2?32768?32767[signed]short[int]2?32768?32767[signed]long[int]4-2147483648?2147483647unsigned[int]20?65535unsignedshort[int]20?65535unsignedlong[int]40?4294967295若要表示一個長整型常量,則應該在一個整型常量后面加一個字母后綴1(L的小寫)或L,如123L、3451、OL,123456L等,這些常量在內(nèi)存中占四個字節(jié)。注意:一個足夠大的數(shù),如465356,雖然其面值是在長整型數(shù)的范圍內(nèi),但由于數(shù)字后面未加后綴字母L,因此并不能代表一個長整型數(shù)。無論是短整型還是長整型數(shù),都被識別為有符號整數(shù),無符號整數(shù)在數(shù)字的末尾應該加上字母后綴u或U,若是長整型無符號整數(shù)常量,則應該加后綴lu或LU;短整型無符號常量的取值應在0?65535范圍內(nèi),長整型無符號常量的取值則在。?4294967295的范圍內(nèi)。注意:無符號常量不能表示成小于0的負數(shù),例如:-200U是不合法的。整數(shù)在內(nèi)存中的存儲形式計算機中,內(nèi)存儲器的最小存儲單位稱為“位(bite)”,每一個位中或者存放0,或者存放1,因此稱為二進制位。大多數(shù)計算機把8個二進制位組成一個“字節(jié)(byte)”,并給每個字節(jié)分配一個地址。若干字節(jié)組成一個“字(word)”,用一個字來存放一條機器指令或一個數(shù)據(jù)。一個字含多少個字節(jié)隨機機器而不同。如果-臺計算機系統(tǒng)以兩字節(jié)(16個二進制位)來存放一條機器指令,就稱這臺計算機的字長為16位;例如:16位微機,就是指以16位二進制位作為一個字的微型計算機。一個字節(jié)一般有8個二進制位,本書中把最右邊的一位稱為最低位,把最左邊的一位稱為最高位。在C語言中,一個int整數(shù)通常用兩個字節(jié)存放;其中最高位(最左邊的一位)用來存放整數(shù)的符號,若是正整數(shù),最高位放置0,若是負整數(shù),最高位放置1。因此,從最高位就立刻能判別出存放的?個整數(shù)是正整數(shù)還是負整數(shù)。一.正整數(shù)C語言中,當用兩個字節(jié)存放一個整數(shù)時,例如整數(shù)5在內(nèi)存中的二進制碼為:0000000000000101對于正整數(shù)的這種存儲形式稱為用“原碼形式”存放。因此用兩個字節(jié)存放的最大正整數(shù)是:0111111111111111它的值為32767.為簡單起見,書中對于整數(shù)5用一個字節(jié)00000101來表示。二.負整數(shù)C語言中,對于負整數(shù),在內(nèi)存中是以整數(shù)的“補碼”形式存放。取某個二進制碼的補碼,如:00000101(十進制數(shù)5)的補碼,步驟如下:求原碼的反碼。即:把1轉(zhuǎn)換成0,把0轉(zhuǎn)換成1.因此00000101的反碼為11111010.把所求得的反碼加1,即得原碼的被碼。因此11111010加1得1111011,這就是-5在內(nèi)存中的二進制碼。用兩個字節(jié)表示即為:11111111111110112.要把內(nèi)存中以補碼形式存放的二進制碼轉(zhuǎn)換成十進制的負整數(shù),步驟如下:先對各位取反。例如,有補碼11H1010,取反后為00000101.將所得二進制數(shù)轉(zhuǎn)換成十進制數(shù)。例如,00000101的十進制數(shù)為5.因為11111010的最高位為1,因此在所得的十進制數(shù)前面加負號,得-5.對所求得的數(shù)再減1,即為-6.由以上分析可知,由兩個字節(jié)存放的最小整數(shù)是100000000000000000,它的十進制數(shù)為-32768;而-1的二進制碼為uiinimnnu。讀者可按以上步驟進行換算。三、無符號整數(shù)用兩個字節(jié)存放一個整數(shù)時,若說明為無符號整數(shù),其中最高位不再用來存放整數(shù)的符號,16個二進制位全部用來存放整數(shù),因此無符號整數(shù)不可能是負數(shù),這時,16個二進制位中全部都是1時,它所代表的整數(shù)就不再是-1而是65535,對此請讀者動手自己驗證。2.4實型數(shù)據(jù)實型常量實型常量又稱實數(shù)。在C語言中可以用兩種形式表示一個實型常量。一、小數(shù)形式即在數(shù)學中常用的實數(shù)形式,由數(shù)字和小數(shù)點組成(注意:必須要有小數(shù)點),如0.123、223、123.、0。等都是合法的實型常量。二、指數(shù)形式這種形式類似數(shù)學中的指數(shù)形式。在數(shù)學中,一個數(shù)可以用幕的形式來表示,如2.3026可以表示為0.2306X1()1、2.3026X10°,23.026X10”等形式。在C語言中,則以“e”或“E”后跟一個整數(shù)來表示以10為底數(shù)的界數(shù)。2.3026可以表示為0.2306E1、2.3026e0、6e-loC語言的語法規(guī)定,字母e(或E)之前必須要有數(shù)字,且e或E后面的指數(shù)為整數(shù)。如果寫成:e3、.5e36、.e3、e等都是不合法的指數(shù)形式。注意,在字母e(或E)的前后以及數(shù)字之間不得插入空格。實型變量C語言中實型變量分為單精度型和雙精度型兩類,分別用類型名float和double進行定義。單精度型變量定義的形式如下:floata,b,c;雙精度型變量定義的形式如下:doublex,y,z;在般計算機系統(tǒng)中,為float類型的變量分配4個字節(jié)的存儲單元,為double類型的變量分配8個字節(jié)的存儲單元,并按實型數(shù)的存儲方式存放數(shù)據(jù)。實型的變量只能存儲實型數(shù);不能用整型變量存放一個實數(shù),也不能用實型變量存放一個整數(shù)。在TURBOC中單精度實數(shù)的數(shù)值范圍約在-1()38?1()38之間,并提供7位有效位;小于10_38的數(shù)被處理成零值。雙精度實數(shù)的數(shù)值范圍約在-1()308?1()3°8之間,并提供15?16位有效位,具體精確到多少位與機器有關(guān);小于10一308的數(shù)被處理成零值。因此,double型變量中存放的數(shù)據(jù)要比float型變量中存放的數(shù)據(jù)精確得多。我們已經(jīng)介紹過,在程序中一個實數(shù)可以用小數(shù)形式表示,也可以用指數(shù)形式表示。但在內(nèi)存中,實數(shù)一律是以指數(shù)形式存放的。注意:在計算機內(nèi)存中可以精確地存放一個整數(shù),不會出現(xiàn)誤差,但整型數(shù)值的存放范圍較?。皇褂脤嵭蛿?shù)的范圍大,但往往存在誤差??梢越o實型變量賦初值,如:main(){floata=1.5,b=0.0; /*定義a、b為實型變量,它們的初值分別為1.5和0.0*/)算術(shù)表達式基本的算術(shù)運算符在C語言中基本的算術(shù)去處符是:+、-、*、/、%。分別為加、減、乘、除、求余運算符。這些運算符需要兩個運算對象,稱為雙目運算符。除求余運算符外,運算對象可以是整型,也可以是實型。如1+2、1.2*32。求余運算符的運算對象只能是整型。在“%”運算符左側(cè)的運算數(shù)為被除數(shù),右側(cè)的運算數(shù)為除數(shù),運算結(jié)果是兩數(shù)相除后所得的余數(shù).當運算量為負數(shù)時,所得結(jié)果的符號隨機器而不同,在TURBOC中,符號與被除數(shù)相同。例如17%-3的結(jié)果為2,-19%4的結(jié)果為-3.“+”和“-”也可用作單目運算符,運算符必須出現(xiàn)在運算量的左邊,運算量可為整型,也可為實型。如:-54、+3.9.說明:雙目運算符兩邊運算數(shù)的類型必須一致才能進行操作。所得結(jié)果的類型與運算數(shù)的類型一致。例如1.0/2.0,其運算結(jié)果為0.5:1/2,其運算結(jié)果為0。如果雙目運算符兩邊運算數(shù)的類型不一致,如一邊是整型數(shù),一邊是實型數(shù)時,系統(tǒng)將自動把整型轉(zhuǎn)換為實型數(shù),使運算符兩邊的類型達到一致后,再進行運算。雙目運算中,兩邊運算數(shù)的類型不一致時,類型轉(zhuǎn)換規(guī)律見附錄二。在C語言中,所有實型數(shù)的運算均以雙精度方式進行。若是單精度數(shù),則在尾數(shù)部分補0,使之轉(zhuǎn)化為雙精度數(shù)。運算符的優(yōu)先級、結(jié)合性和算術(shù)表達式在C語言中,常量、變量、函數(shù)調(diào)用以及按C語言語法規(guī)則用運算符把運算數(shù)連起來的式子都是合法的表達式。凡是表達式都有一個值,即運算結(jié)果。一.算術(shù)運算符的優(yōu)先級算術(shù)運算符的圓括號的優(yōu)先級高低次序如下:()、+、-、*、/、%、+、一單目 雙目同級同級同級高 ?低二、算術(shù)運算符和圓括號的結(jié)合性以上所列的運算符中,只有單目運算符“一”和“+”的結(jié)合性是從右到左,其余運算符的結(jié)合性都是從左到右。例如,表達式(5+1)/2的運算結(jié)果是3,圓括號的優(yōu)先級高于除號;表達式5+1/2的運算結(jié)果是5,除號的優(yōu)先級高于加號:表達式5*-2的運算結(jié)果是-10,單目運算符“一”的優(yōu)先級高于乘號,這個表達式與5*(-2)等價。C語言運算符的優(yōu)先級和結(jié)合方向見附錄三。三、算術(shù)表達式用算術(shù)運算符和一對圓括號將運算量(或稱操作數(shù))連接起來的、符合C語法的表達式稱為算術(shù)表達式。運算對象可以是常量、變量和函數(shù)等。例如:2+sqrt(c)*bo在計算機語言中,算術(shù)表達式求值規(guī)律與數(shù)學中的四則運算的規(guī)律類似,其運算規(guī)則和要求如下:在算術(shù)表達式中,可使用多層圓括號,但左右括號必須配對。運算時從內(nèi)層圓括號開始,由內(nèi)向外依次計算表達式的值。在算術(shù)表達式中,若包含不同優(yōu)先級的運算符,則按運算符的優(yōu)先級別由高到低進行,若表達式中運算符的級別相同,則按運算符的結(jié)合方向進行。例如表達式a+bv,因為加號和減號的優(yōu)先級別相同,它們的結(jié)合性為從左到右,因此先計算a+b,然后把所得結(jié)果減去Co強制類型轉(zhuǎn)換表達式強制類型轉(zhuǎn)換表達式的形式如下:(類型名)(表達式)其中(類型名)稱為強制類型轉(zhuǎn)換運算符,可以利用強制類型轉(zhuǎn)換運算符,將一個表達式的值轉(zhuǎn)換成指定的類型。這種轉(zhuǎn)換是根據(jù)人為要求而進行的。例如,表達式(int)3.234把3.234轉(zhuǎn)換成整數(shù)3;表達式(double)(10%3)把10%3所得結(jié)果1轉(zhuǎn)換成雙精度數(shù)1.0.賦值表達式賦值運算符和賦值表達式在C語言中,“=”符號稱為賦值運算符,由賦值運算符組成的表達式稱為賦值表達,它的形式如下:變量名=表達式賦值號的左邊必須是一個代表某一存儲單元的變量名,或是代表某存儲單元的表達式,對于初學者來說,只要記住等號左邊必須是變量名即可。賦值號的右邊必須是C語言中合法的表達式。賦值運算的功能是先求出右邊表達式的值,然后把此值賦給等號左邊的變量,確切地說,是把數(shù)據(jù)放入以該變量為標識的存儲單元中去。例如,若a和b都被定義成int類型變量a=10 /*把常量10賦給變量a*/b=a /*把a中的值賦給變量b,a中的值不變*/在程序中可以多次給一個變量賦值,因此每賦一次值,與它相應的存儲單元中的數(shù)據(jù)就被更新一次,內(nèi)在中當前的數(shù)據(jù)就是最后一次所賦的那個數(shù)據(jù)。說明:賦值運算符的優(yōu)先級別只高于逗號運算符,比其它任何運算的優(yōu)先級都低,且具有自右向左的結(jié)合性。因此,對于如下的表達式:a=2+7/3由于所有其它運算符的優(yōu)先級都比賦值運算符高,所以將先計算機賦值運算符右邊的表達式的值,再把此值賦給變量a。賦值表達式x=y的作用是,將變量y所代表的存儲單元中的內(nèi)容賦給變量x所代表的存儲單元,x中的原有的數(shù)據(jù)被替換掉;賦值后,y變量中的內(nèi)容保持不變。此表達式應當讀做“把右邊的變量中的值賦予左邊變量”,而不應讀做“x等于y”。在賦值表達式x=x中,雖然賦值運算符兩邊的運算對象都是x,但出現(xiàn)在賦值號左邊和右邊的x具有不相同的含義。賦值號右邊的x表示變量x所代表的存儲單元中的值。賦值號左邊的x代表以x為標識的存儲單元。該表達式的含義是取變量x中的值放入到變量x中去。當然,這一操作并無實際意義。而n=n+l,則是合法的賦值表達式,其作用是取變量n中的值加1后再放入到變量n中;即,使變量n中的值增1.賦值運算符的左側(cè)只能是變量不能是常量或表達式。如a+b=c是不合法的賦值表達式。賦值號右邊的表達式也可以是一個賦值表達式,如a=b=7+l,按照運算符的優(yōu)先級,以上表達式將先計算出7+1的值8;按照賦值運算符自右向左的結(jié)合性,將先把8賦給變量b,然后再把變量b的值賦給變量a。而表達式2=7+1=1)則是不合法的,因為在7+1=b中,賦值號的左邊不是一個變量。在C語言中,“=”符號被視為一個運算符,a=19是一個表達式,而表達式應該有一個值,C語言規(guī)定最左邊變量所得到的新值就是賦值表達式的值。C語言的賦值表達式可以作為語句中的某個成分出現(xiàn)在眾多的語句或表達式中,因而比較難以掌握變量中的數(shù)值變化過程。因此要求讀者在學習過程中建立正確的概念,才能準確掌握賦值表達式的運算規(guī)律。復合的賦值表達式在賦值運算符之前加上其它運算符可以構(gòu)成復合賦值運算符。C語言規(guī)定可以使用10種復合賦值運算符,其中與算術(shù)運算有關(guān)的復合運算符是:+=、一=、*=、/=、%=(注意:兩個符號之間不可以有空格)。復合賦值運算符的優(yōu)先級與賦值運算符的優(yōu)先級相同。表達式n+=l的運算規(guī)則等價于n=n+l,表達式n*=m+3的運算規(guī)則等價于n=n*(m+3),因為運算符“+”的優(yōu)先級高于復合賦值運算符“*=”?其它依次類推。例2.3已有變量a,其值為9,計算表達式a+=a-=a+a的值。分析:因為賦值運算符與復合賦值運算符“一=”和“+=”的優(yōu)先級相同,且運算方向自右至左,所以先計算“a+a”,因a的初值是9,所以該表達式的值為18;(2)再計算“a-=18",此式相當于“a=a-18",因a的值仍是9,所以表達式的值為一9:最后計算“a+=—9",此式相當于“a=a+(-9)”,因a的值此時已是-9,所以表達式的值為-18;由此可知,表達式a+a-=a+a的值是-18。賦值運算中的類型轉(zhuǎn)換在賦值運算中,只有在賦值號右側(cè)表達式的類型與左側(cè)變量類型完全一致時,賦值操作才能進行。如果賦值運算符兩側(cè)的數(shù)據(jù)類型不一致,在賦值前,系統(tǒng)將自動先把右側(cè)表達式求得的數(shù)值,按賦值號左邊的變量的類型進行轉(zhuǎn)換,也可以用強制類型轉(zhuǎn)換的方式,人為地進行轉(zhuǎn)換后賦給賦值號左邊的變量。但這種轉(zhuǎn)換僅限于數(shù)值數(shù)據(jù)之間,通常稱為“賦值兼容”,對于另外一些數(shù)據(jù),例如后面將要討論的地址值就不能賦給一般的變量,稱為“賦值不兼容”。在這里,特別需要指出的是在進行混合運算時整型數(shù)據(jù)類型之間的轉(zhuǎn)換問題。在C語言的表達式中(不包括賦值表達式),如果運算符兩邊的整數(shù)類型不相同,將進行類型之間的轉(zhuǎn)換。轉(zhuǎn)換規(guī)則如下:運算符兩邊一個是短整型,一個是長整型,則短整型轉(zhuǎn)換成長整型,然后進行運算。運算符兩邊一個是有符號整型,一個是無符號整型,則有符號整型轉(zhuǎn)換成無符號整型,然后時行運算。在C語言的賦值表達式中,賦值號右邊的值先轉(zhuǎn)換成與賦值號左邊的變量相同的類型,然后進行賦值。應當注意:當賦值號左邊的變量為短整型,右邊的值為長整型,短整型變量只能接受長整型數(shù)低位上兩個字節(jié)中的數(shù)據(jù),高位上兩個字節(jié)中的數(shù)據(jù)將丟失;也就是說,右邊的值不能超出短整型的數(shù)值范圍,否則將得不到預期的結(jié)果。例如,若有以下定義和語句:inta;unsignedlongb;b=98304;a=b;printf(4t%d\n,,,a);則a中的值為-32768。因為98304(二進制數(shù)11000000000000000)已經(jīng)超出短整型的數(shù)值范圍(32767),a截取b中低16位中的值(二進制數(shù)1000000000000000),由于最高位為1,因此a中的值為-32768。(2)當賦值號左邊的變量為無符號整型,右邊的值為有符號整型時,把內(nèi)存中的內(nèi)容原樣復制。右邊數(shù)值的范圍不應該超出左邊的變量可以接受的數(shù)值的范圍。同時需要注意,這時負數(shù)將轉(zhuǎn)換為正數(shù),例如,變量a被說明為unsigned類型,在進行了a=-l的賦值操作后,將使a中的值為65535.當賦值號左邊的變量為有符號整型,右邊的值為無符號整型時,賦值的機制同上。這時若最高位是1,將按負數(shù)處理。自加、自減運算符和逗號運算符自加運算符(++)和自減運算符(一一)一、自加運算符“++”和自減運算符“一一”的運算結(jié)果是使運算對象的值增1或減1.如i++,相當于i=i+l;i--,相當于i=i-l。因此,自加或自減運算本身也是一種賦值運算。二、++、一一運算符是單目運算符,運算對象可以是整型變量也可以是實型變量,不能是常量和表達式,因為不能給常量或表達式賦值;因此,如++3、(i+j)一一等都是不合法的。三、自加、自減運算符既可做為關(guān)綴運算符,也可做為后綴運算符而構(gòu)成一個表達式,如++i、一一i、i++、i-等都是合法的表達式。但無論是作為前綴還是作為后綴運算符,對于變量本身來說自增1或自減1都具有相同的效果,但作為表達式來說卻是有著不同的值。例如,若變量i為int類型,且已有值為5;則表達式++i,先進行i增1運算,表達式的值為6;一—i先進行i減1運算,表達式的值為4;i++表達式的值為5,i進行增1運算,使i中的值為6;i——表達式的值為5,i進行減1運算,使i中的值為4.四、++和一一運算符的結(jié)合方向是“自右至左二例如有一表達式-i++,i的左邊是負號運算符,右邊是自加運算符。負號運算符和自加運算符優(yōu)先級相同;結(jié)合方向“自右至左”,即相當于對表達式一(i++)進行運算。如果需要輸出表達式-i++的值,則應先取出i的值使用,輸出-i的值為-3,然后使i增值為4.五、請不要在一個表達式中對同一個變量時行多次諸如i++或++i等運算,例如寫成:i++*++i+i一*_i,這種表達式不僅可讀性差,而且不同的編譯系統(tǒng)對這樣的表達式將作不同的解釋,進行不同的處理,因而所得結(jié)果也各不相同。逗號運算符和逗號表達式“,”是C語言提供的一種特殊運算符,用逗號將表達式連接起來的式子稱為逗號表達式。逗號表達式的一?般形式為:表達式1,表達式2,…,表達式n說明:逗號運算符的結(jié)合性為從左到右,因此逗號表達式將從左到右進行運算。即,先計算表達式1,最后計算表達式n?最后一個表達式的值就是此逗號表達式的值。如:(不,i++,++i,i+5)這個逗號表達式的值是10,i的值為5.(2)在所有運算符中,逗號運算符的優(yōu)先級別最低。習題—.選擇題以下選項中不正確的整型常量是A.12. B.-20C.1,000 D.456以下選項中正確的實型常量是A.0 B.3.1415 C.O.329X1O2D..871以下選項中不正確的實型常量是A.2.607E-1 B.0.8103e2 C.-77.77 D.456e-2以下選項中不合法的用戶標識符是A.abc.c B.file C.Main D.PRINTF以下選項中不合法的用戶標識符是TOC\o"1-5"\h\zA._123 B.printf C.A$ D.DimC語言中運算對象必需是整型的運算符是A.% B./ C.! D.**可以在C程序中用作用戶標識符的一組標識是A.voidB.as_b3C.ForD.2cdefine_123-abc DOWORDIf case SIG若變量已正確定義并賦值,符合C語言語法的表達式是A.a=a+7; B.a=7+b+c,a++ C.int(12.3%4) D.a=a+7=c+b以下敘述中正確的是A、a是實型變量,C允許進行以下賦值a=10,因此可以這樣說:實型變量中允許存放整型值。B、在賦值表達式中,賦值號右邊既可以是變量也可以是任意表達式。C、執(zhí)行表達式a=b后,在內(nèi)存中a和b存儲單元中的原有值都將被改變,a的值已由原值改變?yōu)閎的值,b的值由原值變?yōu)?。D、已有a=3,b=5o當執(zhí)行了表達式a=a+b,b=a-b,a=a-b之后,已使a中的值為5,b中的值為3.以下敘述中正確的是A、在C程序中無論是整數(shù)還是實數(shù),只要在允許的范圍內(nèi)都能準確無誤的表示。B、C程序由主函數(shù)組成。C、C程序由函數(shù)組成。D、C程序由函數(shù)和過程組成。TURBOC中int類型變量所占字節(jié)數(shù)是TOC\o"1-5"\h\zA.1 B.2 C.3 D.4不合法的十六進制數(shù)是A.oxffB.OXabc C.Oxll D.0xl9二、填空題若k為int整型變量且賦值11。請寫出運算k++后表達式的值 和變量k的值 .若x為double型變量,請寫出運算x=3.2,++x后表達式的值—和變量k的值 。函數(shù)體由符號一開始,用符號一結(jié)束。函數(shù)體的前面是一部分,其后是一部分。C語言中的標識符可以分為一、—和預定義標識符三類。在C語言程序中,用關(guān)鍵字一定義基本整型變量,用關(guān)鍵字一定義單精度型變量,用關(guān)鍵字一定義雙精度型變量。把al、a2定義成單精度實型變量,并賦初值1的定義語句是.C程序中定義的變量,代表內(nèi)存中的一個?表達式3.5+1/2的計算結(jié)果是?對以下數(shù)學式,寫出三個等價的C語言表達式一、—、—.a-bc表達式s=10應當讀作“計算機中內(nèi)存儲器的最小存儲單位稱一,其中能容納的數(shù)是一o通常一個字節(jié)包含一個二進制位。在一個字節(jié)中能存放的最大(十進制)整數(shù)是一,它的二進制數(shù)的形式是一;最?。ㄊM制)整數(shù)是一,它的二進制數(shù)的形式是。當計算機用兩個字節(jié)存放一個整數(shù)時,其中能存放的最大(十進制)整數(shù)是一、最小(十進制)整數(shù)是一,它的二進制數(shù)的形式是—O在C語言中整數(shù)可用一進制數(shù)、一進制數(shù)和一進制數(shù)三種數(shù)制表示。三、上機改錯題(讀者最好在TURBOC環(huán)境下上機試一試,以便熟悉出錯信息)。請指出以下C程序的錯誤所在#include"stdio.h";main();/*mainfunction*/floatr,s; /*/*risradius*/,/*sisareaofcircular*/*/r=5.0;s=3.14159*r*r;pritf("%f\n”,s)請指出以下C程序的錯誤所在#include"stdio.h"main/*mainfunction*/{floata,b,c,v; /*a,b,caresides,visvolumeofcube*/a=2.0;b=3.0;c=4.0v=a*b*c;printf(<<%f\n,,,v))第三章順序結(jié)構(gòu)本章所介紹的語句,將按它們在程序中出現(xiàn)的順序逐條執(zhí)行,由這樣的語句的程序結(jié)構(gòu)稱為順序結(jié)構(gòu)。賦值語句在賦值表達式的尾部加上一個“;”,就構(gòu)成了賦值語句也稱表達式語句。例如a=b+c是賦值表達式,a=b+c;則是賦值語句;i=l,j=2是逗號表達式,而i=l,j=2;則是一條賦值語句。i++;i-;都是賦值語句,程序執(zhí)行時,首先取出變量i中的值,加1或減1后再把新的數(shù)放入變量i中。賦值語句是一種可執(zhí)行語句,應當出現(xiàn)在函數(shù)的可執(zhí)行部分。C語言中可由形式多樣的賦值表達式構(gòu)成賦值語句,用法靈活,因此讀者首先應當掌握好賦值表達式的運算規(guī)律才能寫出正確的賦值語句。數(shù)據(jù)輸出把數(shù)據(jù)從計算機內(nèi)部送到計算機的外部設備上的操作稱為“輸出”。例如,把計算機運算結(jié)果顯示在屏幕上或打印在紙匕或者送到磁盤上保留起來。從計算機外部設備將數(shù)據(jù)送入計算機內(nèi)部的操作稱為“輸入”。C語言本身不提供用于輸入和輸出的語句。在C語言程序中,可以通過調(diào)用標準庫函數(shù)提供的輸入和輸出函數(shù)來實現(xiàn)數(shù)據(jù)的輸入和輸出。printf函數(shù)的一般調(diào)用形式printf函數(shù)是C語言提供的標準輸出函數(shù),它的作用是在終端設備(或系統(tǒng)隱含指定的輸出設備)上按指定格式進行輸出。printf函數(shù)的一般調(diào)用形式如下:printf(格式控制,輸出項表)如果在printf函數(shù)調(diào)用之后加上就構(gòu)成了輸出語句。例如:printf("a=%d,b=%d”,a,b);其中printf是函數(shù)名;在圓括號中用雙引號括起來的字符串,如“a=%d,b=%d”稱為格式控制串;a,b是輸出項表中的輸出項,它們都是printf函數(shù)的參數(shù)。在這里,格式控制的作用是:1、為各輸出項提供格式轉(zhuǎn)換說明格式轉(zhuǎn)換說明的作用是將要輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。它總是由“%”符號開始,緊跟其后的是格式描述符。當輸出項為int類型時,系統(tǒng)規(guī)定用d作為格式描述字符,其形式為%d,如上面的例子;當輸出項為float或double類型時,用f或e作為格式描述字符,其形式為%f或%e(對于double類型也可用%If或%le)。2,提供需要原樣輸出的文字或字符如以上輸出語句中的“a=",“b=”等都是希望原樣輸出的字符。假若a,b的值分別為3和4,則以上輸出的輸出結(jié)果為:a=3,b=4。輸出項表中的各輸出項要用逗號隔開,輸出項可以是合法的常量、變量或表達式。格式轉(zhuǎn)換說明的個數(shù)要與輸出項的個數(shù)相同,使用的格式描述符也要與它們一一對應且類型匹配。例如以下程序:main(){inti=2518;floata=3.1415;printf("i=%d,a=%f,a*10=%e\n,,,i,a,a*10);)運行后的輸出結(jié)果為:i=2518,a=3.141500,a*10=3.141500e+01在以上printf的格式控制串中,i=按原樣輸出,在%d的位置上輸出變量i的值,接著輸出一個逗號和a=,在%f的位置上輸出變量a的值,又輸出一個逗號和a*10=,在%e的位置上輸出表達式a*10的值,最后的\n是C語言中特定的轉(zhuǎn)義字符,相當于一個轉(zhuǎn)行符使得屏幕光標或打印機頭移到下一行的開頭,有關(guān)轉(zhuǎn)義字符將在第六章中討論,讀者可在輸出語句中先照此例使用。printf函數(shù)中常用的格式說明
每個格式說明都必須用“%”開頭,以一個格式字符作為結(jié)束,在此之間可以根據(jù)需要插入“寬度說明"、左對齊符號“一”、前導零符號“0”等。.格式字符允許使用的格式字符和它們的功能如表3.1所示。在一些系統(tǒng)中,這些格式字符只允許用小寫字母,因此建議讀者使用小寫字母,使程序具有通用性。表3.1格式字符說 明C輸出一個字符d或i輸出帶符號的十進制整型數(shù)0以八進制無符號形式輸出整型數(shù)(不帶前導0)x或X以十六進制無符號形式輸出整型數(shù)(不帶前導Ox或0X)U按無符號的卜進制形式輸出形型數(shù)f以帶小數(shù)點的形式輸出單精度和雙精度數(shù)e或E以[-]m.dddddde土xx或[-]m.ddddddE土xx的指數(shù)形式輸出單精度和雙精度數(shù)。d的個數(shù)山精度指定。隱含的精度為6;若指定的精度為0,小數(shù)部分(包括小數(shù)點)都不輸出g或GS由系統(tǒng)決定采用%f格式還是采用%e格式,以使輸出寬度最小輸出字符串中的字符,直到遇到“\0”?;蛘咻敵鲇删戎付ǖ淖址麛?shù)P輸出變量的內(nèi)存地址%打印一個%.長度修飾符長度修飾符加在%和格式字符之間,對于長整型數(shù)一定要加l(long);h可用于短整型(short)或無符號短整型數(shù)的輸出。.輸出數(shù)據(jù)所占的寬度當使用%d、%c、%f、%e、…格式說明時,輸出數(shù)據(jù)所占的寬度由系統(tǒng)決定(通常取數(shù)據(jù)本身的寬度,不加空格),并采用右對齊的形式。可以用以下三種方法人為控制輸出數(shù)據(jù)所占的寬度。(1)在%與格式字符之間插入一個整數(shù)來指定輸出寬度,注意,不能用變量。如果指定的輸出寬度不夠,并不影響數(shù)據(jù)的完整輸出,系統(tǒng)會代之以隱含的輸出寬度;如果指定的輸出寬度多于數(shù)據(jù)實際所需寬度,數(shù)據(jù)右對齊,左邊補以空格。表3.2例舉了未指定寬度和指定輸出寬度時的輸出結(jié)果(從第一列開始)。表3.2輸出語句輸出結(jié)果printfC4%d\n,\42);printf("%5d\n”,42);printfC%f\nM,123.54);printf("%12f\n”,123.54);printfC4%e\n,\123.54);printf("%13e\n”,123.54);printf("%g\n”J23.5);printf("%8g\n”,123.5);421IIII142123.5400001.23540e+02Illi1.12540e+02123.51IIII1123.5(2)對于float或double類型的實型數(shù)可以有“整數(shù)1.整數(shù)2”的形式在指定寬度的同時來指定小數(shù)位的倍數(shù)。其中,“整數(shù)1”用以指定輸出數(shù)據(jù)總的所占寬度,“整數(shù)2”稱為精度。精度對于不同的格式字符有不同的含義。對于e、E或f,用以指定輸出數(shù)據(jù)小數(shù)位所占位數(shù)。當輸出數(shù)據(jù)的小數(shù)位多于“整數(shù)2”指定的寬度時,截去右邊多余的小數(shù),并對截去的第一位小數(shù)做四舍五入處理;當輸出數(shù)據(jù)的小數(shù)位少于“數(shù)據(jù)2”指定的寬度時,在小數(shù)的最右邊添0.當輸出數(shù)據(jù)所占的寬度大于“整數(shù)1”指定的寬度時,小數(shù)位仍按上述規(guī)則處理,整數(shù)部分并不丟失。也可以用整數(shù)2”的形式來指定小數(shù)位的位數(shù)。這時輸出數(shù)據(jù)的寬度由系統(tǒng)決定。若指定%.0,則不輸出小數(shù)點和小數(shù)部分。對于g或G,用來指定輸出的有效數(shù)字。對于整數(shù),用來指定必須輸出的數(shù)字個數(shù),若輸出的數(shù)字少于整數(shù)2指定的個數(shù),則在數(shù)字前面加0補足;若輸出的數(shù)字多于整數(shù)2指定的個數(shù)時,牛刀割雞數(shù)字的實際寬度輸出。對于字符串,用來指定最多輸出的字符個數(shù)。表3.3例舉了指定精度時的輸出結(jié)果。表3.3輸出語句輸出結(jié)果printff4%5d\n,\42);00042printf(u%.0d\n,,,42);42printf("%8.3An”,123.55);II123.550printf(“%8.1f\n”,123.55);llllll123.6printfC%8.0f\n,\123.55);IIIIIIIIII124printf("%g\n”,123.56789);123.568printfC%.7g\n,,,l23.56789);123.5679printfCfc%.5s\nM,,,abcdefgM);abcdefg注意:輸出數(shù)據(jù)的實際精度并不取決于格式控制中的域?qū)捄托?shù)的位寬,而是取決于數(shù)據(jù)在計算機內(nèi)的存儲精度。通常,系統(tǒng)對float類型提供7位有效數(shù)字,對于double類型提供15位或16位有效數(shù)字;格式控制中的域?qū)捄托?shù)的位寬指定的再大也不能改變數(shù)據(jù)的存儲精度,所輸出的多余位上的數(shù)字是無意義的。4o輸出數(shù)據(jù)左對齊可以在指定輸出寬度的同時指定數(shù)據(jù)左對齊是。這可在寬度前加一個“一”號來實現(xiàn)。表3.4例舉了指定左對齊時的輸出結(jié)果。輸出語句輸出結(jié)果printf("%6d\n”,123);printf(u%-6d##\nn,123);printfC%14.81f\n,\1.3455);printfC4%-14.81 1.3455);II123##123IIIII1##llllll1.34550000##1.34550000IIIII1##.使輸出的數(shù)字總是有+號或一號可以在%和格式字符間(或指定的輸出寬度前)加一個“+”號來實現(xiàn)。例如:printf(''%+d,%d+\n”,10,-10);輸出結(jié)果為:+10,-10.在輸出數(shù)據(jù)前加前導0可以在指定輸出寬度的同時,在數(shù)據(jù)前面的多余空格處填以數(shù)字0.表3.5例舉了加前導0時的輸出結(jié)果。.在輸出的八進制數(shù)前添加0,在輸出的卜六進制數(shù)前添加Ox通常,在用格式字符。和x按八進制數(shù)和十六進制數(shù)的形式輸出整數(shù)時,在數(shù)據(jù)的前面凍出現(xiàn)0和Ox,如果需要在輸出的八進制數(shù)前添加0,在輸出的卜六進制數(shù)前添加Ox,可在%號和格式字符。和x之間插入一個#號(注意:#號對其它格式字符通常不起作用)。表3.5輸出語句輸出結(jié)果printfC%6d\n,\12);printf(4u%06d\n,,,12);printf(“%10.5f\n”31415);printf(“%014.5f\n”,3.1415);min12000012III1113.1415000000001.34550例如:printfC'%o,%#o,%#x\n,\10,10,10,10);從第一列開始輸出結(jié)果如"12,012,a,0xa3.2.3調(diào)用printf函數(shù)時的注意事項在調(diào)用printf函數(shù)進行輸出時需要注意:.在格式控制串中,格式說明與輸出項從左到右在類型上必須一一對應匹配。如不匹配,將導致數(shù)據(jù)不能正確輸出,這時,系統(tǒng)并不報錯。特別要提醒讀者的是:在輸出long整型數(shù)據(jù)時,一定要使用%Id格式說明,如果遺漏了字母1,只用了%d,將輸出錯誤的數(shù)據(jù)。.在格式控制串中,格式說明與輸出項的個數(shù)應該相同。如果格式說明的個數(shù)少于輸出項的個數(shù),多余的輸出項不予輸出;如果格式說明的個數(shù)多于輸出項的個數(shù),則對于多余的格式將輸出不定值(或。值)。.在格式控制串中,除了合法的格式說明外,可以包含任意的合法字符(包括轉(zhuǎn)義字符),這些字符在輸出時將“原樣照印”。.如果需要輸出百分號%,則應該在格式控制串中用兩個連續(xù)的百分號%%來表示。.在輸出語句中改變輸出變量的值,如:i=5;printf("%d%d\n”,,i,++i);則不能保證先輸出i的值,然后再求i++,并輸出。.printf函數(shù)的返回值通常是本次調(diào)用中輸出字符的個數(shù)。3.3數(shù)據(jù)的輸入scanf函數(shù)是C語言提供的標準輸入函數(shù),它的作用是在終端設備(或系統(tǒng)隱含指定的輸入設備)上輸入數(shù)據(jù)。scanf函數(shù)的一般調(diào)用形式如下:scanf(格式控制,輸入項表)如果在scanf函數(shù)調(diào)用之后加上就構(gòu)成了輸入語句。例如:scanf("%d%d'',&a,&b);其中scanf是函數(shù)名,在圓括號中用雙引號括起來的字符串如“%d%d”為格式控制串:&a,&b是輸入項表中的兩個輸入項,它們都是scanf函數(shù)的參數(shù)。格式控制串的作用是指定輸入時的數(shù)據(jù)轉(zhuǎn)換格式,即格式轉(zhuǎn)換說明。格式轉(zhuǎn)換說明也是由“%”一切以,其后是格式描述符。當輸入項為int類型時,系統(tǒng)規(guī)定用d作為格式描述字符,其形式為%d,如上面的例子;當輸入項為float類型時,用f或e作為格式描述字符,其形式為%f或%e,輸入項為double類型時,則必須用%If或%le作為格式描述符,否則輸入的數(shù)據(jù)不正確。輸入項表中的各輸入項用逗號隔開,各輸入項只能是合法的地址表達式,如上例中的&a和&b。變量a,b前的符號"&”是C語言中的求地址運算符,&a就是取變量a的地址,&b則是取變量b的地址。這也就是說,輸入項必須是某個存儲單元的地址。這一點,讀者一定要給予充分的注意。scanf函數(shù)中常用的格式說明每個格式說明都必須用%開頭,以一個“格式字符”作為結(jié)束。允許用于輸入的格式字符和它們的功能如表3.6所示。在一些系統(tǒng)中,這些格式字符只允許用小寫字母,因此建議讀者使用小寫字母,使程序具有通用性。表3.6格式字符說 明C輸入一個字符d輸入十進制整型數(shù)i輸入整型數(shù),整數(shù)可以是帶前導0的八進制數(shù),帶前導Ox(或0X)的十0六進制數(shù)X以八進制形式輸入整型數(shù)(可以帶前導0,也可以不帶)u以十六進制形式輸入整型數(shù)(可以帶前導Ox或0X,也可以不帶)f(m無符號十進制整數(shù)e(le)以帶小數(shù)點的形式或指數(shù)形式輸入單精度(雙精度)數(shù)s與f(l。的作用相同輸入字符串說明:(1)在TURBOC環(huán)境下輸入long整數(shù)時,在%和d之間必須加1;輸入double型數(shù)時,在%和f(e)之間也必須加1.否則得不到正確的數(shù)據(jù)。(2)在格式控制中,格式說明的類型與輸入項的類型,應該一--對應匹配。如果類型不匹配,系統(tǒng)并不給出出錯信息,但不可能得到正確的數(shù)據(jù)。(3)在scanf函數(shù)中的格式字符前可以用?個整數(shù)指定輸入數(shù)據(jù)所占寬度。但不可以對實型數(shù)指定小數(shù)位的寬度。(4)在格式控制串中,格式說明的個數(shù)應該與輸入項的個數(shù)相同。若格式說明的個數(shù)少于輸入項的個數(shù)時,scanf函數(shù)結(jié)束輸入,多余的數(shù)據(jù)項并沒從終端接受新的數(shù)據(jù);若格式說明的個數(shù)多于輸入項的個數(shù)時,scanf函數(shù)同樣也結(jié)束輸入。(5)當輸入的數(shù)據(jù)少于輸入項時,程序等待輸入,直到滿足要求為止。當輸入的數(shù)據(jù)多于輸入項時,多余的數(shù)據(jù)并不消失,而是留作下一個輸入操作時的輸入數(shù)據(jù)。(6)scanf函數(shù)在調(diào)用結(jié)束后將返回一個函數(shù)值,其值等于得到輸入值的輸入項的個數(shù)。3.3.3通過scanf函數(shù)從鍵盤輸入數(shù)據(jù)當調(diào)用scanf函數(shù)從鍵盤輸入數(shù)據(jù)時,最后一定要按下回車鍵(Enter鍵),scanf函數(shù)才能接受從鍵盤輸入的數(shù)據(jù)。.輸入數(shù)值數(shù)據(jù)當從鍵盤輸入數(shù)值數(shù)據(jù)時,輸入的數(shù)值數(shù)據(jù)之間用間隔符(空格符、制表符(Tab鍵)或回車符)隔開,間隔符數(shù)量不限。如果在格式說明中人為指定寬度時,也同樣可用此方法輸入。例如,假設a、b、c為整型變量,若有以下輸入語句:scanf("%d%d%d”,&a,&b,&c);要求給a賦予10、給b賦予20、給c賦予30,則數(shù)據(jù)輸入形式應當是:〈間隔符>10<間隔符>20(間隔符>30<CR>此處〈間隔符>可以是空格符、制表符(Tab鍵)或回車符,<CR>表示Enter健。.指定輸入數(shù)據(jù)所占寬度可以在格式字符前加一個整數(shù),用來指定輸入數(shù)據(jù)所占寬度。當輸入數(shù)值數(shù)據(jù)時,一些C編譯系統(tǒng)并不要求必須按指定的寬度輸入數(shù)據(jù),用戶可以像未指定寬度時的方式輸入。.跳過輸入數(shù)據(jù)的方法可以在格式字符和“%”之間加一個“*”號,它的作用是跳過對應的輸入數(shù)據(jù)。例如:intal,a2,a3;scanfC4%d%*d%d%d,,,&aI,&a2,&a3);當輸入以下數(shù)據(jù)時:1O|_JLJ20|_JLJ30|_Jl_l40<CR>將把10賦給al,跳過20,把30賦給a2,把40賦給a3。.輸入的數(shù)據(jù)少于scanf函數(shù)要求輸入的數(shù)據(jù)這時,多余的數(shù)據(jù)將留在緩沖區(qū)作為下一次輸入操作的輸入數(shù)據(jù)。.在格式控制串中插入其它字符讀者首先應該明確:scanf函數(shù)中的格式控制串是為輸入數(shù)據(jù)用的,其間的字符不能輸出到屏幕上,因此,如果想在醉幕上輸出字符串來提示輸入,應該另外使用printf函數(shù)。若在scanf的格式控制串中插入了其它字符,則在輸入時要求按一一對應的位置原樣輸入這些字符。例如:intal,a2,a3;scanf('*Inputa1,a2,a3:%d%d%d”,&a1,&a2,&a3);要求按以下的形式輸入:Inputal,a2,a3:102030第一列注意,這里的‘'Inputal,a2,a3:''是用戶輸入的。字符的大小寫、字符間的空格數(shù)必須和scanf的格式控制串中插入的字符串完全一致。又如:scanf("%d,%d,%d”,&al,&a2,&a3);逗號緊跟在格式字符之后,因此要求在每個輸入數(shù)據(jù)之后緊跟一個逗號,以下輸入的數(shù)據(jù)能正確讀入:10,20,30以下輸入的數(shù)據(jù)也能正確讀入:10,20, 30以下輸入的數(shù)據(jù)就不能正確讀入,因為逗號沒有緊跟在每個輸入數(shù)據(jù)之后。10 ,20 ,30如果逗號不是緊跟在格式字符之后,如:scanf("%d,%d,%d”,&al,&a2,&a3);則只要求在輸入數(shù)據(jù)之間插入逗號即可,因此以上的各種輸入形式都能正確輸入。3.4復合語句和空語句復合語句在C語言中,一對花括號“{}”不僅可用作函數(shù)體的開頭和結(jié)尾的標志,也可用作復合語句的開頭和結(jié)尾的標志;復合也可稱為“語句塊”,復合語句的語句形式如下:{語句1;語句2;…;語句n}用一對花括號把若干語句括起來構(gòu)成一個語句組,一個復合語句在語法上視為一條語句,在一對花括號內(nèi)的語句數(shù)量不限。例如:{a++;b*=a;printf("b=%d\n",b);}在復合語句內(nèi),不僅可以有執(zhí)行語句,還可以有定義部分,定義部分應該出現(xiàn)在可執(zhí)行語句的前面。空語句C程序中的所有語句都必須由一個分號“;”作為結(jié)束。如果只有一個分號,如:main(){;}這個分號也是條語句,稱為“空語句”,程序執(zhí)行時不產(chǎn)生任何動作。程序設計中有時需要加一個空語句來表示存在一條語句;但隨意加分號也會導致邏輯上的錯誤,需要慎用。3.5程序舉例例3.1以下程序由終端輸入兩個整數(shù)給變量x和y,然后輸出x和y,在交換x和y中的
值后,再輸出x和y,驗證兩個變量中的數(shù)是否正確地進行了交換。include“stdio.h"main(){intx,y,t;printf(44Enterx&y:\n");scanf(M%d%d,,,&x,&y);printf(4<x=%dy=%d\n,\x,y);t=x;x=y;y=t;以下是程序運行情況:Enterx&y:123 456<CR>以下是程序運行情況:Enterx&y:123 456<CR>x=123y=456x=456x=123(由第4行的printf輸出)(從鍵盤輸入兩個整數(shù),vCR>代表按Enter鍵)(由第6行的printf輸出)(由第8行的printf輸出)在程序中交換x和y兩個變量中的數(shù),不可以簡單地用乂=丫;y=x;兩條語句來實現(xiàn),語句x=y;執(zhí)行結(jié)果將把y中的值復制到x中,使y和x變量中具有相同的值,x中原有的值丟失,因此無法再實現(xiàn)兩數(shù)的交換。為了不丟失x中原有的值,必須在執(zhí)行x=y;之前,把x中的值放到一個臨時變量中保存起來(在此,通過t=x;來實現(xiàn)),在執(zhí)行了乂=丫;之后,再把保存在臨時變量中的值賦給y(通過y=t;來實現(xiàn))。例3.2輸入一個double類型的數(shù),使該數(shù)保留小數(shù)點后兩位,對第三位小數(shù)進行四舍五入后處理,然后輸出此數(shù),以便驗證處理是否正確。程序如下:main(){doublex;printf(44Enterx:");scanf("%lF',&x);printfC(l)x=%f\n”,x);x=x*100;x=x+0.5;x=(int)x;x=x/100;printf(t4(2)x=%f\nM,x);}注意:在scanf函數(shù)中給double類型變量輸入數(shù)據(jù)時,應該使用%If格式轉(zhuǎn)換說明符,而輸出時,對應的格式轉(zhuǎn)換說明符可以是%If,也可以用%f。以上程序中,在main函數(shù)前省略了include"stdio.h”行,C語x程序中調(diào)用scanf和printf函數(shù)時,可以省略該命令行。習題一、選擇題若a、b、c、d都是int類型變量且初值為0,以下選項不正確的賦值語句是A-.a=b=c=100;B、d++;C、c+b;D、d=(c=22)-(b++);以下選項中不是C語句的是A、{inti;i++;printf("%d\n”,i)}B、;C、a=5,c=10 D、{;}以下合法的C語言賦值語句是
C、a=58,b=58D、-i;C、a=58,b=58D、-i;D、不確定的值以下程序的輸出結(jié)果是A>0B、1C、3main(){intx=10,y=3;printf(tt%d\n,,,y=x/y);}若變量已正確定義為int類型,要給a、b、c輸入數(shù)據(jù),以下正確輸入語句是A、read(a,b,c) B、scanf(tt%d%d%d,,,a,b,c)C、scanf("%D%D%D”,&a,&b,&c)D、scanf(tt%d%d%d,\&a,&b,&c)若變量-正確定義為float類型,要通過賦值語句scanf("%f%f%『,&a,&b,&c)給a賦予10>b賦予22、賦予33,以下不正確的輸入形式是A、10B、10.0,22.0,33.0C、10.0 D、10 2222 22.0 33.0 3333若變量已正確定義,要將a和b中的數(shù)進行交換,下面選項中不正確的是A、a=a+b,b=a-b,a=a-b; B、t=a,a=b,b=t;C、a=t;t=b;b=a; D、t=b;b=a;a=t;若變量已正確定義,以下程序段的輸出結(jié)果是A、輸出格式說明與輸出項不匹配,輸出無定值B、5.170000C、5.168000 D、5.169000x=5.16894printfC<%f\n,,,(int)(x*1000+0.5)/(float)1000);3.9若有以下程序段,c3中的值是A、0B、1/2C、0.5 D、1intc=l,c2=2,c3;c3=cl/c2;3.10若有以下程序段,其輸出結(jié)果是A、0,0,-10B、0,0,5C、-10,3,-10 D、3,3,-10inta=0,b=0,c=0;c=(a-=a-5),(a=b,b+3);printf(44%d,%d,%d\n,\a,b,c);3.11當運行以下程序時,在鍵盤上從第一列開始輸入9876543210<CR>(在此處vCR>代表Enter),則程序的輸出結(jié)果是B、a=10,b=432,c=8765D、B、a=10,b=432,c=8765D、a=98,b=765.0,c=4321.0B、a=2,b=5D、a=%d?b=%dC、a=98,b=765.000000,c=4321.000000main(){inta;floatb,c;scanfC4%2d%3f%4f;&a,&b,&c);printf(**\na=%d,b=%f,c=%f\n,,,a,b,c);}以下程序的輸出結(jié)果是A、a=%2,b=%5C、a=%%d,b=%%dmain(){inta=2,b=5;printff<a=%%d,b=%%d\n,\a,b);若int類型占兩個字節(jié),則以下程序段的輸出是A、-1,-1B、-1,32767C、-1,32768 D、-1,65535main()inta=-l;printf("%d,%u\n'',a,a);以下程序段的輸出是A、*496*B、* 496*C>*000496* D、輸出格式符不合法intx=496;printf(44*%-6d*\n,,,x);以下程序段的輸
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙教版2021-2022學年度七年級數(shù)學上冊模擬測試卷 (706)【含簡略答案】
- 義馬市狂口學校(中學部)智慧課堂實施方案
- 教師編課程設計
- 浙教版2021-2022學年度七年級數(shù)學上冊模擬測試卷 (650)【含簡略答案】
- 教師大數(shù)據(jù)思維課程設計
- 教師信息管理課程設計
- 教學高爾夫培訓課程設計
- 教學粽子課程設計
- 教學樓夜間施工方案
- 教學大綱烘焙課程設計
- 綿陽市高中2022級(2025屆)高三第一次診斷性考試(一診)數(shù)學試卷(含答案逐題解析)
- 2024河南鄭州熱力集團限公司招聘高頻考題難、易錯點模擬試題(共500題)附帶答案詳解
- 志愿服務證明(多模板)
- 三打白骨精話劇劇本
- 人教新目標英語八年級上冊Unit7重點短語和句子歸納總結(jié)
- 土地復墾工程施工的重點和難點及保證措施(完整版)
- 淺析民辦非企業(yè)單位發(fā)展的現(xiàn)狀、問題及對策
- 鍋爐APC先進過程優(yōu)化控制解決方案
- 【公開課】閩教五年級上 冊Unit7 Part A
- 小班兒歌《晚上》(經(jīng)典實用)
- 三管塔施工方案
評論
0/150
提交評論