Программирование на 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.... Также измените ваш код в основном как: минимум = минимальное_значение (зарплаты, число_салонов); максимум = максимальное_значение (зарплаты, число_салонов);