2013-12-08 96 views
-6

這個程序創建隨機數組數組,其中元素參數1,3,5,7 ...,19是負數,並且該程序應該找到最大的負數元素,但是當測試程序寫入一些隨機數時(6784345而不是數組元素)你能幫我找到錯誤嗎?C++程序找不到錯誤

#include<stdio.h> 
#include<stdlib.h> 
#include<time.h> 
void najneg(int *pa,int *nn) 
{ 
nn=0; 
for(int i=0;i<20;i++) 
    { 
    if((pa+i)<nn) nn=(pa+i); 
    } 
} 
int main() 
{ 
    int a[20],nn,i; 
    srand(time(0)); 
    for(i=0;i<20;i++) 
    { 
    if(i%2==0) a[i]=rand()%(61); 
    else 
    a[i]=(rand()%(61))*(-1); 
    } 
    printf("Formirani niz je:\n"); 
    for(int i=0;i<20;i++) 
    { 
    printf("\ "); printf("%d",a[i]); 
    } 
    najneg(a,&nn); 
    printf("\n\nNajveci negativni clan niza je:%d\n",nn); 
    return 0; 
    } 
+2

瞭解如何索引數組以及如何使用指針。例如'pa [i]'和'* nn'。此外,這應該被標記爲C,而不是C++,因爲它不是真正的C++代碼。 –

+0

@JoeZ即使我不明白你想說什麼謝謝 – user3054839

+0

@JoeZ也許用兩者來標記它,但如果他/她正在編寫C++,刪除C++將會很奇怪。例如,有人可能會有一些「std」相關的提示。 – keyser

回答

1

這個功能應該是

void najneg(int *pa,int *nn) 
{ 
    *nn=0; //As you want to modify nn. 
    for(int i=0;i<20;i++) 
    { 
     if(pa[i]<*nn) *nn=pa[i]; //Here, you want to compare values and swap them. Not just address. 
    } 
} 

不要嘗試將它複雜化。

3

在這段代碼中,&hellip;

void najneg(int *pa,int *nn) 
{ 
nn=0; 
for(int i=0;i<20;i++) 
    { 
    if((pa+i)<nn) nn=(pa+i); 
    } 
} 

你忘了取消引用指針,

void najneg(int *pa,int *nn) 
{ 
*nn=0; 
for(int i=0;i<20;i++) 
    { 
    if(*(pa+i)<*nn) *nn=*(pa+i); 
    } 
} 

此功能的最重要的解決方法是將其名稱更改爲可讀和自我描述性的,沒有任意酥油。在選擇名稱時,請考慮讓的撥打代碼可讀和清晰。因此,例如,najnegmost_negative_value_in。其次,使用函數返回值,而不是邏輯出來的參數。

三,如果功能不需要更改數據,請使用const讓它提供一個保證它不會更改數據。

四,避免幻數20:傳遞數組大小作爲參數。

這一點,再加上一些純粹的外觀變化,收益率:

int most_negative_number_in(int const* const a, int const size) 
{ 
    int n=0; 
    for(int i=0; i<size; ++i) 
    { 
     if(a[i]<n) { n = a[i] }; 
    } 
    return n; 
} 
+2

你真的應該在這裏使用標準的數組索引。 'pa [i]',而不是'*(pa + i)'。每當我看到後一種索引指針或數組的方式時,我都想把目光轉移到外面。這就像寫'(* p).f'而不是'p-> f'。 –

+0

OMFG lm盲人白癡...... thx傢伙第一次l試着用l我在主要和刪除的指針有錯誤...現在我忘了他們所有關於thx很多:D – user3054839

0

除了別人所指出的那樣:

您可以簡化for循環的內容:

for(i = 0; i < 20; i++) 
    { 
    // The array slot is assigned a random value 
    // whether the index is positive or negative. 
    a[i] = rand() % 61; 

    // If the index is odd, change the value 
    // to a negative number. 
    if(i % 2 == 1) 
    { 
     a[i] *= -1; 
    } 
    } 

在下一個循環中,您應該組合成一個printf調用:

for(int i = 0; i < 20; i++) 
    { 
    printf("\ %d", a[i]); 
    } 

另外,格式說明符,選項卡或空格中的"\ "是什麼?