2014-02-03 1 views
0

Эта программа, которую я написал, должна запрашивать зарплату, вычислять минимальное значение, максимальное значение, среднее, медианное, а затем сортировать их в порядке убывания и отображать его. Программа работает, но максимальная, минимальная, средняя и сумма окладов полностью отключены. Я искал, перечитывал и просто не мог понять, где я ошибаюсь. Пожалуйста помоги!!!C программирование - Что я делаю неправильно с этими функциями?

#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 */ 
+4

Пожалуйста, будьте более конкретными и, возможно, сузите проблему. Можете ли вы изолировать одну из этих функций, которая производит неправильный вывод, и показывать только код, демонстрирующий это? Пожалуйста, укажите ожидаемые результаты и фактические результаты. Как уже написано, вы только что указали «стенограмму кода» и попросили StackOverflow отладить ее для вас, но хорошие вопросы StackOverflow обычно требуют некоторой отладки раньше времени. Пожалуйста, сушите вопрос. –

+2

Вы не назначаете возвращаемые значения большинства ваших функций (кроме медианы), а затем печатаете неинициализированные variebles. –

+0

Кстати, если 'sort()' и 'end_sort()' делают точно то же самое, вам не нужны оба из них. –

ответ

1

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

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

0

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

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

для (I = 2, я < number_of_salaries; ++ я)

и аналогичный в других MAXIMUM_VALUE метода ....

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

минимума = minimum_value (зарплаты, number_of_salaries);

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

 Смежные вопросы

  • Нет связанных вопросов^_^