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