Перейти к основному содержимому

Типы данных

Что такое тип данных

Тип данных определяет, какие значения может хранить переменная и какие операции с ней можно выполнять.

int age = 25;        // Целое число
float price = 9.99; // Дробное число
char letter = 'A'; // Символ

Целочисленные типы

int - основной целый тип

int students = 30;
int temperature = -5;
int zero = 0;

printf("Студентов: %d\n", students);

char - символьный тип

char grade = 'A';
char symbol = '@';
char digit = '5'; // Символ, не число!

printf("Оценка: %c\n", grade);
char firstLetter = 'H';
char lastLetter = 'Z';
printf("%c%c\n", firstLetter, lastLetter); // HZ

Дробные типы

float - одинарная точность

float price = 19.99;
float weight = 75.5;
float result = 3.14159;

printf("Цена: %.2f рублей\n", price); // Два знака после запятой

double - двойная точность

double pi = 3.141592653589793;
double distance = 384400.0; // Расстояние до Луны в км

printf("Число π: %.10f\n", pi);

Размеры и диапазоны

ТипРазмерДиапазонПример
char1 байт-128 до 127'A', '5', '@'
int4 байта±2 млрд1000, -50, 0
float4 байта±3.4×10³⁸3.14, -0.5
double8 байт±1.7×10³⁰⁸3.141592653

Модификаторы типов

unsigned - только положительные числа

unsigned int population = 1000000;  // Только положительные
unsigned char byte = 255; // От 0 до 255

printf("Население: %u\n", population);

short и long - изменение размера

short int smallNumber = 100;        // Меньше обычного int
long int bigNumber = 2000000000L; // Больше обычного int

printf("Маленькое: %hd\n", smallNumber);
printf("Большое: %ld\n", bigNumber);

Выбор правильного типа

Рекомендации
  • int — для обычных целых чисел (возраст, количество)
  • float — для простых дробных чисел (цены, проценты)
  • double — для точных вычислений (научные расчеты)
  • char — для одиночных символов
  • unsigned — когда нужны только положительные числа

Преобразование типов

Автоматическое преобразование

int whole = 5;
float decimal = 2.3;
float result = whole + decimal; // int автоматически стал float

printf("Результат: %.1f\n", result); // 7.3

Явное преобразование

float number = 9.7;
int rounded = (int)number; // Принудительное преобразование

printf("Было: %.1f, стало: %d\n", number, rounded); // 9.7 → 9

Практический пример

#include <stdio.h>
#include <stdbool.h>

int main() {
// Разные типы для разных задач
char grade = 'B';
int points = 85;
float percentage = 85.5;
double precise = 85.523456789;
bool passed = true;

printf("=== Результаты экзамена ===\n");
printf("Оценка: %c\n", grade);
printf("Баллы: %d\n", points);
printf("Проценты: %.1f%%\n", percentage);
printf("Точное значение: %.6f\n", precise);
printf("Сдал экзамен: %s\n", passed ? "Да" : "Нет");

// Демонстрация размеров
printf("\n=== Размеры типов ===\n");
printf("char: %zu байт\n", sizeof(char));
printf("int: %zu байт\n", sizeof(int));
printf("float: %zu байт\n", sizeof(float));
printf("double: %zu байт\n", sizeof(double));

return 0;
}

Логический тип

bool - истина или ложь

#include <stdbool.h>  // Нужно подключить для bool

bool isStudent = true;
bool hasLicense = false;

if (isStudent) {
printf("Студенческая скидка применена\n");
}

Спецификаторы формата

Каждому типу соответствует свой спецификатор для вывода:

ТипСпецификаторПример
int%dprintf("%d", 42);
unsigned int%uprintf("%u", 100u);
float%fprintf("%.2f", 3.14);
double%lfprintf("%.3lf", 3.141592);
char%cprintf("%c", 'A');
int age = 25;
float height = 175.5;
char initial = 'И';

printf("Возраст: %d лет\n", age);
printf("Рост: %.1f см\n", height);
printf("Инициал: %c\n", initial);

Частые ошибки

Типичные проблемы
// ❌ Неправильный спецификатор
float number = 3.14;
printf("%d", number); // Выведет мусор!

// ✅ Правильно
printf("%f", number);

// ❌ Потеря точности
float bigNumber = 123456789.0;
printf("%.0f\n", bigNumber); // Может быть неточно

// ✅ Используйте double для больших чисел
double preciseNumber = 123456789.0;

Специальные символы

СимволКодОписание
'\n'Новая строкаПеренос на следующую строку
'\t'ТабуляцияОтступ
'\0'Нулевой символКонец строки
'\\'Обратный слешСам символ \
'\''Одинарная кавычкаСам символ '
printf("Первая строка\nВторая строка\n");
printf("Имя:\tВозраст\n");
printf("Анна\t25\n");

Правильный выбор типа данных — основа эффективных программ на языке Си.