算术和几何平均误差解决方案
Arithmetic and geometric average error solution
我的代码导致了与给出最终结果相关的问题。
早些时候程序返回几何平均值除零错误。现在程序的算术平均值为returns-2.00000。
程序在 SredniaGeometryczna();
中显示 #IND00 错误 — 它是几何平均值。
你知道怎么解决吗?提前致谢。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
int ilosc(int*);
double sredniaArytmetyczna(int, int*);
double sredniaGeometryczna(int, int*);
double sredniaHarmoniczna(int, int*);
int main()
{
int tab[10];
char wybor;
printf("Wybierz, ktora srednia chcesz policzyc: [A]rytmetyczna, [G]eometryczna, [H]armoniczna.\n");
wybor=getch();
int ile;
long double srednia;
switch(wybor)
{
case 'a':
case 'A':
//instrukcje dla arytmetycznej
ile=ilosc(tab);
srednia=sredniaArytmetyczna(ile, tab);
printf("Srednia to: %f",srednia);
//tab* == tab[0]
//printf("Srednia to: %f", sredniaArytmetyczna(ilosc(tab),tab)); - mozna tak samo zrobic za pomoca jednej linijki
break;
case 'g':
case 'G':
//instrukcje dla geometrycznej
ile=ilosc(tab);
srednia=sredniaGeometryczna(ile, tab);
printf("Srednia to: %f",srednia);
break;
case 'h':
case 'H':
ile=ilosc(tab);
srednia=sredniaHarmoniczna(ile, tab);
printf("Srednia to: %f",srednia);
break;
default:
printf("Bledny wybor");
}
return 0;
}
int ilosc(int* tablica)
{
int ileLiczb, i;
printf("Podaj ile liczb chcesz wprowadzic (max 10) : \n");
scanf("%d", &ileLiczb);
i=0;
while(i<ileLiczb)
{
printf("Podaj %d liczbe calkowita: ", i+1);
scanf("%d", &tablica[i]);
++i;
}
return 0;
}
double sredniaArytmetyczna(int iloscLiczb, int *Tab)
{
double wynik=0;
for(int i=0; i<iloscLiczb; ++i)
{
wynik+=Tab[i];
}
return wynik/iloscLiczb;
}
double sredniaGeometryczna(int iloscLiczb, int *Tab)
{
double wynik=0;
for(int i=0; i<iloscLiczb; ++i)
{
wynik=Tab[i]*Tab[++i];
}
return pow(wynik,1/iloscLiczb);
}
double sredniaHarmoniczna(int iloscLiczb, int *Tab)
{
double wynik=0;
for(int i=0; i<iloscLiczb; ++i)
{
wynik+=(1/Tab[i]);
}
return iloscLiczb/wynik;
}
ilosc
应该 return 计数,但它总是 returns 0
。变化
return 0;
至
return ileLiczb;
并且当您计算 sredniaGeometryczna
中的幂时,您正在执行整数运算。您需要将 1/iloscLiczb
更改为 1/(double)iloscLiczb
以便它执行浮点运算。或者你可以将iloscLiczb
参数的声明改为double
,函数调用时会自动转换
您需要在 sredniaHarmoniczna
中进行类似的更改。将 1/Tab[i]
更改为 1/(double)Tab[i]
我的代码导致了与给出最终结果相关的问题。
早些时候程序返回几何平均值除零错误。现在程序的算术平均值为returns-2.00000。
程序在 SredniaGeometryczna();
中显示 #IND00 错误 — 它是几何平均值。
你知道怎么解决吗?提前致谢。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
int ilosc(int*);
double sredniaArytmetyczna(int, int*);
double sredniaGeometryczna(int, int*);
double sredniaHarmoniczna(int, int*);
int main()
{
int tab[10];
char wybor;
printf("Wybierz, ktora srednia chcesz policzyc: [A]rytmetyczna, [G]eometryczna, [H]armoniczna.\n");
wybor=getch();
int ile;
long double srednia;
switch(wybor)
{
case 'a':
case 'A':
//instrukcje dla arytmetycznej
ile=ilosc(tab);
srednia=sredniaArytmetyczna(ile, tab);
printf("Srednia to: %f",srednia);
//tab* == tab[0]
//printf("Srednia to: %f", sredniaArytmetyczna(ilosc(tab),tab)); - mozna tak samo zrobic za pomoca jednej linijki
break;
case 'g':
case 'G':
//instrukcje dla geometrycznej
ile=ilosc(tab);
srednia=sredniaGeometryczna(ile, tab);
printf("Srednia to: %f",srednia);
break;
case 'h':
case 'H':
ile=ilosc(tab);
srednia=sredniaHarmoniczna(ile, tab);
printf("Srednia to: %f",srednia);
break;
default:
printf("Bledny wybor");
}
return 0;
}
int ilosc(int* tablica)
{
int ileLiczb, i;
printf("Podaj ile liczb chcesz wprowadzic (max 10) : \n");
scanf("%d", &ileLiczb);
i=0;
while(i<ileLiczb)
{
printf("Podaj %d liczbe calkowita: ", i+1);
scanf("%d", &tablica[i]);
++i;
}
return 0;
}
double sredniaArytmetyczna(int iloscLiczb, int *Tab)
{
double wynik=0;
for(int i=0; i<iloscLiczb; ++i)
{
wynik+=Tab[i];
}
return wynik/iloscLiczb;
}
double sredniaGeometryczna(int iloscLiczb, int *Tab)
{
double wynik=0;
for(int i=0; i<iloscLiczb; ++i)
{
wynik=Tab[i]*Tab[++i];
}
return pow(wynik,1/iloscLiczb);
}
double sredniaHarmoniczna(int iloscLiczb, int *Tab)
{
double wynik=0;
for(int i=0; i<iloscLiczb; ++i)
{
wynik+=(1/Tab[i]);
}
return iloscLiczb/wynik;
}
ilosc
应该 return 计数,但它总是 returns 0
。变化
return 0;
至
return ileLiczb;
并且当您计算 sredniaGeometryczna
中的幂时,您正在执行整数运算。您需要将 1/iloscLiczb
更改为 1/(double)iloscLiczb
以便它执行浮点运算。或者你可以将iloscLiczb
参数的声明改为double
,函数调用时会自动转换
您需要在 sredniaHarmoniczna
中进行类似的更改。将 1/Tab[i]
更改为 1/(double)Tab[i]