?? tc4.dat
字號:
第3章 順序結構程序設計
為了讓計算機處理各種數據,首先就應該把源數據輸入到計算機中;計算機處理結束后,再將目標數據信息以人能夠識別的方式輸出.C語言中的輸入輸出操作,是由C語言編譯系統提供的庫函數來實現.
3.1 格式化輸出--printf()函數
printf()函數的作用:向計算機系統默認的輸出設備(一般指終端或顯示器)輸出一個或多個任意類型的數據.
3.1.1 printf()函數的一般格式
[案例3.1] 已知圓半徑radius=1.5,求圓周長和圓面積.
/*案例代碼文件名:AL3_1.C.*/
main()
{float radius,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.500000
length= 9.42,area= 7.07
printf()函數的一般格式如下:
printf("格式字符串" [,輸出項表]);
1.格式字符串.“格式字符串”也稱“轉換控制字符串”,可以包含三種字符:
(1)格式指示符.格式指示符的一般形式如下:
%[標志][寬度][.精度][F|N|h|L][類型]
常用的標志字符如表3-1所示,常用的寬度指示符如表3-2所示,常用的精度指示符如表3-3所示,長度修飾符如表3-4所示,類型轉換字符如表3-5所示.
(2)轉義字符
例如,[案例3.1]中printf()函數中的'\n'就是轉義字符,輸出時產生一個“換行”操作.
(3)普通字符──除格式指示符和轉義字符之外的其它字符.格式字符串中的普通字符,原樣輸出.
例如,[案例3.1]中“printf("radius=%f\n", radius);”語句中的“radius=”,“printf("length=%7.2f,area=%7.2f\n", length,area);”語句中的“length=”、“area=”等都是普通字符.
2.輸出項表
輸出項表是可選的.如果要輸出的數據不止1個,相鄰2個之間用逗號分開.下面的printf()函數都是合法的:
(1)printf("I am a student.\n");
(2)printf("%d",3+2);
(3)printf("a=%f b=%5d\n", a, a+3);
必須強調:“格式字符串”中的格式指示符,必須與“輸出項表”中、輸出項的數據類型一致,否則會引起輸出錯誤.
3.1.2 格式指示符
輸出不同類型的數據,要使用不同的類型轉換字符.
1.類型轉換字符d──以帶符號的十進制整數形式輸出.
[案例3.2] 類型轉換字符d的使用.
/*案例代碼文件名:AL3_2.C.*/
main()
{int num1=123;
long num2=123456;
/*用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);
} [程序演示]
程序運行結果如下:
num1=123,num1= 123,num1=123 ,num1=123
num2=123456,num2= 123456,num2=123456
num1=16908411
對于整數,還可用八進制、無符號形式(%o(小寫字母o))和十六進制、無符號形式(%x)輸出.對于unsigned型數據,也可用%u格式符,以十進制、無符號形式輸出.
所謂無符號形式是指,不論正數還是負數,系統一律當作無符號整數來輸出.例如,printf("%d,%o,%x\n",-1,-1,-1);
2.類型轉換字符f──以小數形式、按系統默認的寬度,輸出單精度和雙精度實數.
[案例3.3] 類型轉換字符f的使用.
/*案例代碼文件名:AL3_3.C.*/
main( )
{float f=123.456;
double d1,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中的001和010都是無意義的,因為它們超出了有效數字的范圍.
對于實數,也可使用格式符%e,以標準指數形式輸出:尾數中的整數部分大于等于1、小于10,小數點占一位,尾數中的小數部分占5位;指數部分占4位(如e-03),其中e占一位,指數符號占一位,指數占2位,共計11位.
也可使用格式符%g,讓系統根據數值的大小,自動選擇%f或%e格式、且不輸出無意義的零.
3.類型轉換字符c──輸出一個字符(只占一列寬度).
[案例3.4] 類型轉換字符c的使用.
/*案例代碼文件名:AL3_4.C.*/
main()
{char c='A';
int i=65;
printf("c=%c,%5c,%d\n",c,c,c);
printf("i=%d,%c",i,i);
}
程序運行結果如下:
c=A, A,65
i=65,A [程序演示]
需要強調的是:在C語言中,整數可以用字符形式輸出,字符數據也可以用整數形式輸出.將整數用字符形式輸出時,系統首先求該數與256的余數,然后將余數作為ASCII碼,轉換成相應的字符輸出.
4.類型轉換字符s──輸出一個字符串.
[案例3.5] 類型轉換字符s的使用.
/*案例代碼文件名:AL3_10.C.*/
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
注意:系統輸出字符和字符串時,不輸出單引號和雙引號.
3.1.3 使用說明
(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,都是普通字符.
3.2 格式化輸入--scanf()函數
scanf()函數是用來從外部輸入設備向計算機主機輸入數據的.
3.2.1 scanf()函數的一般格式
[案例3.6] 已知圓柱體的底半徑radius=1.5,高high=2.0,求其體積.
/*案例代碼文件名:AL3_6.C.*/
main()
{ float radius=1.5, high=2.0, pi=3.14159, vol;
vol=pi*radius*radius*high; /*求體積*/
printf(“vol=%7.2f\n”,vol); /*輸出求出的體積*/
} [程序演示]
[案例3.7] 已知圓柱體的底半徑為radius,高為high,求其體積.
/*案例代碼文件名:AL3_7.C.*/
/*功能:說明函數scanf()的格式及作用.*/
main()
{float radius,high,vol,pi=3.1415926;
printf("Please input radius & 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);
} [程序演示]
程序運行結果如下:
Please input radius & high: 1.5 2.0↙
radius= 1.50,high= 2.00,vol= 14.14
在程序中給計算機提供數據,可以用賦值語句,也可以用輸入函數.在C語言中,可使用scanf()函數,通過鍵盤輸入,給計算機同時提供多個、任意的數據.
1. scanf()函數的一般格式
scanf("格式字符串", 輸入項首地址表);
(1)格式字符串.格式字符串可以包含3種類型的字符:格式指示符、空白字符(空格、Tab鍵和回車鍵)和非空白字符(又稱普通字符).
格式指示符與printf()函數的相似,空白字符作為相鄰2個輸入數據的缺省分隔符,非空白字符在輸入有效數據時,必須原樣一起輸入.
(2)輸入項首地址表──由若干個輸入項首地址組成,相鄰2個輸入項首地址之間,用逗號分開.
輸入項首地址表中的地址,可以是變量的首地址,也可以是字符數組名或指針變量.
變量首地址的表示方法: &變量名
其中“&”是地址運算符.例如,[案例3.7]中的“&radius”是指變量radius在內存中的首地址.
2.scanf()函數的功能:從鍵盤上接收格式化輸入.
運行[案例3.7]的程序時,從鍵盤上輸入2個實數,分別存入&radius、&high起始的存儲單元中,即輸入兩個實數分別賦給radius和high.
3.2.2 格式指示符
格式指示符的一般形式為: % [*] [寬度] [F|N] [h|l] 類型字符
1.類型字符
類型字符如表3-6所示.例如,在[案例3.7]的scanf()函數語句中,格式字符串“%f%f”.
2.寬度n
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -