Итак, в моей викторине C была задача написать программу, которая предлагает пользователю ввести три целочисленных значения, затем передает их адреса в виде указателей на функцию, которая применяет изменения к этим значениям в соответствии с некоторыми условиями, затем отправьте среднее значение этих ОБНОВЛЕННЫХ значений в виде числа с плавающей запятой.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
float Update(int *x, int *y, int *z);
int main()
{
float avg;
int x, y, z;
printf("Please enter three intger values for x, y, and z respectively:");
scanf("%d %d %d", &x, &y, &z);
printf("\n\nthe values that you entered are:\n\tx = %d\n\ty = %d\n\tz = %d", x, y, z);
avg = Update(&x, &y, &z);
printf("\nthe UPDATED values are:\n\tx = %d\n\ty = %d\n\tz = %d", x, y, z);
printf("\nthe average of the updated values are: %.1f\n\n", avg);
system("pause");
return 0;
}
float Update(int *x, int *y, int*z)
{
float AVERAGE;
if (*x % 2 == 0) // for x
*x *= 3;
else
*x -= 8;
if (*y % 2 == 0) // for y
*y *= 3;
else
*y -= 8;
if (*z % 2 == 0) // for z
*z *= 3;
else
*z -= 8;
AVERAGE = (*x + *y + *z) / 3;
return AVERAGE;
}
Ввод 5, 10, 7 должен дать мне среднее значение 8,0 вместо 8,7.
Я знаю, что (хотя AVERAGE и avg все с плавающей запятой) Типизация решает это, но почему?