Найти сумму чисел, записанных в виде строки - 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;
}

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

  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
Похожие ответы