
- •Простые типы данных
- •Модификаторы
- •1. Запись целых констант
- •2. Запись вещественных констант
- •3. Запись символьных констант
- •1. Арифметические операции над данными целочисленных типов
- •Простые типы данных
- •Модификаторы
- •Операция присваивания
- •Простые типы данных
- •Модификаторы
- •Операция присваивания
- •Диапазоны значений простых типов данных для ibm pc
- •5. Структура программы. Функции.
- •2. Формальные параметры функций
- •3. Возвращаемые значения функций
- •2.2 Пример простой программы на языке Си.
- •Управляющие конструкции
- •Ветвления
- •Циклы while, do.. .While и for
- •Теоретичсекий зачет по операторам цикла
- •Графика
- •Указатели
- •Преобразование типов
- •Задание:
- •Задание:
- •Задание:
- •Задание:
- •Задание:
- •Задание:
- •Задание:
- •Задание:
- •Задание:
- •Операции над указателями.
- •Структуры
- •Объединения
- •. Описания типов (typedef)
- •Поразрядные операции (bitwize)
№ |
теория |
д/з |
1 |
Простые типы данных. Модификаторы. переменные. |
|
2 |
Структура программы. Ввод- вывод. Объявление функций. |
|
3 |
условный оператор Swith и break |
|
4 |
циклы |
|
5 |
массивы. |
|
6 |
практическая работа |
|
7 |
Указатели |
|
8 |
Строки |
|
9 |
Практичесоке занятие |
|
10 |
Графика |
|
11 |
Функции |
|
12 |
Указатели и массивы |
|
13 |
sizeof. приоритеты операций. |
|
14 |
перечислимый тип |
|
15 |
Структуры |
|
16 |
макроопредения. |
|
17 |
файлы. Потоки. Стандартные . Текстовые. Двоичные.Текстовые файлы |
|
18 |
практическая работа |
|
19 |
структуры |
|
20 |
практическая работа |
|
21 |
Поразрядные операции |
|
22 |
Подготовка к зачетной работе |
|
23 |
теоретический зачет |
|
24 |
итоговый зачет по курсу |
|
Си-сравнительно универсальный язык программирования созданный еще в 1972 г. Деннисом Ритчи(фирма Bell Labaratories, США). Первоначально язык был реализован в операционной системе UNIX на ЭВМ PDP - 11
Простые типы данных
Базовые числовые типы данных
В Си имеется небольшое количество простых типов данных, причем все они являются числовыми.
Целочисленные типы: char, int.
Вещественные типы: float, double.
Модификаторы
Для образования типов, производных от простых, имеются модификаторы, которые (для числовых типов) бывают двух видов; модификаторы знака и модификаторы размера. Модификаторы записываются перед названием типа.
Модификаторы знака: signed (знаковый), unsigned (беззнаковый).
Модификаторы размера: short, long.
. Описание переменных
Описание переменных в Си имеет вид:
<имя типа> <список переменных>;
Пример: int а, b, с ;
Переменные можно инициализировать при описании.
Пример: int а=1,Ь,с=2;
Переменные (об этом еще будет подробнее сказано ниже) могут описываться на внешнем уровне (глобальные переменные) и в начале любого блока (локальные переменные).
2. Запись числовых констант
1. Запись целых констант
Можно явно указать компилятору тип числовой константы. Делается это посредством символов "U" и "L", которыми могут заканчиваться числовые константы. Так, запись 1U означает, что используется значение 1 типа unsigned int. Запись 1L обозначает единицу типа long, a 1UL ? единицу типа unsigned long. (Регистр букв "U" и "L" значения не имеет.)
Кроме этого, числовые константы могут быть представлены в восьмеричном и шестнадцатеричном видах. Если запись целого числа начинается с нуля (например, 010), то это означает, что число записано в восьмеричной системе счисления (т.е. 010 ? это 8), а если перед числом имеется префикс Ох, это означает, что число представлено в шестнадцатеричной системе счисления.
2. Запись вещественных констант
Если в записи числовой константы имеется точка (1.5) или экспоненциальное расширение (lE-l), то компилятор считает ее вещественной. Разумеется, в записи может присутствовать и то, и другое: 1.5Е?1. (Регистр буквы "Е" значения не имеет.) Вещественные константы по умолчанию имеют тип double. В некоторых системах программирования имеется возможность явно объявить, что вещественная константа имеет тип f 1 о а -:, посредством символа "F" на конце: 1. 5F.
3. Запись символьных констант
Символьные константы в Си заключаются в апострофы. (Строковые константы, с которыми мы познакомимся позднее, заключаются в двойные кавычки.) В большинстве реализации языка Си символьные константы имеют тип int. и их значение совпадает с кодом соответствующего символа. Перечислим некоторые специальные символьные константы:
' \п' ? переход на новую строку;
'\t' ? горизонтальная табуляция;
'\а' ? звуковой сигнал;
'\" ' ? двойная кавычка.
3. Операции над числовыми данными
1. Арифметические операции над данными целочисленных типов
Над данными целочисленных типов определены следующие операции: +, -, *, / (целочисленное деление, в Паскале эта операция называется div), % (взятие остатка, в Паскале эта операция называется mod), ++, --(последние две операции могут быть префиксными и постфиксными), >>,<<,&, | ,^, ~.
Сначала разберемся с целочисленным делением. Рассмотрим следующий пример:
float a;
а=1/2;
Вопрос: какое значение получит переменная а ?
Ответ: 0. Дело в том, что если оба операнда операции деления целые, то выполняется целочисленное деление. Что потом мы сделаем с результатом (в данном случае результат присваивается вещественной переменной), значения не имеет. Ситуации, подобные приведенным,
очень часто портят нервы начинающим программировать на Си. Как же выйти из положения? Вариантов существует несколько (один еще будет рассмотрен ниже). Например, можно один (любой) из операндов сделать вещественным (а можно и оба, это уже роли не играет), т.е. записать выражение
так: а=1. /2;.
Перейдем к рассмотрению операций инкремента (++) и декремента (--). Эти операции могут применяться исключительно к переменным и, соответственно, увеличивают и уменьшают значение переменной на 1. В Паскале имеются соответствующие процедуры inc и dec. Наличие в Си данных операций связано с тем, что в системе команд большинства микропроцессоров имеются специальные операции для увеличения и уменьшения значения (обычно в регистре) именно на 1. Поэтому запись а++; предпочтительнее записи a=a+l;, поскольку в большинстве случаев операция инкремента выполняется быстрее. Одна из распространенных, но "простых" ошибок (т.е. обычно дети допускают их единожды, понимают, в чем дело, и больше уже не ошибаются), следующая ? операцию инкремента пробуют применить к выражению. Например, написать что-то вроде а= (b+с) ++;. Более тонкий, хотя тоже не очень сложный вопрос ? префиксное и постфиксное использование этих операций. Если мы просто увеличиваем значение переменной на 1, то никакой разницы между записями а++; и ++а; нет. Другое
дело ? использование этих операций в выражениях. Рассмотрим следующие примеры:
а=3;b=2;
с=а++*b++;
В результате выполнения приведенной последовательности операторов переменная с получит значение б, а переменные а и b ? значения 4 и 3 соответственно.
Битовые операции >> (в Паскале ? shr), <<(shl), & (and), | (or), ^ (хоr), ~ (not) применяются к машинному (двоичному) представлению числа.. Арифметические операции над вещественными данными
+,-, *, /, ++, -- (последние две операции могут быть префиксными и постфиксными),
. Операции отношения
Операции отношения (>,>=,<,<=,==, !=) также совсем простые, и особенностей, связанных с их использованием, практически нет. Следует обратить внимание, что результатом операции отношения является целое число (обычно 0, если результат операции "ложь", и 1, если "истина"; но гарантируется лишь то, что при "лжи" вырабатывается 0, а при "истине" ? значение, отличное от нуля).
Логические операции
С логическими операциями, которых всего три (&&, | | , ! ), надо быть внимательными и не путать их с битовыми. Дело в том, что с точки зрения компилятора оба выражения: (а==1)&&(b>2) и (а==1)&(b>2) являются синтаксически правильными. Ведь в результате выполнения операций отношения == и > получаются целые числа, с которыми можно производить как логическую операцию & &, так и битовую
операцию &.
Операция присваивания
С операцией присваивания для тех, кто изучает Си после Паскаля, иногда возникают проблемы. Самое важное: в Си присваивание ? именно операция, а не оператор, как в Паскале. Как и всякая другая, операция присваивания вырабатывает значение, которое может использоваться в выражениях. Самый простой пример, иллюстрирующий сказанное, следующий. Пусть нам нужно присвоить одно и то же значение нескольким переменным. В Паскале это можно сделать лишь последовательными присваиваниями: а:=1; b:=1; с:=1. В Си запись короче: a=b=c=l;. ля любой бинарной операции ор запись а=а ор b (понятно, что имена переменных могут быть и другими) может быть заменена более короткой записью: а ор= b. Пример: выражение а=а+b; можно переписать в виде a+=b;.
Операция запятая (,)
Весьма специфическая операция "запятая" используется для связывания нескольких выражений в одно. Пример ее использования будет приведен чуть ниже, при рассмотрении управляющих конструкций (в частности, цикла for).
Операция приведения к типу (тип)
При рассмотрении операций над целыми числами (конкретно ? операции деления) мы уже приводили "опасный" пример:
float с;
с=1/2;
и объяснили, почему переменная с получит значение 0. Там же был указан и выход из положения ? явно записать одно из чисел (или оба) как вещественное:
float с;
с=1./2;
Но такой прием работает, когда речь идет о числах, а как быть, когда вместо чисел у нас имеются,например, целые переменные? Приведем соответствующий пример:
float с;
int a=l,b=2;
c=a/b;
Здесь можно выйти из положения, явно приведя одну из переменных (или обе, но в этом нет необходимости ) к вещественному типу. Операция приведения к типу является унарной префиксной операцией и записывается перед выражением, к которому она применяется. Сама 0операция имеет вид (тип). Для нашего примера это выглядит следующим образом:
float c;
int a=l,b=2; с=(float)a/b;