Строка содержит правильное арифметическое выражение. Подсчитать результат, выполняя операции в порядке их следования - C (СИ)
Формулировка задачи:
Доброго времени суток всем.
прошу помочь с задачей:
Строка – это правильное арифметическое выражение, содержащее только натуральные числа и знаки арифметических операций между ними (+, -, *, /). Подсчитать результат, выполняя арифметические операции в порядке их следования.
Входные данные:
5*3-9/3
Выходные данные:
2
Решение задачи: «Строка содержит правильное арифметическое выражение. Подсчитать результат, выполняя операции в порядке их следования»
textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
unsigned digits(int number) {
return number ? (1 + digits(number / 10)) : 0;
}
float expr(const char str[]) {
float res;
int num;
char cmd;
if (sscanf(str, "%d", &num) != 1) {
return 0;
}
str += digits(num);
res = num;
while (sscanf(str, "%c%d", &cmd, &num) == 2) {
switch (cmd) {
case '+':
res += num;
break;
case '-':
res -= num;
break;
case '*':
res *= num;
break;
case '/':
res /= num;
break;
}
str += digits(num) + 1;
}
return res;
}
int main() {
printf("%.2f", expr("5*3-9/3"));
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем функцию, которая подсчитывает количество цифр в числе
- Определяем функцию, которая выполняет арифметическое выражение
- Проверяем корректность ввода и возвращаем 0 при ошибке
- Пропускаем число, которое уже обработали и переходим к следующему символу в строке
- Пока в строке есть допустимые для обработки символы, то выполняем операции в соответствии с этими символами
- Возвращаем результат вычисления
- Выводим результат на экран