как вызывать функции - PullRequest
       10

как вызывать функции

0 голосов
/ 10 июня 2019

Я пытаюсь вызвать функцию, которую создал. Это займет двойное число, а затем округлить их до двух десятичных знаков.

Я попытался поместить параметр "x" в аргумент "roundnum", но это привело бы к ошибке.

#include <stdio.h>
#include <math.h>

double roundnum(double x);

int
main(void)
{

    double n;
    int roundedn;
    printf("Enter the number:\n");
    scanf("%lf", &n);

    printf("Rounded %.2f\n", roundnum(n));


    return 0;
}

double
roundnum(double x)
{
    double n;
    int number = (int)(n + .5);
    return number;
}

Если я сканирую в 3.145, ожидаемый результат должен быть 3.15000.

Ответы [ 3 ]

0 голосов
/ 10 июня 2019

Я считаю, что в вашей функции roundnum() вы никогда не присваивали значение входящего параметра n переменной x, которая используется в roundnum().Таким образом, x никогда не назначается и по умолчанию равно нулю.

Логически, как только n * назначено значение x, функция работает:

double
roundnum(double x)
{
    double n;
    n=x;
    int number = (int)(n + .5);
    return number;
}

И для упрощения функции для повышения эффективности:

double
roundnum(double x)
{
    return((int)(x + .5));
}
0 голосов
/ 10 июня 2019

Для начала, есть несколько ошибок в этой функции:

double roundnum(double x);
  • Эта функция должна возвращать double, а вместо
  • Понятно, что вы не поняли, как используются параметры. Когда вы вызываете roundnum(n), вы передаете локальную копию n, указанную в теле main, переменной x, которая является параметром roundnum(). double n из main() не имеет ничего общего с double n из roundnum(). В основном в roundnum() вы используете неинициализированную переменную, которая является логической ошибкой. Число, которое вы хотите округлить, в основном x.

Это функция с исправленными выше ошибками:

double roundnum(double x)
{
    double number = (x + .5);
    return number;
}

Теперь давайте поговорим о том, почему эта функция округления неверна с точки зрения логики. Вы хотите 2-десятичный раунд, но в действительности вы просто увеличиваете любое число с 0.5. Так что, если я введу в качестве ввода число 3.150? Он уже округлен, но функция вернет 3.65, что является ошибкой. Я не скажу вам, как решить эту проблему, считайте это домашней работой;)

0 голосов
/ 10 июня 2019

Трудно помочь, если вы не дадите нам сообщение об ошибке, которое получаете. Без флагов этот код компилируется просто отлично.

Я заметил пару ошибок:

  1. Вы не используете аргумент, переданный roundnum(). Могу поспорить, что вы хотели написать:
double
roundnum(double x)
{
    return (x + .5);
}
  1. Как исправлено в моем коде выше, поскольку я просто избавился от него, double n не инициализирован.

  2. int roundedn не используется, поэтому бесполезен.

...