Я пишу основную программу на C, которая вычисляет среднее стандартное отклонение и медиану из 5 различных классов, которые пользователь вкладывает в программу. Используются функции, ссылки и указатели. Кажется, что я на правильном пути, но я написал стандартный метод отклонения, как я имел бы в Java, а не C:Не удается написать метод в C, включая указатели и типы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int* get_data(int num_grades);
float calc_average(int num_grades, int grades[]);
void display_average(float ave);
int main(int argc, char* argv[])
{
const int MAX_GRADE = 100;
printf("enter number of grades: ");
int num_grades;
scanf("%d", &num_grades);
int* result = get_data(num_grades);
if(num_grades == 0)
{
printf("no grades to average\n");
}
else
{
float ave = calc_average(num_grades, result);
display_average(ave);
float standarddev = standard_deviation(num_grades, result);
display_standarddeviation(standarddev);
}
free(result);
return 0;
}
float calc_average(int num_grades, int grades[])
{
float ave;
int i;
int sum = 0;
for(i = 0; i < num_grades; i++)
{
sum += grades[i];
}
ave = (float)sum/num_grades;
return ave;
}
float standard_deviation(int num_grades, int grades[])
{
float standarddev;
int i;
int *formula = 0;
for(i = 0; i < num_grades; i++)
{
formula += pow((grades[i] - calc_average(num_grades, grades[i])), 2);
}
float ave = (float)(1/num_grades)*formula;
standarddev = (float)sqrt(ave);
return standarddev;
}
void display_average(float ave)
{
printf("average: %.2f\n", ave);
}
void display_standarddeviation(float standarddev)
{
printf("standard deviation: %.2f\n", standarddev);
}
int* get_data(int num_grades)
{
int* a;
a = malloc(num_grades * sizeof(int));
int i;
for(i = 0; i < num_grades; i++)
{
printf("enter a grade: ");
int grade;
scanf("%d", &grade);
if(grade <= 100)
{
a[i] = grade;
}
else
{
printf("grade needs to be > 0 and <= 100\n");
i--;
}
}
return a;
}
Когда я компилирую эту программу, так как я пишу это в Secure Client Shell и собрать его с помощью GCC -g -c grades2.c, то я получаю сообщение об ошибке:
grades2.c:49: error: conflicting types for âstandard_deviationâ
grades2.c:27: note: previous implicit declaration of âstandard_deviationâ was here
grades2.c: In function âstandard_deviationâ:
grades2.c:56: warning: passing argument 2 of âcalc_averageâ makes pointer from integer without a cast
grades2.c:35: note: expected âint *â but argument is of type âintâ
grades2.c:56: error: invalid operands to binary + (have âint *â and âdoubleâ)
grades2.c:58: error: invalid operands to binary * (have âfloatâ and âint *â)
grades2.c: At top level:
grades2.c:69: warning: conflicting types for âdisplay_standarddeviationâ
grades2.c:28: note: previous implicit declaration of âdisplay_standarddeviationâ was here
это основные ошибки, которые я считаю, может быть легко исправлена, но так как это так легко сделать опечаток и печатать ошибки в Secure Shell Client, мне трудно узнать, какой из них является. О, и в нем не указывается, куда помещать исправления ошибок замены, такие как IDE. Поскольку я использую заголовок Math, после того, как мне удастся скомпилировать его с вашим вводом, я скажу gcc -o grades2.exe grades2.o -lm, с -lm означает, что я компилирую программу с помощью математического заголовка ,
Помогите мне исправить ошибки.
что 'INT * formula'? почему вы объявляете его указателем? –