實驗目的:
1.掌握double型浮點數與float型浮點數的區別
2.與整型資料相比,浮點型資料會出現誤差,只要使用浮點型資料就一定會出現誤差嗎?
實驗步驟:
1. 填表並分析
double型
fafb
fcfd
值2.3
-0.0023
2.3e5
0.00023e-2
以%f格式預期的輸出為
以%e格式預期的輸出為
以%e格式預期的輸出為
以%f格式實際的輸出為
以%e格式實際的輸出為
以%e格式實際的輸出為
#include
void main()
double fa, fb, fc, fd;
fa = 2.3;
fb = -0.0023;
fc = 2.3e5;
fd = 0.00023e-2;
printf("%f,%e,%e\n", fa, fa, fa);
printf("%f,%e,%e\n", fb, fb, fb);
printf("%f,%e,%e\n", fc, fc, fc);
printf("%f,%e,%e\n", fd, fd, fd);
分析:1)與實驗2-4中的第一步相比,輸出有何不同?
2)double型變數與float型變數相比有何不同?
2. 填表並程式設計驗證
double型
fafb
fcfd
值2.3
-0.0023
2.3e5
0.00023e-2
以%13.2f格式輸出為
以%3.0f格式輸出為
以%-13.2f格式輸出為
以%.15f格式輸出為
分析:1)與實驗2-4中的第三步相比,輸出有何不同?
2)double型變數與float型變數相比有何不同?
3. 填表並分析
變數為double型
scanf("…", &fa, &fb, &fc, &fd)
以%f格式輸入
2.3 -0.0023 2.3e5 0.00023e-2
以%e格式輸入
2.3 -0.0023 2.3e5 0.00023e-2
以%e格式輸入
2.3 -0.0023 2.3e5 0.00023e-2
給出每次輸入後每個變數以%f格式的預期輸出,並通過下面程式驗證。
#include
void main()
double fa, fb, fc, fd;
scanf("%f%f%f%f", &fa, &fb, &fc, &fd);
printf("%f,%f, %f,%f\n", fa, fb, fc, fd);
scanf("%e%e%e%e", &fa, &fb, &fc, &fd);
printf("%f,%f, %f,%f\n", fa, fb, fc, fd);
scanf("%e%e%e%e", &fa, &fb, &fc, &fd);
printf("%f,%f, %f,%f\n", fa, fb, fc, fd);
分析:1)與實驗2-4中的第二步相比,輸出有何不同?可以得出乙個什麼結論?
切記:輸出時格式字元f,e,e對double型變數和float型變數通用,但在輸入時double型變數所對應的格式字元前必須加長度修飾符l。
2)除了double型變數所對應的格式字元前須加長度修飾符l之外,其與float型變數在輸入時還有區別嗎?
4.給出程式的輸出並分析。
#include
void main()
float fb = 0.1;
printf("%.15f\n", fb);
printf("%.15f\n", fb+fb+fb+fb+fb+fb+fb+fb+fb+fb);
printf("%.15f\n", 1.0);
分析:變數fb加十次等於1嗎?為什麼?
5. 浮點型變數的誤差。
5.1填表並程式設計驗證。
float型
fafb
fcfd
值0.125
0.00125
0.125e-3
-0.125
用二進位制的指數形式表示為
以%.18f格式的輸出為
double型
fafb
fcfd
值0.125
0.00125
0.125e-3
-0.125
以%.18f格式的輸出為
分析:1)當變數為float型時,變數fa為何沒有誤差?
2)當變數為float型時,變數fb的輸出是:0.001249999972060323,這與float型浮點數只能精確到小數點後的6至7位矛盾嗎?
3)浮點型資料什麼情況沒有誤差?
5.2填表並程式設計驗證
float型fa值
125125125.125e2
用二進位制的指數形式表示為
以%.18f格式的輸出為
double型fa值
125125125.125e2
用二進位制的指數形式表示為
以%.18f格式的輸出為
分析:浮點型資料在什麼情況下沒有誤差?
實驗2 4 浮點型資料的輸入輸出
實驗目的 比照整型資料輸入輸出的 方式,研究浮點型資料的輸入輸出,在加深理解的基礎上能熟練使用浮點型資料。實驗步驟 分數22 7小數點後有幾位?如果用它表示圓周率可以精確到哪一位?1.填表並分析 float型 fafb fcfd 值2.3 0.0023 2.3e5 0.00023e 2 以 f格式預...
double型資料輸入輸出
double a scanf f a 應該使用scanf lf a 執行上面語句時,發現double型別的輸入不能使用 f進行輸入,得用 lf才能正常得到a的值。而在輸出double型別時卻可以用 f,這是因為printf只認識雙精度,遇到 f自動將float型的引數轉換成double型。但是因為s...
字元資料的輸入輸出
輸入 scanf函式 getchar 函式 gets 函式。輸出 printf函式 putchar 函式 puts 函式。相互的區別和作用 這裡只以輸入函式舉例 一 scanf函式 scanf可以用來輸入乙個字元 scanf c a scanf可以用來輸入多個字元 scanf s a 二 getch...