ArvindSai Ответов: 2

Что пошло не так с этой программой?..


#define PI (22/7)
#include<stdio.h>
void main()
{
	float x,y;
	x=PI;
	y=22/7;
    printf("\nx=%f y=%f",x,y);
}

Я ожидаю, что результат будет следующим: x=3.148, y=3.148
но дело обстоит следующим образом
х=3.000000 г=3.000000

Что я уже пробовал:

Я использовал компилятор gcc для компиляции приведенного выше кода.

ZurdoDev

Я не делал C в течение долгого, долгого времени, но я думаю, что вы можете сделать либо 22.0/7.0, либо 22f/7f. Они рассматриваются как целые числа.

Kornfeld Eliyahu Peter

Извините - я не видел вашего комментария (может быть, обновить?), но он действительно ваш...

2 Ответов

Рейтинг:
2

Kornfeld Eliyahu Peter

Проблема с вашими числами (константы 22 и 7). Компилятор интерпретирует их как целые числа и поэтому выполняет целочисленное деление (это означает, что результат тоже целое число)...
Таким образом, на самом деле 22/7 компилируется в (int)((int)22 / (int)7), что приводит к 3...
У вас есть свободные способы преодолеть его...
1. Добавить одном месте после запятой (а ) конечно, чтобы сохранить значение) - 22 =&ГТ; 22.0. Это заставит компилятор интерпретировать число как двойное...
2. Добавьте также суффикс, чтобы создать поплавок-22 => 22.0 f...
3. Хранят значения в переменные использовать их в отдел -

float f22 = 22; 
float f7 = 7; 
float x = f22 / f7;


CPallini

5.

Kornfeld Eliyahu Peter

Спасибо...

Рейтинг:
0

Patrice T

Цитата:
Что пошло не так с этой программой?..

Просто, это поведение C.
Компилятор Си смотрит на 22 и 7, оба являются целыми числами, поэтому компилятор решает сделать целочисленное деление.
Чтобы гарантировать, что деление будет с плавающей точкой, литерал тоже должен быть с плавающей точкой.
Компилятор знает, что литерал является плавающей точкой, когда он сталкивается с'.'
22 и 7-целые числа, 22.0 и 7.0-одно и то же значение, но с плавающей запятой.
22/7 => 3
22.0/7.0=&ГТ; 3.14....


CPallini

5.