为什么这个程序会这样? C

时间:2015-05-12 15:09:12

标签: c arrays pointers

Hello stackOverflowers!有人可以解释为什么当我从1到10对阵列充电时,输出表示最小值为1,最大值为偶数为10,当我从10开始将数组输出为1时,输出为最小值为2,最大值为10我认为嵌套的if序列是正确的,因为计数器显示正确的偶数和正确的奇数,但我想到了某些东西...... 程序应该在数组内输出最小值和最大偶数。

感谢您的回答!

/*EVEN MAX AND MIN POINTER FUNCTION*/

#include <stdio.h>

#define MAXARRAY 100

typedef int ArrayTable[MAXARRAY];

void chargeArray(ArrayTable,int);
void maxMinEven(const ArrayTable, int, int *, int *,int *,int *);

int main(){
    ArrayTable intTable;
    int maxim,minim;
    int contEven=0,contOdd=0;
    int n=10;

    printf("Input %d integer number:\n",n);
    chargeArray(intTable,n);
    maxMinEven(intTable,n,&minim,&maxim,&contEven,&contOdd);
    printf("The minimun even of the %d number is %d and the maximun %d. Even     %d Odd %d\n",n,minim,maxim,contEven,contOdd);
    system("pause");
    return 0;
}
void chargeArray(ArrayTable t,int n){
    int i=0;
    int number;
    for(i=0;i<n;i++){       
        scanf("%d",&number);
        t[i]=number;
    }
}

void maxMinEven(const ArrayTable t, int n, int *min, int *max,int      *contEven,int *contOdd){
    int i;
    *min=t[0];
    *max=t[0];

    for(i=0;i<n;i++){       
        if(t[i]%2==0){  
            (*contEven)++;/*incremento el contenido de la direccion de    memoria de contPar*/

            if(t[i]>*max)
                *max=t[i];  

            if(t[i]<*min)       
                *min=t[i];      

}else{
            (*contOdd)++;/*incremento el contenido de la direccion de memoria de   contImp*/
        }

    }
}

2 个答案:

答案 0 :(得分:1)

您将min设置为等于数组的第一个元素,无论它是否为偶数。

*min=t[0];

在循环内部,您将值与此最小值进行比较。 得到这个结果,因为1小于数组中的任何其他偶数。

希望我帮忙,

答案 1 :(得分:0)

这两行:

*min=t[0];
*max=t[0];

您的代码假定t[0]是偶数。但是,这不一定是真的。

一个解决方案是:

*min = INT_MIN;
*max = INT_MAX;