Не могу понять почему не работает.
int foon2(int x,int n)
{
int s=0,i=1;
while(i!=n)
{
s=s+(n-i+1)/(x+i);i++;
}
return s;
}
int main() {
int x,n; scanf("%d%n",&x,&n);
printf("%d",foon2(x,n));
system("PAUSE");
return 0;
}
Выдает 0 ответом
Другие языки программирования и технологии
Посмотрите функцию на Си
Во-первых, дело в том, что деление в С работает не так, как привычно в математике. В нем принято, что деление целых типов чисел всегда дает целое, отбрасывая дробную часть,
(n-i+1)/(x+i), если числитель меньше знаменателя, всегда даст точный нуль, а не привычное частное. Достаточно сделать так: (n-i+1.)/(x+i)
Потом, спецификатор формата %n в scanf, похоже, не то что надо.
С и С++ вообще сложные языки, во многими выкрутасами. Они разрабатывались профессионалами для себя и шли от ассемблерной записи к привычной математической, так что уши ассемблера в них то и дело точат наружу. При разработке С легкость понимания программы считалась делом десятым, скорее, наоборот - программа не должна быть понятна "непосвященным". А вот Pascal, например, разрабатывался как учебный язык, и он намного проще, потому что шел в обратном направлении.
P.S. Вернемся к нашим баранам. Сумма тоже будет нецелой, так что тип функции foon2 тоже надо выбрать не int, а float или double. Иначе присваивание нецелого целому, в отличие от Pascal, прекрасно пройдет, а что весь хвост числа потеряется, так это не С-шное дело - программист сам виноват. Да, и не забыть соответственно поменять спецификатор формата при выводе.
(n-i+1)/(x+i), если числитель меньше знаменателя, всегда даст точный нуль, а не привычное частное. Достаточно сделать так: (n-i+1.)/(x+i)
Потом, спецификатор формата %n в scanf, похоже, не то что надо.
С и С++ вообще сложные языки, во многими выкрутасами. Они разрабатывались профессионалами для себя и шли от ассемблерной записи к привычной математической, так что уши ассемблера в них то и дело точат наружу. При разработке С легкость понимания программы считалась делом десятым, скорее, наоборот - программа не должна быть понятна "непосвященным". А вот Pascal, например, разрабатывался как учебный язык, и он намного проще, потому что шел в обратном направлении.
P.S. Вернемся к нашим баранам. Сумма тоже будет нецелой, так что тип функции foon2 тоже надо выбрать не int, а float или double. Иначе присваивание нецелого целому, в отличие от Pascal, прекрасно пройдет, а что весь хвост числа потеряется, так это не С-шное дело - программист сам виноват. Да, и не забыть соответственно поменять спецификатор формата при выводе.
"поменял спецификатор на %f, сделал double значения. "
Он для float, а у тебя double. Я ж говорю, С был рассчитан на асов, и чтобы остальные и не лезли :) А у нас его в школах зачем-то решили преподавать.. .
Ну вот, я у себя попробовал:
#include<stdio.h>
float foon2(int x,int n)
{float s=0; int i=1;
while(i!=n){s=s+(n-i+1.)/(x+i); i++; }
return s;
}
int main(){
int x,n; scanf("%d%d",&x,&n);
printf("%f",foon2(x,n)); getchar(); getchar();
return 0;
}
Детально не проверял, но что-то считает :)
Он для float, а у тебя double. Я ж говорю, С был рассчитан на асов, и чтобы остальные и не лезли :) А у нас его в школах зачем-то решили преподавать.. .
Ну вот, я у себя попробовал:
#include<stdio.h>
float foon2(int x,int n)
{float s=0; int i=1;
while(i!=n){s=s+(n-i+1.)/(x+i); i++; }
return s;
}
int main(){
int x,n; scanf("%d%d",&x,&n);
printf("%f",foon2(x,n)); getchar(); getchar();
return 0;
}
Детально не проверял, но что-то считает :)
ошибка похоже в том что s имеет тип int!!!
у тебя результат ряда будет всегда дробным а s имеет тип int. меняй на дабл.
ты проверял чтобы числа правильно считывались с клавы? ? попробуй в функци подставить просто числа
у тебя результат ряда будет всегда дробным а s имеет тип int. меняй на дабл.
ты проверял чтобы числа правильно считывались с клавы? ? попробуй в функци подставить просто числа
Похожие вопросы
- Помогите правильно построить функцию в Си
- Функции в Си
- Помогите оформить функцию в Си
- Вызов функции в Си
- Если функция в СИ не возвращает никакого значения (т.е. void) то зачем она вообще нужна?
- Пожалуйста, помогите написать программу через функции в Си++
- Реализация функций СИ
- Программирование на языке СИ с использованием подпрограммы-функции
- Функции в языке СИ
- Си. функции