Как можно заметить, в примере с переполнением 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
по указанным
адресам памяти разложит введённые данные.
Для того, чтобы получить адрес, по которому лежат данные переменной, используем
операцию взятия адреса – &
.