- •Материалы для подоговки к экзамену по дисциплине «основы программировния»
- •Тема №1 Основные понятия
- •Способы записи алгоритма
- •Тема №2 Переменные
- •Типы переменных
- •Типы с плавающей точкой
- •Переполнение переменных
- •Постфиксное обозначение типа
- •Шестнадцатеричный и восьмеричный формат
- •Экспоненциальная форма представления чисел
- •Объявление переменных
- •Начальное значение переменной
- •Область видимости переменной
- •Тема №3 Оператор присваивания
- •Ввод-вывод Форматированный вывод
- •Форматированный ввод
- •Непечатные символы
- •Тема №4 Ветвления и логические операторы
- •Оператор Switch
- •Логические операторы
- •Логическое отрицание
- •Логическое и
- •Логическое или
- •Пример: закон де-Моргана.
- •Порядок выполнения логических операторов
- •Тема №5 Циклы
- •Цикл с предусловием
- •Циклы с постусловием
- •Цикл for
- •Вложенные циклы
- •Тема №6 Одномерные массивы
- •Начальная инициализация массива.
- •Размер массива
- •Переполнение массива
- •Пример с одномерным массивом
- •Многомерные статические массивы
- •Пример с многомерным массивом
- •Тема №7 Строки в си. Введение
- •Чтение строк
- •Указатели
- •Определение
- •Арифметика указателей
- •Указатель на указатель
- •Указатели и приведение типов
- •Null pointer - нулевой указатель
- •Пример работы с указателями
- •Тема №8 Указатели и массивы
- •Многомерные массивы и указатели на многомерные массивы
- •Определение макросов
- •Тема №9 Тернарный оператор и оператор запятая
- •Оператор запятая.
- •Сегментация приложения на си
- •Тема №10 Динамическое выделение памяти
- •Освобождение памяти с помощью free
- •Работа с двумерными и многомерными массивами
- •Тема №11 Параметры командной строки
- •Функции
- •Параметры и аргументы
- •Передача аргументов По значению
- •По указателю (ссылке)
- •Передача массива в качестве аргумента
- •Тема №12 Битовые операции
- •Операции побитового сдвига
- •Примеры
- •Вопросы к экзамену по дисциплине «Основы программирования»
Типы с плавающей точкой
float — 4 байта,
long float — 8 байт
double — 8 байт
long double — 8 байт.
Тип |
Размер, байт |
Кол-во значащих знаков мантиссы |
Минимальное значение |
Максимальное значение |
float |
4 |
6-7 |
1.175494351 E –38 |
3.402823466 E +38 |
double |
8 |
15-16 |
2.2250738585072014 E –308 |
1.7976931348623158 E +308 |
Переполнение переменных
Си не следит за переполнением переменных. Это значит, что постоянно увеличивая значение, скажем, переменной типа int в конце концов мы "сбросим значение"
#include <conio.h>
#include <stdio.h>
void main() {
unsigned a = 4294967295;
int b = 2147483647;
//Переполнение беззнакового типа
printf("%u\n", a);
a += 1;
printf("%u", a);
//Переполнение знакового типа
printf("%d\n", b);
b += 1;
printf("%d", b);
getch();
}
Вообще, поведение при переполнении переменной определено только для типа unsigned: Беззнаковое целое сбросит значение. Для остальных типов может произойти что угодно, и если вам необходимо следать за переполнением, делайте это вручную, проверяя аргументы, либо используйте иные способы, зависящие от компилятора и архитектуры процессора.
Постфиксное обозначение типа
При работе с числами можно с помощью литер в конце числа явно указывать его тип, например
11 - число типа int
10u - unsigned
22l или 22L - long
3890ll или 3890LL - long long (а также lL или Ll)
80.0f или 80.f или 80.0F - float (обязательно наличие десятичной точки в записи)
3.0 - число типа double
Экспоненциальная форма записи также по умолчанию обозначает число типа double.
#include<conio.h>
#include<stdio.h>
int main() {
printf("sizeof(int) = %d\n", sizeof(10));
printf("sizeof(unigned) = %d\n", sizeof(10u));
printf("sizeof(long) = %d\n", sizeof(10l));
printf("sizeof(long long) = %d\n", sizeof(10ll));
printf("sizeof(float) = %d\n", sizeof(10.f));
printf("sizeof(double) = %d\n", sizeof(10.));
printf("sizeof(double) = %d\n", sizeof(10e2));
getch();
}
Следующий код, однако, не будет приводить к ошибкам, потому что происходит неявное преобразование типа
int a = 10u;
double g = 3.f;
Шестнадцатеричный и восьмеричный формат
Во время работы с числами можно использовать шестнадцатеричный и восьмеричный формат представления. Числа в шестнадцатиричной системе счисления начинаются с 0x, в восьмеричной системе с нуля. Соответственное, если число начинается с нуля, то в нём не должно быть цифр выше 7:
#include<conio.h>
#include<stdio.h>
void main() {
int x = 0xFF;
int y = 077;
printf("hex x = %x\n", x);
printf("dec x = %d\n", x);
printf("oct x = %o\n", x);
printf("oct y = %o\n", y);
printf("dec y = %d\n", y);
printf("hex y = %x", y);
getch();
}
