Какой формат формата - PullRequest
       0

Какой формат формата

0 голосов
/ 17 августа 2011
#include <stdio.h>
#include <stdlib.h>
#define calc(a,b) (a*b)/(a-b)
void calculate(){
    int a = 20, b = 10;
    printf("%f\n", calc(a+4,b-2));//output 0.00000
}

что нужно сделать, чтобы напечатать фактический ответ, 4.83.

Ответы [ 3 ]

2 голосов
/ 17 августа 2011
#define calc(a,b) ((a)*(b))/((a)-(b))

Можете ли вы найти дополнительные скобки?

-> calc(a+4,b-2) разрешается до ((a+4)*(b-2))/((a+4)-(b-2)).Правильно.

Ваше решение без лишних скобок:

-> calc(a+4,b-2) разрешается до (a+4*b-2)/(a+4-b-2).Который очень отличается!

1 голос
/ 17 августа 2011

Вы должны сначала исправить выражение. calc(a+4,b-2) имеет тип int и усекает целочисленное деление.

Например, вы можете изменить объявления на:

double a = 20.0, b = 10.0;

, а затем измените "%f\n" на "%.2f\n", чтобы получить два десятичных знака.

1 голос
/ 17 августа 2011

Проблема здесь в типах данных, которые являются целочисленными, а не в спецификаторах формата.Целочисленное деление всегда усекается до целых чисел.Вы должны рассмотреть возможность изменения ваших переменных на float вместо int.

Попробуйте это:

#include <stdio.h>
#include <stdlib.h>
#define calc(a,b) (a*b)/(a-b)
void calculate(){
    float a = 20.0f, b = 10.0f;
    printf("%f\n", calc(a+4,b-2));//output 0.00000
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...