
- •1. Цель работы
- •2. Базовые понятия языка
- •2.1. Алфавит языка Си
- •2.2. Константы
- •2.3. Идентификатор
- •2.4. Объявление переменных
- •2.5. Стандартные типы данных
- •2.6. Данные вещественных типов
- •2.7. Инициализация переменных
- •3. Операции языка си
- •3.1. Арифметические операции
- •3.2. Поразрядные операции
- •3.3. Операции отношения (сравнения)
- •3.4. Логические операции
- •3.5. Операции присваивания
- •3.6. Операция sizeof
- •3.7. Операция условие
- •3.8. Разделитель точка с запятой
- •3.9. Приоритеты операций и порядок вычислений
- •4. Операторы языка си
- •4.1. Составной оператор
- •4.2. Условный оператор
- •4.3. Оператор switch
- •4.4. Оператор break
- •4.5. Оператор for
- •4.6. Оператор while
- •4.7. Оператор do while
- •4.8. Оператор continue
- •4.9. Оператор goto
- •5. Указатели, массивы, строки
- •5.1. Указатели
- •5.2. Массивы
- •5.3. Строки
- •5.6. Двумерные массивы
- •5.7. Инициализация массивов
- •5.8. Связь указателей и массивов
- •6. Функции
- •6.1. Определение и вызов функций
- •6.2. Передача параметров функции main
- •7. Структуры и объединения
- •7.1. Структуры
- •7.2. Объединения (смеси)
- •7.3. Поля битов
- •8. Ввод-вывод
- •8.1. Консольный ввод-вывод
- •8.2. Потоковый файловый ввод-вывод
- •9. Вопросы для самостоятельного изучения
- •10. Порядок выполнения лабораторных работ и содержание отчета
- •11. Литература
2.6. Данные вещественных типов
Для переменных, представляющих число с плавающей точкой используются следующие типы (табл. 5).
Таблица 5 Вещественные типы данных
Тип |
Размер памяти в байтах |
Диапазон значений |
float |
4 |
3.4E-38 ... 3.4E+38 |
double |
8 |
1.7E-308 ... 1.7E+308 |
long double |
10 |
3.4E-4932 ... 3.4E+4932 |
Типы double и long double кроме более широкого числового диапазона отличаются большей точностью.
Примеры:
float f, a, b;
double x,y;
2.7. Инициализация переменных
Локальные переменные после объявления имеют неопределенное значение. Однако, при объявлении переменной ей можно явно присвоить начальное значение.
<спецификатор типа> имя=значение;
Например:
double x=1.53;
int z=0, y=10;
3. Операции языка си
3.1. Арифметические операции
В языке Си существуют следующие арифметические операции:
- |
вычитание |
+ |
сложение |
* |
умножение |
/ |
деление |
% |
остаток от деления |
++ |
увеличение на единицу |
-- |
уменьшение на единицу |
Если оба операнда бинарной операции имеют один тип, то и результат имеет тот же тип. Поэтому, если в операции деления участвуют целые переменные, то результат будет целым.
Например:
int a=10,b=3;
float c;
c=a/b;
В результате в переменной c будет число 3. Если необходимо поделить переменные a и b точно, можно применить один из следующих приемов:
с=1.0*a/b;
или
с=(float) a/b;
Операции ++ и -- унарные и применяются следующим образом:
int a=10, b=5;
a++;
++b;
В обоих случаях значения переменных a и b будут увеличены на единицу.
Различие в использовании операторов ++ и -- до и после переменной покажем на примере.
int a=50, y=60;
a++;
++y;
printf("a=%d b=%d\n",a,b);
printf("a=%d b=%d\n",a++,++b);
Первая функция printf выведет на экран числа 51 и 61. Вторая функция printf выведет на экран числа 51 и 62, т.к. переменная а сначала будет выведена на экран, а потом увеличена на единицу, а переменная b сначала увеличена, а потом выведена на экран.
3.2. Поразрядные операции
К поразрядным операциям относятся:
& |
поразрядное логическое "И" |
| |
поразрядное логическое "ИЛИ" |
^ |
поразрядное "исключающее ИЛИ" |
~ |
поразрядное логическое "НЕ" |
>> |
сдвиг вправо |
<< |
сдвиг влево |
Операнды поразрядных операций могут быть любого целого типа.
Пример.
unsigned int i=0x45FF; /* i= 0100 0101 1111 1111 */
unsigned int j=0x00FF; /* j= 0000 0000 1111 1111 */
unsigned int r;
r = i^j; /* r= 0100 0101 0000 0000 */
r = i|j; /* r= 0100 0101 1111 1111 */
r = i&j; /* r= 0000 0000 1111 1111 */
r = ~i; /* r= 1011 1010 0000 0000 */
r = j>>3; /* r= 0000 0000 0001 1111 */