Создание простого калькулятора на C

CCBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом проекте мы узнаем, как создать простой калькулятор на языке программирования C. Калькулятор будет способен выполнять базовые арифметические операции, такие как сложение, вычитание, умножение и деление. Мы также реализуем проверки, чтобы убедиться, что ввод пользователя действителен, и обработаем ситуации, когда ввод приводит к неопределенному поведению.

👀 Предварительный просмотр

$./Calculator
32+11
=43.000000

$./Calculator
41-34.9
=6.100000

$./Calculator
10/2
=5.000000

$./Calculator
2*4
=8.000000

$./Calculator
10%3
=1

🎯 Задачи

В этом проекте вы узнаете:

  • Как получать ввод пользователя в C с использованием scanf()
  • Как проверить формат вводимого арифметического выражения
  • Как выполнять арифметические вычисления на основе ввода пользователя
  • Как обрабатывать ошибки деления на ноль
  • Как реализовать оператор остатка только для целых операндов

🏆 Достижения

После завершения этого проекта вы сможете:

  • Разобраться, как получать ввод пользователя в C
  • Реализовать различные арифметические операции в C
  • Выполнять проверку на ошибки и обрабатывать недействительный ввод
  • Компилировать и запускать программы на C с использованием компилятора gcc

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c(("C")) -.-> c/BasicsGroup(["Basics"]) c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c/BasicsGroup -.-> c/variables("Variables") c/BasicsGroup -.-> c/operators("Operators") c/ControlFlowGroup -.-> c/if_else("If...Else") c/ControlFlowGroup -.-> c/switch("Switch") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/variables -.-> lab-298833{{"Создание простого калькулятора на C"}} c/operators -.-> lab-298833{{"Создание простого калькулятора на C"}} c/if_else -.-> lab-298833{{"Создание простого калькулятора на C"}} c/switch -.-> lab-298833{{"Создание простого калькулятора на C"}} c/user_input -.-> lab-298833{{"Создание простого калькулятора на C"}} c/output -.-> lab-298833{{"Создание простого калькулятора на C"}} end

Получить ввод пользователя

Получение ввода пользователя очень простой процесс. Вы можете использовать форматированные функции ввода-вывода языка C printf() и scanf().

Вот код программы, отвечающий за чтение ввода пользователя:

#include<stdio.h>
int main()
{
   double number1=0.0;     // Определить первый операнд
   double number2=0.0;     // Определить второй операнд
   char operation=0;       // operation должен быть '+', '-', '*', '/' или '%'

   printf("\nEnter the calculation\n");
   scanf("%lf%c%lf",&number1,&operation,&number2);

   return 0;
}
✨ Проверить решение и практиковаться

Проверка формата и выполнение вычислений

Следующая функциональность, которую необходимо реализовать в нашей программе, - это проверка формата вводимого арифметического выражения.

Самая базовая проверка - это определение, является ли операция, указанная в вводимом выражении, допустимой. Допустимыми операциями являются +, -, *, /, %, поэтому нам нужно проверить, принадлежит ли вводимая операция к этому набору.

此外, важно отметить, что когда операция / или %, второй операнд не может быть 0. Если это 0, операция недопустима.

Логика для этих проверок может быть реализована с использованием if-операторов. Альтернативой может служить оператор switch, который представляет собой более удобный и компактный способ обработки этой ситуации. Он легче понять и менее избыточный по сравнению с рядом if-операторов.

switch(operation)
{
    case '+':
        printf("=%lf\n",number1+number2);
        break;

    case '-':
        printf("=%lf\n",number1-number2);
        break;

    case '*':
        printf("=%lf\n",number1*number2);
        break;

    case '/':
        if(number2==0)
            printf("\n\n\aDivision by zero error!\n");
        else
            printf("=%lf\n",number1/number2);
        break;

    case '%':
        if((long)number2==0)
            printf("\n\n\aDivision by zero error!\n");
        else
            printf("=%ld\n",(long)number1%(long)number2);
        break;

    default:
        printf("\n\n\aInvalid operation!\n");
        break;
}

Оператор остатка % не имеет смысла для типов float или double, так как они могут представлять точные результаты. Оператор % имеет смысл только при применении к целочисленным типам. Поэтому перед применением этого оператора операнды нужно преобразовать в целые числа. Когда оператор %, второй операнд преобразуется в целое число. Поэтому недостаточно только проверить, равен ли второй операнд 0, но и то, равно ли значение number2 0 при преобразовании в long. Например, 0.5 не равно 0, но при преобразовании в целое число становится 0.

✨ Проверить решение и практиковаться

Компиляция и запуск файлов

После написания файла программы вы можете скомпилировать исходный файл, чтобы получить исполняемый файл. Команда для компиляции выглядит так:

gcc -o Calculator Calculator.c

Примечание: Формат команды gcc выше - gcc -o output_filename source_filename.c. Если не указано "output_filename", по умолчанию имя выходного файла - a.out.

В этом случае вы заметите новый файл с именем Calculator в директории. Это исполняемый файл, который мы получили после компиляции и связывания исходного файла. Чтобы запустить его, используйте команду ./Calculator.

./Calculator
$./Calculator
32+11
=43.000000

$./Calculator
41-34.9
=6.100000

$./Calculator
10/2
=5.000000

$./Calculator
2*4
=8.000000

$./Calculator
10%3
=1
✨ Проверить решение и практиковаться

Резюме

В этом проекте мы использовали язык C для создания простого калькулятора. В настоящее время функциональность калькулятора ограничена и он может поддерживать только базовые вычисления с двумя операндами. Студенты могут продолжить расширять этот калькулятор, например, добавив поддержку для нескольких операндов или введя механизм приоритета операторов.