Написать калькулятор (+;-) - 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;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с функциями ввода-вывода, строками и числами с плавающей точкой.
- Определяем функцию
calc, которая принимает строку с математическим выражением и возвращает результат вычисления. Внутри функции инициализируем переменныеn,sumиpсо значением первого числа в выражении. - Если строка пустая, возвращаем 0.0.
- В цикле while считываем символы из строки до тех пор, пока не встретим пробел или число.
- Если встретили пробел, пропускаем его и переходим к следующему числу.
- Если достигли конца строки, выходим из цикла.
- Если встретили операцию сложения или вычитания, выполняем соответствующее действие с результатом.
- Возвращаем результат вычисления в функции
main. - В функции
mainсчитываем строку с выражением с помощьюfgets. - Вызываем функцию
calcс переданной строкой и выводим результат на экран. - Программа завершается, если возвращаемое значение функции
calcравно 0.0.