Программы
Арифметика

Арифметика

Всем привычные арифметические операции в рамках Си

Как можно заметить, в примере с переполнением int мы использовали привычную операцию присваивания и оператор сложения. Си считается родоначальником многих известных современных языков, так что в плане операторов сюрпризов не будет.

#include <stdio.h>

int main(void) {
    int a = 1;      // 1

    a += 1;         // 2
    printf("%d\n", a);

    a = a * 2;      // 4
    printf("%d\n", a);

    a /= 2;         // 2
    printf("%d\n", a);

    int b = a % 3;  // 2
    printf("%d\n", b);

    return 0;
}

Однако, не всё так просто, как кажется!

#include <stdio.h>

int main(void) {
    int a = 1;              // 1
    int b = 2;              // 2
    int c = a / b;          // ? проверить у себя в терминале
    printf("%d\n", c);

    float d = a / 2.0;      // ! проверить у себя в терминале
    printf("%f\n", d);

    d = a / 2;              // ! проверить у себя в терминале
    printf("%f\n", d);

    return 0;
}

Работаем с целыми числами – значит и получаем целые числа. Как только добавляем float – уже и результат будет float.

float – это тип данных, который является представлением знакового вещественного числа ("с запятой"). Например, -1.123, или же 2.00001. Сам же формат хранения определяется стандартом IEEE 754 – он слегка скучный – желающие могут ознакомиться самостоятельно.

Похоже работают приоритеты операций, скобки:

    int a = 2 + 2 * 2;      // 6
    int b = (2 + 2) * 2;    // 8
    int c = 16 / 4 / 4      // 1

На этом моменте заканчивается первая пара – самое время получить задание для закрепления изученного.

Изображение Изучаем язык программирования Си

ДЗ

Программа для проверки прямоугольности треугольника:

  • На вход даются 3 числа - длины 3-х сторон треугольника.
  • Вывести "True", если треугольник прямоугольный, иначе "False".

Тесты:

  • 3, 4, 5 // true
  • 20, 4, 5 // false и ещё кое-что...
  • 1.2345678, 2.3456789, 2.650729551406942 // true - да, это тоже надо заставить работать

Пояснения к ДЗ

Студенты сами должны были ознакомиться с функцией scanf и операцией взятия адреса. Но в рамках книги можно и привести небольшое описание, дабы ускорить поиск информации:

Для чтения чисел со стандартного ввода можно использовать функцию scanf. Например, так:

int main(void){
    float a;
    float b;
    float c;

    scanf("%f %f %f", &a, &b, &c);
    printf("%f %f %f\n", a, b, c);

    return 0;
}

– похоже на printf, но параметры передаются по адресу. scanf по указанным адресам памяти разложит введённые данные.

Для того, чтобы получить адрес, по которому лежат данные переменной, используем операцию взятия адреса – &.