Найти сумму чисел, записанных в виде строки - C (СИ)
Формулировка задачи:
Помогите пожалуйста, в строке записаны вещественные числа, которые разделены пробелами. Найти сумму этих чисел.
В общем есть часть программы, но ф-ия atof считывает всего одно вещ. число, как зациклить эту ф-ию чтобы с каждого прохода она считывала новое значение и прибавляло к предыдущему?
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- double atof1 (const char s[])
- {
- double val, power;
- int i, sign;
- for (i = 0; s[i]<=' '; i++);
- sign = (s[i] == '-') ? -1 : 1;
- if (s[i] == '+' || s[i] == '-')
- i++;
- for (val = 0.0; (s[i]>='0')&&(s[i]<='9'); i++)
- val = 10.0 * val + (s[i] - '0');
- if (s[i] =='.')
- i++;
- for (power = 1.0; (s[i]>='0')&&(s[i]<='9'); i++) {
- val = 10.0 * val + (s[i] - '0');
- power *= 10.0;
- }
- return sign * val / power;
- }
- int main()
- {
- char s1[50];
- double x;
- gets(s1);
- x=atof1(s1);
- printf ("%f", x);
- getchar ();
- return 0;
- }
Решение задачи: «Найти сумму чисел, записанных в виде строки»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- double atof1 (char **s)
- {
- double val, power;
- int sign;
- for (; *(*s)<=' '; (*s)++);
- if (*(*s) == 0)
- return 0;
- sign = (*(*s) == '-') ? -1 : 1;
- if (*(*s) == '+' || *(*s) == '-')
- (*s)++;
- for (val = 0.0; (*(*s)>='0')&&(*(*s)<='9'); (*s)++)
- val = 10.0 * val + (*(*s) - '0');
- if (*(*s) =='.')
- (*s)++;
- for (power = 1.0; (*(*s)>='0')&&(*(*s)<='9'); (*s)++) {
- val = 10.0 * val + (*(*s) - '0');
- power *= 10.0;
- }
- return sign * val / power;
- }
- int main()
- {
- char s1[50] = "123.34 45.6";
- char *s2 = s1;
- double x=0;
- while(*s2 != 0)
- x += atof1(&s2);
- printf ("%f", x);
- getchar ();
- return 0;
- }
Объяснение кода листинга программы
- В функции atof1() происходит преобразование строки в число.
- В функции main() определяется входная строка s1, содержащая
123.34 45.6
, и создается указатель s2 на первый символ этой строки. - Переменная x инициализируется значением 0.
- В цикле while происходит чтение строки до конца с помощью указателя s2 и добавление каждой прочитанной строки к x с помощью функции atof1().
- После окончания цикла выводится значение x с помощью функции printf().
- В конце программы вызывается функция getchar(), чтобы программа не закрылась сразу после вывода, и возвращается 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д