Ошибка: слишком мало аргументов для функции 'дважды' - PullRequest
0 голосов
/ 24 сентября 2019

Я новичок в C, и у меня возникают некоторые проблемы в этом коде, где я получаю эти ошибки.

sum2.c: In function 'main':
sum2.c:22:6: warning: 'z' is used uninitialized in this function [-Wuninitialized]
  int z = twice(x, z);

В моем коде мне нужно было дважды добавить функцию, что, учитываячисло, вычисляет его дважды, используя только элементарные операции и функцию суммы.И я не знаю, правильно ли я изложил эту функцию.

//USER
//3532

#include <stdio.h>

int sum(int x, int y){
    return y == 0 ? x : sum(x+1, y-1);
}

int twice(int x, int z){
    z = x * x;
    return 0;
}

int main(void){
    int x;
    int y;
    scanf("%d%d", &x, &y);
    int z = twice(x, z);
    printf("%d\n", z);
    return 0;
} 

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

Согласно вашему описанию функция twice должна принимать только один аргумент.Так что это определение функции

int twice(int x, int z)
{
    z = x * x;
    return 0;
}

не имеет смысла.Более того, функция всегда возвращает 0.

Также учтите, что тип int является целочисленным типом со знаком.Пользователь может ввести отрицательное число.В этом случае ваша функция sum выдаст неверный результат.

Сумма двух целых чисел типа int может быть слишком большой, чтобы поместиться в объект типа int.Это может быть, например, переполнение.

Функции могут быть определены следующим образом, как показано в демонстрационной программе.

#include <stdio.h>

long long int sum( int x, int y )
{
    return y == 0 ? ( long long int )x
                  : sum( y < 0 ? x - 1 : x + 1, y < 0 ? y + 1 : y - 1 );
}

long long int twice( int x)
{
    return sum( x, x );
}

int main(void) 
{
    int x;

    printf( "Enter a number: " );
    scanf("%d", &x);

    long long int result  = twice( x );

    printf("The sum is %lld\n", result );

    return 0;
}

Вывод может выглядеть как

Enter a number: -5
The sum is -10

Или

Enter a number: 5
The sum is 10
0 голосов
/ 24 сентября 2019

В инструкциях говорится, что twice - это "заданное число", но вы определили его как получение двух чисел.Для этого нужен только один параметр.

И вы должны использовать вашу функцию sum().Нет необходимости умножать x*x (это квадрат числа, а не двойное число), и нет смысла присваивать переменную в операторе return.

Вам нужно только прочитать одночисло в качестве ввода для проверки этого.

#include <stdio.h>

int sum(int x, int y)
{
    return y == 0 ? x : sum(x+1, y-1);
}

int twice(int x)
{
    return sum(x, x);
}

int main(void)
{
    int x;
    int w;
    scanf("%d", &x);
    int w = twice(x);
    printf("%d\n", w);
    return 0;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...