Помогите с ошибками в коде C - PullRequest
0 голосов
/ 31 марта 2010

Этот код C дает мне некоторые непредсказуемые результаты. Программа предназначена для сбора 6 номеров и распечатки максимума, положения максимума нет и среднего значения. Предполагается, что в нем всего 3 функции - input, max_avr_pos и output для выполнения того, что должен делать код, но я получаю непредсказуемые результаты. Пожалуйста, в чем может быть проблема

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void input_vals(int arrnum[]);
void max_ave_val(int arrnum1[],double *average,int *maxval,int *position);
void print_output(double *average1,int *maxval1,int *position1);
int main(void)    {
  int arrnum[6],maxval2,position2;
  double average2;
  input_vals(arrnum);
  max_ave_val(arrnum,&average2,&maxval2,&position2);
  print_output(&average2,&maxval2,&position2);
  _getche();
  return 0;
}
void input_vals(int arrnum[]){
    int count;
    printf("\n Please enter six numbers\n");
    for(count=0;count<6;count++) {
        scanf("%d",&arrnum[count]);
    }
}
void max_ave_val(int arrnum1[],double *average,int *maxval,int *position)    {
    int total=0;
    int cnt,cnt1,cnt2,limit,maxval2,post;
    limit=6;
    /* finding the max value*/
    for(cnt=0;cnt<limit-1;cnt++)
        for(cnt1=limit-1;cnt1>cnt;--cnt1) {
            if(arrnum1[cnt1-1]>arrnum1[cnt1]) {
                maxval2=arrnum1[cnt-1];
                post=(cnt-1)+1;
            }
            else {
                maxval2=arrnum1[cnt1];
                post=cnt1+1;
            }
        }

        *maxval=maxval2;
        *position=post;
        /* solving for total */
        for(cnt2=0;cnt2<limit;cnt2++);
        {
            total=total+arrnum1[cnt2];
        }
    *average=total/limit;
}
void print_output(double *average1,int *maxval1,int *position1)    {
    printf("\n value of the highest of the numbers is %d\n",*maxval1);
    printf("\n the average of all the numbers is %g\n",*average1);
    printf("\n the postion of the highest number in the list is %d\n",*position1);
}

Ответы [ 4 ]

1 голос
/ 31 марта 2010

Перебрать один раз, сложить все числа и проверить текущий максимальный против текущего числа.

for (cnt = 0; cnt < limit; cnt++) {
      total += arrnum[cnt];

      if (maxval < arrnum[cnt]) { 
        maxval = arrnum[cnt];
        position = cnt;
      }
    }

maxval должен быть инициализирован минимальным значением int из limit.h

1 голос
/ 31 марта 2010
for(cnt2=0;cnt2<limit;cnt2++);
   {
      total=total+arrnum1[cnt2];
   }

; в конце цикла for.

0 голосов
/ 31 марта 2010

Теперь я написал этот блайнд, но, надеюсь, это поможет, кажется, не обижаться, код, приведенный в вопросе, немного сложнее.

void max_ave_val(int arrnum1[],double *average,int *maxval,int *position)    { 

    #define LIMIT 6 

    *maxval = 0;
    *average = 0.0f;

    for ( Int index = 0; index < LIMIT; index++ )
    {
        *average += arrnum1[ index ];
        if ( arrnum1[ index ] > *maxval )
        {
            *maxval = arrnum1[ index ];
            *position = index;
        }
    }

    *average /= LIMIT;
} 

Большое спасибо - Нил

0 голосов
/ 31 марта 2010

Похоже, вы можете найти максимум гораздо проще. Как насчет:

maxval2 = -1;
post = -1;
for(cnt=0;cnt<limit-1;cnt++)   
{
   if(arrnum1[cnt] > maxval2)
   {
        post = cnt;
        maxval2 = arrnum1[cnt];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...