2010-03-21 25 views
7
#include<stdio.h> 
void function(int); 

int main() 
{ 
    int x; 

    printf("Enter x:"); 
    scanf("%d", &x); 

function(x); 

return 0; 
} 

void function(int x) 
{ 
    float fx; 

    fx=10/x; 

    if(10 is divided by zero)// I dont know what to put here please help 
     printf("division by zero is not allowed"); 
    else 
     printf("f(x) is: %.5f",fx); 

} 

cevap

8
#include<stdio.h> 
void function(int); 

int main() 
{ 
    int x; 

    printf("Enter x:"); 
    scanf("%d", &x); 

function(x); 

return 0; 
} 

void function(int x) 
{ 
    float fx; 

    if(x==0) // Simple! 
     printf("division by zero is not allowed"); 
    else 
     fx=10/x;    
     printf("f(x) is: %.5f",fx); 

} 
6

Bunu yapmalısınız. Bölmeyi gerçekleştirmeden önce bölümlemeyi sıfırlamanız gerekir.

void function(int x) 
{ 
    float fx; 

    if(x == 0) { 
     printf("division by zero is not allowed"); 
    } else { 
     fx = 10/x; 
     printf("f(x) is: %.5f",fx); 
    } 
} 
1

C99 ile fetestexcept(2) et yanısıra kullanabilirsiniz.

+0

Bu sadece olsa noktası istisnalar kayan ister? Yukarıdaki örnek, bir tam sayı için sıfıra bölünür. –

4

Varsayılan olarak UNIX'te, sıfırdan kayan nokta bölmesi, programı bir istisna ile durdurmaz. Bunun yerine, infinity veya NaN olan bir sonuç üretir. Bunların hiçbirinin isfinite kullanarak yapılmadığını kontrol edebilirsiniz.

x = y/z; // assuming y or z is floating-point 
if (! isfinite(x)) cerr << "invalid result from division" << endl; 

Alternatif olarak, bölen değil sıfır olup olmadığını kontrol edebilirsiniz:

if (z == 0 || ! isfinite(z)) cerr << "invalid divisor to division" << endl; 
x = y/z; 
+0

Kayan nokta sıfır ile bölünmese de - tamsayıdır (tamsayı bölme ifadesinin sonucu daha sonra bir şamandıraya taşınır). –

+0

@Paul: Bu onun kodunda doğru, ama ben onun kodunu kopyalamamıştım. Bir yorum ekledim, bu yardımcı olur mu? – Potatoswatter

İlgili konular