2012-12-01 87 views
11

程序:所以我做了一個程序,它需要兩個數字,N和L.N是二維數組的大小,L是一個從3到16的數字。程序構建數組並開始在中心並以逆時針螺旋方式出現,我是中心的值,當你經過數組時(螺旋線),數值將增加1,它是素數,數字是分配給該點,如果沒有它*將代替它,而不是浮點異常(核心轉儲

錯誤:我得到一個「浮點異常」的錯誤,我將如何解決這個

代碼:

void Array_Loop(int *Array, int n, int L) ; 

int Is_Prime(int Number) ; 

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

    int **Array ; 
    int n, L ; 

    n = atoi(argv[1]) ; 
    L = atoi(argv[2]) ; 

    Matrix_Build(&Array, n, n) ; 
    Array_Loop(Array, n, L) ; 


    return 0 ; 

} 

void Array_Loop(int *Array, int n, int L){ 

    int i, j, k, h ; 
    int lctn, move; 

    lctn = n/2 + 1 ; 
    i = lctn ; 
    j = lctn ; 
    move = 1 

    while(i != 0 && j != n){ 

    for(j = lctn ; j < lctn + move ; j++){ 

     if(L % 2 == 2) Array[i][j] = -1 ; 
     else Array[i][j] = Is_Prime(L) ; 
     L++ ; 
    } 

    move = move * -1 ; 

    for(i = i ; i > lctn - move ; i--){ 

     if(L % 2 == 2) Array[i][j] = -1 ; 
     else Array[i][j] = Is_Prime(L) ; 
     L++ ; 
    } 

    move-- ; 

    for(j = j ; j > lctn - move ; j--){ 

     if(L % 2 == 2) Array[i][j] = -1 ; 
     else Array[i][j] = Is_Prime(L) ; 
     L++ ; 
    } 

    move = move * -1 ; 

    for(i = i ; i < lctn - move ; i--){ 

     if(L % 2 == 2) Array[i][j] = -1 ; 
     else Array[i][j] = Is_Prime(L) ; 
     L++ ; 
    } 

    move++ ; 

    } 

} 


int Is_Prime(int Number){ 

    int i ; 

    for(i = 0 ; i < Number/2 ; i++){ 

    if(Number % i != 0) return -1 ; 

    } 

    return Number ; 

} 
+8

你分/用零來修飾。 – Mysticial

+1

在第一次迭代中'Number%i''' i = 0'。 – Mysticial

+0

另外,當'移動<0'時,'lctn - move> lctn'。看你的跡象。 –

回答

22

你得到浮點異常,因爲人數%我,當我是0:

int Is_Prime(int Number){ 

    int i ; 

    for(i = 0 ; i < Number/2 ; i++){ 

    if(Number % i != 0) return -1 ; 

    } 

    return Number ; 

} 

就在我= 2開始循環因i = 1號%我總是相等歸零,因爲Number是一個int。

順便說一句:Mysticial沒有在評論中首先指出。

+1

救了我一天謝謝 – kapil

+0

很高興幫助... – dreamcrash

6

浮點異常發生是因爲意外的無窮大或NaN。 你可以使用gdb來跟蹤它,它可以讓你看到C程序運行時發生了什麼。有關詳細信息: https://www.cs.swarthmore.edu/~newhall/unixhelp/howto_gdb.php

簡而言之,這些命令可能是有用的...

gcc -g myprog.c

gdb a.out

gdb core a.out

ddd a.out