я написал код для суммы рядов, но я не получаю никаких выходных данных

#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; }