快速學(xué)會C語言_第1頁
快速學(xué)會C語言_第2頁
快速學(xué)會C語言_第3頁
快速學(xué)會C語言_第4頁
快速學(xué)會C語言_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言速成教程

一教你如何10小時學(xué)會C語言

令第一章C語言簡介與TurboC的使用

令第二章C程序的結(jié)構(gòu)

令第三章常數(shù)與變數(shù)

令第四章基本輸出入函式

令第五章流程圖與抉擇指令

令第六章循環(huán)與自動重復(fù)

<第七章數(shù)組與指針

令第八章函數(shù)與呼叫

令第九章檔案存取

■第一章C語言簡介與TurboC的使用

◎c語言的優(yōu)點:

O效率高:C語言的編譯器會產(chǎn)生最小的程序代碼。

O可移植性/移植性高:經(jīng)過些許的修改,可以在不同的平臺使用。

O功能強而有彈性。

O需要記憶的東西很少,易于寫作。

◎TurboC的安裝:已安裝在學(xué)校主機。

TurboC的環(huán)境設(shè)定:TurboC安裝的目錄必須設(shè)定在PATH的系統(tǒng)變量。

如:PATH=C:\TC;C:\DOS;……如此TC才能正常工作。

◎TurboC的使用

只要設(shè)定好PATH變量,在DOS提示號輸入TC,就可以執(zhí)行TurboC的

整合環(huán)境了。TC將編輯(Edit)、編譯(Compile)、連結(jié)(Link)、除錯(Debug)、

檔案管理(File)、…等等的功能整合在一起,所以我們稱之為整合環(huán)境。

最好先用CD的指令,變更工作目錄到你要寫C的目錄,再執(zhí)行TC,這樣

所產(chǎn)生的檔案,就會里這個目錄里面,便于備份與管理。

◎移動光標

方向鍵一tI-可以用來移動光標。

◎刪除文字

將光標移到你要刪除的文字上,再按下Del鍵即可。

將光標移到要刪除文字的右邊,再按下BS退位鍵也可以。

◎加載文字文件(C語言原始碼文件)

按下功能鍵F3或按F10選File-Load就會出現(xiàn)一個詢問窗口要求輸入文件

名:

I------------------LoadFileName------------------1

I*CI

其中的文件名可以使用萬用字符*或?,或直接指定你要的槽名。

若是使用萬用字符,TC會再秀出一個窗口讓你選擇所要的檔案,

你可以用方向鍵移動反白光棒,按Enter鍵則是選擇反白的檔案。

◎儲存編輯的文字文件

按下功能鍵F2或按F10選File-Save就會儲存目前編輯檔案。

若你想另外取一個檔名,并加以存盤,就必須按F10選File-Writeto

就會出現(xiàn)一個詢問窗U要求輸入文件名:

NewName

輸入新的檔名,按下Enter即可。

◎編譯并執(zhí)行目前的所編輯的程序

TurboC是一種編譯語言系統(tǒng),你所寫的程序,經(jīng)過TC的編譯(pass1)及

連結(jié)(pass2)后,產(chǎn)生可執(zhí)行檔(.exe),才能在PC上執(zhí)行。

按下Ctrl+F9或按F10選RunfRun,TC會編譯目前所編輯的程序,

如果沒有錯誤發(fā)生,TC會立即執(zhí)行所編輯的程序。

TC在執(zhí)行完程序后,會立刻切換回到TC的整合環(huán)境,如果你還想看剛才程序

執(zhí)行的結(jié)果,可以按下Alt+F5或按F10選Run-Userscreen,就會

切換到執(zhí)行畫面,再按下任何一鍵,就會回到TC的整合環(huán)境。

?結(jié)束TurboC

按下Alt+X或按F10選File-*Quit便可結(jié)束TurboC?

若你還有已編修尚未儲存的檔案,TC會問你要不要存。

'Verify=n

|NONAME.Cnotsaved.Save?(Y/N)||

要存就按丫,不想存就按N。

■第二章C程序的結(jié)構(gòu)

◎C程序的結(jié)構(gòu):

hello.c|范例文件名

#include<stdio.h>|----范例原始碼

2main()1

3{I

4printfC'Hello!");|

5

Hello!|范例執(zhí)行結(jié)果

第一列:#include<stdio.h>

是用來定義一些函式的原型(prototype)>數(shù)據(jù)結(jié)構(gòu)(struct)或是常數(shù)(constant)。

C在使用變量之前,該變量都要先行宣告(declear)才可使用,而使用函式也是一樣,必須先

宣告它的原型才可以。宣告函式的原型是為了讓C能在編輯時作數(shù)據(jù)的型別檢查,以減少

錯誤的發(fā)生。內(nèi)建的函式原型定義都放在INCLUDE\*.H中,用#include<stdio.h>就會

將INCLUDE\stdio.h這個檔引含。stdio.h由檔名可知道是跟標準輸出入(standardI/O)有

關(guān),檔內(nèi)定義了檔案輸出入、屏幕輸出、鍵盤輸入等相關(guān)函式的原型、數(shù)據(jù)結(jié)構(gòu)及常數(shù)。本

例中的printf()就屬于標準輸出的函式。引含.h檔并不會讓你的執(zhí)行檔變大或是變慢,

而且還能讓編輯器作正確的型別檢查,所以要養(yǎng)成寫include的習(xí)慣?!铍m然在某些狀

況下,不加includeo所產(chǎn)生的執(zhí)行檔,一樣可以正常的執(zhí)行。

第二列:main()

main()就是主程序。程序在執(zhí)行時,就是由這個函式開始執(zhí)行。在C語言中,內(nèi)定的型

別是int,所以原來的main()相當于是intmain(int)

★在這里正確的寫法應(yīng)該是voidmain(void),因為在這個簡單的程序中,沒有回傳值,

也沒有輸入?yún)?shù)。

☆回傳值,是指一個函式在執(zhí)行后傳回的數(shù)值。

☆輸入?yún)?shù),是指一個函式可由參數(shù)決定執(zhí)行的結(jié)果,這個部分在第八章中有詳細的說明。

第三列:{

第五列:}

在第三列及第五列之間,屬于main()函式的程序代碼。

{表示程序由此開始,}表示程序到此結(jié)束。

第四列:printf("Hello!");

是本程序要求系統(tǒng)做動作的指令,稱之為「敘述」。在C語言中,每一敘述都以分號(;)做

為結(jié)束。在這個程序中,利用縮排的方式,使程序的層次分明,增加可讀性。

在C語言中,調(diào)位字符(如:空白(space)、定位(tab)及換列字符)在編譯時都會被忽略,

所以可適時加入調(diào)位字符,使程序好看一點。要注意的是,別把一個完整的個體拆開,如:

main,printf等,這些字本身是一個完整的個體,不可予以拆開。而在各個個體之間,可以

任意加入調(diào)位字符。

☆C語言中的英文字母是有分大小寫的,printfO與PrintFO不同,內(nèi)建的函式大多是小

寫的,你自己寫的函式,則可以用大寫來做區(qū)隔。

◎printf的功用

printfO的功用是在屏幕上輸出數(shù)據(jù)。在TC中,在編輯區(qū)內(nèi)輸入printf,再將光標移到

printf這個字上,按下Ctrl+Fl就會看到以下Help畫面:

I---------------------------------Help--------------------------------------1-這是TC的Help窗

printf:formattedoutputtostdout|-printf是將格式化的

I數(shù)據(jù)輸出到stdout

intprintf(constchar*format,...);|-printf的語法

I

Prototypeinstdio.h|-要用printf應(yīng)該

I#include的槽

Printformatsavariablenumberofarguments|—使用說明:不同的格式

accordingtotheformat,andsendstheoutput|須要不同的參數(shù),這些

tostdout.Returnsthenumberofbytesoutput.|數(shù)據(jù)會送到stdout。傳

Intheeventoferror,itreturnsEOF.|回值是輸出的byte數(shù),

I若發(fā)生錯誤則傳回

EOF

Seealsoecvtfprintfputc可參考相關(guān)指令:

putsscanfvprintfecvt,fprintf,putc,

puts,scanf,vprintf

在用TC的整合環(huán)境中,只要將光標移到想進一步了解的指令或內(nèi)建的函式上,按下

Ctrl+Fl就可以叫出TC的Help說明窗口,得到該指令或函式的相關(guān)說明。

printf的語法:intprintf(constchar*fonnat,…);

其中constchar*format指的是一個格式化的字符串。const是常數(shù)的意思,在此表示

format這個字符串指針傳入printf函式后,它的值不會被改變。

...指的是不定參數(shù),參數(shù)的數(shù)目取決于format字符串的內(nèi)容,這些參數(shù),通常是一些你

要秀出來的變量。簡單來說:printf("輸出格式(含控制字符串)",要印出的數(shù)據(jù));

在C語言中是用雙引號(")來引含字符串,也就是在雙引號內(nèi)的數(shù)據(jù),是一個字符串。

本章只介紹%d這個控制字符串,其它的控制字符串在第四章會講到。%d表示以整數(shù)10

進位的方式秀出數(shù)據(jù)。在輸出格式(含控制字符串)內(nèi)有幾個%d,在要印出的數(shù)據(jù)內(nèi)就要有

幾個整數(shù)來對應(yīng)。

arith.c

1

1|#include<stdio.h>

2|voidmain(void)

31{

4Iprintf("%d+%d=%d\n';8,2,8+2);

5|printf(u%d-%d=%d\nu,8,2,8-2);

6Iprintf(M%d*%d=%d\n”,8,2,8*2);

7Iprintf("%d/%d=%d\nn,8,2,8/2);

81)

8+2=10

8-2=6

8*2=16

8/2=4

我們以第四列的敘述作說明:

printf("%d+%d=%d\n",8,2,8+2);

在輸出格式(含控制字符串)內(nèi)有3個%d,所以在要印出的數(shù)據(jù)的部分有

8,2,及8+2三個整數(shù)對應(yīng),所以輸出來的結(jié)果就是

8+2=10

在輸出格式(含控制字符串)的最后有\(zhòng)n符號,這是一個控制字符,表示要

更換到下一列,其它的控制字符在第四章會提到。

若將本例中的\n都刪除,那秀出的結(jié)果會像這樣子:

8+2=108-2=68*2=168/2=4

◎C的四則運算

計算機語言用的四則運算符號兒乎都是相同的:

四則運算符號意義范例結(jié)果

------------------..—

+加法4+26

-減法(或代表負號)4-22

*乘法4*28

/除法4/22

=====

相關(guān)運算符號意義范例結(jié)果

===========

++變數(shù)值加1i++或++ii值加1

—變數(shù)值減1i-或--ii值減1

%整數(shù)除法的余數(shù)4%20

____________________________—________________

在書中提到C語言沒有提供次方的功能,指的是在某些計算機語言可以用**表示

次方,如:2**3,表示2的3次方;有的用A表示,如:2A8,表示

2的8次方。在C語言,沒有運算符號可以表示次方,但是C語言有提供次方

的函式:pow(),pow(2,3)表示2的3次方。

?個式子如果有多個運算的話,C是以先乘除后加減的方法來運算,當然我們也

可以用括號()來改變這個法則,只要有括號,就優(yōu)先運算。另外,在C語言內(nèi)

中括號【|及大括號{}是有其它的用途,所以在作數(shù)學(xué)運算時,只要用括號

,就只能用小括號(),小括號可以多層,C在運算時,是由最內(nèi)層開始運算。

范例:(1+2*(3+4))*5-6*7/2+8

=(1+2*(7))*5-6*7/2+8

=(15)*5-6*7/2+8

=75-42/2+8

=7521+8

=62

◎批注(Comments)

通常老師會要求初學(xué)者在程序的每一列加上批注,這是為了讓初學(xué)者知道自己在寫些什么程

序代碼,了解為什么要這樣寫,而不只是照著書Keyin程序。寫批注有助于自己了解程序

的內(nèi)容,便于日后的修改。但寫批注對于某些程序設(shè)計師而言可說是一種噩夢,因為寫批注

所花的時間可能會與寫程序的時間相去不遠,認為寫批注只是在浪費時間。對一個相當好

的程序設(shè)計師而言,也許寫批注真的是浪費時間,因為好的程序代碼本身就已經(jīng)隱含了批注,

這也是寫程序相當高的境界。對一般的程序設(shè)計師而言,寫一些批注還是比較好的作法,

特別是某些程序代碼是你花了一段時間才想到的「特殊」方法,加上一些批注,說明一下這

個「特殊」的方法,以后要修改才能快速進入狀況,否則,你可能會佩服自己當時是如何想

到的這個方法,又再花一段時間才知道自己在寫些什么程序代碼。講了這么多批注的

正反面(正面居多)論調(diào),在C語言中要如何寫批注呢?只要用/*和*/將你要的批注內(nèi)

容包起來就可以了。C在編譯時,會將/**/內(nèi)的數(shù)據(jù)略去,就如同調(diào)位字符一樣。唯一的

例外是:當/**/在一組雙引號”內(nèi)時,它們就屬于這組雙引號所包含的字符串。在C++

語言中則可用〃當批注.

Icomments.corcomments.cpp

1|#include<stdio.h>/*prototype:printf()*/

2|voidmain(void)//mainprogram

3I(

4|/*所有的程序代碼都變成批注,所以這個程序目前是空的*/

5|/*printf("%d+%d=%d\n",8,2,8+2);*/

6|/*printf("%d-%d=%d\n",8,2,8-2);

7|printf("%d*%d=%d\n",8,2,8*2);

8|printf("%d/%d=%d\n",8,2,8/2);//division

9|*/

10|}//endofprogram

◎巢狀注(NestedComments)

InestcomO.c

1|#include<stdio.h>/*prototype:printf()*/

2|voidmain(void)

3I(

4|/*這個程序必須把巢狀批注的設(shè)定打開,才不會有錯誤*/

5|/*

6|printf("%d+%d=%d\n",8,2,8+2);

7|/*printf("%d-%d=%d\n",8,2,8-2);*/

8|printf("%d*%d=%d\n",8,2,8*2);

9|printf("%d/%d=%d\n",8,2,8/2);

10|*/

HI}

上面的例子,有四組批注/**/,其中第三組及第四組的批注之間有部分重迭。

想要Compile沒有錯誤,必須第5列的/*與第10列的*/配,也就是

第5列到第10列都是批注;另外第7列的/*與第7列的*/配,也就是

第7列是批注。這種批注方式,我們稱之為巢狀批注。

TurboC內(nèi)定是不可使用巢狀批注的,上面的例子會是第5列的/*與第7列

的*/配,結(jié)果在第10列的*/會變成是多余的,造成Compile錯誤。

打開巢狀批注的方法:

按下F10fOptionsfCompilerfSource—NestedcommentsOff

將Off設(shè)為On就可以了。

◎巢狀批注的使用時機

在前面的例子只是為了說明巢狀批注,也許你會覺得這樣的用法是自找麻煩,

但是以下的例子,你就會認為有巢狀批注的功能還是比較好的。

在nestcoml.c中,每一列的printf();后面都加上了批注。

若要把這幾列程序變成批注,不使用巢狀批注,就會像nestcom2.c一樣,

必須在每一列的printf();前后再加上/**/,若是使用巢狀批注,

就像nestcom3.c一樣,只要在這幾列的前后加/**/就可以了。

11

Inestcoml.c

i

|#include<stdio.h>/*prototype:printf()*/1

2|voidmain(void)1

1

3ii1

41/*這個程序在每一個敘述后都加上了批注*/1

51

6|printf(M%d+%d=%d\nH,8,2,8+2);*8+2=10*/I

7|printf(n%d-%d=%d\n”,8,2,8-2);/*8-2=6*/1

8|printf(n%d*%d=%d\n”,8,2,8*2);/*8*2=16*/|

9Iprintf(H%d/%d=%d\nn,8,2,8/2);/*8/2=4*/|

101

111)1

ii

ii

nestcom2.c

1#include<stdio.h>/*prototype:printf()*/

2voidmain(void)

3(

4/*這個程序不用把巢狀批注的設(shè)定打開,也不會有錯誤刃

5

6/*printf(n%d+%d=%d\n';8,2,8+2);*//*8+2=10*/

7/*printf(u%d-%d=%d\n",8,2,8-2);*//*8-2=6*/

8/*printf(u%d*%d=%d\n'\8,2,8*2);*//*8*2=16*/

9/*printf("%d/%d=%d\nn,8,2,8/2);*//*8/2=4*/

10

11

nestcom3.c

1#include<stdio.h>/*prototype:printf()*/

2voidmain(void)

3(

4/*這個程序也必須把巢狀批注的設(shè)定打開,才不會有錯誤*/

5/*

6printf("%d+%d=%d\n",8,2,8+2);/*8+2=10*/|

7printf("%d-%d=%d\n",8,2,8-2);/*8-2=6*/|

8printf("%d*%d=%d\n",8,2,8*2);/*8*2=16*/|

9printf("%d/%d=%d\n",8,2,8/2);/*8/2=4*/|

10*/

11

■第三章常數(shù)與變數(shù)

C語言的數(shù)據(jù)可分為常數(shù)(constant)及變量(variable),常數(shù)指的是固定不變的數(shù),

例如:0,1,2等數(shù)值,或是用雙引號定義的字符串,我們也稱之為字符串常數(shù)。

變量指的是數(shù)值可以改變的數(shù),例如:-個整數(shù)變量,我們可以把它設(shè)成1,然后再

改為10,或是其它的整數(shù)數(shù)值。

一個程序若沒有變量,那純粹只是將常數(shù)秀出來而已,好比是用文字編輯器編輯一個

檔案,再用type把它秀出來一樣。有了變量,就可以做不同的變化。

◎變量的型態(tài)---Char,int,long,float,doubleetc.o

◎變數(shù)的命名

如同檔案的命名,變量的名字要取得有意義,在C中,名字可以取得很長,但是

要用英文的,所以你可以把變量用中翻英來命名。

◎變量的命名規(guī)則

O變量名稱的第一個字符必須是英文字母(A到Z或a到z)或是底線(_)。

O第二個字符以后可以使用前述字符,再加上數(shù)字0到9。

O變量名稱的大小寫是不同的。

O變量名稱的最前面32個字符有效。

O不可以使用「保留字」當變量的名稱,保留字是給編譯器使用,不可以當成

變量名稱。TC有以下的保留字:

流程:ifelsefordowhile

switchdefaultcasebreakcontinue

gotoreturn

型別:charintlongfloatdouble

voidregistersignedunsigned

shortnearfarhuge

typedefstructunionenum

autoconststaticvolatileextern

interruptcdeclpascalasm

運算:sizeof

緩存器:_AX_AH_AL__cs_CS

_BX_BL_ds_DS

_CX_CH_CL_es_ES

_DX_DH_DL_ss_SS

_SI_DI_BP_SP

變量的設(shè)定

使用變量時,應(yīng)該先考慮這個數(shù)可能的數(shù)值范圍,用以選定變量的型別,例如:

用一個數(shù)來存班上的人數(shù),一個合班的大班級可能超過百人,但最大不太可能

超過千人,所以選一種變量型別可存1000以下的數(shù)值,在此可選整數(shù)。

若是要用一個數(shù)來存你的存款,則整數(shù)的上限32767可能某些同學(xué)一個月的薪資

就是它的數(shù)倍,所以要選長整數(shù),它的上限是2147483647。在數(shù)學(xué)運算時,

想要有小數(shù)的就要用浮點數(shù)(float)。

在C語言中,變量宣告的語法如下:

I型別變量名稱1[,變量名稱2|

例如:intNumberOfStudent;/*學(xué)生人數(shù)*/

longMoneylnBank,interest;/*銀行存款*/

floatRateOflnterest;/*利息利率*/

charEndOfString;/*字符串結(jié)束*/

charOneStudentName[9];/*學(xué)生姓名*/

在宣告變量時,我們可以設(shè)定變量的初始值(initialvalue),語法如下:

I型別變量名稱1=初始值1[,變量名稱2=初始值2|

例如:intNumberOfStudent=60;/*學(xué)生人數(shù)*/

longMoneyInBank=1000000L;/*銀行存款*/

floatRateOfInterest=5.0;/*利息利率in%*/

charEndOfString=V)';/*字符串結(jié)束*/

charOneStudentName[9]="王大明";/*學(xué)生姓名*/

注意:在銀行存款的設(shè)定數(shù)值1000000后加上一個L,表示這個常數(shù)數(shù)值

1000000是一個長整數(shù)。因為C語言內(nèi)定的型別是整數(shù),為了防止

不可預(yù)期的狀況發(fā)生,最好是自己把它設(shè)定成你想要的型別,不要

假設(shè)TC會幫你做好好的,要假設(shè)TC很笨不會幫你做,這樣在發(fā)展

大程序要除錯時,就可以把問題簡化,不必再考慮是不是數(shù)據(jù)型別錯誤,

只要把程序流程或算法搞定就可以了。

在TC中,不加L,結(jié)果還是正確的,但是在其它的環(huán)境下可能會不同。

多加一個L并不會使程序變大或變慢,又能保障正確使用,何樂不為。

O復(fù)習(xí)一下字符與字符串:

char字符只占一個byte,以一組單引號’引含字符數(shù)據(jù),其表示法如下:

O單一字符:'A'、豈>'0'?

O八進制數(shù)值:M01','\141\'60'、'\0'

0十六進制數(shù)值:\x41'、"61'、\x30\'\xO'

字符串則是由一個以上的字符所組成的,而且以W這個字符做為結(jié)尾。

表示法:"123"、"ABC"、"abc"。以上的三個例子都是占4bytes。

用strlen()可以取得字符串的長度(不含W字符)。

如:intStringLen=strlen("123");

這樣,StringLen就等于3。

☆在使用strlen()時,必須加入#include<string.h>

◎設(shè)定敘述

前面已經(jīng)說明了變量在宣告時給定初值的方法,接下來是在程序執(zhí)行的過程中設(shè)定變量數(shù)值

的方法.即然是變量,表示它的數(shù)值可能在程序執(zhí)行的過程中會改變多次,如果一個變量

在整個程序執(zhí)行中都不會改變,或許你該把它設(shè)成常數(shù)。

在設(shè)定變量時,可以用等號=來設(shè)定變量新值,語法如下:

I變量名稱=表達式(表達式、函式傳回數(shù)值或兩者混合);

這個意思是等號左邊「變量名稱」的數(shù)值會等于等號右邊「表達式」的運算結(jié)果。

在C中,等號=是用來設(shè)定變量數(shù)值的,所以在等號的左邊必須是變量,不可以

是常數(shù)。在邏輯上的相等,在C中是用兩個等號==來表示,有關(guān)邏輯的表示,

在第五章中會作介紹。以下我們來看一些設(shè)定的例子,計算圓的面積:

PI=3.1415926;

r=4;

area=PI*r*r;

以下是用變量的方式表示的范例:

var.c

#include<stdio.h>

voidmain(void)

(

inti,j;

i=10;

j=2;

printf("%d+%d=%d\n",i,j,i+j);

printf(H%d-%d=%d\n",i,j,i-j);

printf(H%d*%d=%d\nH,i,j,i*j);

printf(n%d/%d=%d\n",iJ,i/j);

i=20;

j=2;

printf(u%d+%d

M

printf(%d-%d:

printf("%d*%d%d\n”,i,j,i*j);

printf(M%d/%d:%d\n\i,j,i/j);

10+2=12

10-2=8

10*2=20

10/2=5

20+2=22

20-2=18

20*2=40

20/2=10

變量使用的有效范圍:

整體變量(GlobalVariable):整體程序內(nèi)

區(qū)域變量(LocalVariable):函式內(nèi)

靜態(tài)變量(StaticVariable):單一程序內(nèi)

■第四章基本輸出入函式

這一章將介紹一些基本輸出入的函式,使用者經(jīng)由這些函式可以與計算機溝通,讓程序

讀取使用者的輸入部分。程序依使用者不同的要求,做不同的事,再將結(jié)果輸出給使用者。

◎輸出指令:printf()

在第二章中,曾經(jīng)談過printf指令,現(xiàn)在來詳細的探討它。

printf是一種格式化的輸出指令,換句話說,你可以用它來編排你所要的輸出格式。printf的

一般型式如下:

Iprintf("控制字符串“,表達式1,表達式2,...);

控制字符串是你打算要秀出的訊息,其中利用%與\這兩個字符,來控制數(shù)值的

輸出格式。

控制字符串中每一個%符號,表示在后面有一個表達式與它對應(yīng),表達式的值會代

入這個%的位置。在%后的字符表示代入數(shù)的型別,常用的句柄如下表:

ii

1printf的句柄代表代入的數(shù)值型別I

1I

11

|%c1字符

I%d1十進制之整數(shù)

I%ld1十進制之長整數(shù)

|%f1浮點數(shù)

I%lf1倍精浮點數(shù)1

|%Lf1長倍精浮點數(shù)

I%s1字符串

11

表達式的型別必須跟句柄所代表的型別相符,否則會秀出不可預(yù)期的資料。

另一個控制符號\,其實只是定義字符而已。在上一章已經(jīng)介紹了字符的各種表

示法,如:表示A字符。

在C語言中,將一些特殊的控制字符另外定義,這些控制字符大部份跟光標的

控制有關(guān),如下表:

I控制字符IDec|Hex|功能

\n|10|OxOA1換列,也就是將光標移到下一列

\t|9|0x09|將光標移到下一個定位(l+8n)

\b18|0x08|退一格,類似按下左鍵

\aI7|0x07|喇叭叫一聲

\rI13|OxOD|回到列首

\f|12|0x0C|跳頁,在列表時控制列表機跳頁

\\|92|0x5C|印出\字符

\r|39|0x27|印出,字符

\"|34|0x22|印出"字符

\xHHI|OxHH|卬出OxHH所表示的字符

%%|37|0x25|印出%字符

其中,%字符的定義與在控制字符串中的表示法不同,其余的字符在定義上與在控

字符串中的表示法都相同。

printf在做輸出時?,你也可以指定保留多少位置給對應(yīng)的表達式放結(jié)果。指定的

方式是在%之后加一個數(shù)值,如%5d:表示保留5個字符空間給一個十進制整數(shù);

%121d:表示保留12個字符空間給-?個十進制長整數(shù)。

如果要輸出數(shù)據(jù)的長度比你指定的保留空間還要大時,printf就不理會你的設(shè)定,

把要輸出的數(shù)據(jù)完整的輸出,所以,你在設(shè)定保留空間時,應(yīng)該注意輸出數(shù)據(jù)的范圍

及長度,保留夠大的空間,確保輸出格式的整齊。

在浮點數(shù)方面,你除了可以指定保留的空間外,還可以指定小數(shù)點后要取幾位。

如%8.3f:表示保留8個字符空間給一個浮點數(shù),小數(shù)部分則是占3個字符空間

,由于小數(shù)點本身占一個字符,所以整數(shù)部分占8-(3+1)=4個字符空間。

printf在輸出數(shù)據(jù)時,如果你指定保留的空間比要秀的數(shù)據(jù)長度還要大時,那

printf先秀一些空白,再秀出數(shù)據(jù),使總長度等于你所指定的寬度,這樣等于是

讓輸出的數(shù)據(jù)向右對齊。如果你想要讓數(shù)據(jù)是向左對齊的話,可以在指定寬度時

使用負數(shù),如%-5d:表示保留5個字符空間給一個十進制整數(shù),若數(shù)據(jù)長度不足

5,則在秀出資料后補空白。

O整數(shù)(int)及長整數(shù)(long)

%-+wd-int|

|%-+wIdflongI

1tft1

III1———若有指定,則保留w個字符

111若無指定,秀出長度將由數(shù)據(jù)決定1

111----------—若有指定,則一定會秀出正負號1

11若無指定,則只有負數(shù)會秀出負號I

11___________—若有指定,則向左對齊I

若無指定,則向右對齊1

11

O浮點數(shù)(float)、倍精浮點數(shù)(double)及長倍精浮點數(shù)(longdouble)

%-+w.pfffloat

%-+w.pIffdouble

%-+w.pLfflongdouble

tttf

1111—若有指定,則保留p個字符給小數(shù)1

111若無指定,內(nèi)定是保留6個字符給小數(shù)|

111____若有指定,則保留w個字符含小數(shù)及小數(shù)點

11若無指定,秀出長度將由數(shù)據(jù)決定1

11__—若有指定,則一定會秀出正負號1

1若無指定,則只有負數(shù)會秀出負號I

1—若有指定,則向左對齊|

若無指定,則向右對齊I

說了這么多,只有自己試試看才知道!以下是個簡單的例子:

Iprint.c1

11

11

1|#include<stdio.h>1

2|voidmain(void)1

31{1

4Iprintf(nl%ldl\n';123456);1

5Iprintf(nl%51dKnn,123456);1

6Iprintf("l%dl\n",123);1

7|printf(Ml%5dl\nH,123);1

8|printf(Ml%-5dl\n",123);1

9Iprintf(',l%fl\nH,12.345);1

10Iprintf("l%9fl\nn,12.345);1

11IprintfCI%9.2fl\nn12.345);1

12|printf(nl%-9.2fl\nn,12.345);1

131)1

1

11

I11234561-123456大于32767要長整數(shù)才能表示,所以用%ld|

I11234561一所保留的5個字符不夠使用,所以TC視同你沒設(shè)|

I112311

I11231一保留5個字符,只使用3個字,向右靠齊|

I11231一保留5個字符,只使用3個字,向左靠齊|

I112.3450001<-小數(shù)沒有指定,所以TC使用內(nèi)定的6個小數(shù)。|

|112.3450001-一保留9個字符,小數(shù)部分仍使用內(nèi)定值I

1112.351-保留9個字符,小數(shù)2個字符,向右靠齊|

|112.351-保留9個字符,小數(shù)2個字符,向左靠齊|

◎輸入指令:scanf()

C語言使用scanf指令來讀取keyboard輸入的數(shù)據(jù)。scanf的一般型式如下:

Iscanf("控制字符串",&變量1,&變量2,);

scanfprintf可以說是相對的,一個用來做輸入,一個用來做輸出。

scanf的控制字符串與printf幾乎是一樣。

111

1scanf的句柄1代表輸入的數(shù)值型別1

111

111

I%c1字符

I%d1十進制之整數(shù)

I%ld1十進制之長整數(shù)1

I%D1十進制之長整數(shù)

I%f1浮點數(shù)1

I%lf1倍精浮點數(shù)1

I%Lf1長倍精浮點數(shù)

I%s1字符串

111

★注意:沒有%F這種句柄,課本有誤!

%D的句柄只能用在scanf(),在printf()中無法使用。

在用scanf時還有一點要注意,在控制字符串后的變量,使用的是指針(pointer)。

什么是指標?指針就是指向內(nèi)存的一個地址,在那個地址存放著數(shù)據(jù)。

例如:一個整數(shù)變量i,它是存在內(nèi)存的某一個地址,那個地址在C語言中,

是以&i來表示,我們通常稱&i是i的地址,也稱為i的指標。

以下是常用的變量及其指針(因為它的地址固定不會改變,也稱為指標常數(shù)):

Icharc;/*字符*//*C的指針是&C*/

1inti;/*整數(shù)*//*i的指標是&i*/

1long1;/*長整數(shù)*//*1的指標是&1*/

|floatf;/*浮點數(shù)*//*f的指標是&f*/

Idoubled;/*倍精浮點數(shù)*//*d的指標是&d*/

|longdoubleId;/*長倍精浮點數(shù)*//*Id的指標是&ld*/

1I

|charstr[8O];/*字符數(shù)組(字符串)*//*str[8O]的指標是str*/|

|inta[100];/*整數(shù)數(shù)組*//*a[100]的指標是a*/

|longb[100];/*長整數(shù)數(shù)組*//*b[100]的指標是b*/

|floatc[100];/*浮點數(shù)數(shù)組*//*c[1001的指標是c*/

以下的范例,將第三章的范例var.c變量改由scanf輸入:

11

Iio.c|

?1?1

1|#include<stdio.h>1

2|voidmain(void)1

31{1

4Iinti,j;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論