#c
#c
Вопрос:
Вопрос состоял в том, чтобы добавить первые семь членов следующей серии, используя для цикла 1/1! 2/2! 3/3! …. Я думал, что, возможно, теряю десятичную точку из-за int, но я даже не получаю неправильного ответа. Я запустил код в терминале, но он просто продолжает работать без вывода. Спасибо за помощь.
#includelt;stdio.hgt; int main() { int n; float a; float v=0.0; for(n=1;nlt;=7;n ) { a=1.0; while(ngt;0) { a=a/n; n--; } v=v n*a; } printf(" sum is %f ",v); return 0; }
Комментарии:
1. «просто продолжает работать…», потому что вы изначально увеличили значение n только для того, чтобы уменьшить значение внутри цикла, в результате чего значение n многократно возвращается и возвращается, и, таким образом, цикл выполняется повторно…
2. извини, теперь я все понял, спасибо
3. Если вы ответили на свой собственный вопрос, вы можете ответить на него и принять ответ, чтобы помочь другим пользователям SO.
Ответ №1:
#include lt;stdio.hgt; int fact(int n) { int product = 1; for (int i = 1; i lt; n 1; i ) { product *= i; } return product; } int main() { double sum = 0.0; for(int i = 1; i lt; 7 1; i ) { sum = double(i) / fact(i); } printf("Sum is %fn", sum); return 0; }
Комментарии:
1. Я скопировал ваш код в visual studio, но он показывает ошибку при двойном [сумма = двойной(i) / факт(i);]. Я недавно начал c, так что я еще не знаю double.
2. double-это тип данных, в которых хранятся высокоточные данные с плавающей запятой. Он называется двойным типом данных, потому что он может содержать двойной размер данных по сравнению с типом данных с плавающей точкой.
3. Это был бы гораздо лучший ответ с некоторым объяснением того, что вы сделали, и как это решает проблему, с которой сталкивается операция.
4. Сначала я объявил переменную сумму с двойным типом данных для хранения чисел с плавающей запятой. Затем я повторяю от 1 до 7, используя цикл for, и на каждой итерации я вычисляю значение i, деленное на его факториал, где i равно 1..7, перед добавлением его в переменную суммы. Затем я распечатываю сумму. Для функции факта я буду вычислять значение факториала аргумента, умножая 1 на следующее целое число снова и снова, пока следующее целое число не станет самим аргументом. Большое вам спасибо за чтение.
Ответ №2:
Серию 1/1! 2/2! .. n terms
можно записать так 1 1/1! 1/2! 1/3! ...(n-1) terms
.
Так что это 1
sum of 1/i! where i=1 to i=n-1 terms
.
Поэтому я принял sum=1
за исходное значение.
#include lt;stdio.hgt; //this is the function for calculating n! int fact(int n) { int product = 1; for (int i = 1; i lt; n 1; i ) { product *= i; } return product; } int main() { int n=5; //we are taking sum=1 as initial value double sum = 1.0; //now we run 1/1! 1/2! 1/3! 1/4! i.e. upto (n-1) terms (here n=5 =gt; so n-1 = 4) for(int i = 1; i lt; n; i ) { sum = (1.0) / fact(i); } printf("Sum is %fn", sum); return 0; }
Комментарии:
1. Там не так много объяснений, а потом большой кусок кода. Этот ответ можно было бы улучшить.
2. чего не хватает? можете ли вы сказать, чтобы я мог отредактировать свой ответ
3. Как информация, которую вы представили в начале своего ответа, повлияла на написанный вами код? Чем он отличается от кода операции? Как это решает их проблему?
4. Я думаю, что уже объяснил это
5. с помощью этого кода выходная сумма равна 2,708333, тогда как в моем коде я получаю сумму 2,718056
Ответ №3:
Как упоминал @DeBARtha в исходном коде, я увеличивал, а затем уменьшал n, что приводило к повторному запуску цикла. Используя еще одну переменную (m) для цикла while, а затем уменьшая ее при увеличении » n » в цикле for, проблема решается.
#includelt;stdio.hgt; int main() { int n,m; float a; float v=0.0; for(n=1;nlt;=7;n ) { m=n; a=1.0; while(mgt;0) { a=a/m; m--; } v=v n*a; } printf(" sum is %f ",v); return 0; }