Функция некорректно работает - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Функция компилируется, но постоянно один и тот же ответ. y=0000... Где допущена ошибка?
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <math.h>
float sum1 (int k, int w);
float sum2 (int k, int w);
int main()
{
int n,m,a;
float y;
setlocale(LC_ALL,"RUS");
printf("\n Введите n,m");
scanf("%d%d",&n,&m);
printf("\n Введите a");
scanf("%d",&a);
int sum1(int k, int w)
{
int j, rez1;
rez1=0;
for(j=1;j<=k;j++)
rez1=(pow(j,3)+3*pow(j,2)+a)+rez1;
return rez1;
}
int sum2(int k, int w)
{
int j,rez2,a;
rez2=0;
for(j=2;j<=k;j++)
rez2=(pow(j,2)+a)+rez2;
return rez2;
}
y=(sum1(m,1)+a)/(5+sum2(m+1,a));
printf("\n y = %f",y);
getch();
return 0;
}

Решение задачи: «Функция некорректно работает»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>          //НЕТ НУЖДЫ
#include <locale.h>
#include <math.h>
float sum1 (int k, int w);
float sum2 (int k, int w);
int main(void)
{
    int n,m,a;
    float y;
    setlocale(LC_ALL,"RUS");
    printf("\n Введите n,m");
    scanf("%d%d",&n,&m);
    printf("\n Введите a");
    scanf("%d",&a);
 
        y=(sum1(m,1)+a)/(5+sum2(m+1,a));
        printf("\n y = %f",y);
        getch();
    return 0;
}
 
int sum1(int k, int w)          //РАЗЛИЧАЕТСЯ ТИП ВОЗВРАЩАЕМОГО ЗНАЧЕНИЯ В ОБЪЯВЛЕНИЕ И ПРОТОТИПЕ ФУНКЦИИ
    {                           //АРГУМЕНТ 'w' НЕ ИСПОЛЬЗУЕТСЯ. ЕГО НУЖНО УДАЛИТЬ
        int j, rez1;
        rez1=0;
        for(j=1;j<=k;j++)
        rez1=(pow(j,3)+3*pow(j,2)+a)+rez1;  //ОБЪЯВЛЕНИЕ ПЕРЕМЕННОЙ 'a' ОТСУТСТВУЕТ, ЛИБО ИЗ main() 'a' СДЕЛАТЬ ГЛОБАЛЬНОЙ.
        return rez1;
    }
 
int sum2(int k, int w)          //РАЗЛИЧАЕТСЯ ТИП ВОЗВРАЩАЕМОГО ЗНАЧЕНИЯ В ОБЪЯВЛЕНИЕ И ПРОТОТИПЕ ФУНКЦИИ
    {                           //АРГУМЕНТ 'w' НЕ ИСПОЛЬЗУЕТСЯ. ЕГО НУЖНО УДАЛИТЬ
        int j,rez2,a;           //ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННОЙ 'a' ОТСУТСТВУЕТ. РЕЗУЛЬТАТ НЕПРЕДСКАЗУЕМ
        rez2=0;
        for(j=2;j<=k;j++)
        rez2=(pow(j,2)+a)+rez2; //ПЕРЕМЕННАЯ 'a' ЗДЕСЬ СОДЕРЖИТ "МУСОР"
        return rez2;
    }

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы
  2. Определяем функцию sum1 с двумя аргументами типа int и возвращаемым значением типа int
  3. Внутри функции sum1 объявляем переменную rez1 и инициализируем ее значением 0
  4. Используем цикл for для прохода по значениям от 1 до k и на каждой итерации увеличиваем значение rez1 за счет выражения pow(j,3)+3*pow(j,2)+a
  5. Возвращаем значение rez1 из функции sum1
  6. Определяем функцию sum2 с двумя аргументами типа int и возвращаемым значением типа int
  7. Внутри функции sum2 объявляем переменную rez2 и инициализируем ее значением 0
  8. Используем цикл for для прохода по значениям от 2 до k и на каждой итерации увеличиваем значение rez2 за счет выражения pow(j,2)+a
  9. Возвращаем значение rez2 из функции sum2
  10. В функции main объявляем переменные n, m, a и y типа int и float соответственно
  11. Устанавливаем локальную настройку для вывода русских символов с помощью setlocale(LC_ALL,RUS)
  12. Выводим приглашение для ввода значений n и m с помощью printf(\n Введите n,m)
  13. Считываем значения n и m с помощью scanf(%d%d,&n,&m)
  14. Выводим приглашение для ввода значения a с помощью printf(\n Введите a)
  15. Считываем значение a с помощью scanf(%d,&a)
  16. Вычисляем значение y по формуле (sum1(m,1)+a)/(5+sum2(m+1,a))
  17. Выводим значение y с помощью printf(\n y = %f,y)
  18. Ждем нажатия клавиши с помощью getch()
  19. Возвращаем 0 из функции main, что означает успешный конец работы программы
  20. Код различается в объявлении и прототипе функций sum1 и sum2 в том, что в объявлении возвращаемый тип указан как int, а в прототипе как float. Это может привести к ошибкам при компиляции или выполнении программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.4 из 5
Похожие ответы