2013-11-22 36 views
1

並原諒我,如果我做錯了什麼,我是這裏的第一次,我的英語不是最好的。另外,我在C初學者C如何獲得更多的小數位數輸出計數平方根

我們在C中有學校項目,在那裏我們必須編寫計算平方根的函數。我們不能使用math.h.我已經完成了它的工作,但是輸出有問題,我不知道如何解決。

我得到這個:「my_sqrt =?。?10e?」例如:「1.414214.10e1」

但我需要得到這個:「my_sqrt =?。??????????。10e ??」例如:「1.4142145678.10e + 01」 如何我要做嗎?

這是代碼:

double fabs(double x) {  //just abs() 
    if (x < 0) 
     x = -x; 
    return x; 
} 

double my_sqrt(double x) { //sqrt function 
    double y = 1; 
    while(fabs(y*y - x) >= 0.00000000001) 
     y = ((x/y) + y)/2; 
    k++; 
    return y; 
} 

int main(int argc, char *argv[]) { 
    int num; 

    sscanf(argv[2], "%d", &num); // char to int 

    if (strcmp(argv[1], "--help") == 0) // this will just print help 
     getHelp(); 
    if (strcmp(argv[1], "--sqrt") == 0) // this is for sqrt 
     printf("my_sqrt = %f.10e%d", my_sqrt(num), k); 

    return 0; 
} 

非常感謝您!

+1

爲什麼downvote?他們是一個新用戶,他們已經發布了他們的嘗試,對於不熟悉C的新用戶來說並不明顯。 – Baldrick

+0

您的代碼無法編譯,因爲它是已知的。 ('k ++'應該是什麼意思?) –

回答

0

我相信你的意思是使用%.10f(打印與10位小數雙),而不是%f.10(打印帶有小數後面的字符串.10的標準號雙)在您的格式字符串。欲瞭解更多詳情,請參閱http://en.cppreference.com/w/c/io/fprintf

與您的代碼的另一個問題是這種調用:

printf("my_sqrt = %f.10e%d", my_sqrt(num), k); 

在這裏,你希望my_sqrt(num)先計算,以便它可以設置k。但是函數調用參數的評估順序是未指定的。該程序可能會首先獲得k(零)的值,然後評估sqrt調用。

+0

'double'的'printf'格式中沒有'l'。 –

+0

@JensGustedt,true。固定。 –

0

首先,我想補充一點,我們應該鼓勵新來者。然後回答您提問的問題...使用%e以科學形式表示浮點數

0

使用"%.*e"可獲得您需要的.之後的任意小數位數,並帶有指數表示法。

// printf("my_sqrt = %f.10e%d", my_sqrt(num), k); 
// 10 digits after the decimal point 
int Digs = 10; 
printf("my_sqrt = %.*e %d\n", Digs, my_sqrt(num), k); 
相關問題