Написать калькулятор (+;-) - C (СИ)

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

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

Реализовать программу-калькулятор с возможностью выполнения арифметических действий (+, -), унарный и бинарный вариант. У пользователя запрашивается вы-ражение, например, "-123,5 + 4 - 456+56", программа должна решить выражение. Для разбора входной строки использовать функцию strok.

Решение задачи: «Написать калькулятор (+;-)»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <locale.h>
 
double calc(const char* s){
    char*  p, c;
    double n, sum = strtod(s, &p);
    if(s == p)
        return 0.0;
 
    for(s = p; *s; s = p){
        while(*s && isspace(*s))
            ++s;
        if(! *s)
            break;
 
        c = *s++;
        n = strtod(s, &p);
        if(s == p)
            break;
 
        switch(c){
        case '+':
            sum += n;
            break;
        case '-':
            sum -= n;
            break;
        default:
            return 0.0;
        }
    }
    return sum;
}
 
int main(void){
    char s[128];
    setlocale(LC_ALL, "Russia");
 
    fgets(s, sizeof(s), stdin);
    printf("answer: %lg\n", calc(s));
    return 0;
}

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

  1. Включаем необходимые заголовочные файлы для работы с функциями ввода-вывода, строками и числами с плавающей точкой.
  2. Определяем функцию calc, которая принимает строку с математическим выражением и возвращает результат вычисления. Внутри функции инициализируем переменные n, sum и p со значением первого числа в выражении.
  3. Если строка пустая, возвращаем 0.0.
  4. В цикле while считываем символы из строки до тех пор, пока не встретим пробел или число.
  5. Если встретили пробел, пропускаем его и переходим к следующему числу.
  6. Если достигли конца строки, выходим из цикла.
  7. Если встретили операцию сложения или вычитания, выполняем соответствующее действие с результатом.
  8. Возвращаем результат вычисления в функции main.
  9. В функции main считываем строку с выражением с помощью fgets.
  10. Вызываем функцию calc с переданной строкой и выводим результат на экран.
  11. Программа завершается, если возвращаемое значение функции calc равно 0.0.

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

11   голосов , оценка 3.727 из 5
Похожие ответы