Найти сумму чисел, записанных в виде строки - C (СИ)

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

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

Помогите пожалуйста, в строке записаны вещественные числа, которые разделены пробелами. Найти сумму этих чисел. В общем есть часть программы, но ф-ия atof считывает всего одно вещ. число, как зациклить эту ф-ию чтобы с каждого прохода она считывала новое значение и прибавляло к предыдущему?
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. double atof1 (const char s[])
  4. {
  5. double val, power;
  6. int i, sign;
  7. for (i = 0; s[i]<=' '; i++);
  8. sign = (s[i] == '-') ? -1 : 1;
  9. if (s[i] == '+' || s[i] == '-')
  10. i++;
  11. for (val = 0.0; (s[i]>='0')&&(s[i]<='9'); i++)
  12. val = 10.0 * val + (s[i] - '0');
  13. if (s[i] =='.')
  14. i++;
  15. for (power = 1.0; (s[i]>='0')&&(s[i]<='9'); i++) {
  16. val = 10.0 * val + (s[i] - '0');
  17. power *= 10.0;
  18. }
  19. return sign * val / power;
  20. }
  21. int main()
  22. {
  23. char s1[50];
  24. double x;
  25. gets(s1);
  26. x=atof1(s1);
  27. printf ("%f", x);
  28. getchar ();
  29. return 0;
  30. }

Решение задачи: «Найти сумму чисел, записанных в виде строки»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. double atof1 (char **s)
  5. {
  6.     double val, power;
  7.     int sign;
  8.    
  9.     for (; *(*s)<=' '; (*s)++);
  10.     if (*(*s) == 0)
  11.         return 0;
  12.     sign = (*(*s) == '-') ? -1 : 1;
  13.     if (*(*s) == '+' || *(*s) == '-')
  14.         (*s)++;
  15.     for (val = 0.0; (*(*s)>='0')&&(*(*s)<='9'); (*s)++)
  16.          val = 10.0 * val + (*(*s) - '0');
  17.     if (*(*s) =='.')
  18.         (*s)++;
  19.     for (power = 1.0; (*(*s)>='0')&&(*(*s)<='9'); (*s)++) {
  20.         val = 10.0 * val + (*(*s) - '0');
  21.         power *= 10.0;
  22.     }
  23.     return sign * val / power;
  24. }
  25.  
  26. int main()
  27. {
  28.  
  29.     char s1[50] = "123.34 45.6";
  30.     char *s2 = s1;
  31.     double x=0;
  32.    
  33.     while(*s2 != 0)
  34.         x += atof1(&s2);
  35.     printf ("%f", x);
  36.     getchar ();
  37.     return 0;
  38. }

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

  1. В функции atof1() происходит преобразование строки в число.
  2. В функции main() определяется входная строка s1, содержащая 123.34 45.6, и создается указатель s2 на первый символ этой строки.
  3. Переменная x инициализируется значением 0.
  4. В цикле while происходит чтение строки до конца с помощью указателя s2 и добавление каждой прочитанной строки к x с помощью функции atof1().
  5. После окончания цикла выводится значение x с помощью функции printf().
  6. В конце программы вызывается функция getchar(), чтобы программа не закрылась сразу после вывода, и возвращается 0.

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


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

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

14   голосов , оценка 4.143 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы