1樓:聽不清啊
因為絕大多數十進位制小數用二進位制表示時,都是無限迴圈小數,而在計算機中只能儲存有限位,所以實數的儲存和處理都是有誤差的。
float只能保證7位有效數字,所以,當整數有2位時,最多只能有5位小數,更多位上的資料就是不準確的了。
2樓:瀚海闌干書屋
因為你採用的float變數
以下引自之前別人回答過的
這個你得知道浮點型資料的儲存格式;
我簡單給你說下,具體不懂你再問我;
11.2的小數部分0.2轉換為2進位制則是無限迴圈的00110011001100110011...
單精度在儲存的時候用23bit來存放這個尾數部分(前面9位元儲存指數和符號);同樣0.6也是無限迴圈的;
而列印格式為%f的時候,資料會以8位元組出棧!這個時候後32bit都是0,(正常來講原數是一直迴圈的)所以列印出的結果就這樣了;
而你定義成雙精度,它本身就是8位元組儲存,(相比單精度儲存,他後32bit是有資料的!)所以這個時候取出的8位元組,四捨五入直接就是0.6!
就好比你定義輸出%.1f一樣,也會列印出0.6,是一個道理!
不知你明白沒。單精度雙精度轉換的時候,一般小數末位不是5的話,都會丟失資料的!原理就像上面說的一樣。
引自 小城小閱
3樓:陽光的雷咩咩
float全部改成double呢?
簡單的c語言程式設計,兩數相加,為什麼還要輸入任意第三個值才會出現結果?
4樓:
printf("%d",c);中加入換行符printf("%d\n", c);
然後再加一句fflush(stdout);
可能是輸出緩衝區沒有重新整理
5樓:匿名使用者
**錯了?scanf("%d%d",&a,&b);你這語句就是隻接受兩個數。
6樓:
我執行過沒有你說的問題 。。
c語言程式設計菜鳥問題。要做個程式分別算出兩數相加的整數部分和小數部分,如圖,我寫的程式**出錯了?
7樓:自我程式設計
圖很模糊,大致看了沒問題。可以執行。
仿你**可執行的。
#include
int main()
8樓:匿名使用者
**有點模糊,可以直接貼上來再看。
9樓:
m=(int)x+(int)y;
n=x-(int)x+y-(int)y;
注意強制轉換的位置。
一個覺得很難的c語言問題。對兩個數字字串相加。
10樓:匿名使用者
參見之前的回答
思路是用3個棧a,b,c,把s1和s2各個字元分別壓到a、b棧,第三個棧c存結果。
分別把a、b的棧頂元素pop出來做運算,然後壓入c中。
最後c元素依次出棧就是結果。
11樓:夢裡尋你我他
其實就是把字串變成int 然後相加
12樓:匿名使用者
和無助,然而為了生傭工 活,我們雪又多少奪主
關於c語言的兩陣列相加問題
13樓:匿名使用者
#include
int main()
;int b[5],c[5];
puts("請輸入b陣列:");
int i;
for(i=0;i<5;i++)
scanf("%d",&b[i]);
for(i=0;i<5;i++)
c[i]=a[i]+b[i];
puts("c陣列:");
for(i=0;i<5;i++)
printf("%-4d",c[i]);
puts("");
return 0;}
c語言列印不出負數部分,c語言問題,為什麼會輸出負數
額 我手裡的c手冊是這樣說的 rand 語法 include int rand void 功能 函式返回一個在零到rand max之間的偽隨機整數。c語言問題,為什麼會輸出負數 在你的switch語句最後都加一個default 看一下switch d switch u 如果出現error這行,說明你...
C語言問題為什麼兩個程式相同的思路結果不一樣
兩段程式,在i的迴圈裡,只有i 1取到的值是一樣的。i 1時,資料已經不相同了。主要是正負標誌變數flag,導致的。建議你兩個程式都除錯一下,你就知道了。第一次迴圈 i 1的時候是一樣的.當i 2的時候就不一樣了.這時你的程式,sum sum d c flag flag是 1,世紀是 sum sum...
c語言for迴圈兩個for語句為什麼輸出是那樣的
可以的比如 int i 1 for i 1 i 5 i printf d n i 這時候輸出2,也就是i在 2的時候跳出 中斷 for迴圈謝謝採納 原陣列 bai15,45,77,98,78,95,32,26,15,46 執行du完第一次for迴圈後 zhi的dao陣列 15,45,77,98,95...