| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 713 人关注过本帖
标题:想請教幾個非常基礎的問題,謝謝!
取消只看楼主 加入收藏
no_use
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2013-5-12
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
想請教幾個非常基礎的問題,謝謝!
程序代码:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
    int i=2, j=3;
    double k;
    
    k = 2/3;
    printf("2/3 = %f\n", k);
    
    k = 2/3.;
    printf("2/3. = %f\n", k);
    
    system("PAUSE");
    return 0;
}

問題一:
第一條算式,由於算式是以 int 來計算,結果是 0,以 %f 的格式輸出,所以是 0.000000
第二條算式,多了一 .,結果精準度得以延伸至小數點後
請問這一 .,是否代表算式會以 float 的格式計算呢?

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

程序代码:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
    float F, C;
    
    printf("請輸入攝氏溫度:");
    scanf("%f", &C);
    
    F = 9/5 * C + 32;
    printf("你所輸入的攝氏溫度,轉為華氏溫度為:%.2f\n", F);
        
    system("PAUSE");
    return 0;
}

問題二:
以我理解,運算子在同一優先權的情況下,是由左至右計算,但「F = 9/5 * C + 32」在程式中並不是這樣計算~
例如:如我輸入 37,程式計算結果是 69;如我輸入 38,程式計算結果是 70,這顯示程式只是將「C + 32」並輸出~
如我將算式改成「F = (9/5 * C) + 32」,結果一樣~
只有將算式改成「F = C * 9/5 + 32」 ,才能計算出正確答案~
請問,是我理解有誤,還是程式有誤呢?

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

程序代码:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
    int x=10, y=20, z=30;
        
    x=y%z;
    printf("%d\n", x);
    
    system("PAUSE");
    return 0;
}

問題三:
請問,為何計算結果,x = 20 呢?
在求餘數的運算中,如 y 比 z 細,那求出的值就等於 y 的值嗎?

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

程序代码:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
    int x=13, y=5;
    printf("x/y = %f\n", x/y);
    
    system("PAUSE");
    return 0;
}

問題四:
13/5=2.6,若以 int 計算,該是 2 吧;若以 float 計算,該是 2.600000 吧~
可以計算結果是 0.000000,請問何解呢?

謝謝各位!
2013-06-10 22:48
no_use
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2013-5-12
收藏
得分:0 
以下是引用TonyDeng在2013-6-10 22:52:19的发言:

你看什麽教材沒解釋這些問題?

同時在看三本書,都是台灣書來~
找不到答案,唯有上來問......

或許,有好的書籍可以推薦嗎?謝謝。
2013-06-10 22:56
no_use
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2013-5-12
收藏
得分:0 
先感謝各位對我這個超新手有這樣的耐性!
我不逐一回覆了~

對,我是來自香港的,所以才用繁體字,但又不太習慣用書面語,所以一眼就被看穿我用繁體字又不是台灣人吧......

對於求餘數的概念清楚多了~

沃恩,int/int结果是int型,会省略小数,請問為何 13/5 的答案不是 2 呢?

TonyDeng,你說的我明白了,概念上是知道的,但一到運作上就忘了,9/5,整天也以為答案是 1.8,其實在 C 中以 int 運算,答案是 1,就是一下子記了......
我亦有試過改算式改成「F = (9/5 * C) + 32」,用括號的,當然,現在明白了問題出在哪了~


到最後,問題四還是不明白,不好意思......
2013-06-10 23:26
no_use
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2013-5-12
收藏
得分:0 
以下是引用TonyDeng在2013-6-10 23:40:56的发言:

第四個問題,跟printf()函數的處理機制有關:你指定了輸出數據以double型解讀,這是一個8字節的數據,而13/5是4字節的整型數據,但printf()函數要在內存中取8字節的內容來解讀,對Intel的機器,這種内存被解釋成浮點數零。

看完你的解釋,再加上 Susake 的
浮点数和整数的字节数不同,如0000 xxxxx(浮点数)
                                  xxxxx(整数)
这么一对齐,后面的精确不到.所有是0

明白了,謝謝
2013-06-11 23:11
no_use
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2013-5-12
收藏
得分:0 
以下是引用TonyDeng在2013-6-11 00:02:05的发言:

如果你仔細琢磨了12樓代碼的結果,就應該明白一个基本的道理:應該循規蹈矩寫代碼,不要玩技巧!該用double變量儲存數據傳送給printf()的,就規規矩矩地定義中間變量,不要以爲省個變量空間的消耗很英明,結果往往是你想不到的,特別是偶然對偶然不對的時候,你查錯打破了頭也想不到問題居然在這種地方。

其實我所貼上來的代碼是從書本中抄下來的,不過無論如何,多謝教誨,我會多多向各位學習的
2013-06-11 23:13
no_use
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2013-5-12
收藏
得分:0 
以下是引用YJ_Hao在2013-6-12 07:47:07的发言:

,版主真是太有心了!

我很同意
2013-06-12 18:58
no_use
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2013-5-12
收藏
得分:0 
以下是引用szgg520在2013-6-12 08:44:05的发言:

问题问的很有价值,楼主加油哟

多謝你的鼓勵,我會加油的
2013-06-12 18:59
快速回复:想請教幾個非常基礎的問題,謝謝!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042857 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved