C語言中浮點數以整數形式輸出錯誤的問題

2022-07-01 02:47:13 字數 4456 閱讀 2740

1樓:赤彩孛曼寒

呵呵,我只給個思路。

這個完全不是數學題,是個字串的題。

找到輸入資料中小數點的位置,和冪的數值,將小數點往後移動冪指定的位數,如果已經移動到輸入串的尾部加0補充。

輸出當然也只能按字串格式輸出。

計算機沒有這麼高的精度的!

2樓:回到過去我愛你

printf("a=%d a=%f",a,a); 這個語句決定了 你的結果:

a=%d表示a的輸出結果為十進位制整數,

a=%f表示a的輸出結果為十進位制浮點數!

其實你有個錯誤:

printf("a=%d a=%f",a,a); 應改為:printf("a=%d a=%f",&a,&a);

3樓:

#include "stdio.h"

void main()

內部機制,怎麼安排的,還真是說不清楚!

但這樣結果,至少要好一點!輸出的語法對應錯誤了,它就預設那樣了,有很多情況的!以後多注意了!

4樓:匿名使用者

%d要求的輸入形式必須是整數。而此程式的輸入形式是實數。就會產生這樣的效果吧。

其實,如你所說,a的值是正確的,只是輸出是錯誤的。這就像你給了一個人1塊錢,你像讓他給你買塊糖。但是,你又不讓他去糖果店,非讓他去菸酒店。

你說,他能給你買回來糖嗎?至於他買回來的是什麼,或者能不能買回來,只有鬼知道了。

#include "stdio.h"

void main()

這樣改一下,或許對你理解有點幫助吧。

最後一句,對於幫助你的人,你就以這樣的態度來對待嗎?人不是這樣做的吧?

5樓:中北吳延寶

由於記憶體空間長度不同,數發生截斷,導致數值發生改變

6樓:

結果就應該是這樣啊 不知道你想輸出什麼樣?

你可以通過在%後面加x.y來控制輸出樣子

x代表一共有幾位 y代表小數點後有幾位

如%7.3f 即:一共7位小數點後有3位的浮點小數不知道你是不是這個問題

c語言中以單精度浮點型輸入,輸出格式為%d或%c,為什麼顯示的數不對?謝謝!

7樓:岔路程式緣

肯定不對啊!

你輸入的時候是單精度浮點數型別,c語言中變數就是float型別,輸入使用的格式是%f。

不同的變數型別在記憶體中的儲存方式也完全不同,當你用整型格式(int)去讀一個浮點格式(float)的數字時,不可能讀出正確的結果。

所以,你必須用跟輸入時相同的格式(%f)輸出(另外,還必須跟變數的型別一致),才能顯示正確的數字。

8樓:匿名使用者

單精度浮點型輸出格式應該是%f或者用double型別%lf都行啊。 %d是輸出整數, %c是輸出字元 怎麼可能會對啊。%s是字串。

9樓:韻

單精度浮點型%f,雙精度%lf,%d是輸出整數, %c是輸出字元 %s是字串

10樓:匿名使用者

輸入的什麼 你認為該輸出什麼

浮點數的儲存方式 跟1o進位制不闖

11樓:

單精度浮點型float輸出格式應為%f,%d是整形,%c是字元型,能聽懂嗎?不懂的話隨時來問也是可以的

12樓:百i度網友

%d用於輸出整型變數,%c用於輸出字元型變數。c語言中,單精度浮點型變數和整型變數、字元型變數在記憶體中的存放格式是不一樣的。單精度浮點數是由一個位元組的階碼和3個位元組的尾數構成的,共佔用4個位元組記憶體單元,而整型變數在記憶體中佔用2個位元組單元,字元型變數佔用1個位元組記憶體單元。

將4位元組浮點數按2個位元組的整型數輸出,或按1位元組字元輸出,都會得到無法預料的結果。

請教c語言浮點數輸出問題。

c語言double型別不能用%d輸出,會出錯

13樓:匿名使用者

printf:限定符:

%d 十進位制有符號整數

%u 十進位制無符號整數

%f 浮點數

%s 字串

%c 單個字元

%p 指標的值

%e 指數形式的浮點數

%x, %x 無符號以十六進位制表示的整數

%o 無符號以八進位制表示的整數

%g 自動選擇合適的表示法

%p 輸出地址符

可以在"%"和字母之間加小寫字母l, 表示輸出的是長型數。

例如: %ld 表示輸出long整數

%lf 表示輸出double浮點數

你用%d去輸出double型的j,輸出當然不對啊

14樓:金色潛鳥

輸出格式 定義了 計算機 記憶體單元裡的資訊 怎樣 轉 換 為 人類可識別 的 數值 和 字元形狀 輸出出來。

計算機 記憶體單元裡的資訊 安排方式 由 ieee 國際 標準 規定 --

double 有幾個位元組,分成多少字元,哪位是符號位,哪幾位是 指數,哪幾位 是 尾數。

int 有幾個位元組,分成多少字元,哪位是符號位,哪幾位 是數值,是原碼,還是 補碼。

輸出時,把 記憶體單元裡的資訊 要 翻譯成 人類可識別 的形式。

輸出格式 %d 定義了 按 int 型 符號位,數值位,判斷是原碼,還是 補碼 翻譯。

輸出格式 %lf 定義了 按 double 型 符號位,指數,尾數 翻譯。

所以,輸出格式 定義了 記憶體單元裡的資訊 如何翻譯。

double 型 記憶體資訊 按 int 型 符號位,數值位,判斷是原碼,還是 補碼 翻譯,當然錯了。

ieee 754 標準 可以網上查到,閱讀起來要費些時間,讀懂會用,要幾天工夫。

15樓:刀慶文

額,double型的儲存形式和int的不一樣

c語言 輸出浮點數的問題

16樓:

樓主如果真想弄清楚這個問題的話,建議去看下浮點數的格式.

簡單地說就是,在計算機中,浮點數是表示成類似於十進位制中的科學計數法那樣的形式,只不過是表示成a乘以2的b次方,而不是10的b次方,而且a也是2進位制數.float有32位,一部分用來表示a,一部分用來表示b,但這部分位數畢竟是有限的,如果a的實際位數超過了這部分的容量,那麼就只能擷取掉後面多的位數了,剩下的位數再轉換成10進位制數後,肯定和你原來想存的數不一樣了.

存a的這部分我忘了是幾位了,好像是8還是9吧,除去首位有其他用途,後面7位分別表示2的負幾次方,而2的-7次方是0.0078125,所以只能保證小數點後6位是有效的

c語言中變數型別改變導致輸出結果錯誤? 5

17樓:岔路程式緣

是的。一、在printf()函式中,你如果用其他變數型別的格式輸出一個變數,往往會導致輸出錯誤的結果。

如:int a=5;//定義一個整型變數aprintf("%f",a);//用浮點型格式輸出你不會得到5或者5.0000(後面幾個0),而是得到亂碼。

二、只有一個例外,就是字元型變數,可以用整型輸出,將會輸出字元的asc碼。

如:char a='a';

則下面兩句都能正常輸出:

printf("%c",a);//將會輸出字元:aprintf("%d",a);//將會輸出字元a的asc碼:65三、除非需要,一般不要用其他格式輸出,以免導致錯誤。

18樓:gta小雞

printf是一個變參函式,由於printf本身不知道呼叫時傳遞給自己的引數個數是多少,以及每個引數的型別分別是什麼,需要呼叫者傳遞一個格式字串告訴它,printf從格式字串中解析佔位符得出傳遞的引數個數以及每個引數的型別,接下來才能正確處理這些引數。如果格式字串中給出的佔位符資訊錯誤,那麼就會導致printf對引數的處理錯誤,輸出結果自然也就很有可能不正確。

printf("%ld%f", m, n); 執行這條語句時,printf首先從格式字串"%ld%f"中得知呼叫者除了格式字串還傳遞了兩個引數,第一個是long型,第二個是double型。在windows中long佔4位元組而double佔8位元組,並且printf的呼叫約定是__cdecl,引數是從右至左入棧的,格式字串在棧頂。於是printf從棧頂向下4位元組的位置取4個位元組就能取到第一個long型引數,再向下取8個位元組就能取到第二個double型引數,接下來就能正確輸出這兩個引數到螢幕上了。

而如果呼叫者誤寫成了printf("%f%f", m, n);,那麼printf會認為呼叫者傳遞給了自己兩個double型引數,於是它會從棧頂向下4位元組和12位元組的位置分別取兩個8位元組的資料當做兩個double型並輸出它們,然而此時實際的兩個引數m和n分別位於棧頂下4~7位元組和8~15位元組處,於是m的全部4位元組和n的前4個位元組被一起當作了第一個double型,而n的後4位元組和n下方的4位元組被當成了第二個double型,最終兩個數的輸出結果自然都不正確。

C語言中如何實現將浮點數float轉成int型別

強制型別轉換 比如 float a 10.5 int b int a 這樣 就轉換了,但是不推薦高精度轉低精度 會丟失精度的就像這個,a是10.5 轉換後變成10了小了太多 c語言中將一個浮點型賦值給整型時,會不會四捨五入?c語言中將一個浮點型賦值給整型時,不會四捨五入,會直接捨去小數部分的資料,也...

C程式設計從鍵盤輸入浮點數,求出其和及平均值。要求編寫出求和及求平均值的函式

這也叫問題啊 我昨天才學c 用c給你寫個 include main j sum 8 printf 8數之和為 f,平均值為 f sum,j 還江湖豪俠呢 c 程式設計 從鍵盤輸入5個浮點數,求出其和及平均值。以下程式 可以在vc6.0當中專實現屬 include void main 程式vc6.0 ...

用c語言程式設計輸入一組整數以,用C語言程式設計 輸入一組整數,以 1作為結束的標誌,用陣列s接收這組數,統計個數,並輸出

include int main printf 個數為 d n m for int i 0 iprintf d n s i return 0 include using namespace std int s 100000 假設你輸入的數不超過100000個 int main printf d n ...