格式化輸入輸出_第1頁(yè)
格式化輸入輸出_第2頁(yè)
格式化輸入輸出_第3頁(yè)
格式化輸入輸出_第4頁(yè)
格式化輸入輸出_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

4.5格式輸入輸出4.5.1printf()函數(shù)(格式輸出函數(shù))printf()函數(shù)的作用:向計(jì)算機(jī)系統(tǒng)默認(rèn)的輸出設(shè)備(一般指終端或顯示器)輸出一個(gè)或多個(gè)任意類(lèi)型的數(shù)據(jù)。

[例L4.4.c]已知圓半徑radius=1.5,求圓周長(zhǎng)和圓面積。

main()

{floatradius,length,area,pi=3.1415926;

radius=1.5;

length=2*pi*radius; /*求圓周長(zhǎng)*/

area=pi*radius*radius; /*求圓面積*/

printf(“radius=%f\n”,radius); /*輸出圓半徑*/

printf(“l(fā)ength=%7.2f,area=%7.2f\n”,length,area); /*輸出圓周長(zhǎng)、面積*/

}

演示程序運(yùn)行結(jié)果如下:

radius=1.500000length=9.42,area=7.07 1.printf()函數(shù)的一般格式:printf(“格式控制”[,輸出項(xiàng)表]);(1).格式控制(轉(zhuǎn)換控制字符串),可以包含三種字符:

a、格式說(shuō)明。一般形式如下:%[格式字符]

b、轉(zhuǎn)義字符(見(jiàn)p48)c、普通字符──除格式指示符和轉(zhuǎn)義字符之外的其它字符。格式字符串中的普通字符,原樣輸出。例如,printf(“radius=%f\n”,radius);中的“radius=”是普通字符。(2).輸出項(xiàng)表可選項(xiàng)。如果要輸出的數(shù)據(jù)不只1個(gè),相鄰2個(gè)之間用逗號(hào)分開(kāi)。例

printf("Iamastudent.\n"); printf("%d",3+2);

printf("a=%fb=%5d\n",a,a+3); 注意:“格式字符串”中的格式指示符,必須與“輸出項(xiàng)表”中、輸出項(xiàng)的數(shù)據(jù)類(lèi)型一致,否則會(huì)引起輸出錯(cuò)誤。輸出格式說(shuō)明符整型數(shù)據(jù)

%d以有符號(hào)十進(jìn)制形式輸出整型數(shù)%o以無(wú)符號(hào)八進(jìn)制形式輸出整型數(shù)%x以無(wú)符號(hào)十六進(jìn)制形式輸出整型數(shù)%u以無(wú)符號(hào)十進(jìn)制形式輸出整型數(shù)實(shí)型數(shù)據(jù)

%f以小數(shù)形式輸出實(shí)型數(shù)%e以指數(shù)形式輸出實(shí)型數(shù)%g按數(shù)值寬度最小的形式輸出實(shí)型數(shù)字符型數(shù)據(jù)

%c輸出一個(gè)字符%s輸出字符串其他

%%輸出字符%本身在%和格式符之間可以使用附加說(shuō)明符2格式字符附加格式說(shuō)明符l輸出長(zhǎng)整型數(shù)(只可與d、o、x、u結(jié)合用)m指定數(shù)據(jù)輸出的寬度(即域?qū)挘?n對(duì)實(shí)型數(shù)據(jù),指定輸出n位小數(shù);對(duì)字符串,指定左端截取n個(gè)字符輸出+使輸出的數(shù)值數(shù)據(jù)無(wú)論正負(fù)都帶符號(hào)輸出-使數(shù)據(jù)在輸出域內(nèi)按左對(duì)齊方式輸出整數(shù)位數(shù)+小數(shù)位數(shù)+小數(shù)點(diǎn)自動(dòng)對(duì)n位后小數(shù)四舍五入

例如:%ld——輸出十進(jìn)制長(zhǎng)整型數(shù)%m.nf——右對(duì)齊,m位域?qū)?,n位小數(shù)或n個(gè)字符%-m.nf——左對(duì)齊

輸出不同類(lèi)型的數(shù)據(jù),要使用不同的格式字符(類(lèi)型轉(zhuǎn)換字符)。

(1)類(lèi)型轉(zhuǎn)換字符d──以帶符號(hào)的十進(jìn)制整數(shù)形式輸出。%d:實(shí)際長(zhǎng)度輸出%md:指定的輸出字段的寬度%ld長(zhǎng)整型數(shù)據(jù)對(duì)于整數(shù),還可用無(wú)符號(hào)形式的八進(jìn)制(%o(小寫(xiě)字母o))和十六進(jìn)制(x/X);對(duì)于unsigned型數(shù)據(jù),用%u格式符。所謂無(wú)符號(hào)形式是指,不論正數(shù)還是負(fù)數(shù),系統(tǒng)一律當(dāng)作無(wú)符號(hào)整數(shù)來(lái)輸出。

[例L4.5.c]類(lèi)型轉(zhuǎn)換字符d的使用。main(){intnum1=123;longnum2=123456789;/*用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);

printf("num2=%d\n",num2);} 演示程序運(yùn)行結(jié)果如下:num1=123,num1=□□123,num1=123□□,num1=123num2=12345689,num2=123456789,num2=123456789num1=16908411(TC2.0結(jié)果,VC結(jié)果正確)num2=-7616(TC2.0結(jié)果,VC結(jié)果正確)

(2)類(lèi)型轉(zhuǎn)換字符f──以小數(shù)形式、按系統(tǒng)默認(rèn)的寬度,輸出單精度和雙精度實(shí)數(shù)。%f%m.nf%-m.nf

對(duì)于實(shí)數(shù),也可使用格式符%e,以標(biāo)準(zhǔn)指數(shù)形式輸出——尾數(shù)中的整數(shù)部分大于等于1、小于10,小數(shù)點(diǎn)占一位,尾數(shù)中的小數(shù)部分占5位,指數(shù)部分占4位(如e-03),其中e占一位,指數(shù)符號(hào)占一位,指數(shù)占2位,共計(jì)11位。也可使用格式符%g——讓系統(tǒng)根據(jù)數(shù)值的大小,自動(dòng)選擇%f或%e格式、且不輸出無(wú)意義的零。

[例L4.6.c]類(lèi)型轉(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);}

演示程序運(yùn)行結(jié)果如下:

123.456001,□□123.456001,□□□□□□123.46,123.46□□□□□□,123.46

d1+d2=3333333333333.333010

說(shuō)明:本案例程序的輸出結(jié)果中,數(shù)據(jù)123.456001和3333333333333.333010中的01和010都是無(wú)意義的,因?yàn)樗鼈兂隽擞行?shù)字的范圍。

(3)類(lèi)型轉(zhuǎn)換字符c──輸出一個(gè)字符(只占一列寬度)。[例L4.7.c]類(lèi)型轉(zhuǎn)換字符c的使用。main(){charc='A';

inti=65;

printf("c=%c,%5c,%d\n",c,c,c);

printf("i=%d,%c",i,i);}

程序運(yùn)行結(jié)果如下:

c=A,□□□□A,65i=65,A注意:在C語(yǔ)言中,整數(shù)可以用字符形式輸出,字符數(shù)據(jù)也可以用整數(shù)形式輸出。將整數(shù)用字符形式輸出時(shí),系統(tǒng)首先求該數(shù)與256的余數(shù),然后將余數(shù)作為ASCII碼,轉(zhuǎn)換成相應(yīng)的字符輸出。演示(4)類(lèi)型轉(zhuǎn)換字符s──輸出一個(gè)字符串。[例L4.8.c]類(lèi)型轉(zhuǎn)換字符s的使用。

main(){

printf("%s,%5s,%-10s","Internet","Internet","Internet");

printf("%10.5s,%-10.5s,%4.5s\n","Internet","Internet","Internet");} 程序運(yùn)行結(jié)果如下:Internet,Internet,Internet□□,□□□□□Inter,Inter□□□□□,Inter演示使用說(shuō)明

(1)printf()可以輸出常量、變量和表達(dá)式的值。但格式控制中的格式說(shuō)明符,必須按從左到右的順序,與輸出項(xiàng)表中的每個(gè)數(shù)據(jù)一一對(duì)應(yīng),否則出錯(cuò)。例如,printf("str=%s,f=%d,i=%f\n","Internet",1.0/2.0,3+5,"CHINA");是錯(cuò)誤的。

(2)格式字符x、e、g可以用小寫(xiě)字母,也可以用大寫(xiě)字母。使用大寫(xiě)字母時(shí),輸出數(shù)據(jù)中包含的字母也大寫(xiě)。除了x、e、g格式字符外,其它格式字符必須用小寫(xiě)字母。例如,%f不能寫(xiě)成%F。

(3)格式字符緊跟在“%”后面就作為格式字符,否則將作為普通字符使用(原樣輸出)。例如,“printf(”c=%c,f=%f\n“,c,f);”中的第一個(gè)c和f,都是普通字符。4.5.2格式化輸入scanf()函數(shù)

[例]已知圓柱體的底半徑radius=1.5,高h(yuǎn)igh=2.0,求其體積。

main()

{floatradius=1.5,high=2.0,pi=3.14159,vol;

vol=pi*radius*radius*high;/*求體積*/

printf(“vol=%7.2f\n”,vol); /*輸出求出的體積*/

} [例L4.9.c]已知圓柱體的底半徑為radius,高為high,求其體積。/*功能:說(shuō)明函數(shù)scanf()的格式及作用。*/main(){floatradius,high,vol,pi=3.1415926;

printf("Pleaseinputradius&high:");

scanf("%f%f",&radius,&high); /*從鍵盤(pán)輸入兩個(gè)實(shí)數(shù)賦給變量r,h*/

vol=pi*radius*radius*high;

printf("radius=%7.2f,high=%7.2f,vol=%7.2f\n",radius,high,vol);}

程序運(yùn)行結(jié)果如下:

Pleaseinputradius&high:1.5□2.0↙radius=□□□1.50,high=□□□2.00,vol=□□14.14演示1.scanf()函數(shù)的一般格式scanf(“格式控制",輸入項(xiàng)首地址表);(1)格式控制字符串。格式控制字符串可以包含3種類(lèi)型的字符:格式指示符、空白字符(空格、Tab鍵和回車(chē)鍵)和非空白字符(又稱(chēng)普通字符)。格式指示符與printf()函數(shù)的相似,空白字符作為相鄰2個(gè)輸入數(shù)據(jù)的缺省分隔符,非空白字符在輸入有效數(shù)據(jù)時(shí),必須原樣一起輸入。(2)輸入項(xiàng)首地址表──由若干個(gè)輸入項(xiàng)首地址組成,相鄰2個(gè)輸入項(xiàng)首地址之間,用逗號(hào)分開(kāi)。輸入項(xiàng)首地址表中的地址:變量的地址、字符數(shù)組名或指針變量。變量地址的表示方法:&變量名其中“&”是地址運(yùn)算符。例如,[L4.9.c]中的“&radius”是指變量radius在內(nèi)存中的地址。

2.scanf()函數(shù)的功能:從鍵盤(pán)上接收格式化輸入。運(yùn)行例[L4.9.c]的程序時(shí),從鍵盤(pán)上輸入2個(gè)實(shí)數(shù),分別存入&radius、&high所標(biāo)示的存儲(chǔ)單元中,即輸入兩個(gè)實(shí)數(shù)分別賦給radius和high。

3、格式指示符

格式指示符的一般形式為:%[*][寬度][h|l]類(lèi)型字符(1)類(lèi)型字符類(lèi)型字符如p80表4.3。例如,在例[L4.9.c]的scanf()函數(shù)語(yǔ)句中,格式字符串“%f%f”。

(2)寬度n

指定該項(xiàng)輸入數(shù)據(jù)所占列數(shù)為n。

換句話說(shuō),讀取輸入數(shù)據(jù)中相應(yīng)的n位,但按需要的位數(shù)賦給相應(yīng)的變量,多余部分被舍棄。例如,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)賦值抑制字符*表示本輸入項(xiàng)對(duì)應(yīng)的數(shù)據(jù)讀入后,不賦給相應(yīng)的變量(該變量由下一個(gè)格式指示符輸入)。例如,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)類(lèi)型修飾符──h、l。

其含義與printf()中的一樣,分別為短整型和長(zhǎng)整型。

4、數(shù)據(jù)輸入操作

(1).如果相鄰2個(gè)格式指示符之間,不指定數(shù)據(jù)分隔符(如逗號(hào)、冒號(hào)等),則相應(yīng)的2個(gè)輸入數(shù)據(jù)之間,至少用一個(gè)空格分開(kāi),或者用Tab鍵分開(kāi),或者輸入1個(gè)數(shù)據(jù)后,按回車(chē),然后再輸入下1個(gè)數(shù)據(jù)。例如,scanf("%d%d",&num1,&num2);

假設(shè)給num1輸入12,給num2輸入36,則正確的輸入操作為:12□36↙

或者:12↙36↙

注:使用“↙”符號(hào)表示按回車(chē)鍵操作,在輸入數(shù)據(jù)操作中的作用是,通知系統(tǒng)輸入操作結(jié)束。

(2).“格式字符串”中出現(xiàn)的普通字符(包括轉(zhuǎn)義字符形式的字符),務(wù)必原樣輸入。例如,scanf("%d,%d",&num1,&num2);

假設(shè)給num1輸入12,給num2輸入36,正確的輸入操作為:12,36↙

另外,scanf()函數(shù)中、格式字符串內(nèi)的轉(zhuǎn)義字符(如\n),系統(tǒng)并不把它當(dāng)轉(zhuǎn)義字符來(lái)解釋?zhuān)瑥亩a(chǎn)生一個(gè)控制操作,而是將其視為普通字符,所以也要原樣輸入。例如:scanf("num1=%d,num2=%d\n",&num1,&num2);

假設(shè)給num1輸入12,給num2輸入36,正確的輸入操作為:

num1=12,num2=36\n↙

提高人機(jī)交互性建議:為改善人機(jī)交互性,同時(shí)簡(jiǎn)化輸入操作,在設(shè)計(jì)輸入操作時(shí),一般先用printf()函數(shù)輸出一個(gè)提示信息,再用scanf()函數(shù)進(jìn)行數(shù)據(jù)輸入。

例如,將scanf("num1=%d,num2=%d\n",&num1,&num2);改為:

printf("num1=");scanf("%d",&num1);printf("num2=");scanf("%d",&num2);

(3)輸入數(shù)據(jù)時(shí),遇到以下情況,系統(tǒng)認(rèn)為該數(shù)據(jù)結(jié)束:

a.遇到空格,或者回車(chē)鍵,或者Tab鍵。

b.遇到輸入域?qū)挾冉Y(jié)束。例如“%3d”,只取3列。

c.遇到非法輸入。例如,在輸入數(shù)值數(shù)據(jù)時(shí),遇到字母等非數(shù)值符號(hào)(數(shù)值符號(hào)僅由數(shù)字字符0-9、小數(shù)點(diǎn)和正負(fù)號(hào)構(gòu)成)。

(4)使用格式說(shuō)明符“%c”輸入單個(gè)字符時(shí),空格和轉(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。

4.6順序結(jié)構(gòu)程序設(shè)計(jì)舉例

在順序結(jié)構(gòu)程序中,各語(yǔ)句(或命令)是按照位置的先后次序,順序執(zhí)行的,且每個(gè)語(yǔ)句都會(huì)被執(zhí)行到。

[例L4.10.c]輸入任意三個(gè)整數(shù),求它們的和及平均值。

/*功能:設(shè)計(jì)一個(gè)順序結(jié)構(gòu)程序,求三個(gè)整數(shù)的和及平均值。*/

main()

{intnum1,num2,num3,sum;

floataver;

printf("Pleaseinputthreenumbers:");

scanf("%d,%d,%d",&num1,&num2,&num3);/*輸入三個(gè)整數(shù)*/

sum=num1+num2+num3; /*求累計(jì)和*/

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”?[例L4.11.c]求方程ax2+bx+c=0的實(shí)數(shù)根。a,b,c由鍵盤(pán)輸入,a≠0且b2-4ac>0。/*功能:設(shè)計(jì)一個(gè)順序結(jié)構(gòu)程序,求方程的根。*/#include"math.h“/*使用求平方

溫馨提示

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

評(píng)論

0/150

提交評(píng)論