C語言程式設計這道題我輸出是0 感覺好像沒毛病呀?

2023-06-08 20:05:14 字數 5985 閱讀 1405

1樓:格里程式設計辦公技巧

這段c語言**主要問題在圖中紅色框內**:num = 1/i;

這裡i是整型變數,1編譯器預設也是整型變數,它們倆相除結果只保留整數,沒有小數。

正確寫法是num =

另外if和else還可以優化一下,因為兩處都有sum =sum+num;

這裡就可以把此語句拿出來放在最後,減少目標**的大小。

2樓:聽不清啊

程式**中的變數n,建議把它的變數型別改為int,因為浮點數的判斷是否相等,有可能會出現問題的。還有**中的,如果n==1,表示式中間的兩個等號好像點不對,請檢查一下。最致命的錯誤是他的上面一行。

應該要吧!num=1/i改為num=,不然的話,兩個整數相除,他的商仍然是乙個整數,就會導致計算出錯。

3樓:帳號已登出

問題很大,因為你的**中for迴圈的測試條件是fabs(num)>10e-6,而num的初始值是0,fabs是取絕對值的函式,所以一開始條件就不滿足。

初學c語言,幫我看看這個輸出結果為什麼是0?

4樓:嘿小盒子

1、因為你剛開始定義a,b是int型別的,整形的。

2、所以在a進行計算的時候會將12+這個算式(a=12+計算成24,計算機自動將a語句的結構儲存成整數型。

3、在你將b的值賦值為浮點型的a(b=(float)a;)時,結果其實應該是。

4、但是由於你並未給b改變型別,所以他還是乙個整形,在你結尾時引用lf浮點型的輸出方式進行輸出時,計算機識別不出來,所以結果為零。

5樓:鎮遠山神侍

你好。這個是跟計算機體系結構有關的:

c語言中,printf函式不會進行任何型別轉換,只是按照你給的格式從記憶體讀取值。

在計算機中,printf函式去訪問讀取記憶體資料時,訪問讀取浮點數和訪問讀取整數的暫存器是不一樣的。

你給的格式是去訪問讀取浮點數進行列印,卻給了整形變數,所以無法訪問讀取到變數的值。

如果你將變數b強制轉換為浮點型變數,輸出是會沒問題的。

這是我之前聽大神說的,具體的細節我也不清楚,給你作個參考。

上應該有很多這個資料,你可以查證一下。

6樓:網友

沒有報錯嗎?這是顯式轉換和隱式轉換和問題,不知道你強制轉換能不能轉換成功,一般寫**的時候都不用強制轉換,容易出問題。

7樓:網友

到a的時候就轉為整型了,直接轉為148然後轉型為float是最後結果可能就是這個。

8樓:杯具——悲劇

因為int型別的a 不能等於。

c語言這道題答案為什麼是0? 20

9樓:

答案不是0次,而是1次。

因為第一次時 i = 0, j = 1所以 i <=j+1是成立的。

第二次時 i = 2, j = 0,那麼 i <=j+1就不成立了。

所以迴圈體一共執行了一次。

10樓:聽不清啊

這個迴圈,迴圈體執行的次數是1次,而不是0次。因為變數 i 的初始值是0,變數 j 的初始值是1,所以一開始,i <=2 的條件是成立的,迴圈體會執行一次,然後第二次 i 變成了2,而 j 變成了1,迴圈條件就不再滿足了。所以本題應該選擇答案c

11樓:金色潛鳥

迴圈控制是: for (i=0,j=1; i<=j+1; i+=2,j--)

注意分號, 它把迴圈控制分為三個部分:

初始執行: i=0 ; j=1;

迴圈允許條件: i<=j+1;

步長: i=i+2; j=j-1;

第一次: i=0;j=1; 條件 i走步長: i=0+2 = 2; j = j-1 = 0;

第二次:i=2;j=0; 條件 i所以,共執行迴圈體一次,輸出的 i 是 0。選答案 d: 0.

12樓:匿名使用者

就迴圈了一次,答案是錯的。

因為起初i=0,j=1滿足i然後i變成2,j變成0,不滿足i

13樓:蠍子老師

迴圈執行對i沒有影響。

c語言中關於0的問題

14樓:貓貓9命

這不是c語言的問題,而是只要在計算機中進行計算,就應該如此。

這個值如果是計算值,就會出現誤差,除非只是賦值零值。

計算機是二進位制計算,而人進行計算是十進位制。

比如十進位制換算為二進位制 1001 1001 1001...是無限小數,只要進行計算,就會因為電腦計算能力受有效位數限制產生誤差。

c語言題求幫助0 0

15樓:冷明珠

1全部^ 表示讀資料進行按位異或,異或運算法則為:

真異或假的結果是真,假異或真的結果也是真,真異或真的結果是假,假異或假的結果是假。就是說兩個值不相同,則異或結果為真。反之,為假。

異或也叫半加運算,其運算法則相當於不帶進製的二進位制加法:二進位制下用1表示真,0表示假,則異或的運算法則為:0異或0=0,1異或0=1,0異或1=1,1異或1=0(同為0,異為1),這些法則與加法是相同的,只是不帶進製。

a^b^b= a ^ b ^ b) =a ^ b) ^b; 這是異或的運算法則。

a = 111 1001 0001 1011

b = 101 0010 0110 1111

異或得: 010 1011 0111 0100

b = 101 0010 0110 1111

再次異或 111 1001 0001 1011 即與a相同,所以是31003.

可以得出以下結論,乙個數與同乙個數2次異或結果不變。

可以證明:1^0=1 1^0=1,兩次運算後還是1

0^0=0 0^0=0,兩次運算後還是0

1^1=0 0^1=1,兩次運算後還是1

0^1=1 1^1=0,兩次運算後還是0。證畢。

16樓:藏在水中的人

a^b表示a和按位異或,相同的位為0,不同為1,兩個相同的數「異或」為0,任何數與0 「異或」都不變。因此a^b^b的結果仍為a

17樓:非突

^表示異或,1^0 = 1, 1^1 = 0, 0^0 = 0, 0^1 = 1 ,相同就是0,不同就是1,31003 的二進位制是 11110010001101121103 的二進位制是 101001001101111a^b 的結果是 010101101110100a^b^b 的結果是 111100100011011 就是31003

其實 不論a,b是多少,都有 a^b^b = a, a^b^a = b

18樓:網友

^是個移位符號,所以a移動兩次就返回原點啊,應該是往右移位。

c語言問題,為什麼圖示程式輸入\0會出現如下結果?

19樓:到處參觀

要求輸入數字,而實際輸入字元\,scanf發現不是數字,就不會給a賦值,然後執行下乙個語句。

也就是說,只有a[0]被賦值為7,而陣列a在定義的時候又沒有初始化,剩餘9個元素的值是隨機的。

排序的結果,是這些不確定的隨機值在排序。

c語言 第一行第三個輸出為什麼為0?2/b為什麼也為0?

20樓:破殼科普社

第一行第三個輸出為0,可能是編譯器的問題。

b是int型別,1也是int型別,當你計算1/b的時候,結果也只會是int型別,而int型別是沒有小數的。

如果想要輸出小數點以後的數的話,要用,是double型別,這樣在進行計算時會根據型別轉換規則將型別統一,之後就會輸出double型別即可看到後面的數。

21樓:聽不清啊

第一行第三個輸出為什麼為0,這可能是修改後沒有重新編譯造成的。請重新編譯後再執行看看?

1/b的值為0是因為兩個int的商仍是乙個int,所以1/2的值是0

22樓:匿名使用者

帶可變引數列表的函式是無法檢測引數型別的,1/b型別是整型,破壞了函式呼叫約定,必須改為。

看看這篇文章。

23樓:匿名使用者

f代表單精度浮點型資料,屬於float型別,a是double型別的;2/b等於0是因為b是int型,2預設int型,所以得出的答案只能是int型別,如需要得到double型別的需要對b進行強制轉換。

24樓:細雨在微笑

換個程式設計工具試試,估計你用的編譯器有問題,不用迷信它,可以試試用「習語言」編譯執行下。

程式設計題,為啥結果是0?

25樓:匿名使用者

先說,我是抄的答案,感謝原作者,我只按照我對c的理解,改動了與本題相關的部分,應該能明白的說明printf函式顯示0的原因了,**測試也確實如此。

1,之所以沒輸出333,這是c語言設計的原因。

2,之所以輸出0,這是計算機體系結構的問題。

具體來說:printf函式不會進行任何型別轉換,它只是從記憶體中讀出你所提供的元素的值(按照%d,%f等控制字元提示的格式)。c語言設計中,int型別一般是32bit或者16bit,而float一般是64bit,並且有可能使用科學計數儲存。而,333在記憶體中為00000000,00000000,00000001,01001101(這是32位)。

而且333一般都在靜態區,程式的靜態儲存區預設是0,那麼當用%f來讀時,就會讀64bit,也就是會讀之前的很多位0,最後按照(有效數字)×(基數2)pow(指數)的方式來取數,自然結果是0

之所以vc中不允許這種情況,而有些編譯器就允許這麼輸出就是編譯器設定的問題。按理說,這樣訪問記憶體是屬於越界訪問,應該禁止。不過只是讀,傷害性不大而已。

c語言程式設計題輸出公元2023年至2023年所有閏年的年號

include int main 這樣可以嗎 include stdafx.h vc 6.0加上這一行.include stdio.h void main void include stdio h int is ruinian int year int flag return flag void m...

菜鳥請教這道C語言題輸出結果是什麼,具體步驟怎麼計算,麻煩講解下,謝謝

4,3主要是j i 的理解,其實這一句相當於 j i i i 1 所謂後自增就是先去運算,然後自己再增加1 初始i 3 執行j i 後,j 3,i自加一次即i 4最後輸出,即 i 4,j 3,輸出4,3 在執行j i 之前,i 3 j為隨機值 執行j i 時,i 3 j 3 在執行j i 之後,i ...

c語言輸出的最後總是以“0”結尾是為什麼

應該是 0吧!作為結束符用的 你的程式寫的有問題,我重新改下,測試通過。你的程式主是由於對scanf函式對字串的輸入接收理解不正確。你的 for i 0 i 2 i scanf s,s,c,d sa i name,sa i num,sa i sa i age 我更改後的 for i 0 i 2 i ...