2016-04-02 14 views
1

Görevlerimden birinde x'in x - 2, x^4 ve x'in küp kökünün x değerini 0 - 100 olarak almam gerekiyordu. Şimdiye kadar bu. (5 numaralı Test)C - Bir küpün küp kökü bulma

#include <stdio.h> 
#include <math.h> 

int powers(int n) 
{ 
    return (n < 0) || (powers(n-1) && printf("%d\t%d\t%d\t\t%d\n", n, n*n, n*n*n*n, cbrt(n))); 
} 

int main(void) 
{ 
    printf("number\tx^2\tx^4\t\tx^(1/3)\n"); 
    powers(5); 

    return 0; 
} 

MY ÇIKIŞ

number x^2 x^4  x^(1/3) 
0   0  0   0 
1   1  1   0 
2   4  16   -108170613 
3   9  81   1225932534 
4   16  256  -1522700739 
5   25  625  -1124154156 

Yani, benim kare ve öyle ama küp kökü ile çalışmak için alınamıyor kadar basit çalışıyoruz quatric. Ben ayrı ayrı küp kökü yaptığımda çalışır. printf("Cube root of 125 is %f\n, cbrt(125));, Cube root of 125 is 5.0000 değerini verir.

Neden işlevimde çalışmadığı konusunda yardıma ihtiyacım var. Yeni C programlama için lütfen nazik olun. (Derleyici: Borland C++ ve IDE: C-Free 5.0) sorun cbrt kabul eder ve cbrt(n) otomatik geçirmeden önce float/double için n dönüştürür anlamına gelir float veya double değeri, döner

+4

'a double' döndürür cbrt':'% f', '% g' veya'% e'. Yazdırma biçimleri ve bağımsız değişken türleri gibi uyumsuzluklarla ilgili bilgi edinmek için uyarıları etkinleştirin. –

+0

@ColonelThirtyTwo Hangi başlığı kullanmalıyım? –

+0

@MOehm Ohmygod. İŞE YARADI. –

cevap

2

Bu fonksiyona. işlevi, bir float/double dönecektir ancak bir int geri yerde bir dönüşüm zorlamak için depolayarak değildir, doğrudan bu yüzden değer aslında float/double olsa bir int olarak yorumlanır %d belirterek printf bunu geçiyoruz .

Basit bir döküm yeterli olurdu: (int)cbrt(n) veya %f veya %g belirticiyi kullanabilirsiniz ve gerçek türü olarak yazdırabilirsiniz.

Ayrıca aynı dönüşüm davranışına yol açacak geçici değişkende saklamak

: Eğer kayan nokta formatları biriyle sonucu yazdırmak bu yüzden,

int v = cbrt(n); 
printf("%d\n", v); 
+0

Tamam, sadece 'printf ('% f \ n', cbrt (n) 'yi kullanarak' 'hileyi'% f' bir kayan nokta olarak kullanıyor mu? –

+1

@ImtiazRaqib: Bundan biraz daha karmaşık: "printf" değişken bir işlevdir ve bu tür işlevlerin bazı argümanları "yükseltilir". “char” ve “short”, “int” ve “float”, “double” olarak tanıtılır. Bunun neticesinde, 'float' ve' double' için '% f' ve'% g' kullanabilirsiniz. Uyarıları etkinleştirin ve derleyicinin size yanlış formatlar hakkında bilgi vermesine izin verin. –

+0

@MOehm Bu çok anlam ifade ediyor. Derleyicimde “int” sözcüğünü iki katına çıkarmaya devam ettiler ve ne anlama geldiğini anlamadım. Teşekkür ederim. –