Вывести значение выражения (простейший калькулятор) - C (СИ)

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

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

Согласно строке, изображающая арифметическое выражение вида «<цифра> ± <цифра> ± ... ± <цифра>», где на месте знака операции «±» находится символ «+» или «-» (например, «4 + 7 -2-8 »), вывести значение выражения (целое число).

Решение задачи: «Вывести значение выражения (простейший калькулятор)»

textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
 
 
int calc(const char* s){
    int st[2] = {0};
    char    m = 0;
    int        i = 0;
 
    do {
        if(isdigit(*s)){
            if(i < 2)
                st[i++] = (int)(*s - '0');
        } else if(*s == '+')
            m = '+';
        else if(*s == '-')
            m = '-';
 
        if((i > 1) && (m != 0)){
            switch(m){
            case '+':
                st[0] += st[1];
                break;
            case '-':
                st[0] -= st[1];
                break;              
            }
            --i;
            m = 0;
        }
 
    } while(*s++);
    return st[0];
}
 
int main(void){
    char s[] = "5 - 2 + 3 - 9 + 1 + 9";
    printf("result: %d\n", calc(s));
    return 0;
}

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

  1. Включаем необходимые заголовочные файлы для работы с функциями ввода/вывода и строками.
  2. Определяем функцию calc, которая принимает на вход строку с математическим выражением и выполняет его вычисление.
  3. Внутри функции calc инициализируем массив st двумя нулями, переменной m присваиваем значение 0, а переменной i значение 0.
  4. Далее в цикле do-while считываем каждый символ из входной строки.
  5. Если символ является цифрой, то преобразуем его в целое число и добавляем в соответствующий элемент массива st.
  6. Если символ является оператором сложения +, то сохраняем его в переменной m.
  7. Если символ является оператором вычитания -, то сохраняем его в переменной m.
  8. Если в массиве st больше одного элемента и имеется оператор (m != 0), то выполняем соответствующую операцию сложения или вычитания в соответствии с оператором m.
  9. Уменьшаем значение i на единицу, чтобы пропустить текущий элемент массива st при следующей итерации цикла.
  10. Устанавливаем значение m равным 0, чтобы сигнализировать о том, что следующий элемент массива st не является оператором.
  11. В цикле do-while продолжаем обработку символов до тех пор, пока не достигнем конца строки.
  12. Возвращаем результат вычисления математического выражения, который хранится в первом элементе массива st.
  13. В функции main создаем строку s, содержащую математическое выражение.
  14. Вызываем функцию calc с аргументом s и выводим результат на экран.
  15. Завершаем программу с возвращаемым значением 0, что означает успешное выполнение.

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


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

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

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