




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
4.5格式輸入輸出4.5.1printf()函數(格式輸出函數)printf()函數的作用:向計算機系統默認的輸出設備(一般指終端或顯示器)輸出一個或多個任意類型的數據。
[例L4.4.c]已知圓半徑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(“length=%7.2f,area=%7.2f\n”,length,area); /*輸出圓周長、面積*/
}
演示程序運行結果如下:
radius=1.500000length=9.42,area=7.07 1.printf()函數的一般格式:printf(“格式控制”[,輸出項表]);(1).格式控制(轉換控制字符串),可以包含三種字符:
a、格式說明。一般形式如下:%[格式字符]
b、轉義字符(見p48)c、普通字符──除格式指示符和轉義字符之外的其它字符。格式字符串中的普通字符,原樣輸出。例如,printf(“radius=%f\n”,radius);中的“radius=”是普通字符。(2).輸出項表可選項。如果要輸出的數據不只1個,相鄰2個之間用逗號分開。例
printf("Iamastudent.\n"); printf("%d",3+2);
printf("a=%fb=%5d\n",a,a+3); 注意:“格式字符串”中的格式指示符,必須與“輸出項表”中、輸出項的數據類型一致,否則會引起輸出錯誤。輸出格式說明符整型數據
%d以有符號十進制形式輸出整型數%o以無符號八進制形式輸出整型數%x以無符號十六進制形式輸出整型數%u以無符號十進制形式輸出整型數實型數據
%f以小數形式輸出實型數%e以指數形式輸出實型數%g按數值寬度最小的形式輸出實型數字符型數據
%c輸出一個字符%s輸出字符串其他
%%輸出字符%本身在%和格式符之間可以使用附加說明符2格式字符附加格式說明符l輸出長整型數(只可與d、o、x、u結合用)m指定數據輸出的寬度(即域寬).n對實型數據,指定輸出n位小數;對字符串,指定左端截取n個字符輸出+使輸出的數值數據無論正負都帶符號輸出-使數據在輸出域內按左對齊方式輸出整數位數+小數位數+小數點自動對n位后小數四舍五入
例如:%ld——輸出十進制長整型數%m.nf——右對齊,m位域寬,n位小數或n個字符%-m.nf——左對齊
輸出不同類型的數據,要使用不同的格式字符(類型轉換字符)。
(1)類型轉換字符d──以帶符號的十進制整數形式輸出。%d:實際長度輸出%md:指定的輸出字段的寬度%ld長整型數據對于整數,還可用無符號形式的八進制(%o(小寫字母o))和十六進制(x/X);對于unsigned型數據,用%u格式符。所謂無符號形式是指,不論正數還是負數,系統一律當作無符號整數來輸出。
[例L4.5.c]類型轉換字符d的使用。main(){intnum1=123;longnum2=123456789;/*用3種不同格式,輸出int型數據num1的值*/
printf("num1=%d,num1=%5d,num1=%-5d,num1=%2d\n",num1,num1,num1,num1);/*用3種不同格式,輸出long型數據num2的值*/
printf("num2=%ld,num2=%8ld,num2=%5ld\n",num2,num2,num2);printf("num1=%ld\n",num1);
printf("num2=%d\n",num2);} 演示程序運行結果如下:num1=123,num1=□□123,num1=123□□,num1=123num2=12345689,num2=123456789,num2=123456789num1=16908411(TC2.0結果,VC結果正確)num2=-7616(TC2.0結果,VC結果正確)
(2)類型轉換字符f──以小數形式、按系統默認的寬度,輸出單精度和雙精度實數。%f%m.nf%-m.nf
對于實數,也可使用格式符%e,以標準指數形式輸出——尾數中的整數部分大于等于1、小于10,小數點占一位,尾數中的小數部分占5位,指數部分占4位(如e-03),其中e占一位,指數符號占一位,指數占2位,共計11位。也可使用格式符%g——讓系統根據數值的大小,自動選擇%f或%e格式、且不輸出無意義的零。
[例L4.6.c]類型轉換字符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);}
演示程序運行結果如下:
123.456001,□□123.456001,□□□□□□123.46,123.46□□□□□□,123.46
d1+d2=3333333333333.333010
說明:本案例程序的輸出結果中,數據123.456001和3333333333333.333010中的01和010都是無意義的,因為它們超出了有效數字的范圍。
(3)類型轉換字符c──輸出一個字符(只占一列寬度)。[例L4.7.c]類型轉換字符c的使用。main(){charc='A';
inti=65;
printf("c=%c,%5c,%d\n",c,c,c);
printf("i=%d,%c",i,i);}
程序運行結果如下:
c=A,□□□□A,65i=65,A注意:在C語言中,整數可以用字符形式輸出,字符數據也可以用整數形式輸出。將整數用字符形式輸出時,系統首先求該數與256的余數,然后將余數作為ASCII碼,轉換成相應的字符輸出。演示(4)類型轉換字符s──輸出一個字符串。[例L4.8.c]類型轉換字符s的使用。
main(){
printf("%s,%5s,%-10s","Internet","Internet","Internet");
printf("%10.5s,%-10.5s,%4.5s\n","Internet","Internet","Internet");} 程序運行結果如下:Internet,Internet,Internet□□,□□□□□Inter,Inter□□□□□,Inter演示使用說明
(1)printf()可以輸出常量、變量和表達式的值。但格式控制中的格式說明符,必須按從左到右的順序,與輸出項表中的每個數據一一對應,否則出錯。例如,printf("str=%s,f=%d,i=%f\n","Internet",1.0/2.0,3+5,"CHINA");是錯誤的。
(2)格式字符x、e、g可以用小寫字母,也可以用大寫字母。使用大寫字母時,輸出數據中包含的字母也大寫。除了x、e、g格式字符外,其它格式字符必須用小寫字母。例如,%f不能寫成%F。
(3)格式字符緊跟在“%”后面就作為格式字符,否則將作為普通字符使用(原樣輸出)。例如,“printf(”c=%c,f=%f\n“,c,f);”中的第一個c和f,都是普通字符。4.5.2格式化輸入scanf()函數
[例]已知圓柱體的底半徑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); /*輸出求出的體積*/
} [例L4.9.c]已知圓柱體的底半徑為radius,高為high,求其體積。/*功能:說明函數scanf()的格式及作用。*/main(){floatradius,high,vol,pi=3.1415926;
printf("Pleaseinputradius&high:");
scanf("%f%f",&radius,&high); /*從鍵盤輸入兩個實數賦給變量r,h*/
vol=pi*radius*radius*high;
printf("radius=%7.2f,high=%7.2f,vol=%7.2f\n",radius,high,vol);}
程序運行結果如下:
Pleaseinputradius&high:1.5□2.0↙radius=□□□1.50,high=□□□2.00,vol=□□14.14演示1.scanf()函數的一般格式scanf(“格式控制",輸入項首地址表);(1)格式控制字符串。格式控制字符串可以包含3種類型的字符:格式指示符、空白字符(空格、Tab鍵和回車鍵)和非空白字符(又稱普通字符)。格式指示符與printf()函數的相似,空白字符作為相鄰2個輸入數據的缺省分隔符,非空白字符在輸入有效數據時,必須原樣一起輸入。(2)輸入項首地址表──由若干個輸入項首地址組成,相鄰2個輸入項首地址之間,用逗號分開。輸入項首地址表中的地址:變量的地址、字符數組名或指針變量。變量地址的表示方法:&變量名其中“&”是地址運算符。例如,[L4.9.c]中的“&radius”是指變量radius在內存中的地址。
2.scanf()函數的功能:從鍵盤上接收格式化輸入。運行例[L4.9.c]的程序時,從鍵盤上輸入2個實數,分別存入&radius、&high所標示的存儲單元中,即輸入兩個實數分別賦給radius和high。
3、格式指示符
格式指示符的一般形式為:%[*][寬度][h|l]類型字符(1)類型字符類型字符如p80表4.3。例如,在例[L4.9.c]的scanf()函數語句中,格式字符串“%f%f”。
(2)寬度n
指定該項輸入數據所占列數為n。
換句話說,讀取輸入數據中相應的n位,但按需要的位數賦給相應的變量,多余部分被舍棄。例如,scanf("%3c%3c",&ch1,&ch2);printf("ch1=%c,ch2=%c\n",ch1,ch2);
假設輸入“abcdefg”,則系統將讀取的“abc”中的“a”賦給變量ch1;將讀取的“def”中的“d”賦給變量ch2,所以printf()函數的輸出結果為:ch1=a,ch2=d。
(3)賦值抑制字符*表示本輸入項對應的數據讀入后,不賦給相應的變量(該變量由下一個格式指示符輸入)。例如,scanf("%2d%*2d%3d",&num1,&num2);printf("num1=%d,num2=%d\n",num1,num2);
假設輸入“123456789”,則系統將讀取“12”并賦值給num1;讀取“34”、但舍棄掉(“*”的作用);讀取“567”并賦值給num2。所以,printf()函數的輸出結果為:num1=12,num2=567。
(4)類型修飾符──h、l。
其含義與printf()中的一樣,分別為短整型和長整型。
4、數據輸入操作
(1).如果相鄰2個格式指示符之間,不指定數據分隔符(如逗號、冒號等),則相應的2個輸入數據之間,至少用一個空格分開,或者用Tab鍵分開,或者輸入1個數據后,按回車,然后再輸入下1個數據。例如,scanf("%d%d",&num1,&num2);
假設給num1輸入12,給num2輸入36,則正確的輸入操作為:12□36↙
或者:12↙36↙
注:使用“↙”符號表示按回車鍵操作,在輸入數據操作中的作用是,通知系統輸入操作結束。
(2).“格式字符串”中出現的普通字符(包括轉義字符形式的字符),務必原樣輸入。例如,scanf("%d,%d",&num1,&num2);
假設給num1輸入12,給num2輸入36,正確的輸入操作為:12,36↙
另外,scanf()函數中、格式字符串內的轉義字符(如\n),系統并不把它當轉義字符來解釋,從而產生一個控制操作,而是將其視為普通字符,所以也要原樣輸入。例如:scanf("num1=%d,num2=%d\n",&num1,&num2);
假設給num1輸入12,給num2輸入36,正確的輸入操作為:
num1=12,num2=36\n↙
提高人機交互性建議:為改善人機交互性,同時簡化輸入操作,在設計輸入操作時,一般先用printf()函數輸出一個提示信息,再用scanf()函數進行數據輸入。
例如,將scanf("num1=%d,num2=%d\n",&num1,&num2);改為:
printf("num1=");scanf("%d",&num1);printf("num2=");scanf("%d",&num2);
(3)輸入數據時,遇到以下情況,系統認為該數據結束:
a.遇到空格,或者回車鍵,或者Tab鍵。
b.遇到輸入域寬度結束。例如“%3d”,只取3列。
c.遇到非法輸入。例如,在輸入數值數據時,遇到字母等非數值符號(數值符號僅由數字字符0-9、小數點和正負號構成)。
(4)使用格式說明符“%c”輸入單個字符時,空格和轉義字符均作為有效字符被輸入。例如,scanf("%c%c%c",&ch1,&ch2,&ch3);printf("ch1=%c,ch2=%c,ch3=%c\n",ch1,ch2,ch3);
假設輸入:A□B□C↙,則系統將字母'A'賦值給ch1,空格'□'賦值給ch2,字母'B'賦值給ch3。
4.6順序結構程序設計舉例
在順序結構程序中,各語句(或命令)是按照位置的先后次序,順序執行的,且每個語句都會被執行到。
[例L4.10.c]輸入任意三個整數,求它們的和及平均值。
/*功能:設計一個順序結構程序,求三個整數的和及平均值。*/
main()
{intnum1,num2,num3,sum;
floataver;
printf("Pleaseinputthreenumbers:");
scanf("%d,%d,%d",&num1,&num2,&num3);/*輸入三個整數*/
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”?[例L4.11.c]求方程ax2+bx+c=0的實數根。a,b,c由鍵盤輸入,a≠0且b2-4ac>0。/*功能:設計一個順序結構程序,求方程的根。*/#include"math.h“/*使用求平方
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 開放銀行生態構建:2025年金融行業跨界合作與創新模式報告
- T/DZJN 59-2021太陽能路燈用梯次利用電池技術要求
- 2022屆高三8月全國高考分科綜合模擬測試英語含答案
- 2018年全國日語高考真題-和聽力MP3以及錄音稿(適用于高三下學期高考前檢測)(解析版)
- 2025年食品工業智能化生產管理系統技術改造研究報告
- 基于物聯網技術的2025年城市生活垃圾分類長效機制與公眾參與創新報告
- 傳統手工藝展示與體驗工坊行業深度調研及發展項目商業計劃書
- 鄉村有機蔬菜采摘行業跨境出海項目商業計劃書
- 鄉村民宿體驗園企業制定與實施新質生產力項目商業計劃書
- 金融數據分析師在線培訓企業制定與實施新質生產力項目商業計劃書
- 2024新能源光伏電站智慧型銅合金導體擠包絕緣電力電纜
- 2024年中國家具電商行業市場競爭格局及投資方向研究報告(智研咨詢)
- 中國現代文學史考試題庫及答案
- 煙葉烘烤特性及特殊煙葉烘烤技術培訓
- 物料報廢單完整版本
- 廣東省深圳市南山區2023-2024學年四年級下學期期末科學試題
- 01互聯網安全風險及其產生原因 教學設計 2023-2024學年蘇科版(2023)初中信息科技七年級下冊
- CJT156-2001 溝槽式管接頭
- 社工招聘筆試考試(含答案)
- 母嬰兒童照護智慧樹知到期末考試答案章節答案2024年上海健康醫學院
- 急危重癥護理學試題(含答案)
評論
0/150
提交評論