編寫ANSI C程序.doc_第1頁
編寫ANSI C程序.doc_第2頁
編寫ANSI C程序.doc_第3頁
編寫ANSI C程序.doc_第4頁
編寫ANSI C程序.doc_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

白熊的C語言筆記0.0.1 前言要參加ACM比賽,從知識(shí)的要求上,至少的條件有三點(diǎn):1. 一門程序設(shè)計(jì)語言,例如C2. 數(shù)據(jù)結(jié)構(gòu)方面的知識(shí)3. 算法設(shè)計(jì)方面的知識(shí)但是很明顯的,如果按照學(xué)校一直以來的教學(xué)進(jìn)度的話,學(xué)完這三門課需要一年半的時(shí)間,對(duì)于一個(gè)真正想學(xué)點(diǎn)什么的人來說,太長(zhǎng)了。為了能盡快的讓同學(xué)們進(jìn)入ACM這個(gè)技術(shù)競(jìng)賽,我們決定開辦這個(gè)C語言的培訓(xùn),但是因?yàn)閷?duì)于你們學(xué)習(xí)進(jìn)度以及對(duì)于老師授課的接受程度并不是很了解的原因,這次的培訓(xùn),從整體上來說反應(yīng)不是很好,主要的原因是因?yàn)槲矣X得你們已經(jīng)上過課的話那這次就當(dāng)做是復(fù)習(xí),所以速度上有點(diǎn)太快,在此向所有同學(xué)致一聲抱歉。經(jīng)過研究后,我決定還是從實(shí)際出發(fā),在實(shí)際的編程中增進(jìn)對(duì)程序的理解,而對(duì)于C語言的知識(shí),可能與我們手上的那本C語言設(shè)計(jì)(第二版)有著不同的順序。換句話說,我們的課程進(jìn)度將與學(xué)校的無關(guān)。當(dāng)然,在實(shí)行的過程中有什么意見的話,歡迎隨時(shí)向我反饋,或者告訴你們班的聯(lián)系人讓他轉(zhuǎn)告,感謝。另外,培訓(xùn)的方式將改成一整天的以本文所講的知識(shí)點(diǎn)為主的實(shí)戰(zhàn)編程練習(xí)和講解,希望大家能提前預(yù)習(xí)好本文的內(nèi)容。白熊2009年10月19日1:21:080.0.2 推薦書目本來今晚是想寫一下以C語言設(shè)計(jì)(第二版)為基礎(chǔ)的教材的,但是越看越發(fā)現(xiàn)里面一些不合理以及非常規(guī)的地方,因此收回對(duì)這本書“中規(guī)中矩”的評(píng)價(jià),但依然缺乏屬于老譚的思想。在此,我推薦幾本書,大家可以去找來看看。C by Dissection The Essentials of C Programming Fourth Edition(C語言解析教程(原書第四版)評(píng)價(jià):一本相當(dāng)不錯(cuò)的C語言入門書籍,我寫的這個(gè)教程就是以這本書作為基礎(chǔ),針對(duì)我們需要用到的知識(shí)點(diǎn)做出來的,有興趣的同學(xué)可以找原書來看。The C Programming Language評(píng)價(jià):C語言學(xué)習(xí)的圣經(jīng),世界上公認(rèn)的第一,但是內(nèi)容相對(duì)比較深?yuàn)W,建議有一定基礎(chǔ)的同學(xué)自習(xí)。1 編寫ANSI C程序1.1.1 準(zhǔn)備編寫第一個(gè)ANSI C程序編程的目的是用于指示計(jì)算機(jī)完成特定的任務(wù)或解決特定的問題。在這其中,步進(jìn)式地完成所需任務(wù)的過程被稱為算法(algorithm)。而編程是溝通算法與計(jì)算機(jī)的活動(dòng)。我們用計(jì)算機(jī)語言給計(jì)算機(jī)下達(dá)指令,讓它完成。就像我們叫某某人幫忙做某某事一樣。但計(jì)算機(jī)無法容忍多義性,因此必須要用精確的語言不厭其煩地詳述所有步驟?!径嗔x性:一個(gè)語句可以被理解為多種意義?!俊颈疚牡淖⑨尯脱a(bǔ)充說明將采用【】符號(hào)括起來】編程過程可以分為四步:1. 描述任務(wù)2. 找出解決問題的算法3. 用C對(duì)算法進(jìn)行編碼4. 測(cè)試代碼源代碼(source code)是編寫出來的C語言代碼,而包含源代碼的文件稱為源文件(source file)。當(dāng)程序員編寫一個(gè)程序之后,他必須編譯和測(cè)試他的程序。如果需要修改,就必須再次編輯源代碼。這樣,編程的過程由下述循環(huán)構(gòu)成:當(dāng)程序員對(duì)程序的性能感到滿意之后,就結(jié)束這個(gè)循環(huán)。1.2. 第一個(gè)程序Hello World/*第一個(gè)C語言程序Hello World!*/#include int main (void)printf(Hello World!n);return 0;運(yùn)行成功的話會(huì)出現(xiàn)Hello World!/*第一個(gè)C語言程序Hello World!*/這是一行注釋,編譯器會(huì)自動(dòng)忽略/*和*/所括起來的字符,這是為方便閱讀而存在的文檔,一般來說源文件開頭的注釋會(huì)注明該文件中代碼的作用、作者和日期等信息。#include 用#開始的行稱為預(yù)處理指令,該指令用于與預(yù)處理器通信。#include指令使預(yù)處理器在代碼當(dāng)前位置加入標(biāo)準(zhǔn)頭文件stdio的拷貝?!敬隧?xiàng)工作在編譯開始之前】這個(gè)頭文件是C系統(tǒng)提供的。尖括號(hào)指明該文件能在“通常的位置”找到。我們引入這個(gè)文件是因?yàn)槠渲邪岁P(guān)于printf()函數(shù)的信息?!尽巴ǔ5奈恢谩备鶕?jù)編譯環(huán)境而有所不同,在VC中,“通常的位置”指的是VC安裝目錄下的VC98Include文件夾】【stdio是Standard Input Output的縮寫,即“標(biāo)準(zhǔn)的輸入輸出”】int main (void)每個(gè)程序都有一個(gè)命名為main的函數(shù),程序從這里開始運(yùn)行。main前面的int表明這個(gè)函數(shù)將返回一個(gè)int類型的值。main后面的圓括號(hào)()告訴編譯器這是一個(gè)函數(shù)。圓括號(hào)中的void表明該函數(shù)沒有參數(shù)。函數(shù)體【函數(shù)的主體部分】以左花括號(hào)開始,以相應(yīng)的右花括號(hào)結(jié)束。我們的風(fēng)格是每個(gè)括號(hào)單占一行,并靠左放置?!净ɡㄌ?hào)也用于把語句組織在一起?!縫rintf(Hello World!n);printf()是頭文件stdio.h中包含的一個(gè)函數(shù),作用是向屏幕輸出。Hello World!n是一個(gè)字符串,在此作為printf函數(shù)的參數(shù)。也就是以單參數(shù)形式對(duì)printf進(jìn)行調(diào)用。它控制了顯示的內(nèi)容?!緋rintf()函數(shù)有多參數(shù)調(diào)用方式?!孔址膊康膎代表一個(gè)被稱為“換行”的單字符,這是一個(gè)非打印字符,作用是把光標(biāo)移動(dòng)到下一行的開頭?!咀⒁獗拘幸砸粋€(gè)分號(hào)(;)結(jié)尾,C語言中所有的語句和聲明都以分號(hào)結(jié)尾】return 0;main()函數(shù)向系統(tǒng)返回整數(shù)值0。0表示函數(shù)正常結(jié)束,而非零值表示函數(shù)沒有成功。該右花括號(hào)與上面的左花括號(hào)相匹配,它代表函數(shù)main()的結(jié)束。Hello World的變形/*Hello World的第一種變形*/#include int main (void)printf(Hello );printf(World!n);return 0;這個(gè)程序的結(jié)果跟剛剛的Hello World是完全相同的,這證明了printf()函數(shù)的輸出是在屏幕上連續(xù)的顯示。只有讀到換行字符n的時(shí)候,才會(huì)移動(dòng)到一個(gè)新行?!井?dāng)然,遇到窗口的邊緣的時(shí)候也會(huì)自動(dòng)換行,但是我們必須把它認(rèn)為是在同一行。】【注意,第一個(gè)printf()函數(shù)中字符串的結(jié)尾有一個(gè)空格,如果沒有這個(gè)空格的話,Hello跟World將會(huì)黏在一起。】接下來,我們嘗試在Hello World中加上一行Hello Nilajor!/*Hello World的第二種變形*/#include int main (void)printf(Hello World!n);printf(Hello Nilajor!n);return 0;執(zhí)行程序后我們可以看到結(jié)果:Hello World!Hello Nilajor!這就是用printf()語句逐行輸出的效果?!究梢詫蓚€(gè)printf()語句用一個(gè)printf()語句代替】【printf(Hello World!nHello Nilajor!)】在標(biāo)準(zhǔn)庫中,像printf()這樣有用的函數(shù)的可用性是C的一個(gè)重要特征。雖然從技術(shù)角度上講,標(biāo)準(zhǔn)庫并不是C語言的一部分,但它是C系統(tǒng)的一部分,因?yàn)樵跇?biāo)準(zhǔn)庫中的函數(shù)在C系統(tǒng)中隨處可見,編寫程序的時(shí)候經(jīng)常要使用到它們。1.3 變量、表達(dá)式和賦值Hesperus1839年,在美國(guó)馬薩諸塞州的諾曼的悲哀暗礁(Normans Woe),Hesperus船(金星號(hào))發(fā)生了一起失事事件。暗礁在約7英尋的水下。編寫程序把這個(gè)深度轉(zhuǎn)為其他的測(cè)量單位。【1英尋(fathoms)=6英尺(feet),1英尺=12英寸(inches)】對(duì)于這個(gè)題目,我們可以想出如下的算法:1. 把英尋數(shù)賦給一個(gè)變量。2. 把英尋轉(zhuǎn)換成英尺,并賦給另一個(gè)變量。3. 把英尺轉(zhuǎn)換成英寸,并賦給第三個(gè)變量。4. 把不同測(cè)量單位的結(jié)果在屏幕上整齊的輸出。【編寫C代碼的時(shí)候,我們必須選擇一個(gè)適當(dāng)?shù)淖兞考谋绢}看,很明顯應(yīng)該選擇整型變量。因?yàn)槲覀儽仨毐WC轉(zhuǎn)換表達(dá)式使用了正確的常量,并且輸出也要便于閱讀?!?*常量、賦值和表達(dá)式Hesperus問題*/#include int main (void)int inches, feet, fathoms;fathoms = 7;feet = 6 * fathoms;inches = 12 * feet;printf(Wreck of Hesperus:n);printf(Its desph at sea in different units:n);printf( %d fathomsn, fathoms);printf( %d feetn, feet);printf( %d inchesn, inches);return 0;執(zhí)行程序后我們可以看到結(jié)果:Wreck of Hesperus:Its desph at sea in different units: 7 fathoms 42 feet 504 inchesint inches, feet, fathoms;第一行是一個(gè)聲明。變量inches、feet和fathoms被聲明為類型int,int是C的基本類型之一。類型為int的變量接納整數(shù)值。在C程序中,所有變量在使用前都應(yīng)該聲明?!韭暶骱驼Z句都用分號(hào)結(jié)尾】fathoms = 7;這是一個(gè)賦值語句。等號(hào)(=)是C的一個(gè)基本運(yùn)算符。等號(hào)右邊的表達(dá)式的值被賦值給它左邊的變量,此處右邊的常量表達(dá)式是7,該值被賦給變量fathoms。feet = 6 * fathoms;inches = 12 * feet;這兩個(gè)語句是賦值語句。因?yàn)?英尋等于6英尺,并要把給定的英尋數(shù)轉(zhuǎn)換成等價(jià)的英尺數(shù),所以我們必須要對(duì)其乘以6。星號(hào)(*)是乘法運(yùn)算符。表達(dá)式6 * fathoms的值被賦給變量feet。因?yàn)樽兞縡athoms的當(dāng)前值是7,所以表達(dá)式6 * fathoms的值為42,該值被賦給變量feet。同理,為了轉(zhuǎn)換成英寸,必須對(duì)feet乘以12。表達(dá)式l2 * feet的值被賦給變量inches。printf(Wreck of Hesperus:n);printf(Its desph at sea in different units:n);printf( %d fathomsn, fathoms);printf( %d feetn, feet);printf( %d inchesn, inches);這個(gè)printf()語句有兩個(gè)參數(shù),分別是%d fathomsn,和fathoms?!咀⒁馑鼈冇枚禾?hào)隔開?!亢瘮?shù)printf()中的第一個(gè)參數(shù)總是一個(gè)稱為控制串的串。在本例中,控制串含有轉(zhuǎn)換說明%d。轉(zhuǎn)換說明也稱作格式。格式%d使得第二個(gè)參數(shù)中的表達(dá)式(本例為fathoms等)的值按十進(jìn)制整數(shù)的格式顯示。控制串中的一般字符,即不用于構(gòu)成格式的字符,被簡(jiǎn)單地顯示在屏幕上。【注意本例中的控制串用三個(gè)空格開始,這使得本行被縮進(jìn)顯示。只是為了美觀?!孔兞吭贑中,所有的變量在被使用之前都必須聲明。簡(jiǎn)單程序的一般形式為:預(yù)處理命令int main(void)聲明語句在文件的頂部,可以有像#include這樣的預(yù)處理命令行在main()體內(nèi),聲明必須存在于語句前聲明告訴編譯器,什么類型的數(shù)據(jù)可以存在于那個(gè)變量中,這使得編譯器能夠留出適量的內(nèi)存空間以用于保存數(shù)據(jù)。變量名變量名就是變量的名稱,也稱為標(biāo)識(shí)符,由字母,數(shù)字和下劃線組成,但不能用數(shù)字開頭。標(biāo)識(shí)符應(yīng)該反映出他們?cè)诔绦蛑械挠猛尽L岣叱绦虻目勺x性。在聲明變量后,我們就可以對(duì)其賦值或者在表達(dá)式中用到他們。關(guān)鍵字關(guān)鍵字是C語言中本身已經(jīng)具有特定意義的一些字符,不能被用作變量名。例如:char、float、int等等【C系統(tǒng)中一些其他的名字,程序員也不應(yīng)該將他們進(jìn)行重定義,例如printf,一般不用作變量名,因?yàn)樗菢?biāo)準(zhǔn)庫中的一個(gè)函數(shù)名。】表達(dá)式通常表達(dá)式出現(xiàn)在賦值運(yùn)算符的右邊或作為函數(shù)的參數(shù)。表達(dá)式可以是以下形式:1. 單獨(dú)的常量(例如Hesperus中的7)2. 單獨(dú)的變量名3.運(yùn)算符與變量和常量的有意義的組合運(yùn)算符二元運(yùn)算符作用在兩個(gè)操作數(shù)上的運(yùn)算符例如在表達(dá)式6 * fathoms中,運(yùn)算符*作用于常量6和變量fathoms上,這兩個(gè)數(shù)就被稱為操作數(shù)。數(shù)學(xué)運(yùn)算符+ 表示加法運(yùn)算- 表示減法運(yùn)算* 表示乘法運(yùn)算/ 表示除法運(yùn)算【除數(shù)不能為0】% 表示取模(求余)運(yùn)算【操作數(shù)只能為正整數(shù)】簡(jiǎn)單的字符型關(guān)鍵字char代表字符,類型為char的常量和變量用于操縱字符。char型常量用單引號(hào)括起來/*char型數(shù)據(jù)的試驗(yàn)程序*/#include int main(void)char ch;ch = A;printf(%cn, ch);return 0;程序執(zhí)行后輸出:Achar ch;聲明變量ch為char型ch = A;將char型常量A賦給chprintf(%cn, ch);利用格式%c,以字符的格式顯示printf()函數(shù)的第二個(gè)參數(shù)ch簡(jiǎn)單的浮點(diǎn)型ANSI C中有三種浮點(diǎn)型,關(guān)鍵字分別為float、double和long double浮點(diǎn)型的常量和變量用于控制實(shí)數(shù)。/*float型數(shù)據(jù)試驗(yàn)程序x+y*/#include int main(void)float x, y;x = 1.0;y = 2.0;printf(The sum of x and y is %f.n, x+y);return 0;執(zhí)行后輸出的結(jié)果是:The sum of x and y is 3.000000.printf(The sum of x and y is %f.n, x+y);使用格式%f,按小數(shù)點(diǎn)后保留6位的浮點(diǎn)格式顯示。【對(duì)于double型用格式%lf】【對(duì)于浮點(diǎn)型數(shù)據(jù),不適用%運(yùn)算符】賦值語句由等號(hào)、等號(hào)左邊的變量、等號(hào)右邊的表達(dá)式組成。常量、表達(dá)式不允許出現(xiàn)在等號(hào)左邊。例如:a = b + c; (正確)b + c = a; (錯(cuò)誤)2 = a;(錯(cuò)誤)1.4 初始化在聲明變量的同時(shí)給變量賦予一個(gè)初始值,稱為初始化。例如在Hesperus程序中,我們可以將fathoms初始化:int inches, feet, fathoms = 7;但這樣寫是不被允許的:int inches, feet = 6 * fathoms, fathoms = 7;【變量不能在聲明前使用?!?.5 #define和#include的用法在調(diào)用C編譯器時(shí),預(yù)處理器先工作:在進(jìn)行編譯之前,預(yù)處理器修改傳遞給編譯器的源代碼。例如,可能要引入文件,源代碼中的指定字符串可能被轉(zhuǎn)變成其他字符串。程序中向預(yù)處理器發(fā)命令的行被稱為預(yù)處理指令,這樣的命令用磅字符#始。常見的編程風(fēng)格是把#寫在頁的左邊。#include我們?cè)?jīng)使用過如下的預(yù)處理器指令: #include 使用這種模式可跨系統(tǒng)使用標(biāo)準(zhǔn)庫。這樣的代碼是可復(fù)用的并且易于維護(hù)。#include 預(yù)處理器僅在標(biāo)準(zhǔn)的位置尋找文件,例如VC中我們提到過的文件夾,或者Unix平臺(tái)的/usr/include文件夾。#include 文件名預(yù)處理器先在本文件夾(即與源文件同一個(gè)文件夾)中尋找文件,然后在其他系統(tǒng)相關(guān)位置尋找。#define例: #define LIMIT 100 #define PI 3.14159如果這些預(yù)處理指令出現(xiàn)在正在編譯的文件的頂部,預(yù)處理器首先把出現(xiàn)的所有LIMIT變?yōu)?00,PI變?yōu)?14l59。字符串常量中的內(nèi)容保持不變。這樣預(yù)處理器把printf(PI = %fn, PI);變?yōu)閜rintf(PI = %fn, 3.14159)。標(biāo)識(shí)符PI在所出現(xiàn)的地方都被變?yōu)?.14l59它被稱為符號(hào)常數(shù)。程序中符號(hào)常數(shù)的使用使程序更加易讀。更重要的是,如果用#define功能把個(gè)常量用符號(hào)定義,那么就可以在整個(gè)程序中使用它,以后對(duì)它進(jìn)行修改也是容易的(如有必要的話)。例如,如果我們寫如下語句: #define LIMIT 100那么就可以在數(shù)干行的代碼中用LIMIT表示常量100,這樣以后改變代碼也容易定義符號(hào)常量lIMI?為10 oo,我們所做的僅是把預(yù)處理指令改為: #define LIMIT 10000這樣就自動(dòng)地修改了所有的源代碼?!?define可以出現(xiàn)在程序任何地方,但只影響其后的那些行?!俊?define通常被放在文件的開始,#include的后面?!俊景凑諔T例,#define定義的符號(hào)常數(shù)一般為大寫。】1.6 printf()和scanf()的用法函數(shù)printf()用于顯示格式化的輸出。同樣的,函數(shù)scanf()用于顯示格式化的輸入。這些函數(shù)存在于C標(biāo)準(zhǔn)庫中,在C系統(tǒng)駐留的任何地方都可以調(diào)用它們。我們向printf()或者scanf()傳遞一個(gè)控制串和其他參數(shù)的參數(shù)列表?!究刂拼阂粋€(gè)包含一些轉(zhuǎn)換說明的字符串,當(dāng)然也可以純粹由字符串或者轉(zhuǎn)換說明構(gòu)成】1.6.1 printf()的用法printf()函數(shù)用于輸出一個(gè)字符串,在它的參數(shù)中,控制串中的格式說明了如何顯示對(duì)應(yīng)參數(shù)的值,因此在使用的過程中應(yīng)該考慮用什么格式輸出參數(shù)?!靖鱾€(gè)參數(shù)間用逗號(hào)隔開】例如:printf(Get set : %s %d %f %c%cn, one, 2, 3.33, G, O);第一個(gè)參數(shù)是控制串Get set : %s %d %f %c%cn,其中每個(gè)格式與對(duì)應(yīng)位置的其他參數(shù)相匹配。第一個(gè)格式%s表示以字符串形式顯示,對(duì)應(yīng)除了控制串外的第一個(gè)參數(shù)one.第一個(gè)格式%d表示以整數(shù)形式顯示,對(duì)應(yīng)除了控制串外的第一個(gè)參數(shù)2.第一個(gè)格式%f表示以浮點(diǎn)形式顯示,對(duì)應(yīng)除了控制串外的第一個(gè)參數(shù)3.33.第一個(gè)格式%c表示以字符形式顯示,對(duì)應(yīng)除了控制串外的第一個(gè)參數(shù)G.第一個(gè)格式%c表示以字符形式顯示,對(duì)應(yīng)除了控制串外的第一個(gè)參數(shù)O.所以上面那個(gè)例子的輸出應(yīng)該是:Get set : one 2 3.33 GO【注:這個(gè)程序除了最后兩個(gè)%c以外的其他格式中間都存在一個(gè)空格?!坑袝r(shí)候,當(dāng)printf()函數(shù)太長(zhǎng)的話,我們可以把它寫成幾行,例如:printf(%s%sn,This Statement will print ,just a very long line on the screen.);【大家可以猜測(cè)或者實(shí)驗(yàn)一下這個(gè)語句的作用】對(duì)于格式中的轉(zhuǎn)換字符,我們給出一個(gè)表方便大家記憶:printf()中的轉(zhuǎn)換字符轉(zhuǎn)換字符顯示的方式c作為字符顯示d作為十進(jìn)制整數(shù)顯示e作為科學(xué)計(jì)數(shù)法的浮點(diǎn)數(shù)f作為浮點(diǎn)數(shù)g作為e格式或者f格式中較短的一個(gè)s作為字符串域和域?qū)捲陲@示一個(gè)參數(shù)時(shí),所顯示的參數(shù)位置被稱為參數(shù)的域。域中字符的個(gè)數(shù)被稱為域?qū)?。格式中域?qū)捘鼙槐硎緸槌霈F(xiàn)在和轉(zhuǎn)換字符間的整數(shù)。因此,語句:printf(%c%3c%7cn, A, B, C);輸出的結(jié)果是A B C【A跟B之間有2個(gè)空格,B跟C之間有6個(gè)空格】首先顯示A,然后用3的寬度顯示B,但是B本身只占一個(gè)位置,其他位置都是空格,所以B前面有兩個(gè)空格,BC之間的空格同理?!救绻敵鲩L(zhǎng)度大于預(yù)定域?qū)拕t全部輸出?!烤葘?duì)于浮點(diǎn)值,我們不單能控制寬度,還能控制精度。精度即顯示時(shí)小數(shù)點(diǎn)后數(shù)字的個(gè)數(shù)。在形式為%m.nf的格式中,m控制寬度而n控制精度,當(dāng)然也可以單獨(dú)用%.n的格式控制精度。從下面這段例句中可以看出一些精度的使用:printf(Some numbers: %.1f %.2f %.3f n, 1.0, 2.0, 3.0);【三個(gè)格式間有空格】printf(More numbers:%7.1f%7.2f%7.3fn, 4.0, 5.0, 6.0);【格式間無空格】輸出:Some numbers: 1.0 2.00 3.000More numbers: 4.0 5.00 6.0001.6.2 scanf()的用法scanf()與printf()很相似,一個(gè)用于輸入一個(gè)用于輸出,但多了一個(gè)&符號(hào),稱為地址運(yùn)算符。scanf(%d, &x);這個(gè)語句的作用是把鍵盤上輸入的字符解釋為十進(jìn)制整數(shù),并存到x所表示的內(nèi)存空間中。我們先看一個(gè)表來了解scanf()中的轉(zhuǎn)換方式scanf()的轉(zhuǎn)換字符轉(zhuǎn)換字符以什么形式解釋c字符d十進(jìn)制整數(shù)fFloat型浮點(diǎn)lfDouble型浮點(diǎn)LfLong double型浮點(diǎn)s字符串姓名與年齡/*scanf()應(yīng)用示例*/#includeint main(void)char first, middle, last;int age;printf(Input your three initials and your age: );scanf(%c%c%c%d, &first, &middle, &last, &age);printf(nGreetings %c.%c.%c. %s %d.n, first, middle, last,Next year your age will be, age + 1);return 0;輸出:Input your three initials and your age: 此時(shí)假設(shè)我們輸入NAT 15則輸出:Greetings N.A.T Next year your age will be 16.printf(Input your three initials and your age: );提示用戶應(yīng)該輸入什么scanf(%c%c%c%d, &first, &middle, &last, &age);讀入一個(gè)字符,送到first內(nèi)存中讀入第二個(gè)字符,送到middle的內(nèi)存中讀入第三個(gè)字符,送到last的內(nèi)存中【scanf()的參數(shù)除了第一個(gè)控制串以外,都是內(nèi)存的地址,所以我們用&取得變量所表示的內(nèi)存地址,令輸入的內(nèi)容可以正確存儲(chǔ)。】【scanf()讀入數(shù)字的時(shí)候,會(huì)自動(dòng)跳過其中包含的空格,但是在讀入字符的時(shí)候,會(huì)把空格視為一個(gè)字符讀入?!俊疽虼?,這段程序是不夠健壯的,畢竟當(dāng)用戶輸入姓名首字母的時(shí)候,程序應(yīng)當(dāng)接受夾雜的空白,這是根據(jù)一般習(xí)慣而定的。】圓的面積假設(shè)=3.141592653589793,編程完成以下任務(wù):輸入圓的半徑,輸出計(jì)算圓面積的過程。(的值要用#define預(yù)定義)#include#define PI 3.141592653589793int main(void)double radius;printf(n%snn%s,This program computes the area of a circle.,Input the radius: );scanf(%lf, &radius);printf(n%sn%s%.2f%s%.2f%s%.2fn%s%.5fnn,Area = PI * radius * radius, = , PI, * , radius, * , radius, = , PI * radius *radius);return 0;隨提示輸入2.333,程序輸出:Area = PI * radius * radius = 3.14 * 2.33 * 2.33= 17.09934我們可以發(fā)現(xiàn)一個(gè)問題:3.14*2.33*2.33=17.046746,這跟最后得出的值不同。原因是因?yàn)镻I跟radius的值雖然只保留2位小數(shù)輸出,但在內(nèi)存中還是精確的完整值。另外一點(diǎn)要注意的:我們?cè)诩贾拼杏昧艘粋€(gè)%lf 格式,即以double方式向scanf()讀入,如果把變量從double改成float,我們必須把%lf改成%f。【printf()和scanf()函數(shù)是有返回值的。printf()返回顯示的字符數(shù)。scanf()返回轉(zhuǎn)換的字符數(shù)。都是以int類型返回的?!?.7 while語句題目:用while語句做從1到10的累加。/*110的累加,add_ten*/#includeint main(void)int i = 1, sum = 0;while(i = 10)sum = sum + i;i = i + 1;printf(Sum = %dn,sum);return 0;輸出:Sum = 55int i = 1, sum = 0;聲明變量i和sum為int型,并進(jìn)行初始化,初值分別為1和0【變量i、j、k一般用作循環(huán)控制的變量名】while(i = 10)sum = sum + i;i = i + 1;這是一個(gè)完整的循環(huán)結(jié)構(gòu),首先計(jì)算括號(hào)中的表達(dá)式i = 10,若其值為真,則執(zhí)行兩個(gè)花括號(hào)中的語句,將i當(dāng)前的值累加到sum上,再讓i的值比原來增加1.完成一遍循環(huán)之后重新計(jì)算表達(dá)式i=10,若為真則循環(huán)重復(fù)執(zhí)行這一過程,若為假則跳出循環(huán),執(zhí)行while語句的下一條語句。printf(Sum = %dn,sum);輸出結(jié)果While語句的一般形式是:while(條件)語句其中條件可以是變量、常量或表達(dá)式,非0的結(jié)果視為真,而0視為假;花括號(hào)括起來的語句稱為復(fù)合語句,在C語言中,復(fù)合語句可以出現(xiàn)在任何單語句出現(xiàn)的地方。1.8 問題求解:計(jì)算總和題目要求:編寫一個(gè)重復(fù)累加用戶從鍵盤上輸入的數(shù)字的程序。根據(jù)題目的要求,我們可以得出一個(gè)算法,如下計(jì)算總和的算法1. 對(duì)變量cnt和sum初始化。2. 提示用戶輸入。3. 重復(fù)的讀數(shù)據(jù),對(duì)cnt加1.對(duì)sum進(jìn)行累加4. 顯示cnt和sum的值。【cnt表示count,計(jì)算累加的次數(shù)】/* Sums are computed.*/#include int main(void)int cnt = 0;float sum = 0.0, x;printf(The sum of your number will be computednn);printf(Input some numbers: );while (scanf(%f, &x) = 1)cnt = cnt + 1;sum = sum + x;printf(n%s%5dn%s%12fnn, Count:, cnt, Sum:, sum);return 0;這個(gè)程序運(yùn)行后,輸入若干個(gè)數(shù),之間用回車確認(rèn),當(dāng)輸入為字符時(shí),輸出結(jié)果。scanf(%f, &x) = 1【符號(hào)=代表相等運(yùn)算符。諸如a=b這樣的表達(dá)式用于測(cè)試a的值是否等于b的值。如果是,則表達(dá)式為真;如果不是,則表達(dá)式為假。例如,l=l為真,2=3為假?!俊緎canf()函數(shù)用于讀人用戶輸入的字符,把字符轉(zhuǎn)換成類型為float的值,并存儲(chǔ)到x中。若scanf()成功地做到這些,轉(zhuǎn)換成功則該函數(shù)的返回值為1。若由于其他的原因,轉(zhuǎn)換失敗則返回值為0;若數(shù)據(jù)不再可用則返回值為1。】本句用于測(cè)試scanf()是否成功地完成了任務(wù)。如果是,那么表達(dá)式為真,否則為假。while (scanf(%f, &x) = 1)cnt = cnt + 1;sum = sum + x;我們可以把這個(gè)語句看做while(輸入成功)。只要表達(dá)式scanf(%f, &x) = 1為真,while循環(huán)體就重復(fù)地執(zhí)行。每次執(zhí)行循環(huán)的過程:1. scanf()讀入字符,把字符轉(zhuǎn)換成數(shù)字,并把數(shù)字值存儲(chǔ)到x中。2. 把cnt的值加1賦給變量cnt,把sum的值加上x賦給變量sum。【cnt保存到當(dāng)前為止鍵入的數(shù)字個(gè)數(shù),sum保存數(shù)字的總和?!渴裁磿r(shí)候這個(gè)過程結(jié)束?這要等到如下的兩件事情之一發(fā)生。1. 用戶鍵入了不能被轉(zhuǎn)換成float類型的事物。例如,鍵入了一個(gè)不是數(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論