Не могу разобраться с преобразованием из целого в число с плавающей - C (СИ)
Формулировка задачи:
Вот есть код,который должен рассчитать каждое значение массива в процентах от их суммы.
Проблема описана ниже в коде.
К стати,если аргумент функции типа double,а передаваемый ей типа int будет авт.вызвано преобразование типов?
#include <cstdlib>
#include <iostream>
using namespace std;
double* FindInProc(int x,int max);
int* FindMax(int *Arr,int *Count);
int main(int argc, char *argv[])
{
int i, n;
printf("Enter n: ");
scanf("%d",&n);
int a[n];
for (i=0;i<n;i++)
{
printf("Enter a[%d]: ",i);
scanf("%d",&(a[i]));
}
int max = *FindMax(a,&n);
double proc;
proc = *FindInProc(1,3);//10 на 30 или на 300 работает,а 1 на 3,нет..в чем проблема?
printf("\n Print %0.2f \n",proc);
for(int j=0;j<n;j++)
{
// proc = *FindInProc(a[j],max);
// printf("# of arr %d \t WithValue %d \t InProc= %0.3f \n",j,a[j],proc);
}
system("PAUSE");
return EXIT_SUCCESS;
}
int* FindMax(int *Arr,int *Count)
{
int temp = Arr[0];
for(int i=0;i<*Count;i++)
{
if(Arr[i] > temp)
temp = Arr[i];
printf("a[%d]: %d\n",i,Arr[i]);//ГІГіГІ ðóãГ*ГҐГІГ±Гї
}
printf("Temp= :%d\n ",temp);
return &temp;
}
double* FindInProc(int x,int max)
{
double i = (x/max)*100.0;
return &i;
}
Решил вопрос явным преобразованием типов.
double i = ((((double)x)/((double)max)))*100.0;
Решение задачи: «Не могу разобраться с преобразованием из целого в число с плавающей»
textual
Листинг программы
double* FindInProc(int x,int max)
{
double i = (x/max)*100.0;
return &i;
}
Объяснение кода листинга программы
В данном коде:
- Входит значение переменной
xтипаint(целое число). - Входит значение переменной
maxтипаint(целое число). - Вычисляется значение переменной
iтипаdouble(число с плавающей точкой) как результат деленияxнаmax, умноженный на 100.0. - Возвращается указатель на переменную
i. Таким образом, функцияFindInProcпринимает два целых числа, вычисляет среднее значение между ними и возвращает указатель на число с плавающей точкой.