2014-11-25 51 views
1
#include<stdio.h> 
#include<math.h> 

int n; 

struct vector 
{ 
    int dir[100]; 
}; 
int dot(struct vector v1, struct vector v2) 
{ 
    int dp,j; 
    dp=0; 
    for(j=0;j<n;j++) 
    { 
    dp = dp + (v1.dir[j]*v2.dir[j]); 
    } 
return dp; 
} 
float cosine(int vdot, float v1mod, float v2mod) 
{ 
    float cos1, vdo = vdot; 
    cos1 = (vdot/(v1mod*v2mod)); 
    return cos1; 
} 
    float modul(struct vector v1) 
{ 
    int j; 
    float v1mod; 
    float deg = 0; 
    for(j=0; j<n; j++) 
    { 
    deg = deg + ((v1.dir[j])*(v1.dir[j])); 
    } 
v1mod = sqrt(deg); 
} 
int main() 
    { 
    int j; 
    scanf("%d", &n); 
    struct vector v1; 
    struct vector v2; 
    for(j=0;j<n;j++) 
     { 
     scanf("%d", &v1.dir[j]); 
     } 
    for(j=0;j<n;j++) 
     { 
     printf("%d/", v1.dir[j]); 
     } 
    printf("\n"); 

    for(j=0;j<n;j++) 
     { 
     scanf("%d", &v2.dir[j]); 
     } 
    for(j=0;j<n;j++) 
     { 
     printf("%d/", v2.dir[j]); 
     } 
     printf("\n"); 

    int vdot; 

    float v1mod, v2mod, cos2; 

    vdot = dot(v1,v2); 
    printf("%d\n", vdot); 

    v1mod = modul(v1); 
    printf("%f\n", v1mod); 

    v2mod = modul(v2); 
    printf("%f\n", v2mod); 

    cos2 = cosine(vdot, v1mod, v2mod); 

    printf("cosine = %f\n", cos2); 
    } 

當我們編譯代碼,輸出爲餘弦正顯示出「1#QNANO。 我檢查所有的網站,但沒有在那裏我才找到了 錯誤的發生正確的原因。 也可以某一個指定這樣的多個錯誤類型有多少呢。 **在代碼中的錯誤是故意的。#QNANO在C中表示或表示什麼?

+1

不是數字(例如'sqrt(-1,2)'或'pow(0,0)')。 – 2014-11-25 13:49:01

+3

請格式化您的代碼。 – 2014-11-25 13:49:43

+1

此代碼不會編譯'modul()'缺少返回值。由於這不能成爲你正在運行的代碼,我們怎麼能確定它顯示你所問的錯誤?此外,該程序在用戶輸入數據中運行 - 爲了能夠重現您的問題,我們需要知道輸入測試數據。 – Clifford 2014-11-25 14:29:18

回答

4

Q可能意味着它是一個quiet not-a-numberO可能意味着溢出。

什麼確切的平臺和編譯器你用過嗎?

+0

我在代碼塊中使用mingw。 – 2014-11-25 14:05:56

+0

這是否意味着輸出不是一個真正的不。 ?? – 2014-11-25 15:15:24

+1

@JahangirAli閱讀我鏈接到的頁面,你似乎沒有意識到NaNs。 – unwind 2014-11-25 15:17:33

0

所以我運行了一些代碼並做了一些實驗,並遇到了這個錯誤。 (#QNANO) 最合理的解釋我能想出是數據指定不匹配,即看看這個簡單的代碼:

#include<stdio.h> 
int main() 
{ 
    int a,c; 
    a = 2; 
    float b; 
    b = 3; 
    c = a*b; 
    printf("%f",c); 
    return 0; 
} 

的這個簡單的代碼的輸出是-1 #QNANO,所以我想作爲一個整數變量乘以一個浮點變量,結果存儲在一個整數變量中,但是當我們輸出c的值並且用%f做到這一點時,整數變量不能轉換爲浮點數,因此錯誤會拋出向上。