Программирование на C - Что я делаю не так с этими функциями?

Эта программа, которую я написал, должна запрашивать зарплату, определять минимальное, максимальное значение, среднее значение, медиану, а затем сортировать их в порядке убывания и отображать ее. Программа запускается, но max, min, avg и сумма зарплат полностью выключены. Я искал, перечитывал и просто не мог понять, где я ошибаюсь. Пожалуйста помоги!!!

#include <stdio.h>

/* Function Prototypes */

int get_number_of_salaries (void);

void enter_salaries (int [], int);

void sort (int [], int);

void ending_sort (int [], int); 

float get_median (int [], int);

float average (float []);

int minimum_value (int [], int);

int maximum_value (int[], int);



/* Functions */

int get_number_of_salaries (void)
{
    int number_of_salaries;
do
{
    printf ("Enter the number of salaries to process (2-100): ");
    scanf ("%i", &number_of_salaries);
    fflush(stdin);

    if (number_of_salaries <= 1)
        printf (" I'm sorry, you need to enter more than one salary.\n\n");
    if (number_of_salaries > 100)
        printf (" I'm sorry, you can not enter more than 100 salaries.\n\n");

} while (number_of_salaries <= 1 || number_of_salaries > 100);

return number_of_salaries;

}

void enter_salaries ( int salaries [], int number_of_salaries)

{
int i;


for ( i = 1; i <= number_of_salaries; ++i)
{
    do 
    {
        printf (" Enter salary #%i: ", i);
        scanf ("%i", &salaries[i]);
        fflush(stdin);

        if (salaries[i] <= 0)
            printf (" *** Invalid salary entered. Please re-enter. *** \n");

    } while (salaries[i] <= 0);



} 

printf ("\n");

}

int minimum_value (int salaries [], int number_of_salaries)
{
int minimum, i;

minimum = salaries [0];

for (i = 1; i < number_of_salaries; ++i)
    if (salaries [i] < minimum)
        minimum = salaries [i]; 

return minimum;

}


int maximum_value (int salaries [], int number_of_salaries)
{
int maximum, i;

maximum = salaries [0];

for (i = 1; i < number_of_salaries; ++i)
    if (salaries [i] > maximum)
        maximum = salaries [i];

return maximum;

}

float average ( float a[])
{
int i, number_of_salaries;
float avg, sum = 0.0;
for (i = 0; i < number_of_salaries; ++i)
{
    sum += a[i];
}

avg = (sum/number_of_salaries);

return avg;
 }

 void sort (int salaries [], int number_of_salaries)

 {

int i, j, temp;


    for (i = 0; i < number_of_salaries - 1; ++i)
        for (j = i + 1; j < number_of_salaries; ++j)
        if (salaries [i] > salaries [j])
        {

            temp = salaries[i];
            salaries[i] = salaries[j];
            salaries[j] = temp;
        }



} /* end swap */

float get_median (int salaries[], int number_of_salaries)
{
float temp;
int x, i;

for (x = 0; x < number_of_salaries; ++x)
for (i = x + 1; i < number_of_salaries; ++i)
{
    if (salaries[x] > salaries [i])
    {
        salaries[i] = temp;
        salaries[i] = salaries[x];
        salaries[x] = temp;
    }
}

if (number_of_salaries % 2 == 0)
return (salaries[number_of_salaries / 2] + salaries[number_of_salaries / 2 - 1]) / 2;
else
return salaries[number_of_salaries / 2];
printf (" The median salary is %.1f \n", get_median);

}

void ending_sort (int salaries[], int number_of_salaries)
{
int i, j, temp;



    for (i = 0; i < number_of_salaries - 1; ++i)
        for (j = i + 1; j < number_of_salaries; ++j)
        if (salaries [i] < salaries [j])
        {
            temp = salaries[i];
            salaries[i] = salaries[j];
            salaries[j] = temp;
        }
}


int main (void)
{
/* Variable Declarations */
/*-----------------------*/
int salaries [100];
int number_of_salaries, maximum, minimum, x, i; 
float avg;
int total_salary;
float median;

/* Output Greeting */
/*---------------------------------------------------*/
printf (" Welcome to the Salary Calculator.\n");




number_of_salaries = get_number_of_salaries ();

enter_salaries (salaries, number_of_salaries);

minimum_value (salaries, number_of_salaries);

maximum_value (salaries, number_of_salaries);

printf (" The minimum salary is %i \n", minimum);

printf (" The maximum salary is %i \n", maximum);

printf ("\n"); /* Spacing. */

average (salaries);

printf (" The average salary rounded is %i \n", avg);

sort (salaries, number_of_salaries);

get_median (salaries, number_of_salaries);

median = get_median (salaries, number_of_salaries);

printf (" The median salary is %.1f \n", median);

ending_sort (salaries, number_of_salaries);

printf (" The salaries entered were: \n");
for (x = 1; x < number_of_salaries; ++x)
    printf ("%i", salaries[x]);



printf ("\n");


getchar ();

} /* End Main */

2 ответа

В enter_salaries ваш цикл for выглядит следующим образом

for ( i = 1; i <= number_of_salaries; ++i)

Самое первое значение в массиве будет по индексу 0 и последний по индексу number_of_salaries - 1 так что поменяйте цикл на

for ( i = 0; i < number_of_salaries; ++i)

Проверьте другие функции, все они имеют одинаковые проблемы. В average функция, которую вы объявляете number_of_salaries в теле функции, и использовать его без инициализации. Я думаю, ты хотел пройти number_of_salaries так же, как вы делаете это в других функциях. Также salaries стал массивом поплавков в среднем прототипе, в то время как он изначально int

Одна ошибка состоит в том, что переменные максимум, минимум и avg неинициализированы. Другой способ заключается в том, что вы храните зарплаты в массивах зарплат, начиная с зарплаты [1], но в методе минимального значения вы назначаете минимальную зарплату [0]. Таким образом, в minimal_value вы можете изменить:

минимум = зарплата [1];

для (i = 2; i

и подобное в другом методе Maximum_value....

Также измените ваш код в основном как:

минимум = минимальное_значение (зарплаты, число_салонов);

максимум = максимальное_значение (зарплаты, число_салонов);

Другие вопросы по тегам